From d109b736f0ee8c44b982f384e491cf7694558364 Mon Sep 17 00:00:00 2001 From: David Benedeki Date: Sat, 13 Mar 2021 23:54:25 +0100 Subject: [PATCH 01/41] Init of Enceladus 3.0.0 develop branch --- dao/pom.xml | 2 +- data-model/pom.xml | 2 +- examples/pom.xml | 2 +- menas/pom.xml | 2 +- migrations-cli/pom.xml | 2 +- migrations/pom.xml | 2 +- plugins-api/pom.xml | 2 +- plugins-builtin/pom.xml | 2 +- pom.xml | 2 +- spark-jobs/pom.xml | 2 +- utils/pom.xml | 2 +- 11 files changed, 11 insertions(+), 11 deletions(-) diff --git a/dao/pom.xml b/dao/pom.xml index fb9bbb264..0670decbc 100644 --- a/dao/pom.xml +++ b/dao/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/data-model/pom.xml b/data-model/pom.xml index 1ccf6041b..ebffcd114 100644 --- a/data-model/pom.xml +++ b/data-model/pom.xml @@ -24,7 +24,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/examples/pom.xml b/examples/pom.xml index cffd509a0..bd81da995 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/menas/pom.xml b/menas/pom.xml index 02376fc52..743ae7f99 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/migrations-cli/pom.xml b/migrations-cli/pom.xml index b1e6323e2..4d03fba10 100644 --- a/migrations-cli/pom.xml +++ b/migrations-cli/pom.xml @@ -22,7 +22,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/migrations/pom.xml b/migrations/pom.xml index c78e52b18..26837aab9 100644 --- a/migrations/pom.xml +++ b/migrations/pom.xml @@ -22,7 +22,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/plugins-api/pom.xml b/plugins-api/pom.xml index cb353dbcf..e08400161 100644 --- a/plugins-api/pom.xml +++ b/plugins-api/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/plugins-builtin/pom.xml b/plugins-builtin/pom.xml index 77d9bb1ad..cad5e4f27 100644 --- a/plugins-builtin/pom.xml +++ b/plugins-builtin/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/pom.xml b/pom.xml index a83dfc401..377176c12 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 4.0.0 za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT pom Enceladus diff --git a/spark-jobs/pom.xml b/spark-jobs/pom.xml index ae51d2ae1..09b31aa7d 100644 --- a/spark-jobs/pom.xml +++ b/spark-jobs/pom.xml @@ -21,7 +21,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT diff --git a/utils/pom.xml b/utils/pom.xml index 5585027a3..9040192c2 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -22,7 +22,7 @@ za.co.absa.enceladus parent - 2.22.0-SNAPSHOT + 3.0.0-SNAPSHOT From 0d265e57aa78a9429090e66f248dc152a611665f Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Mon, 12 Apr 2021 22:13:45 +0300 Subject: [PATCH 02/41] #1612 Separating Menas UI and API (#1620) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * 1422 and 1423 Remove HDFS and Oozie from Menas * #1422 Fix HDFS location validation * #1424 Add Menas Dockerfile * #1416 hadoop-aws 2.8.5 + s3 aws sdk 2.13.65 compiles. * #1416 - enceladus on S3: - all directly-hdfs touching stuff disabled (atum, performance measurements, info files, output path checking) # Add menasfargate into hosts sudo nano /etc/hosts # paste 20.0.63.69 menasfargate # save & exit (ctrl+O, ctrl+X) # Running standardization works via: spark-submit --class za.co.absa.enceladus.standardization.StandardizationJob --conf "spark.driver.extraJavaOptions=-Dmenas.rest.uri=http://menasfargate:8080 -Dstandardized.hdfs.path=s3://euw1-ctodatadev-dev-bigdatarnd-s3-poc/enceladusPoc/ao-hdfs-data/stdOutput/standardized-{0}-{1}-{2}-{3}" ~/enceladusPoc/spark-jobs-2.11.0-SNAPSHOT.jar --menas-credentials-file ~/enceladusPoc/menas-credentials.properties --dataset-name dk_test1_emr285 --raw-format json --dataset-version 1 --report-date 2019-11-27 --report-version 1 2> ~/enceladusPoc/stderr.txt * #1416 - enceladus on S3 - (crude) conformance works on s3 (s3 std input, s3 conf output) 0- all directly-hdfs touching stuff disabled (atum, performance measurements, info files, output path checking) # Add menasfargate into hosts sudo nano /etc/hosts # paste 20.0.63.69 menasfargate # save & exit (ctrl+O, ctrl+X) # Running conformance works via: spark-submit --class za.co.absa.enceladus.conformance.DynamicConformanceJob --conf "spark.driver.extraJavaOptions=-Dmenas.rest.uri=http://menasfargate:8080 -Dstandardized.hdfs.path=s3://euw1-ctodatadev-dev-bigdatarnd-s3-poc/enceladusPoc/ao-hdfs-data/stdOutput/standardized-{0}-{1}-{2}-{3}" ~/enceladusPoc/spark-jobs-2.11.0-SNAPSHOT.jar --menas-credentials-file ~/enceladusPoc/menas-credentials.properties --dataset-name dk_test1_emr285 --dataset-version 1 --report-date 2019-11-27 --report-version 1 2> ~/enceladusPoc/conf-log.txt * ref issue = 1416 * related test cases ignored (issue reference added) * PR updates * Merge spline 0.5.3 into aws-poc * Update spline to 0.5.4 for AWS PoC * #1503 Remove HDFS url Validation This is a temporary solution. We currently experiment with many forms of URLs, and having a regex there now slows us down. * New dockerfile - smaller image * s3 persistence (atum, sdk fs usage, ...) (#1526) #1526 * FsUtils divided into LocalFsUtils & HdfsUtils * PathConfigSuite update * S3FsUtils with tail-recursive pagination accumulation - now generic with optional short-circuit breakOut TestRunnerJob updated to manually cover the cases - should serve as a basis for tests * HdfsUtils replace by trait DistributedFsUtils (except for MenasCredentials loading & nonSplittable splitting) * using final version of s3-powered Atum (3.0.0) * mockito-update version update, scalatest version update * S3FsUtilsSuite: exists, read, sizeDir(hidden, non-hidden, reucursive), non-splittable (simple, recursive with breakOut), delete (recursive), version find (simple - empty, recursive) * explicit stubbing fix for hyperdrive * Feature/1556 file access PoC using Hadoop FS API (#1586) * s3 using hadoop fs api * s3 sdk usage removed (pom, classes, tests) * atum final version 3.1.0 used * readStandardizationInputData(... path: String)(implicit ... fs: FileSystem) -> readStandardizationInputData(input: PathWithFs) * 1554 Tomcat with TLS in Docker container (#1585) * #1554 Tomcat with TLS container * #1554 Added envoy config + enabling running unencrypted container * #1499 Add authentication to /lineage + update spline to 0.5.5 * #1618 - fixes failing spline 0.5.5 integration by providing compatible commons library version. Test-ran on EMR. (#1619) * #1612 Separation start * #1612 Updated DAO for spark-jobs * #1612 Fixed spline integration and schema, removed redundant code * #1612 Fixed tests, removed unused dependency * #1612 Added back dependency * WIP fixing merge issues * * Merge compiles * Tests pass * Depends on ATUM 3.1.1-SNAPSHOT (the bugfix for https://github.com/AbsaOSS/atum/issues/48) * #1612 Removed Spring from menas-web, enabled building war and static resources. Removed version subpath in menas-web + added theme dependencies in repo * #1612 Cookies + updated lineage * * put back HDFS browser * put back Oozie * downgraded Spline * * AWS SDK Exclusion * #1612 Included HDFSFolder + missing Oozie parts * * New ATUM version * * Adding missing files * #1612 menas-web on nginx container and passing API_URL * #1612 Working TLS on nginx, resources not included in code * 1622: Merge of aws-poc to develop brach * Addressed issues identified by reviewers * * comments improvement * 1434 Add new way of serving properties to Docker * #1612 Building using ui5 + reused /api route * #1612 Project version * #713 Add favicon * #1612 Merges * #1612 pom parent version * #1648 Fix war deployment + adding back spline to menas * #1612 other fixes * #1612 added pom package.json version sync * #1612 newline * #1612 fix version sync + cleaning dist * 1648 merge to develop * 1648 merge fix * 1648 Fixes schema upload * 1648 Fixes schema registry request * 1648 pom version * 1612 add docker build * #601 Swagger 2 PoC * #601 Swagger 2 PoC * #601 Swagger 2 PoC * #1648 Updating menas-web to 3.0 * #1612 Updated npm project versions + mvn plugin * #1612 license_check.yml * #1612 licence check fix Co-authored-by: Saša Zejnilović Co-authored-by: Daniel Kavan Co-authored-by: Jan Scherbaum Co-authored-by: David Benedeki --- .github/workflows/license_check.yml | 31 + .../absa/enceladus/dao/rest/AuthClient.scala | 6 +- .../dao/rest/auth/AuthClientSuite.scala | 6 +- menas-web/Dockerfile | 26 + menas-web/nginx.conf | 27 + menas-web/pom.xml | 154 + menas-web/start_menas_web.sh | 25 + .../ui/components/AuditTrail.js | 0 .../ui/components/Component.js | 0 .../ui/components/SchemaTable.js | 0 .../ui/components/app.controller.js | 0 .../ui/components/app.view.xml | 0 .../ui/components/auditTrail.fragment.xml | 0 .../dataset/addDataset.fragment.xml | 0 .../CastingConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../CoalesceConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../add.fragment.xml | 0 .../display.fragment.xml | 0 .../conformanceRule/ConformanceRule.js | 0 .../conformanceRule/ConformanceRuleDialog.js | 0 .../conformanceRule/ConformanceRuleForm.js | 0 .../ConformanceRuleFormFactory.js | 0 .../DropConformanceRule/add.fragment.xml | 0 .../DropConformanceRule/display.fragment.xml | 0 .../FillNullsConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../LiteralConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../JoinConditionDialog.js | 0 .../JoinConditionDialogFactory.js | 0 .../MappingConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../joinConditionDialog.fragment.xml | 0 .../joinConditions.fragment.xml | 0 .../targetSchemaFieldSelector.fragment.xml | 0 .../NegationConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../RuleColumnDialog.fragment.xml | 0 .../conformanceRule/RuleColumnDialog.js | 0 .../RuleColumnDialogFactory.js | 0 .../dataset/conformanceRule/SchemaManager.js | 0 .../add.fragment.xml | 0 .../display.fragment.xml | 0 .../add.fragment.xml | 0 .../display.fragment.xml | 0 .../UppercaseConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../add/checkpointBox.fragment.xml | 0 .../add/commonRuleFields.fragment.xml | 0 .../add/inputColumn.fragment.xml | 0 .../display/actionMenu.fragment.xml | 0 .../display/checkpointBox.fragment.xml | 0 .../display/commonRuleFields.fragment.xml | 0 .../display/inputColumn.fragment.xml | 0 .../conformanceRule/upsert.fragment.xml | 0 .../dataset/datasetDetail.controller.js | 0 .../components/dataset/datasetDetail.view.xml | 0 .../dataset/datasetInfo.fragment.xml | 0 .../dataset/datasetMaster.controller.js | 0 .../components/dataset/datasetMaster.view.xml | 0 .../monitoring/barChartPopover.fragment.xml | 0 .../monitoring/monitoring.fragment.xml | 0 .../components/dataset/run/runs.fragment.xml | 0 .../schedule/editSchedule.fragment.xml | 0 .../schedule/viewSchedule.fragment.xml | 0 .../designfuture/chartjs/library-preload.js | 0 .../ui/components/hdfs/HDFSBrowser.js | 0 .../ui/components/hdfs/HDFSBrowserRenderer.js | 0 .../components/home/landingPage.controller.js | 0 .../ui/components/home/landingPage.view.xml | 0 .../ui/components/i18n/message.properties | 0 .../login/loginDetail.controller.js | 13 +- .../ui/components/login/loginDetail.view.xml | 0 .../mappingTable/addDefaultValue.fragment.xml | 0 .../mappingTable/addMappingTable.fragment.xml | 0 .../mappingTableDetail.controller.js | 0 .../mappingTable/mappingTableDetail.view.xml | 0 .../mappingTableInfo.fragment.xml | 0 .../mappingTableMaster.controller.js | 0 .../mappingTable/mappingTableMaster.view.xml | 0 .../mappingTableSelector.fragment.xml | 0 .../run/runDatasetNameMaster.controller.js | 0 .../run/runDatasetNameMaster.view.xml | 0 .../run/runDatasetVersionMaster.controller.js | 0 .../run/runDatasetVersionMaster.view.xml | 0 .../ui/components/run/runDetail.controller.js | 0 .../ui/components/run/runDetail.view.xml | 0 .../ui/components/run/runMaster.controller.js | 0 .../ui/components/run/runMaster.view.xml | 0 .../components/schema/addSchema.fragment.xml | 0 .../schema/schemaDetail.controller.js | 17 +- .../components/schema/schemaDetail.view.xml | 2 +- .../components/schema/schemaInfo.fragment.xml | 0 .../schema/schemaMaster.controller.js | 0 .../components/schema/schemaMaster.view.xml | 0 .../schema/selector/SchemaSelectorUtils.js | 0 .../selector/schemaSelector.fragment.xml | 0 .../schemaSelectorDialog.fragment.xml | 0 .../schemaFieldSelector.fragment.xml | 0 .../ui/components/schemaTable.fragment.xml | 0 .../ui/components/tables/TableUtils.js | 0 .../tables/groupDialog.fragment.xml | 0 .../components/tables/sortDialog.fragment.xml | 0 .../ui/components/types/CronEntryType.js | 0 .../ui/components/types/NonEmptyArrType.js | 0 .../ui/components/userInfo.fragment.xml | 0 .../ui/components/validator/Validator.js | 0 {menas => menas-web}/ui/css/style.css | 0 menas-web/ui/favicon.ico | Bin 0 -> 15086 bytes {menas => menas-web}/ui/generic/formatters.js | 0 {menas => menas-web}/ui/generic/functions.js | 9 +- {menas => menas-web}/ui/generic/model.js | 0 {menas => menas-web}/ui/generic/prop.js | 0 menas-web/ui/index.html | 115 + menas-web/ui/manifest.json | 5 + menas-web/ui/npm-shrinkwrap.json | 4741 +++++++++++++++++ menas-web/ui/package.json | 24 + .../ui/service/CheckpointUtils.js | 0 .../ui/service/DialogFactory.js | 0 .../ui/service/EntityDialog.js | 0 .../ui/service/EntityService.js | 0 .../ui/service/EntityValidationService.js | 0 .../ui/service/GenericService.js | 19 +- .../ui/service/HdfsService.js | 2 +- .../ui/service/MessageProvider.js | 0 .../ui/service/MonitoringService.js | 2 +- .../ui/service/OozieService.js | 8 +- .../ui/service/PropertiesService.js | 2 +- .../ui/service/ResponseUtils.js | 0 {menas => menas-web}/ui/service/RestDAO.js | 66 +- .../ui/service/RuleService.js | 0 {menas => menas-web}/ui/service/RunRestDAO.js | 16 +- {menas => menas-web}/ui/service/RunService.js | 0 .../ui/service/SchemaFieldSelector.js | 0 .../ui/service/ValidationResult.js | 0 menas-web/ui/ui5.yaml | 107 + menas/Dockerfile | 3 +- menas/pom.xml | 119 +- menas/src/main/resources/start_menas.sh | 26 + .../co/absa/enceladus/menas/MvcConfig.scala | 12 +- .../enceladus/menas/WebSecurityConfig.scala | 8 +- .../enceladus/menas/auth/AuthConstants.scala | 3 +- .../MenasAuthenticationSuccessHandler.scala | 6 +- .../auth/jwt/JwtAuthenticationFilter.scala | 11 +- .../AuthenticationIntegrationSuite.scala | 4 +- .../controllers/BaseRestApiTest.scala | 4 +- menas/ui/Gruntfile.js | 36 - menas/ui/index.html | 115 - menas/ui/npm-shrinkwrap.json | 3166 ----------- menas/ui/package.json | 14 - pom.xml | 6 +- 153 files changed, 5421 insertions(+), 3535 deletions(-) create mode 100644 .github/workflows/license_check.yml create mode 100644 menas-web/Dockerfile create mode 100644 menas-web/nginx.conf create mode 100644 menas-web/pom.xml create mode 100644 menas-web/start_menas_web.sh rename {menas => menas-web}/ui/components/AuditTrail.js (100%) rename {menas => menas-web}/ui/components/Component.js (100%) rename {menas => menas-web}/ui/components/SchemaTable.js (100%) rename {menas => menas-web}/ui/components/app.controller.js (100%) rename {menas => menas-web}/ui/components/app.view.xml (100%) rename {menas => menas-web}/ui/components/auditTrail.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/addDataset.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConformanceRule.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConformanceRuleForm.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/targetSchemaFieldSelector.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/RuleColumnDialog.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/SchemaManager.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/upsert.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/datasetDetail.controller.js (100%) rename {menas => menas-web}/ui/components/dataset/datasetDetail.view.xml (100%) rename {menas => menas-web}/ui/components/dataset/datasetInfo.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/datasetMaster.controller.js (100%) rename {menas => menas-web}/ui/components/dataset/datasetMaster.view.xml (100%) rename {menas => menas-web}/ui/components/dataset/monitoring/barChartPopover.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/monitoring/monitoring.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/run/runs.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/schedule/editSchedule.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/schedule/viewSchedule.fragment.xml (100%) rename {menas => menas-web}/ui/components/external/it/designfuture/chartjs/library-preload.js (100%) rename {menas => menas-web}/ui/components/hdfs/HDFSBrowser.js (100%) rename {menas => menas-web}/ui/components/hdfs/HDFSBrowserRenderer.js (100%) rename {menas => menas-web}/ui/components/home/landingPage.controller.js (100%) rename {menas => menas-web}/ui/components/home/landingPage.view.xml (100%) rename {menas => menas-web}/ui/components/i18n/message.properties (100%) rename {menas => menas-web}/ui/components/login/loginDetail.controller.js (92%) rename {menas => menas-web}/ui/components/login/loginDetail.view.xml (100%) rename {menas => menas-web}/ui/components/mappingTable/addDefaultValue.fragment.xml (100%) rename {menas => menas-web}/ui/components/mappingTable/addMappingTable.fragment.xml (100%) rename {menas => menas-web}/ui/components/mappingTable/mappingTableDetail.controller.js (100%) rename {menas => menas-web}/ui/components/mappingTable/mappingTableDetail.view.xml (100%) rename {menas => menas-web}/ui/components/mappingTable/mappingTableInfo.fragment.xml (100%) rename {menas => menas-web}/ui/components/mappingTable/mappingTableMaster.controller.js (100%) rename {menas => menas-web}/ui/components/mappingTable/mappingTableMaster.view.xml (100%) rename {menas => menas-web}/ui/components/mappingTableSelector.fragment.xml (100%) rename {menas => menas-web}/ui/components/run/runDatasetNameMaster.controller.js (100%) rename {menas => menas-web}/ui/components/run/runDatasetNameMaster.view.xml (100%) rename {menas => menas-web}/ui/components/run/runDatasetVersionMaster.controller.js (100%) rename {menas => menas-web}/ui/components/run/runDatasetVersionMaster.view.xml (100%) rename {menas => menas-web}/ui/components/run/runDetail.controller.js (100%) rename {menas => menas-web}/ui/components/run/runDetail.view.xml (100%) rename {menas => menas-web}/ui/components/run/runMaster.controller.js (100%) rename {menas => menas-web}/ui/components/run/runMaster.view.xml (100%) rename {menas => menas-web}/ui/components/schema/addSchema.fragment.xml (100%) rename {menas => menas-web}/ui/components/schema/schemaDetail.controller.js (96%) rename {menas => menas-web}/ui/components/schema/schemaDetail.view.xml (99%) rename {menas => menas-web}/ui/components/schema/schemaInfo.fragment.xml (100%) rename {menas => menas-web}/ui/components/schema/schemaMaster.controller.js (100%) rename {menas => menas-web}/ui/components/schema/schemaMaster.view.xml (100%) rename {menas => menas-web}/ui/components/schema/selector/SchemaSelectorUtils.js (100%) rename {menas => menas-web}/ui/components/schema/selector/schemaSelector.fragment.xml (100%) rename {menas => menas-web}/ui/components/schema/selector/schemaSelectorDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/schemaFieldSelector.fragment.xml (100%) rename {menas => menas-web}/ui/components/schemaTable.fragment.xml (100%) rename {menas => menas-web}/ui/components/tables/TableUtils.js (100%) rename {menas => menas-web}/ui/components/tables/groupDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/tables/sortDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/types/CronEntryType.js (100%) rename {menas => menas-web}/ui/components/types/NonEmptyArrType.js (100%) rename {menas => menas-web}/ui/components/userInfo.fragment.xml (100%) rename {menas => menas-web}/ui/components/validator/Validator.js (100%) rename {menas => menas-web}/ui/css/style.css (100%) create mode 100644 menas-web/ui/favicon.ico rename {menas => menas-web}/ui/generic/formatters.js (100%) rename {menas => menas-web}/ui/generic/functions.js (90%) rename {menas => menas-web}/ui/generic/model.js (100%) rename {menas => menas-web}/ui/generic/prop.js (100%) create mode 100644 menas-web/ui/index.html create mode 100644 menas-web/ui/manifest.json create mode 100644 menas-web/ui/npm-shrinkwrap.json create mode 100644 menas-web/ui/package.json rename {menas => menas-web}/ui/service/CheckpointUtils.js (100%) rename {menas => menas-web}/ui/service/DialogFactory.js (100%) rename {menas => menas-web}/ui/service/EntityDialog.js (100%) rename {menas => menas-web}/ui/service/EntityService.js (100%) rename {menas => menas-web}/ui/service/EntityValidationService.js (100%) rename {menas => menas-web}/ui/service/GenericService.js (87%) rename {menas => menas-web}/ui/service/HdfsService.js (94%) rename {menas => menas-web}/ui/service/MessageProvider.js (100%) rename {menas => menas-web}/ui/service/MonitoringService.js (99%) rename {menas => menas-web}/ui/service/OozieService.js (92%) rename {menas => menas-web}/ui/service/PropertiesService.js (95%) rename {menas => menas-web}/ui/service/ResponseUtils.js (100%) rename {menas => menas-web}/ui/service/RestDAO.js (62%) rename {menas => menas-web}/ui/service/RuleService.js (100%) rename {menas => menas-web}/ui/service/RunRestDAO.js (62%) rename {menas => menas-web}/ui/service/RunService.js (100%) rename {menas => menas-web}/ui/service/SchemaFieldSelector.js (100%) rename {menas => menas-web}/ui/service/ValidationResult.js (100%) create mode 100644 menas-web/ui/ui5.yaml create mode 100644 menas/src/main/resources/start_menas.sh delete mode 100644 menas/ui/Gruntfile.js delete mode 100644 menas/ui/index.html delete mode 100644 menas/ui/npm-shrinkwrap.json delete mode 100644 menas/ui/package.json diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml new file mode 100644 index 000000000..f8c7697bb --- /dev/null +++ b/.github/workflows/license_check.yml @@ -0,0 +1,31 @@ +# +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +name: License Check + +on: + pull_request: + types: [opened, synchronize] + +jobs: + license-test: + name: License Check + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2 + - uses: actions/setup-java@v1 + with: + java-version: 1.8 + - run: mvn -Plicense-check apache-rat:check diff --git a/dao/src/main/scala/za/co/absa/enceladus/dao/rest/AuthClient.scala b/dao/src/main/scala/za/co/absa/enceladus/dao/rest/AuthClient.scala index 40bcdef0f..650ccba9d 100644 --- a/dao/src/main/scala/za/co/absa/enceladus/dao/rest/AuthClient.scala +++ b/dao/src/main/scala/za/co/absa/enceladus/dao/rest/AuthClient.scala @@ -71,14 +71,14 @@ sealed abstract class AuthClient(username: String, restTemplate: RestTemplate, a private def getAuthHeaders(response: ResponseEntity[String]): HttpHeaders = { val headers = response.getHeaders - val sessionCookie = headers.get("set-cookie").asScala.head + val jwt = headers.get("JWT").asScala.head val csrfToken = headers.get("X-CSRF-TOKEN").asScala.head - log.info(s"Session Cookie: $sessionCookie") + log.info(s"JWT: $jwt") log.info(s"CSRF Token: $csrfToken") val resultHeaders = new HttpHeaders() - resultHeaders.add("cookie", sessionCookie) + resultHeaders.add("JWT", jwt) resultHeaders.add("X-CSRF-TOKEN", csrfToken) resultHeaders } diff --git a/dao/src/test/scala/za/co/absa/enceladus/dao/rest/auth/AuthClientSuite.scala b/dao/src/test/scala/za/co/absa/enceladus/dao/rest/auth/AuthClientSuite.scala index d6488918f..ac78882a0 100644 --- a/dao/src/test/scala/za/co/absa/enceladus/dao/rest/auth/AuthClientSuite.scala +++ b/dao/src/test/scala/za/co/absa/enceladus/dao/rest/auth/AuthClientSuite.scala @@ -44,17 +44,17 @@ abstract class AuthClientSuite() extends AnyWordSpec s"Calling authenticate()" should { "return authentication headers on 200 OK" in { - val sessionCookie = "session-cookie" + val jwt = "jwt" val csrfToken = "csrf-token" val responseHeaders = new LinkedMultiValueMap[String, String] - responseHeaders.add("set-cookie", sessionCookie) + responseHeaders.add("jwt", jwt) responseHeaders.add("x-csrf-token", csrfToken) setUpSuccessfulAuthRequest(responseHeaders) val expected = new HttpHeaders() - expected.add("cookie", sessionCookie) + expected.add("jwt", jwt) expected.add("x-csrf-token", csrfToken) val response = authClient.authenticate() diff --git a/menas-web/Dockerfile b/menas-web/Dockerfile new file mode 100644 index 000000000..8775f516a --- /dev/null +++ b/menas-web/Dockerfile @@ -0,0 +1,26 @@ +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +FROM nginx:1-alpine + +LABEL \ + vendor="AbsaOSS" \ + copyright="2020 ABSA Group Limited" \ + license="Apache License, version 2.0" \ + name="Menas Web" + +ADD start_menas_web.sh /docker-entrypoint.d/start_menas_web.sh +COPY nginx.conf nginx.conf +RUN chmod +x /docker-entrypoint.d/start_menas_web.sh && rm -rf /usr/share/nginx/html/* + +COPY ./ui/dist /usr/share/nginx/html/ diff --git a/menas-web/nginx.conf b/menas-web/nginx.conf new file mode 100644 index 000000000..caf649d41 --- /dev/null +++ b/menas-web/nginx.conf @@ -0,0 +1,27 @@ +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +events {} + +http { + include mime.types; + ssl_session_cache shared:SSL:10m; + ssl_session_timeout 10m; + server { + listen 443 ssl http2; + root /usr/share/nginx/html; + server_name ${DNS_NAME}; + ssl_certificate /etc/ssl/certificate.pem; + ssl_certificate_key /etc/ssl/private.pem; + } +} diff --git a/menas-web/pom.xml b/menas-web/pom.xml new file mode 100644 index 000000000..521c1b48e --- /dev/null +++ b/menas-web/pom.xml @@ -0,0 +1,154 @@ + + + 4.0.0 + menas-web + war + + + za.co.absa.enceladus + parent + 3.0.0-SNAPSHOT + + + + + + com.spotify + dockerfile-maven-plugin + ${dockerfile.maven.version} + + ${dockerfile.menas-ui.repository} + ${dockerfile.tag} + + + + org.apache.maven.plugins + maven-clean-plugin + 3.1.0 + + + + ${basedir}/ui/dist + ${basedir}/ui/node_modules + + + + + + com.github.eirslett + frontend-maven-plugin + 1.7.6 + + target + ui + v10.16.0 + + + + install node and npm + + install-node-and-npm + + + + install + + npm + + + install + + + + sync version to package.json + + npm + + + version ${project.parent.version} --allow-same-version + + + + ui5 build + + npm + + + run ui5-build + + + + clean node_modules + + npm + + + prune --production + + + + + + + org.apache.maven.plugins + maven-antrun-plugin + ${maven.ant.plugin.version} + + + Clean up after generating component preload + generate-resources + + + + + + + + + + + run + + + + + + + org.apache.maven.plugins + maven-war-plugin + ${maven.war.version} + + false + + + ui/dist + / + false + + + META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA + + + true + + + + + + + + diff --git a/menas-web/start_menas_web.sh b/menas-web/start_menas_web.sh new file mode 100644 index 000000000..bde269cc9 --- /dev/null +++ b/menas-web/start_menas_web.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [ -n "${PRIVATE_KEY}" ] && [ -n "${CERTIFICATE}" ]; then + envsubst < ./nginx.conf > /etc/nginx/nginx.conf + echo "${PRIVATE_KEY}" >> /etc/ssl/private.pem + echo "${CERTIFICATE}" >> /etc/ssl/certificate.pem + echo "${CA_CHAIN}" >> /etc/ssl/cachain.pem +fi + +envsubst < /usr/share/nginx/html/package.json > /usr/share/nginx/html/package-new.json +rm /usr/share/nginx/html/package.json +mv /usr/share/nginx/html/package-new.json /usr/share/nginx/html/package.json diff --git a/menas/ui/components/AuditTrail.js b/menas-web/ui/components/AuditTrail.js similarity index 100% rename from menas/ui/components/AuditTrail.js rename to menas-web/ui/components/AuditTrail.js diff --git a/menas/ui/components/Component.js b/menas-web/ui/components/Component.js similarity index 100% rename from menas/ui/components/Component.js rename to menas-web/ui/components/Component.js diff --git a/menas/ui/components/SchemaTable.js b/menas-web/ui/components/SchemaTable.js similarity index 100% rename from menas/ui/components/SchemaTable.js rename to menas-web/ui/components/SchemaTable.js diff --git a/menas/ui/components/app.controller.js b/menas-web/ui/components/app.controller.js similarity index 100% rename from menas/ui/components/app.controller.js rename to menas-web/ui/components/app.controller.js diff --git a/menas/ui/components/app.view.xml b/menas-web/ui/components/app.view.xml similarity index 100% rename from menas/ui/components/app.view.xml rename to menas-web/ui/components/app.view.xml diff --git a/menas/ui/components/auditTrail.fragment.xml b/menas-web/ui/components/auditTrail.fragment.xml similarity index 100% rename from menas/ui/components/auditTrail.fragment.xml rename to menas-web/ui/components/auditTrail.fragment.xml diff --git a/menas/ui/components/dataset/addDataset.fragment.xml b/menas-web/ui/components/dataset/addDataset.fragment.xml similarity index 100% rename from menas/ui/components/dataset/addDataset.fragment.xml rename to menas-web/ui/components/dataset/addDataset.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/ConformanceRule.js b/menas-web/ui/components/dataset/conformanceRule/ConformanceRule.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConformanceRule.js rename to menas-web/ui/components/dataset/conformanceRule/ConformanceRule.js diff --git a/menas/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js b/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js rename to menas-web/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js diff --git a/menas/ui/components/dataset/conformanceRule/ConformanceRuleForm.js b/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleForm.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConformanceRuleForm.js rename to menas-web/ui/components/dataset/conformanceRule/ConformanceRuleForm.js diff --git a/menas/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js b/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js rename to menas-web/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js diff --git a/menas/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/targetSchemaFieldSelector.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/targetSchemaFieldSelector.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/targetSchemaFieldSelector.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/targetSchemaFieldSelector.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/RuleColumnDialog.js b/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/RuleColumnDialog.js rename to menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.js diff --git a/menas/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js b/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js rename to menas-web/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js diff --git a/menas/ui/components/dataset/conformanceRule/SchemaManager.js b/menas-web/ui/components/dataset/conformanceRule/SchemaManager.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/SchemaManager.js rename to menas-web/ui/components/dataset/conformanceRule/SchemaManager.js diff --git a/menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/upsert.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/upsert.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/upsert.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/upsert.fragment.xml diff --git a/menas/ui/components/dataset/datasetDetail.controller.js b/menas-web/ui/components/dataset/datasetDetail.controller.js similarity index 100% rename from menas/ui/components/dataset/datasetDetail.controller.js rename to menas-web/ui/components/dataset/datasetDetail.controller.js diff --git a/menas/ui/components/dataset/datasetDetail.view.xml b/menas-web/ui/components/dataset/datasetDetail.view.xml similarity index 100% rename from menas/ui/components/dataset/datasetDetail.view.xml rename to menas-web/ui/components/dataset/datasetDetail.view.xml diff --git a/menas/ui/components/dataset/datasetInfo.fragment.xml b/menas-web/ui/components/dataset/datasetInfo.fragment.xml similarity index 100% rename from menas/ui/components/dataset/datasetInfo.fragment.xml rename to menas-web/ui/components/dataset/datasetInfo.fragment.xml diff --git a/menas/ui/components/dataset/datasetMaster.controller.js b/menas-web/ui/components/dataset/datasetMaster.controller.js similarity index 100% rename from menas/ui/components/dataset/datasetMaster.controller.js rename to menas-web/ui/components/dataset/datasetMaster.controller.js diff --git a/menas/ui/components/dataset/datasetMaster.view.xml b/menas-web/ui/components/dataset/datasetMaster.view.xml similarity index 100% rename from menas/ui/components/dataset/datasetMaster.view.xml rename to menas-web/ui/components/dataset/datasetMaster.view.xml diff --git a/menas/ui/components/dataset/monitoring/barChartPopover.fragment.xml b/menas-web/ui/components/dataset/monitoring/barChartPopover.fragment.xml similarity index 100% rename from menas/ui/components/dataset/monitoring/barChartPopover.fragment.xml rename to menas-web/ui/components/dataset/monitoring/barChartPopover.fragment.xml diff --git a/menas/ui/components/dataset/monitoring/monitoring.fragment.xml b/menas-web/ui/components/dataset/monitoring/monitoring.fragment.xml similarity index 100% rename from menas/ui/components/dataset/monitoring/monitoring.fragment.xml rename to menas-web/ui/components/dataset/monitoring/monitoring.fragment.xml diff --git a/menas/ui/components/dataset/run/runs.fragment.xml b/menas-web/ui/components/dataset/run/runs.fragment.xml similarity index 100% rename from menas/ui/components/dataset/run/runs.fragment.xml rename to menas-web/ui/components/dataset/run/runs.fragment.xml diff --git a/menas/ui/components/dataset/schedule/editSchedule.fragment.xml b/menas-web/ui/components/dataset/schedule/editSchedule.fragment.xml similarity index 100% rename from menas/ui/components/dataset/schedule/editSchedule.fragment.xml rename to menas-web/ui/components/dataset/schedule/editSchedule.fragment.xml diff --git a/menas/ui/components/dataset/schedule/viewSchedule.fragment.xml b/menas-web/ui/components/dataset/schedule/viewSchedule.fragment.xml similarity index 100% rename from menas/ui/components/dataset/schedule/viewSchedule.fragment.xml rename to menas-web/ui/components/dataset/schedule/viewSchedule.fragment.xml diff --git a/menas/ui/components/external/it/designfuture/chartjs/library-preload.js b/menas-web/ui/components/external/it/designfuture/chartjs/library-preload.js similarity index 100% rename from menas/ui/components/external/it/designfuture/chartjs/library-preload.js rename to menas-web/ui/components/external/it/designfuture/chartjs/library-preload.js diff --git a/menas/ui/components/hdfs/HDFSBrowser.js b/menas-web/ui/components/hdfs/HDFSBrowser.js similarity index 100% rename from menas/ui/components/hdfs/HDFSBrowser.js rename to menas-web/ui/components/hdfs/HDFSBrowser.js diff --git a/menas/ui/components/hdfs/HDFSBrowserRenderer.js b/menas-web/ui/components/hdfs/HDFSBrowserRenderer.js similarity index 100% rename from menas/ui/components/hdfs/HDFSBrowserRenderer.js rename to menas-web/ui/components/hdfs/HDFSBrowserRenderer.js diff --git a/menas/ui/components/home/landingPage.controller.js b/menas-web/ui/components/home/landingPage.controller.js similarity index 100% rename from menas/ui/components/home/landingPage.controller.js rename to menas-web/ui/components/home/landingPage.controller.js diff --git a/menas/ui/components/home/landingPage.view.xml b/menas-web/ui/components/home/landingPage.view.xml similarity index 100% rename from menas/ui/components/home/landingPage.view.xml rename to menas-web/ui/components/home/landingPage.view.xml diff --git a/menas/ui/components/i18n/message.properties b/menas-web/ui/components/i18n/message.properties similarity index 100% rename from menas/ui/components/i18n/message.properties rename to menas-web/ui/components/i18n/message.properties diff --git a/menas/ui/components/login/loginDetail.controller.js b/menas-web/ui/components/login/loginDetail.controller.js similarity index 92% rename from menas/ui/components/login/loginDetail.controller.js rename to menas-web/ui/components/login/loginDetail.controller.js index f576f9204..f6a3f8434 100644 --- a/menas/ui/components/login/loginDetail.controller.js +++ b/menas-web/ui/components/login/loginDetail.controller.js @@ -22,6 +22,12 @@ sap.ui.define([ const usernameField = "username"; const passwordField = "password"; + function setCookie(name, value, days) { + let d = new Date; + d.setTime(d.getTime() + 24*60*60*1000*days); + document.cookie = name + "=" + value + ";path=/;expires=" + d.toGMTString(); + } + return Controller.extend("components.login.loginDetail", { loginForm: {}, @@ -124,8 +130,11 @@ sap.ui.define([ let fnSuccess = (result, status, xhr) => { this.byId("password").setValue(""); let csrfToken = xhr.getResponseHeader("X-CSRF-TOKEN"); + let jwt = xhr.getResponseHeader("JWT"); localStorage.setItem("csrfToken", csrfToken); - Functions.ajax("api/user/info", "GET", {}, (oInfo) => { + localStorage.setItem("jwtToken", jwt); + setCookie("JWT", jwt, 1); + Functions.ajax("/user/info", "GET", {}, (oInfo) => { model.setProperty("/userInfo", oInfo); model.setProperty("/menasVersion", oInfo.menasVersion); sap.ui.getCore().byId(this._appId).backToTopMaster(); @@ -140,7 +149,7 @@ sap.ui.define([ this.byId(usernameField).setValueState(sap.ui.core.ValueState.Error); this.byId(passwordField).setValueState(sap.ui.core.ValueState.Error); }; - $.ajax("api/login", { + $.ajax(window.apiUrl + "/login", { complete: function () { if (oControl) oControl.setBusy(false) }, diff --git a/menas/ui/components/login/loginDetail.view.xml b/menas-web/ui/components/login/loginDetail.view.xml similarity index 100% rename from menas/ui/components/login/loginDetail.view.xml rename to menas-web/ui/components/login/loginDetail.view.xml diff --git a/menas/ui/components/mappingTable/addDefaultValue.fragment.xml b/menas-web/ui/components/mappingTable/addDefaultValue.fragment.xml similarity index 100% rename from menas/ui/components/mappingTable/addDefaultValue.fragment.xml rename to menas-web/ui/components/mappingTable/addDefaultValue.fragment.xml diff --git a/menas/ui/components/mappingTable/addMappingTable.fragment.xml b/menas-web/ui/components/mappingTable/addMappingTable.fragment.xml similarity index 100% rename from menas/ui/components/mappingTable/addMappingTable.fragment.xml rename to menas-web/ui/components/mappingTable/addMappingTable.fragment.xml diff --git a/menas/ui/components/mappingTable/mappingTableDetail.controller.js b/menas-web/ui/components/mappingTable/mappingTableDetail.controller.js similarity index 100% rename from menas/ui/components/mappingTable/mappingTableDetail.controller.js rename to menas-web/ui/components/mappingTable/mappingTableDetail.controller.js diff --git a/menas/ui/components/mappingTable/mappingTableDetail.view.xml b/menas-web/ui/components/mappingTable/mappingTableDetail.view.xml similarity index 100% rename from menas/ui/components/mappingTable/mappingTableDetail.view.xml rename to menas-web/ui/components/mappingTable/mappingTableDetail.view.xml diff --git a/menas/ui/components/mappingTable/mappingTableInfo.fragment.xml b/menas-web/ui/components/mappingTable/mappingTableInfo.fragment.xml similarity index 100% rename from menas/ui/components/mappingTable/mappingTableInfo.fragment.xml rename to menas-web/ui/components/mappingTable/mappingTableInfo.fragment.xml diff --git a/menas/ui/components/mappingTable/mappingTableMaster.controller.js b/menas-web/ui/components/mappingTable/mappingTableMaster.controller.js similarity index 100% rename from menas/ui/components/mappingTable/mappingTableMaster.controller.js rename to menas-web/ui/components/mappingTable/mappingTableMaster.controller.js diff --git a/menas/ui/components/mappingTable/mappingTableMaster.view.xml b/menas-web/ui/components/mappingTable/mappingTableMaster.view.xml similarity index 100% rename from menas/ui/components/mappingTable/mappingTableMaster.view.xml rename to menas-web/ui/components/mappingTable/mappingTableMaster.view.xml diff --git a/menas/ui/components/mappingTableSelector.fragment.xml b/menas-web/ui/components/mappingTableSelector.fragment.xml similarity index 100% rename from menas/ui/components/mappingTableSelector.fragment.xml rename to menas-web/ui/components/mappingTableSelector.fragment.xml diff --git a/menas/ui/components/run/runDatasetNameMaster.controller.js b/menas-web/ui/components/run/runDatasetNameMaster.controller.js similarity index 100% rename from menas/ui/components/run/runDatasetNameMaster.controller.js rename to menas-web/ui/components/run/runDatasetNameMaster.controller.js diff --git a/menas/ui/components/run/runDatasetNameMaster.view.xml b/menas-web/ui/components/run/runDatasetNameMaster.view.xml similarity index 100% rename from menas/ui/components/run/runDatasetNameMaster.view.xml rename to menas-web/ui/components/run/runDatasetNameMaster.view.xml diff --git a/menas/ui/components/run/runDatasetVersionMaster.controller.js b/menas-web/ui/components/run/runDatasetVersionMaster.controller.js similarity index 100% rename from menas/ui/components/run/runDatasetVersionMaster.controller.js rename to menas-web/ui/components/run/runDatasetVersionMaster.controller.js diff --git a/menas/ui/components/run/runDatasetVersionMaster.view.xml b/menas-web/ui/components/run/runDatasetVersionMaster.view.xml similarity index 100% rename from menas/ui/components/run/runDatasetVersionMaster.view.xml rename to menas-web/ui/components/run/runDatasetVersionMaster.view.xml diff --git a/menas/ui/components/run/runDetail.controller.js b/menas-web/ui/components/run/runDetail.controller.js similarity index 100% rename from menas/ui/components/run/runDetail.controller.js rename to menas-web/ui/components/run/runDetail.controller.js diff --git a/menas/ui/components/run/runDetail.view.xml b/menas-web/ui/components/run/runDetail.view.xml similarity index 100% rename from menas/ui/components/run/runDetail.view.xml rename to menas-web/ui/components/run/runDetail.view.xml diff --git a/menas/ui/components/run/runMaster.controller.js b/menas-web/ui/components/run/runMaster.controller.js similarity index 100% rename from menas/ui/components/run/runMaster.controller.js rename to menas-web/ui/components/run/runMaster.controller.js diff --git a/menas/ui/components/run/runMaster.view.xml b/menas-web/ui/components/run/runMaster.view.xml similarity index 100% rename from menas/ui/components/run/runMaster.view.xml rename to menas-web/ui/components/run/runMaster.view.xml diff --git a/menas/ui/components/schema/addSchema.fragment.xml b/menas-web/ui/components/schema/addSchema.fragment.xml similarity index 100% rename from menas/ui/components/schema/addSchema.fragment.xml rename to menas-web/ui/components/schema/addSchema.fragment.xml diff --git a/menas/ui/components/schema/schemaDetail.controller.js b/menas-web/ui/components/schema/schemaDetail.controller.js similarity index 96% rename from menas/ui/components/schema/schemaDetail.controller.js rename to menas-web/ui/components/schema/schemaDetail.controller.js index b92f47cc5..47df27d60 100644 --- a/menas/ui/components/schema/schemaDetail.controller.js +++ b/menas-web/ui/components/schema/schemaDetail.controller.js @@ -47,6 +47,8 @@ sap.ui.define([ this._model.setProperty("/subjectName", ""); + this._model.setProperty("/schemaUploadUrl", window.apiUrl + "/schema/upload"); + // initially, registry integration is disabled in UI - get enabled by querying SchemaApiFeatures this._model.setProperty("/registryEnabled", false); this.checkRegistryIntegration() @@ -166,6 +168,10 @@ sap.ui.define([ name: "X-CSRF-TOKEN", value: localStorage.getItem("csrfToken") })); + oFileUpload.addHeaderParameter(new sap.ui.unified.FileUploaderParameter({ + name: "JWT", + value: localStorage.getItem("jwtToken") + })); oFileUpload.upload(); } }, @@ -184,12 +190,13 @@ sap.ui.define([ }; jQuery.ajax({ - url: "api/schema/registry", + url: window.apiUrl + "/schema/registry", type: 'POST', data: $.param(data), contentType: 'application/x-www-form-urlencoded', context: this, // becomes the result of "this" in handleRemoteLoad*Complete headers: { + "JWT": localStorage.getItem("jwtToken"), 'X-CSRF-TOKEN': localStorage.getItem("csrfToken") }, complete: this.handleRemoteLoadFromSubjectNameComplete @@ -216,7 +223,7 @@ sap.ui.define([ }; jQuery.ajax({ - url: "api/schema/remote", + url: window.apiUrl + "/schema/remote", type: 'POST', data: $.param(data), contentType: 'application/x-www-form-urlencoded', @@ -388,8 +395,12 @@ sap.ui.define([ checkRegistryIntegration: function () { jQuery.ajax({ - url: "api/schema/features", + url: window.apiUrl + "/schema/features", type: 'GET', + headers: { + "JWT": localStorage.getItem("jwtToken"), + 'X-CSRF-TOKEN': localStorage.getItem("csrfToken") + }, context: this, complete: this.handleRegistryIntegrationResponse }); diff --git a/menas/ui/components/schema/schemaDetail.view.xml b/menas-web/ui/components/schema/schemaDetail.view.xml similarity index 99% rename from menas/ui/components/schema/schemaDetail.view.xml rename to menas-web/ui/components/schema/schemaDetail.view.xml index 1d0335d8b..6af837f7d 100644 --- a/menas/ui/components/schema/schemaDetail.view.xml +++ b/menas-web/ui/components/schema/schemaDetail.view.xml @@ -55,7 +55,7 @@ - }^fGf662mEBY&TbtQTerz&3f0As~RI-zr zk=v+%C>KExK~xlh@s5b7psv^P3JNGHI^MuLGTxQrT|wl2zdU)K{?2zezyS^n&dy6c zr~B)#zwWoY-+ue;w;P9JoZ}V8Pk-uQIKi>?uN;nlbT}LnCb*tocR21c?RAEFKk1Jg zj$~%|3G?t1$H#=y4ZURrWAzK*72-|eLn52FL^KhDQ3qe#Bz6!X#NQL+$BG|c%VC}0 zCf+4h5jTi7Vx-i?4;~U~%Ll~we64@9`B=xR#IK2cL<2Ea)Xsv=5PrmKqvda??^y1S zi8Vw$@v=zrRYbf)d}Anne0|4qB;)@@d_jCw^o$in6W{TbPjC77{Wo3Z)H3|4Nn^2| z_)~AZ4VT96G)I$((acSLHfFS&CA~2mzn<@zU;RFh(7gIOklOGAPaX%0GvA*Pn}`q0$b9nyuLj|L9N%fazI5u5G#GM6 ztS3IUcXXn;r47x^?P%}rMio@EX9?lr`wg6 z&+YB)c>MG!&Rw{Sz59x=e*HGA%E(1#<_7HBUx4bGD)Qf9z#o+r+fZKPRID76gPM_MpD85m&EWM`fiGFJ9E5v8fp^Y8!Cm z=qZFuor(CA9K`0{#cvkg#YY+UaQrs=--wNS4v06|t>cOB62-)b$dUz%|4z=cC(o); zbnpm1U7Ud#(FsN#f`g+G8WMvUGv?saPcu+>@Tkex!FFgYtRC%VTz|k_=L1B=%tq3Z z%?Qr8i(kxk;{D`XD7;*YF0+*O;a~Ei{lm`**-IlLODBMG*@cUjuOKyj875B&hkw9S z1O!ZnzaQg%lxHG?-3q6Z$lRqk%#<;4;a41y9=g0;YgUBjN3PF z8K&y%n~=M43xXzvVM<5@KHIqqO-(~>L){$RWNZZMt@u~(_n@)48JVlsBQTJC%6{#` zb07Zs&gNbHue?N1U>G*$Zb5BL1NQDMKyYvbWhVk#x9ve4=eo$2QS;#aM{B`t@2>_+ zRU5cbFR#G#@R{VtQ)Y%}hewbeW!iMEv<6|R$vL6%_js**rqom|4wrb!y+fLNrj0x+(1T zycTmlkW|-*Ncwu|(hSPXRF~{fwmtf{H$IKLi)YQ-sg#i!#x5u=Eyucb+cA0a3{0CI zN4;|bt!-M8#ER64HO4+N)#+nCcd<2GbCQ$O5I`9YGg_zFJSTFOiY>-X>@AR+%!C+En$&(7ds>3|GDd9uYu;ODUXBN*4mCX_EYuq8qAxY zLcT&>e2Yi6#nzu@zFInS(&TWYrLV;2C(fdv@F?P`cl4ds1L@YJq%>4j+x&ZFVYtNW zLuXJ6dT7tK;9${VT)%b$_0$jPpRORkR{swi18Xc|V&-DUXZa{CyNq?~w_s{m4CN?< z^G0jjG$VWI=^4~FKIzKA*gP`W3%l!ETUt?g;2?6=Z9?_4=V)#1z@|+*tiJc?Yw1RR zt_5LXGqE~r15TVgj{^lqk(iib&Gmp#GY|Y3TJkmx8#Zo78*Tm(NlY)pYWULL$G)*1 z>Vl5;P8>aa9BGS|;1<`b9*U@J*;A*^A#`et(e2h68_xL|Ls?mcL&Ya>?06}buULbS zkQwAv{cXvZxDwHMW{R`I<@{m`=V63rlePcp0+SZbD>KJmt%hlU{w)yFQ5j)btgoVmY!~-Tm*5 z_{4uUbNw~p^p?A}rVdMKPew<^qkY%UOFm!kTzrZ^w}sYyMlJw zni}iY_73jr>TspvCU)*BU_Y*;9*=eDAL)GC-l6>_+l_XdH3pj3952q}{RfKCLS3eQ z@SSB(E+M`17uv%x{FtC*Tcka6V{;oaGINY==Fj@$;!}{bVJq#E-KL)xq%370&NA(b zib_OO)EvXN`qr{>)CTe``Ge0j6Hh~;M$El9E%&+NSzeNxe`np z-d=aL_6CPUAvP`v>vK2b>h)V_>m0Sd5sM=E?%%cdkFGYvn>YNC-J~{LxOfHWl>gYc zdE{$8=FLk(M#frWt6ZtLhML+sGxxOW3z7%ty@%9IXOWjzh@Ct0OnCBCDJq@!(cIc< z@=4o_Qf6!x_cHSBe*8~hni&H-liECpY*I|z^rl#E*aaq^ zbd^n3UbC9pNuvqt_|d<6@@~hO{s|$Q+K|~BF=qN#3=QDY%4hw0FzT5+_VFwh`Kryc zXUKHz<+Uesk=3)(5#7|Alq!Rv+u{DyE@WUh`ld=ge(cF}|2W_Ok{HXgEi-EN=-G2+ zluel4pWpt^O`DC}s_I45@ku9}bKI6kgB%wXXD?`=yvfi=Y@x)IE?IpAqJxa(nmtRAC zYRQt1><%Gcj)lcL2;O;jTVEU0Cn10ne11HDbx~DaPpZ^QOPpDdyCMV@YYr)`$W9r0vZAZ-jg>V@3B^(C>(0brJKtPuwTQnrd0# zB*Lp6XS(bv@%S?8X0e9ELliM!pTjh*Us}6fHdV2LKKD)dOkIg3V_mV%99rp{ZsOj! zgZ?PXxG=xkXS?SG38+yVPcp$zrE*th+Vt#5u&rh&-PO8T0F|^6V;2FJ}F)v zDz09)&NzlR(^Q{m9J1GJ#_u=nLL_~d@{=_+YgrtU*egR*UVee`&+2@)zt7w{TM9#D zWCG6}_hIeYt@NMH=9$uAo=M4-+^@$6RyDZn@zZYll{fuknL^%YxkCx5JbugMGK z?<~Sn&O6EFtXT_q4q%^M^~&SGs!fXY;Q*4JxOw9io<6PO`R{J4{btwI?g3|wc~?yK~J?%9=x`npD*U7W!upICPuH0N~xWXY1% zrp*}{>&;n=zrS^c}vX`o_=PrJ)|w++(}5vN!O|blB-^b0Z(rzqr<* zMM~66xl4a`Y}{M~&_6$UN(3SzXokL3Fa=f-o+Go8_k zcfm)J+`Xr|ZQ^qr;jYFV@v*=WW?RereQYp3{|Vu~Gh?;Iw^rG?d~CmL;kWH}dxlK^ zSK=b^vPfh60Wqi@&UZf}E)Zi)YWMq|?Hw%6e1Ah6AjV1z%2?JrgVpCPo%z2<#1apP z(UO#b?CL-FR>yE@{B9iaw}kY=HNveY86S+ao=b6O5&ul^Kc~JNu?+Dsf%u5fdZ9H- z>!#Lj)u(n!hi)fiPrgm~R4?Q%NE~O}G;}4rBR36Q3$HopUMQi*LP(?w!3D=~#C-C- znEWOD)@fn9%2e5^gYJn0)rq>-p#LY6TVev?_EQYQIol?G#D5c#(K^B=?bQzx9}-^w z$A#%{5Nn8`_Vq1%zlC^j2VvpuJuP@2iwwuE6HaJCU5a1|?-zwI*m$`aeSL=|lAmjmAz~wk(_W^+ud2 zJv>08HpfKT-4j0!qkS?Hr%sk(*Y14m z$vcSp7Kx@Itv4O6xCw6EzC-(*_lCH33%X0EJDW?Fu0cUTvAIv>nV)g@+|!+V&k zlUZwjXlN`_7A?p8`Jb9Hp4WKorb?Ap&vojhj_Q=7#=-->g7{&X8Bvb&^~#wGIUvEqNpz4xkM$Qu~nx_*KZ}>Bj_FNrM4f@hsu-^uAGVV Ps|tgW{a$(XjlTVV8XzLP literal 0 HcmV?d00001 diff --git a/menas/ui/generic/formatters.js b/menas-web/ui/generic/formatters.js similarity index 100% rename from menas/ui/generic/formatters.js rename to menas-web/ui/generic/formatters.js diff --git a/menas/ui/generic/functions.js b/menas-web/ui/generic/functions.js similarity index 90% rename from menas/ui/generic/functions.js rename to menas-web/ui/generic/functions.js index 98ea8a1be..d93323ab0 100644 --- a/menas/ui/generic/functions.js +++ b/menas-web/ui/generic/functions.js @@ -14,9 +14,8 @@ */ var Functions = new function () { - this.urlBase = ""; - this.csrfHeader = "X-CSRF-TOKEN"; + this.jwtHeader = "JWT" this.ajax = function (sPath, sMethod, oData, fnSuccess, fnError, oControl) { if (oControl) oControl.setBusy(true); @@ -29,13 +28,13 @@ var Functions = new function () { oFormattedData = oData; } - return $.ajax(this.urlBase + sPath, { + return $.ajax(window.apiUrl + sPath, { beforeSend: (oJqXHR, oSettings) => { - if (sMethod.toLowerCase() !== "get") { let csrfToken = localStorage.getItem("csrfToken"); + let jwtToken = localStorage.getItem("jwtToken"); console.log("CSRF: " + this.csrfHeader + " -> " + csrfToken); oJqXHR.setRequestHeader(this.csrfHeader, csrfToken); - } + oJqXHR.setRequestHeader(this.jwtHeader, jwtToken); }, complete: function () { if (oControl) oControl.setBusy(false) diff --git a/menas/ui/generic/model.js b/menas-web/ui/generic/model.js similarity index 100% rename from menas/ui/generic/model.js rename to menas-web/ui/generic/model.js diff --git a/menas/ui/generic/prop.js b/menas-web/ui/generic/prop.js similarity index 100% rename from menas/ui/generic/prop.js rename to menas-web/ui/generic/prop.js diff --git a/menas-web/ui/index.html b/menas-web/ui/index.html new file mode 100644 index 000000000..67bbee953 --- /dev/null +++ b/menas-web/ui/index.html @@ -0,0 +1,115 @@ + + + + + + + + + + + + + + + + + + + + + +
+ + diff --git a/menas-web/ui/manifest.json b/menas-web/ui/manifest.json new file mode 100644 index 000000000..b40622522 --- /dev/null +++ b/menas-web/ui/manifest.json @@ -0,0 +1,5 @@ +{ + "sap.app": { + "id": "menas-web" + } +} diff --git a/menas-web/ui/npm-shrinkwrap.json b/menas-web/ui/npm-shrinkwrap.json new file mode 100644 index 000000000..7723047cb --- /dev/null +++ b/menas-web/ui/npm-shrinkwrap.json @@ -0,0 +1,4741 @@ +{ + "name": "menas-web", + "version": "3.0.0-SNAPSHOT", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@ui5/cli": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/@ui5/cli/-/cli-2.8.1.tgz", + "integrity": "sha512-TYJHWlEVBtWuiYyMKUGRxBOgyFIU8qhDGwwZ9f8b4MwZp3+hKXrU3A516b4kSC4zfTlduHIr2LlSI3oqueYq+A==", + "dev": true, + "requires": { + "@ui5/builder": "^2.6.1", + "@ui5/fs": "^2.0.6", + "@ui5/logger": "^2.0.1", + "@ui5/project": "^2.2.4", + "@ui5/server": "^2.2.7", + "chalk": "^4.1.0", + "data-with-position": "^0.4.1", + "import-local": "^3.0.2", + "js-yaml": "^3.14.1", + "open": "^7.3.1", + "semver": "^7.3.4", + "treeify": "^1.0.1", + "update-notifier": "^5.0.1", + "yargs": "^16.2.0" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", + "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", + "dev": true + }, + "@babel/highlight": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", + "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.10.4", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "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" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.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 + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "@babel/parser": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.12.11.tgz", + "integrity": "sha512-N3UxG+uuF4CMYoNj8AhnbAcJF0PiuJ9KHuy1lQmkYsxTer/MAH9UBNHsBoAX/4s6NvlDD047No8mYVGGzLL4hg==", + "dev": true + }, + "@nodelib/fs.scandir": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.4.tgz", + "integrity": "sha512-33g3pMJk3bg5nXbL/+CY6I2eJDzZAni49PfJnL5fghPTggPvBd/pFNSgJsdAgWptuFu7qq/ERvOYFlhvsLTCKA==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.4", + "run-parallel": "^1.1.9" + } + }, + "@nodelib/fs.stat": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.4.tgz", + "integrity": "sha512-IYlHJA0clt2+Vg7bccq+TzRdJvv19c2INqBSsoOLp1je7xjtr7J26+WXR72MCdvU9q1qTzIWDfhMf+DRvQJK4Q==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.6.tgz", + "integrity": "sha512-8Broas6vTtW4GIXTAHDoE32hnN2M5ykgCpWGbuXHQ15vEMqr23pB76e/GZcYsZCHALv50ktd24qhEyKr6wBtow==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.4", + "fastq": "^1.6.0" + } + }, + "@sindresorhus/is": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.14.0.tgz", + "integrity": "sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==", + "dev": true + }, + "@szmarczak/http-timer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-1.1.2.tgz", + "integrity": "sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA==", + "dev": true, + "requires": { + "defer-to-connect": "^1.0.1" + } + }, + "@types/normalize-package-data": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", + "dev": true + }, + "@ui5/builder": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/@ui5/builder/-/builder-2.6.1.tgz", + "integrity": "sha512-4cILVl+KtOlnbcfe6aaUSd08tFWKCDhdSxkbLK+P3eD+CLzW83fJvz7Oi58t3dR65IeqMVvic+APmyK5HhpX1g==", + "dev": true, + "requires": { + "@ui5/fs": "^2.0.6", + "@ui5/logger": "^2.0.1", + "cheerio": "^0.22.0", + "escape-unicode": "^0.2.0", + "escodegen": "^2.0.0", + "escope": "^3.6.0", + "esprima": "^4.0.1", + "estraverse": "5.1.0", + "globby": "^11.0.2", + "graceful-fs": "^4.2.4", + "jsdoc": "^3.6.6", + "less-openui5": "^0.9.0", + "make-dir": "^3.1.0", + "pretty-data": "^0.40.0", + "pretty-hrtime": "^1.0.3", + "replacestream": "^4.0.3", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "terser": "^5.5.1", + "xml2js": "^0.4.23", + "yazl": "^2.5.1" + } + }, + "@ui5/fs": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@ui5/fs/-/fs-2.0.6.tgz", + "integrity": "sha512-dBugwsHP7F7IrfVAaqf7FSDhknK6RhrLOpgkp7FmL/WRA02Q3FQzroFJc7CZEP4bOnAvWC3TpghOfHV2/RqR3A==", + "dev": true, + "requires": { + "@ui5/logger": "^2.0.1", + "clone": "^2.1.0", + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "make-dir": "^3.1.0", + "micromatch": "^4.0.2", + "minimatch": "^3.0.3", + "pretty-hrtime": "^1.0.3", + "random-int": "^2.0.1" + } + }, + "@ui5/logger": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@ui5/logger/-/logger-2.0.1.tgz", + "integrity": "sha512-FU5moQF9HATZEIJVQxXWRsUKMveIRJNPSmH3Mptcuc05f6gKu1BWcamDaDHXmMSyoKRounY9Aok94NTQMi7eDw==", + "dev": true, + "requires": { + "npmlog": "^4.1.2" + } + }, + "@ui5/project": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/@ui5/project/-/project-2.2.4.tgz", + "integrity": "sha512-ormY1JnDMdme0l1Y8o6wPSkuiYV3i5hBng/whQsXejfBAZ4kXuKNK8XVp4LQf6ConFYpCb3eea+dfChL2vnNKw==", + "dev": true, + "requires": { + "@ui5/builder": "^2.4.3", + "@ui5/logger": "^2.0.1", + "@ui5/server": "^2.2.6", + "ajv": "^6.12.6", + "ajv-errors": "^1.0.1", + "chalk": "^4.1.0", + "escape-string-regexp": "^4.0.0", + "graceful-fs": "^4.2.4", + "js-yaml": "^3.14.0", + "libnpmconfig": "^1.2.1", + "lockfile": "^1.0.4", + "mkdirp": "^1.0.4", + "pacote": "^9.5.12", + "pretty-hrtime": "^1.0.3", + "read-pkg": "^5.2.0", + "read-pkg-up": "^7.0.1", + "resolve": "^1.18.1", + "semver": "^7.3.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + } + } + }, + "@ui5/server": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/@ui5/server/-/server-2.2.7.tgz", + "integrity": "sha512-cnn09YuUEy0bddkDRiZ4Yw5xlNZdSylx/wlRqXq+rI1hNZfkUJRBv2KzK+ZIOYQHkWy9j12XNH6n/SAsyUvMUg==", + "dev": true, + "requires": { + "@ui5/builder": "^2.4.3", + "@ui5/fs": "^2.0.5", + "@ui5/logger": "^2.0.1", + "body-parser": "^1.19.0", + "compression": "^1.7.4", + "connect-openui5": "^0.10.0", + "cors": "^2.8.5", + "devcert-sanscache": "^0.4.8", + "escape-html": "^1.0.3", + "etag": "^1.8.1", + "express": "^4.17.1", + "fresh": "^0.5.2", + "graceful-fs": "^4.2.4", + "make-dir": "^3.1.0", + "mime-types": "^2.1.27", + "parseurl": "^1.3.3", + "portscanner": "^2.1.1", + "replacestream": "^4.0.3", + "router": "^1.3.5", + "spdy": "^4.0.2", + "treeify": "^1.0.1", + "yesno": "^0.3.1" + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "agentkeepalive": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/agentkeepalive/-/agentkeepalive-3.5.2.tgz", + "integrity": "sha512-e0L/HNe6qkQ7H19kTlRRqUibEAwDK5AFk6y3PtMsuut2VAH6+Q4xZml1tNDJD7kSAyqmbG/K08K5WEJYtUrSlQ==", + "dev": true, + "requires": { + "humanize-ms": "^1.2.1" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "dev": true + }, + "ansi-align": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-align/-/ansi-align-3.0.0.tgz", + "integrity": "sha512-ZpClVKqXN3RGBmKibdfWzqCY4lnjEuoNzU5T0oEFpfd/z5qJHVarukridD4juLO2FXMiwUQxr9WqQtaYa8XRYw==", + "dev": true, + "requires": { + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "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 + }, + "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" + } + } + } + }, + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "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" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "async": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.0.tgz", + "integrity": "sha512-TR2mEZFVOj2pLStYxLht7TyfuRzaydfpxr3k9RpHIzMgw7A64dzsdqCxH1WJyQdoe8T10nDXd9wnEigmiuHIZw==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "balanced-match": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", + "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", + "dev": true + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "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" + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "boxen": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/boxen/-/boxen-4.2.0.tgz", + "integrity": "sha512-eB4uT9RGzg2odpER62bBwSLvUeGC+WbRjjyyFhGsKnc8wp/m0+hQsMUvUe3H2V0D5vw0nBdO1hCJoZo5mKeuIQ==", + "dev": true, + "requires": { + "ansi-align": "^3.0.0", + "camelcase": "^5.3.1", + "chalk": "^3.0.0", + "cli-boxes": "^2.2.0", + "string-width": "^4.1.0", + "term-size": "^2.1.0", + "type-fest": "^0.8.1", + "widest-line": "^3.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha1-y5T662HIaWRR2zZTThQi+U8K7og=", + "dev": true + }, + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "cacheable-request": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-6.1.0.tgz", + "integrity": "sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg==", + "dev": true, + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^3.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^4.1.0", + "responselike": "^1.0.2" + }, + "dependencies": { + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "lowercase-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==", + "dev": true + } + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "catharsis": { + "version": "0.8.11", + "resolved": "https://registry.npmjs.org/catharsis/-/catharsis-0.8.11.tgz", + "integrity": "sha512-a+xUyMV7hD1BrDQA/3iPV7oc+6W26BgVJO05PGEoatMyIuPScQKsde6i3YorWX1qs+AZjnJ18NqdKoCtKiNh1g==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "chalk": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", + "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cheerio": { + "version": "0.22.0", + "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-0.22.0.tgz", + "integrity": "sha1-qbqoYKP5tZWmuBsahocxIe06Jp4=", + "dev": true, + "requires": { + "css-select": "~1.2.0", + "dom-serializer": "~0.1.0", + "entities": "~1.1.1", + "htmlparser2": "^3.9.1", + "lodash.assignin": "^4.0.9", + "lodash.bind": "^4.1.4", + "lodash.defaults": "^4.0.1", + "lodash.filter": "^4.4.0", + "lodash.flatten": "^4.2.0", + "lodash.foreach": "^4.3.0", + "lodash.map": "^4.4.0", + "lodash.merge": "^4.4.0", + "lodash.pick": "^4.2.1", + "lodash.reduce": "^4.4.0", + "lodash.reject": "^4.4.0", + "lodash.some": "^4.4.0" + } + }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, + "ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "cli-boxes": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/cli-boxes/-/cli-boxes-2.2.1.tgz", + "integrity": "sha512-y4coMcylgSCdVinjiDBuR8PCC2bLjyGTwEmPb9NHR/QaNU6EUOXcTY/s6VjGMD6ENSEaeQYHCY0GNGS5jfMwPw==", + "dev": true + }, + "cliui": { + "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": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-response": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", + "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "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 + }, + "command-exists": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/command-exists/-/command-exists-1.2.9.tgz", + "integrity": "sha512-LTQ/SGc+s0Xc0Fu5WaKnR0YiygZkm9eKFvyS+fRsU7/ZWFF8ykFM6Pc9aCVf1+xasOOZpO3BAVgVrKvsqKHV7w==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "configstore": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/configstore/-/configstore-5.0.1.tgz", + "integrity": "sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "unique-string": "^2.0.0", + "write-file-atomic": "^3.0.0", + "xdg-basedir": "^4.0.0" + } + }, + "connect-openui5": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/connect-openui5/-/connect-openui5-0.10.0.tgz", + "integrity": "sha512-vu/2K9+BrEKSO0+pvNGD87QQJB1PxqX70CmZrZ7URcQHWblXDMZVLSCclvPUYDmSJOkLn42SHIlIs0TukrQZ3w==", + "dev": true, + "requires": { + "async": "^3.2.0", + "cookie": "^0.4.1", + "extend": "^3.0.0", + "glob": "^7.1.6", + "http-proxy": "^1.18.1", + "less-openui5": "^0.9.0", + "set-cookie-parser": "^2.4.6" + } + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "crypto-random-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", + "dev": true + }, + "css": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/css/-/css-3.0.0.tgz", + "integrity": "sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "source-map": "^0.6.1", + "source-map-resolve": "^0.6.0" + } + }, + "css-select": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", + "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "dev": true, + "requires": { + "boolbase": "~1.0.0", + "css-what": "2.1", + "domutils": "1.5.1", + "nth-check": "~1.0.1" + } + }, + "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==", + "dev": true + }, + "cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha1-WW6WmP0MgOEgOMK4LW6xs1tiJNk=", + "dev": true + }, + "d": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/d/-/d-1.0.1.tgz", + "integrity": "sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA==", + "dev": true, + "requires": { + "es5-ext": "^0.10.50", + "type": "^1.0.1" + } + }, + "data-with-position": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/data-with-position/-/data-with-position-0.4.1.tgz", + "integrity": "sha512-EX8Q0e0DrDFcg0DzHMhkO5vDcm4VKJht/qtQFrhtlzLzAbIHda1lPmw+TaYfrz69+NrhpCbAqYEuy3b+zwpbNA==", + "dev": true, + "requires": { + "yaml-ast-parser": "^0.0.43" + } + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", + "dev": true + }, + "decompress-response": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", + "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "dev": true, + "requires": { + "mimic-response": "^1.0.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "defer-to-connect": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-1.1.3.tgz", + "integrity": "sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ==", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "destroy": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", + "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "dev": true + }, + "detect-node": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", + "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "dev": true + }, + "devcert-sanscache": { + "version": "0.4.8", + "resolved": "https://registry.npmjs.org/devcert-sanscache/-/devcert-sanscache-0.4.8.tgz", + "integrity": "sha512-AcuD5yTpKdY5VnZdADR2wIZMOaEqNQnIEIxuvSzu7iAWLh/I/g3Bhm6FebUby1tfd6RGtPwN5/Gp0nNT67ZSRQ==", + "dev": true, + "requires": { + "command-exists": "^1.2.2", + "get-port": "^3.0.0", + "glob": "^7.1.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "dom-serializer": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.1.1.tgz", + "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", + "dev": true, + "requires": { + "domelementtype": "^1.3.0", + "entities": "^1.1.1" + } + }, + "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.5.1", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", + "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "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==", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.2.tgz", + "integrity": "sha512-2y91h5OpQlolefMPmUlivelittSWy0rP+oYVpn6A7GwVHNE8AWzoYOBNmlwks3LobaJxgHCYZAnyNo2GgpNRNQ==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "err-code": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/err-code/-/err-code-1.1.2.tgz", + "integrity": "sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=", + "dev": true + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es5-ext": { + "version": "0.10.53", + "resolved": "https://registry.npmjs.org/es5-ext/-/es5-ext-0.10.53.tgz", + "integrity": "sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q==", + "dev": true, + "requires": { + "es6-iterator": "~2.0.3", + "es6-symbol": "~3.1.3", + "next-tick": "~1.0.0" + } + }, + "es6-iterator": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-iterator/-/es6-iterator-2.0.3.tgz", + "integrity": "sha1-p96IkUGgWpSwhUQDstCg+/qY87c=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.35", + "es6-symbol": "^3.1.1" + } + }, + "es6-map": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-map/-/es6-map-0.1.5.tgz", + "integrity": "sha1-kTbgUD3MBqMBaQ8LsU/042TpSfA=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-set": "~0.1.5", + "es6-symbol": "~3.1.1", + "event-emitter": "~0.3.5" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "es6-set": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/es6-set/-/es6-set-0.1.5.tgz", + "integrity": "sha1-0rPsXU2ADO2BjbU40ol02wpzzLE=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14", + "es6-iterator": "~2.0.1", + "es6-symbol": "3.1.1", + "event-emitter": "~0.3.5" + }, + "dependencies": { + "es6-symbol": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.1.tgz", + "integrity": "sha1-vwDvT9q2uhtG7Le2KbTH7VcVzHc=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + } + } + }, + "es6-symbol": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/es6-symbol/-/es6-symbol-3.1.3.tgz", + "integrity": "sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA==", + "dev": true, + "requires": { + "d": "^1.0.1", + "ext": "^1.1.2" + } + }, + "es6-weak-map": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es6-weak-map/-/es6-weak-map-2.0.3.tgz", + "integrity": "sha512-p5um32HOTO1kP+w7PRnB+5lQ43Z6muuMuIMffvDN8ZB4GcnjLBV6zGStpbASIMk4DCAvEaamhe2zhyCb/QXXsA==", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "^0.10.46", + "es6-iterator": "^2.0.3", + "es6-symbol": "^3.1.1" + } + }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, + "escape-goat": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/escape-goat/-/escape-goat-2.1.1.tgz", + "integrity": "sha512-8/uIhbG12Csjy2JEW7D9pHbreaVaS/OpN3ycnyvElTdwM5n6GY6W6e2IPemfvGZeUMqZ9A/3GqIZMgKnBhAw/Q==", + "dev": true + }, + "escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + }, + "escape-unicode": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/escape-unicode/-/escape-unicode-0.2.0.tgz", + "integrity": "sha512-7jMQuKb8nm0h/9HYLfu4NCLFwoUsd5XO6OZ1z86PbKcMf8zDK1m7nFR0iA2CCShq4TSValaLIveE8T1UBxgALQ==", + "dev": true + }, + "escodegen": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-2.0.0.tgz", + "integrity": "sha512-mmHKys/C8BFUGI+MAWNcSYoORYLMdPzjrknd2Vc+bUsjN5bXcr8EhrNB+UTqfL1y3I9c4fw2ihgtMPQLBRiQxw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "escope": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/escope/-/escope-3.6.0.tgz", + "integrity": "sha1-4Bl16BJ4GhY6ba392AOY3GTIicM=", + "dev": true, + "requires": { + "es6-map": "^0.1.3", + "es6-weak-map": "^2.0.1", + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "dependencies": { + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + } + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.1.0.tgz", + "integrity": "sha512-FyohXK+R0vE+y1nHLoBM7ZTyqRpqAlhdZHCWIWEviFLiGB8b04H6bQs8G+XTthacvT8VuwvteiP7RJSxMs8UEw==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "event-emitter": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/event-emitter/-/event-emitter-0.3.5.tgz", + "integrity": "sha1-34xp7vFkeSPHFXuc6DhAYQsCzDk=", + "dev": true, + "requires": { + "d": "1", + "es5-ext": "~0.10.14" + } + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "cookie": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", + "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "dev": true + } + } + }, + "ext": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ext/-/ext-1.4.0.tgz", + "integrity": "sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A==", + "dev": true, + "requires": { + "type": "^2.0.0" + }, + "dependencies": { + "type": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/type/-/type-2.1.0.tgz", + "integrity": "sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.5.tgz", + "integrity": "sha512-2DtFcgT68wiTTiwZ2hNdJfcHNke9XOfnwmBRWXhmeKM8rF0TGwmC/Qto3S7RoZKp5cilZbxzO5iTNTQsJ+EeDg==", + "dev": true, + "requires": { + "@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": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fastq": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.10.0.tgz", + "integrity": "sha512-NL2Qc5L3iQEsyYzweq7qfgy5OtXCmGzGvhElGEd/SoFWEMOEczNh5s5ocaF01HDetxz+p8ecjNPA6cZxxIHmzA==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==", + "dev": true + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "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" + } + }, + "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" + } + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", + "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==", + "dev": true + }, + "forwarded": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", + "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "dev": true + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "from2": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", + "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, + "fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", + "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==" + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "genfun": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/genfun/-/genfun-5.0.0.tgz", + "integrity": "sha512-KGDOARWVga7+rnB3z9Sd2Letx515owfk0hSxHGuqjANb1M+x2bGZGqHLiozPsYMdM2OubeMni/Hpwmjq6qIUhA==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-port": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", + "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", + "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", + "dev": true, + "requires": { + "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-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==", + "dev": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "global-dirs": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/global-dirs/-/global-dirs-2.1.0.tgz", + "integrity": "sha512-MG6kdOUh/xBnyo9cJFeIKkLEc1AyFq42QTU4XiX51i2NEdxLxLWXIjEjmqKeSuKR7pAZjTqUVoT2b2huxVLgYQ==", + "dev": true, + "requires": { + "ini": "1.3.7" + }, + "dependencies": { + "ini": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.7.tgz", + "integrity": "sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ==", + "dev": true + } + } + }, + "globby": { + "version": "11.0.2", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.2.tgz", + "integrity": "sha512-2ZThXDvvV8fYFRVIxnrMQBipZQDr7MxKAmQK1vujaj9/7eF0efG7BPUKJ7jP7G5SLF37xKDXvO4S/KKLj/Z0og==", + "dev": true, + "requires": { + "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" + } + }, + "got": { + "version": "9.6.0", + "resolved": "https://registry.npmjs.org/got/-/got-9.6.0.tgz", + "integrity": "sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q==", + "dev": true, + "requires": { + "@sindresorhus/is": "^0.14.0", + "@szmarczak/http-timer": "^1.1.2", + "cacheable-request": "^6.0.0", + "decompress-response": "^3.3.0", + "duplexer3": "^0.1.4", + "get-stream": "^4.1.0", + "lowercase-keys": "^1.0.1", + "mimic-response": "^1.0.1", + "p-cancelable": "^1.0.0", + "to-readable-stream": "^1.0.0", + "url-parse-lax": "^3.0.0" + } + }, + "graceful-fs": { + "version": "4.2.4", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.4.tgz", + "integrity": "sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw==", + "dev": true + }, + "handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "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 + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-yarn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", + "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==", + "dev": true + }, + "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 + }, + "hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "http-cache-semantics": { + "version": "3.8.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", + "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", + "dev": true + }, + "http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha1-+nFolEq5pRnTN8sL7HKE3D5yPYc=", + "dev": true + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-proxy-agent": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-2.1.0.tgz", + "integrity": "sha512-qwHbBLV7WviBl0rQsOzH6o5lwyOIvwp/BdFnvVxXORldu5TmjFfjzBcWUWS5kWAZhmv+JtiDhSuQCp4sBfbIgg==", + "dev": true, + "requires": { + "agent-base": "4", + "debug": "3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + } + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.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" + } + }, + "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 + } + } + }, + "humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha1-xG4xWaKT9riW2ikxbYtv6Lt5u+0=", + "dev": true, + "requires": { + "ms": "^2.0.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "import-lazy": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-2.1.0.tgz", + "integrity": "sha1-BWmOPUXIjo1+nZLLBYTnfwlvPkM=", + "dev": true + }, + "import-local": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/import-local/-/import-local-3.0.2.tgz", + "integrity": "sha512-vjL3+w0oulAVZ0hBHnxa/Nm5TAurf9YLQJDhqRZyqb+VKGOB6LU8t9H1Nr5CIo16vh9XfJTOoHwU0B71S557gA==", + "dev": true, + "requires": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + } + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "dev": true + }, + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "ip": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", + "integrity": "sha1-vd7XARQpCCjAoDnnLvJfWq7ENUo=", + "dev": true + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "requires": { + "ci-info": "^2.0.0" + } + }, + "is-core-module": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", + "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-docker": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz", + "integrity": "sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-installed-globally": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-installed-globally/-/is-installed-globally-0.3.2.tgz", + "integrity": "sha512-wZ8x1js7Ia0kecP/CHM/3ABkAmujX7WPvQk6uu3Fly/Mk44pySulQpnHG46OMjHGXApINnV4QhY3SWnECO2z5g==", + "dev": true, + "requires": { + "global-dirs": "^2.0.1", + "is-path-inside": "^3.0.1" + } + }, + "is-npm": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-npm/-/is-npm-5.0.0.tgz", + "integrity": "sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-like": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/is-number-like/-/is-number-like-1.0.8.tgz", + "integrity": "sha512-6rZi3ezCyFcn5L71ywzz2bS5b2Igl1En3eTlZlvKjpz1n3IZLAYMbKYAIQgFmEu0GENg92ziU/faEOA/aixjbA==", + "dev": true, + "requires": { + "lodash.isfinite": "^3.3.2" + } + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-path-inside": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.2.tgz", + "integrity": "sha512-/2UGPSgmtqwo1ktx8NDHjuPwZWmHhO+gj0f93EkhLB5RgW9RZevWYYlIkS6zePc6U2WpOdQYIwHe9YC4DWEBVg==", + "dev": true + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "is-yarn-global": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/is-yarn-global/-/is-yarn-global-0.3.0.tgz", + "integrity": "sha512-VjSeb/lHmkoyd8ryPVIKvOCn4D1koMqY+vqyjjUfc3xyKtP4dYOxM44sZrnqQSzSds3xyOrUTLTC9LVCVgLngw==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "js2xmlparser": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/js2xmlparser/-/js2xmlparser-4.0.1.tgz", + "integrity": "sha512-KrPTolcw6RocpYjdC7pL7v62e55q7qOMHvLX1UCLc5AAS8qeJ6nukarEJAF2KL2PZxlbGueEbINqZR2bDe/gUw==", + "dev": true, + "requires": { + "xmlcreate": "^2.0.3" + } + }, + "jsdoc": { + "version": "3.6.6", + "resolved": "https://registry.npmjs.org/jsdoc/-/jsdoc-3.6.6.tgz", + "integrity": "sha512-znR99e1BHeyEkSvgDDpX0sTiTu+8aQyDl9DawrkOGZTTW8hv0deIFXx87114zJ7gRaDZKVQD/4tr1ifmJp9xhQ==", + "dev": true, + "requires": { + "@babel/parser": "^7.9.4", + "bluebird": "^3.7.2", + "catharsis": "^0.8.11", + "escape-string-regexp": "^2.0.0", + "js2xmlparser": "^4.0.1", + "klaw": "^3.0.0", + "markdown-it": "^10.0.0", + "markdown-it-anchor": "^5.2.7", + "marked": "^0.8.2", + "mkdirp": "^1.0.4", + "requizzle": "^0.2.3", + "strip-json-comments": "^3.1.0", + "taffydb": "2.6.2", + "underscore": "~1.10.2" + } + }, + "json-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", + "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "keyv": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.1.0.tgz", + "integrity": "sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA==", + "dev": true, + "requires": { + "json-buffer": "3.0.0" + } + }, + "klaw": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/klaw/-/klaw-3.0.0.tgz", + "integrity": "sha512-0Fo5oir+O9jnXu5EefYbVK+mHMBeEVEy2cmctR1O1NECcCkPRreJKrS6Qt/j3KC2C148Dfo9i3pCmCMsdqGr0g==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.9" + } + }, + "latest-version": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/latest-version/-/latest-version-5.1.0.tgz", + "integrity": "sha512-weT+r0kTkRQdCdYCNtkMwWXQTMEswKrFBkm4ckQOMVhhqhIMI1UT2hMj+1iigIhgSZm5gTmrRXBNoGUgaTY1xA==", + "dev": true, + "requires": { + "package-json": "^6.3.0" + } + }, + "less-openui5": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.9.0.tgz", + "integrity": "sha512-RwZJ7ZXEJwv2HTeuZp6JJzfbZFMlMyXyWuqH95n+roDy+8EpI3nQdvMhxYG5fzciJ+c5ACrNhoZ7Nv2xqkEmig==", + "dev": true, + "requires": { + "clone": "^2.1.0", + "css": "^3.0.0", + "mime": "^1.6.0" + } + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "libnpmconfig": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/libnpmconfig/-/libnpmconfig-1.2.1.tgz", + "integrity": "sha512-9esX8rTQAHqarx6qeZqmGQKBNZR5OIbl/Ayr0qQDy3oXja2iFVQQI81R6GZ2a02bSNZ9p3YOGX1O6HHCb1X7kA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "find-up": "^3.0.0", + "ini": "^1.3.5" + } + }, + "lines-and-columns": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.1.6.tgz", + "integrity": "sha1-HADHQ7QzzQpOgHWPe2SldEDZ/wA=", + "dev": true + }, + "linkify-it": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-2.2.0.tgz", + "integrity": "sha512-GnAl/knGn+i1U/wjBz3akz2stz+HrHLsxMwHQGofCDfPvlf+gDKN58UtfmUquTY4/MXeE2x7k19KQmeoZi94Iw==", + "dev": true, + "requires": { + "uc.micro": "^1.0.1" + } + }, + "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" + } + }, + "lockfile": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/lockfile/-/lockfile-1.0.4.tgz", + "integrity": "sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA==", + "dev": true, + "requires": { + "signal-exit": "^3.0.2" + } + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==", + "dev": true + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.bind": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/lodash.bind/-/lodash.bind-4.2.1.tgz", + "integrity": "sha1-euMBfpOWIqwxt9fX3LGzTbFpDTU=", + "dev": true + }, + "lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw=", + "dev": true + }, + "lodash.filter": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.filter/-/lodash.filter-4.6.0.tgz", + "integrity": "sha1-ZosdSYFgOuHMWm+nYBQ+SAtMSs4=", + "dev": true + }, + "lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=", + "dev": true + }, + "lodash.foreach": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.foreach/-/lodash.foreach-4.5.0.tgz", + "integrity": "sha1-Gmo16s5AEoDH8G3d7DUWWrJ+PlM=", + "dev": true + }, + "lodash.isfinite": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/lodash.isfinite/-/lodash.isfinite-3.3.2.tgz", + "integrity": "sha1-+4m2WpqAKBgz8LdHizpRBPiY67M=", + "dev": true + }, + "lodash.map": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.map/-/lodash.map-4.6.0.tgz", + "integrity": "sha1-dx7Hg540c9nEzeKLGTlMNWL09tM=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.pick": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.pick/-/lodash.pick-4.4.0.tgz", + "integrity": "sha1-UvBWEP/53tQiYRRB7R/BI6AwAbM=", + "dev": true + }, + "lodash.reduce": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reduce/-/lodash.reduce-4.6.0.tgz", + "integrity": "sha1-8atrg5KZrUj3hKu/R2WW8DuRTTs=", + "dev": true + }, + "lodash.reject": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.reject/-/lodash.reject-4.6.0.tgz", + "integrity": "sha1-gNZJLcFHCGS79YNTO2UfQqn1JBU=", + "dev": true + }, + "lodash.some": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.some/-/lodash.some-4.6.0.tgz", + "integrity": "sha1-G7nzFO9ri63tE7VJFpsqlF62jk0=", + "dev": true + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-fetch-happen": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/make-fetch-happen/-/make-fetch-happen-5.0.2.tgz", + "integrity": "sha512-07JHC0r1ykIoruKO8ifMXu+xEU8qOXDFETylktdug6vJDACnP+HKevOu3PXyNPzFyTSlz8vrBYlBO1JZRe8Cag==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "markdown-it": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-10.0.0.tgz", + "integrity": "sha512-YWOP1j7UbDNz+TumYP1kpwnP0aEa711cJjrAQrzd0UXlbJfc5aAq0F/PZHjiioqDC1NKgvIMX+o+9Bk7yuM2dg==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "entities": "~2.0.0", + "linkify-it": "^2.0.0", + "mdurl": "^1.0.1", + "uc.micro": "^1.0.5" + }, + "dependencies": { + "entities": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.0.3.tgz", + "integrity": "sha512-MyoZ0jgnLvB2X3Lg5HqpFmn1kybDiIfEQmKzTb5apr51Rb+T3KdmMiqa70T+bhGnyv7bQ6WMj2QMHpGMmlrUYQ==", + "dev": true + } + } + }, + "markdown-it-anchor": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/markdown-it-anchor/-/markdown-it-anchor-5.3.0.tgz", + "integrity": "sha512-/V1MnLL/rgJ3jkMWo84UR+K+jF1cxNG1a+KwqeXqTIJ+jtA8aWSHuigx8lTzauiIjBDbwF3NcWQMotd0Dm39jA==", + "dev": true + }, + "marked": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/marked/-/marked-0.8.2.tgz", + "integrity": "sha512-EGwzEeCcLniFX51DhTpmTom+dSA/MG/OBUDjnWtHbEnjAH180VzUeAw+oE4+Zv+CoYBWyRlYOTR0N8SO9R1PVw==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.2.tgz", + "integrity": "sha512-y7FpHSbMUMoyPbYUSzO6PaZ6FyRnQOpHuKwbo1G+Knck95XVU4QAiKdGEnj5wwoS7PlOgthX/09u5iFJ+aYf5Q==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.0.5" + } + }, + "mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true + }, + "mime-db": { + "version": "1.45.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.45.0.tgz", + "integrity": "sha512-CkqLUxUk15hofLoLyljJSrukZi8mAtgd+yE5uO4tqRZsdsAJKv0O+rFMhVDRJgozy+yG6md5KwuXhD4ocIoP+w==", + "dev": true + }, + "mime-types": { + "version": "2.1.28", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.28.tgz", + "integrity": "sha512-0TO2yJ5YHYr7M2zzT7gDU1tbwHxEUWBCLt0lscSNpcdAfFyJOVEpRYNS7EXVcTLNj/25QO8gulHC5JtTzSE2UQ==", + "dev": true, + "requires": { + "mime-db": "1.45.0" + } + }, + "mimic-response": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", + "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + }, + "dependencies": { + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "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" + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "next-tick": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/next-tick/-/next-tick-1.0.0.tgz", + "integrity": "sha1-yobR/ogoFpsBICCOPchCS524NCw=", + "dev": true + }, + "node-fetch-npm": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/node-fetch-npm/-/node-fetch-npm-2.0.4.tgz", + "integrity": "sha512-iOuIQDWDyjhv9qSDrj9aq/klt6F9z1p2otB3AV7v3zBDcL/x+OfGsvGQZZCcMZbUf4Ujw1xGNQkjvGnVT22cKg==", + "dev": true, + "requires": { + "encoding": "^0.1.11", + "json-parse-better-errors": "^1.0.0", + "safe-buffer": "^5.1.1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "normalize-url": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-4.5.0.tgz", + "integrity": "sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ==", + "dev": true + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "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" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-pick-manifest": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/npm-pick-manifest/-/npm-pick-manifest-3.0.2.tgz", + "integrity": "sha512-wNprTNg+X5nf+tDi+hbjdHhM4bX+mKqv6XmPh7B5eG+QY9VARfQPfCEH013H5GqfNj6ee8Ij2fg8yk0mzps1Vw==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1", + "npm-package-arg": "^6.0.0", + "semver": "^5.4.1" + }, + "dependencies": { + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + } + } + }, + "npm-registry-fetch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/npm-registry-fetch/-/npm-registry-fetch-4.0.7.tgz", + "integrity": "sha512-cny9v0+Mq6Tjz+e0erFAB+RYJ/AVGzkjnISiobqP8OWj9c9FLoZZu8/SPSKJWE17F1tk4018wfjV+ZbIbqC7fQ==", + "dev": true, + "requires": { + "JSONStream": "^1.3.4", + "bluebird": "^3.5.1", + "figgy-pudding": "^3.4.1", + "lru-cache": "^5.1.1", + "make-fetch-happen": "^5.0.0", + "npm-package-arg": "^6.1.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "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" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/open/-/open-7.3.1.tgz", + "integrity": "sha512-f2wt9DCBKKjlFbjzGb8MOAW8LH8F0mrs1zc7KTjAJ9PZNQbfenzWbNP1VZJvw6ICMG9r14Ah6yfwPn7T7i646A==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "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" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "p-cancelable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-1.1.0.tgz", + "integrity": "sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw==", + "dev": true + }, + "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" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "package-json": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/package-json/-/package-json-6.5.0.tgz", + "integrity": "sha512-k3bdm2n25tkyxcjSKzB5x8kfVxlMdgsbPr0GkZcwHsLpba6cBjqCt1KlcChKEvxHIcTB1FVMuwoijZ26xex5MQ==", + "dev": true, + "requires": { + "got": "^9.6.0", + "registry-auth-token": "^4.0.0", + "registry-url": "^5.0.0", + "semver": "^6.2.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "pacote": { + "version": "9.5.12", + "resolved": "https://registry.npmjs.org/pacote/-/pacote-9.5.12.tgz", + "integrity": "sha512-BUIj/4kKbwWg4RtnBncXPJd15piFSVNpTzY0rysSr3VnMowTYgkGKcaHrbReepAkjTr8lH2CVWRi58Spg2CicQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dev": true, + "requires": { + "yallist": "^3.0.2" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dev": true, + "requires": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "parse-json": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.1.0.tgz", + "integrity": "sha512-+mi/lmVVNKFNVyLXV31ERiy2CY5E1/F6QtJFEzoChPRwwngMNXRDQ9GJ5WdE2Z2P4AujsOi0/+2qHID68KwfIQ==", + "dev": true, + "requires": { + "@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" + } + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "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 + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", + "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "picomatch": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", + "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", + "dev": true + }, + "pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "requires": { + "find-up": "^4.0.0" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + } + } + }, + "portscanner": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/portscanner/-/portscanner-2.2.0.tgz", + "integrity": "sha512-IFroCz/59Lqa2uBvzK3bKDbDDIEaAY8XJ1jFxcLWTqosrsc32//P4VuSB2vZXoHiHqOmx8B5L5hnKOxL/7FlPw==", + "dev": true, + "requires": { + "async": "^2.6.0", + "is-number-like": "^1.0.3" + }, + "dependencies": { + "async": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", + "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + } + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", + "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=", + "dev": true + }, + "pretty-data": { + "version": "0.40.0", + "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", + "integrity": "sha1-Vyqo6iNGdGerlLa1Jmpv2cj93XI=", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=", + "dev": true + }, + "promise-retry": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/promise-retry/-/promise-retry-1.1.1.tgz", + "integrity": "sha1-ZznpaOMFHaIM5kl/srUPaRHfPW0=", + "dev": true, + "requires": { + "err-code": "^1.0.0", + "retry": "^0.10.0" + } + }, + "protoduck": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/protoduck/-/protoduck-5.0.1.tgz", + "integrity": "sha512-WxoCeDCoCBY55BMvj4cAEjdVUFGRWed9ZxPlqTKYyw1nDDTQ4pqmnIMAGfJlg7Dx35uB/M+PHJPTmGOvaCaPTg==", + "dev": true, + "requires": { + "genfun": "^5.0.0" + } + }, + "proxy-addr": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.6.tgz", + "integrity": "sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw==", + "dev": true, + "requires": { + "forwarded": "~0.1.2", + "ipaddr.js": "1.9.1" + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + }, + "pupa": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/pupa/-/pupa-2.1.1.tgz", + "integrity": "sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==", + "dev": true, + "requires": { + "escape-goat": "^2.0.0" + } + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + }, + "random-int": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/random-int/-/random-int-2.0.1.tgz", + "integrity": "sha512-YALjWK2Rt9EMIv9BF/3mvlzFWQathsvb5UZmN1QmhfIOfcQYXc/UcLzg0ablqesSBpBVLt2Tlwv/eTuBh4LXUQ==", + "dev": true + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + }, + "dependencies": { + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + } + } + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "requires": { + "p-locate": "^4.1.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "requires": { + "p-limit": "^2.2.0" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true + }, + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true + } + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "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" + } + }, + "registry-auth-token": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", + "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "registry-url": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-5.1.0.tgz", + "integrity": "sha512-8acYXXTI0AkQv6RAOjE3vOaIXZkT9wo4LOFbBKYQEEnnMNBpKqdUrI6S4NT0KPIo/WVvJ5tE/X5LF/TQUf0ekw==", + "dev": true, + "requires": { + "rc": "^1.2.8" + } + }, + "replacestream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/replacestream/-/replacestream-4.0.3.tgz", + "integrity": "sha512-AC0FiLS352pBBiZhd4VXB1Ab/lh0lEgpP+GGvZqbQh8a5cmXVoTe5EX/YeTFArnp4SRGTHh1qCHu9lGs1qG8sA==", + "dev": true, + "requires": { + "escape-string-regexp": "^1.0.3", + "object-assign": "^4.0.1", + "readable-stream": "^2.0.2" + }, + "dependencies": { + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + } + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "requizzle": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/requizzle/-/requizzle-0.2.3.tgz", + "integrity": "sha512-YanoyJjykPxGHii0fZP0uUPEXpvqfBDxWV7s6GKAiiOsiqhX6vHNyW3Qzdmqp/iq/ExbhaGbVrjB4ruEVSM4GQ==", + "dev": true, + "requires": { + "lodash": "^4.17.14" + } + }, + "resolve": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", + "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", + "dev": true, + "requires": { + "is-core-module": "^2.1.0", + "path-parse": "^1.0.6" + } + }, + "resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + } + }, + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "responselike": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", + "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "dev": true, + "requires": { + "lowercase-keys": "^1.0.0" + } + }, + "retry": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.10.1.tgz", + "integrity": "sha1-52OI0heZLCUnUCQdPTlW/tmNj/Q=", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "router": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/router/-/router-1.3.5.tgz", + "integrity": "sha512-kozCJZUhuSJ5VcLhSb3F8fsmGXy+8HaDbKCAerR1G6tq3mnMZFMuSohbFvGv1c5oMFipijDjRZuuN/Sq5nMf3g==", + "dev": true, + "requires": { + "array-flatten": "3.0.0", + "debug": "2.6.9", + "methods": "~1.1.2", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "setprototypeof": "1.2.0", + "utils-merge": "1.0.1" + }, + "dependencies": { + "array-flatten": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-3.0.0.tgz", + "integrity": "sha512-zPMVc3ZYlGLNk4mpK1NzP2wg0ml9t7fUgDsayR5Y5rSzxQilzR9FGu/EH2jQOcKSAeAfWeylyW8juy3OkWRvNA==", + "dev": true + }, + "setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.1.10.tgz", + "integrity": "sha512-zb/1OuZ6flOlH6tQyMPUrE3x3Ulxjlo9WIVXR4yVYi4H9UXQaeIsPbLn2R3O3vQCnDKkAl2qHiuocKKX4Tz/Sw==", + "dev": true + }, + "run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", + "dev": true, + "requires": { + "aproba": "^1.1.1" + } + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha1-Yl2GWPhlr0Psliv8N2o3NZpJlMo=", + "dev": true + }, + "semver": { + "version": "7.3.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.4.tgz", + "integrity": "sha512-tCfb2WLjqFAtXn4KEdxIhalnRtoKFN7nAwj0B3ZXCbQloV2tq5eDbcTmT68JJD3nRJq24/XgxtQKFIpQdtvmVw==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "semver-diff": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", + "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", + "dev": true, + "requires": { + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "ms": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-cookie-parser": { + "version": "2.4.7", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.4.7.tgz", + "integrity": "sha512-VaSdYN1DlYuKOzBKqhYJnwaPeirZdNNUNmYdnp9/6Umr9s8amidctYitrX2Gk8wCqiBuiG5mpOYCiVhG5o4iMQ==", + "dev": true + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "smart-buffer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/smart-buffer/-/smart-buffer-4.1.0.tgz", + "integrity": "sha512-iVICrxOzCynf/SNaBQCw34eM9jROU/s5rzIhpOvzhzuYHfJR/DhZfDkXiZSgKXfgv26HT3Yni3AV/DGw0cGnnw==", + "dev": true + }, + "socks": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/socks/-/socks-2.3.3.tgz", + "integrity": "sha512-o5t52PCNtVdiOvzMry7wU4aOqYWL0PeCXRWBEiJow4/i/wr+wpsJQ9awEu1EonLIqsfGd5qSgDdxEOvCdmBEpA==", + "dev": true, + "requires": { + "ip": "1.1.5", + "smart-buffer": "^4.1.0" + } + }, + "socks-proxy-agent": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/socks-proxy-agent/-/socks-proxy-agent-4.0.2.tgz", + "integrity": "sha512-NT6syHhI9LmuEMSK6Kd2V7gNv5KFZoLE7V5udWmn0de+3Mkj3UMA/AJPLyeNUVmElCurSHtUdM3ETpR3z770Wg==", + "dev": true, + "requires": { + "agent-base": "~4.2.1", + "socks": "~2.3.2" + }, + "dependencies": { + "agent-base": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.2.1.tgz", + "integrity": "sha512-JVwXMr9nHYTUXsBFKUqhJwvlcYU/blreOEUkhNR2eXZIvwd+c+o5V4MgDPKWnMS/56awN3TRzIP+KoPn+roQtg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + } + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.7.tgz", + "integrity": "sha512-U+MTEOO0AiDzxwFvoa4JVnMV6mZlJKk2sBLt90s7G0Gd0Mlknc7kxEn3nuDPNZRta7O2uy8oLcZLVT+4sqNZHQ==", + "dev": true + }, + "spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "dependencies": { + "debug": { + "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" + } + }, + "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 + } + } + }, + "spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "debug": { + "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" + } + }, + "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 + }, + "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" + } + } + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "ssri": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", + "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "dev": true, + "requires": { + "figgy-pudding": "^3.5.1" + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "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" + } + }, + "taffydb": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/taffydb/-/taffydb-2.6.2.tgz", + "integrity": "sha1-fLy2S1oUG2ou/CxdLGe04VCyomg=", + "dev": true + }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "term-size": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/term-size/-/term-size-2.2.1.tgz", + "integrity": "sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==", + "dev": true + }, + "terser": { + "version": "5.5.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", + "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "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 + } + } + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "to-readable-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/to-readable-stream/-/to-readable-stream-1.0.0.tgz", + "integrity": "sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q==", + "dev": true + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "treeify": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/treeify/-/treeify-1.1.0.tgz", + "integrity": "sha512-1m4RA7xVAJrSGrrXGs0L3YTwyvBs2S8PbRHaLZAkFw7JR8oIFwYtysxlBZhYIa7xSyiYJKZ3iGrrk55cGA3i9A==", + "dev": true + }, + "type": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/type/-/type-1.2.0.tgz", + "integrity": "sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg==", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmjs.org/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "requires": { + "is-typedarray": "^1.0.0" + } + }, + "uc.micro": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-1.0.6.tgz", + "integrity": "sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA==", + "dev": true + }, + "underscore": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.10.2.tgz", + "integrity": "sha512-N4P+Q/BuyuEKFJ43B9gYuOj4TQUHXX+j2FqguVOpjkssLUUrnJofCcBccJSCoeturDoZU6GorDTHSvUDlSQbTg==", + "dev": true + }, + "unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dev": true, + "requires": { + "unique-slug": "^2.0.0" + } + }, + "unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4" + } + }, + "unique-string": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", + "dev": true, + "requires": { + "crypto-random-string": "^2.0.0" + } + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "update-notifier": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/update-notifier/-/update-notifier-5.0.1.tgz", + "integrity": "sha512-BuVpRdlwxeIOvmc32AGYvO1KVdPlsmqSh8KDDBxS6kDE5VR7R8OMP1d8MdhaVBvxl4H3551k9akXr0Y1iIB2Wg==", + "dev": true, + "requires": { + "boxen": "^4.2.0", + "chalk": "^4.1.0", + "configstore": "^5.0.1", + "has-yarn": "^2.1.0", + "import-lazy": "^2.1.0", + "is-ci": "^2.0.0", + "is-installed-globally": "^0.3.2", + "is-npm": "^5.0.0", + "is-yarn-global": "^0.3.0", + "latest-version": "^5.1.0", + "pupa": "^2.1.1", + "semver": "^7.3.2", + "semver-diff": "^3.1.1", + "xdg-basedir": "^4.0.0" + } + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + } + }, + "url-parse-lax": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", + "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", + "dev": true, + "requires": { + "prepend-http": "^2.0.0" + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha1-X6kS2B630MdK/BQN5zF/DKffQ34=", + "dev": true, + "requires": { + "builtins": "^1.0.3" + } + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "widest-line": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/widest-line/-/widest-line-3.1.0.tgz", + "integrity": "sha512-NsmoXalsWVDMGupxZ5R08ka9flZjjiLvHVAWYOKtiKM8ujtZWr9cRffak+uSE48+Ob8ObalXpwyeUiyDD6QFgg==", + "dev": true, + "requires": { + "string-width": "^4.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "requires": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "xdg-basedir": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/xdg-basedir/-/xdg-basedir-4.0.0.tgz", + "integrity": "sha512-PSNhEJDejZYV7h50BohL09Er9VaIefr2LMAf3OEmpCkjOi34eYyQYAXUTjEQtZJTKcF0E2UKTh+osDLsgNim9Q==", + "dev": true + }, + "xml2js": { + "version": "0.4.23", + "resolved": "https://registry.npmjs.org/xml2js/-/xml2js-0.4.23.tgz", + "integrity": "sha512-ySPiMjM0+pLDftHgXY4By0uswI3SPKLDw/i3UXbnO8M/p28zqexCUoPmQFrYD+/1BzhGJSs2i1ERWKJAtiLrug==", + "dev": true, + "requires": { + "sax": ">=0.6.0", + "xmlbuilder": "~11.0.0" + } + }, + "xmlbuilder": { + "version": "11.0.1", + "resolved": "https://registry.npmjs.org/xmlbuilder/-/xmlbuilder-11.0.1.tgz", + "integrity": "sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==", + "dev": true + }, + "xmlcreate": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/xmlcreate/-/xmlcreate-2.0.3.tgz", + "integrity": "sha512-HgS+X6zAztGa9zIK3Y3LXuJes33Lz9x+YyTxgrkIdabu2vqcGOWwdfCpf1hWLRrd553wd4QCDf6BBO6FfdsRiQ==", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.1.tgz", + "integrity": "sha512-wNcy4NvjMYL8gogWWYAO7ZFWFfHcbdbE57tZO8e4cbpj8tfUcwrwqSl3ad8HxpYWCdXcJUCeKKZS62Av1affwQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml-ast-parser": { + "version": "0.0.43", + "resolved": "https://registry.npmjs.org/yaml-ast-parser/-/yaml-ast-parser-0.0.43.tgz", + "integrity": "sha512-2PTINUwsRqSd+s8XxKaJWQlUuEMHJQyEuh2edBbW8KNJz0SJPwUSD2zRWqezFEdN7IzAgeuYHFUCF7o8zRdZ0A==", + "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": "^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" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "string-width": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", + "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "y18n": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + } + } + }, + "yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true + }, + "yazl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/yazl/-/yazl-2.5.1.tgz", + "integrity": "sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3" + } + }, + "yesno": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/yesno/-/yesno-0.3.1.tgz", + "integrity": "sha512-7RbCXegyu6DykWPWU0YEtW8gFJH8KBL2d5l2fqB0XpkH0Y9rk59YSSWpzEv7yNJBGAouPc67h3kkq0CZkpBdFw==", + "dev": true + } + } + }, + "chart.js": { + "version": "2.9.4", + "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", + "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", + "requires": { + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" + } + }, + "chartjs-color": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", + "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", + "requires": { + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" + } + }, + "chartjs-color-string": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", + "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", + "requires": { + "color-name": "^1.0.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==", + "requires": { + "color-name": "1.1.3" + }, + "dependencies": { + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" + } + } + }, + "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==" + }, + "cronstrue": { + "version": "1.108.0", + "resolved": "https://registry.npmjs.org/cronstrue/-/cronstrue-1.108.0.tgz", + "integrity": "sha512-rNu97e/WRBUuHoVsPuWloq7zvT+B8/8h5NLBQkhOYdsrQEPHfsXgvoitoNyLHVyrcRX5vLl6gA45gEmVCdDuXg==" + }, + "lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "moment": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + } + } +} diff --git a/menas-web/ui/package.json b/menas-web/ui/package.json new file mode 100644 index 000000000..5edd3acb1 --- /dev/null +++ b/menas-web/ui/package.json @@ -0,0 +1,24 @@ +{ + "name": "menas-web", + "version": "3.0.0-SNAPSHOT", + "description": "Menas Client", + "main": "index.html", + "author": "ABSA Big Data R&D", + "license": "Apache License, Version 2.0", + "devDependencies": { + "@ui5/cli": "^2.8.1" + }, + "config": { + "apiUrl": "${API_URL}", + "lineageReadApiUrl": "${SPLINE_URL}" + }, + "dependencies": { + "chart.js": "^2.7.3", + "cronstrue": "^1.106.0", + "lodash": "^4.17.20", + "moment": "^2.22.2" + }, + "scripts": { + "ui5-build": "ui5 build -a --exclude-task=createDebugFiles" + } +} diff --git a/menas/ui/service/CheckpointUtils.js b/menas-web/ui/service/CheckpointUtils.js similarity index 100% rename from menas/ui/service/CheckpointUtils.js rename to menas-web/ui/service/CheckpointUtils.js diff --git a/menas/ui/service/DialogFactory.js b/menas-web/ui/service/DialogFactory.js similarity index 100% rename from menas/ui/service/DialogFactory.js rename to menas-web/ui/service/DialogFactory.js diff --git a/menas/ui/service/EntityDialog.js b/menas-web/ui/service/EntityDialog.js similarity index 100% rename from menas/ui/service/EntityDialog.js rename to menas-web/ui/service/EntityDialog.js diff --git a/menas/ui/service/EntityService.js b/menas-web/ui/service/EntityService.js similarity index 100% rename from menas/ui/service/EntityService.js rename to menas-web/ui/service/EntityService.js diff --git a/menas/ui/service/EntityValidationService.js b/menas-web/ui/service/EntityValidationService.js similarity index 100% rename from menas/ui/service/EntityValidationService.js rename to menas-web/ui/service/EntityValidationService.js diff --git a/menas/ui/service/GenericService.js b/menas-web/ui/service/GenericService.js similarity index 87% rename from menas/ui/service/GenericService.js rename to menas-web/ui/service/GenericService.js index b911deac7..4319694b0 100644 --- a/menas/ui/service/GenericService.js +++ b/menas-web/ui/service/GenericService.js @@ -29,7 +29,18 @@ var GenericService = new function () { model().setProperty("/menasVersion", oInfo.menasVersion); }; - $.ajax("api/user/info", { + function getCookie(name) { + let v = document.cookie.match('(^|;) ?' + name + '=([^;]*)(;|$)'); + return v ? v[2] : null; + } + + let cookie = getCookie("JWT"); + let jwt = cookie ? cookie : localStorage.getItem("jwtToken"); + + $.ajax(window.apiUrl + "/user/info", { + headers: { + "JWT": jwt + }, method: "GET", success: fnSuccess, async: false @@ -59,7 +70,7 @@ var GenericService = new function () { }; this.getLandingPageInfo = function() { - return RestClient.get("api/landing/info").then((oData) => { + return RestClient.get("/landing/info").then((oData) => { model().setProperty("/landingPageInfo", oData); const graphData = jQuery.extend({}, oData.todaysRunsStatistics); delete graphData["total"]; @@ -81,7 +92,7 @@ var GenericService = new function () { }; this.getOozieInfo = function() { - Functions.ajax("api/oozie/isEnabled", "GET", {}, oData => { + Functions.ajax("/oozie/isEnabled", "GET", {}, oData => { model().setProperty("/appInfo/oozie/isEnabled", oData); }); }; @@ -124,7 +135,7 @@ var GenericService = new function () { this.isNameUnique = function(sName, oModel, sEntityType) { oModel.setProperty("/nameUsed", undefined); - Functions.ajax("api/" + sEntityType + "/isUniqueName/" + encodeURI(sName), "GET", {}, function(oData) { + Functions.ajax("/" + sEntityType + "/isUniqueName/" + encodeURI(sName), "GET", {}, function(oData) { oModel.setProperty("/nameUnique", oData) }, function() { sap.m.MessageBox.error("Failed to retrieve isUniqueName. Please try again later.") diff --git a/menas/ui/service/HdfsService.js b/menas-web/ui/service/HdfsService.js similarity index 94% rename from menas/ui/service/HdfsService.js rename to menas-web/ui/service/HdfsService.js index 0ea79f133..9ed4077c2 100644 --- a/menas/ui/service/HdfsService.js +++ b/menas-web/ui/service/HdfsService.js @@ -24,7 +24,7 @@ var HdfsService = new function () { * @returns jqXHR */ this.getHdfsList = function(sPath, successFn, errorFn, oControl) { - return Functions.ajax("api/hdfs/list", "POST", sPath, successFn, errorFn, oControl); + return Functions.ajax("/hdfs/list", "POST", sPath, successFn, errorFn, oControl); }; /** diff --git a/menas/ui/service/MessageProvider.js b/menas-web/ui/service/MessageProvider.js similarity index 100% rename from menas/ui/service/MessageProvider.js rename to menas-web/ui/service/MessageProvider.js diff --git a/menas/ui/service/MonitoringService.js b/menas-web/ui/service/MonitoringService.js similarity index 99% rename from menas/ui/service/MonitoringService.js rename to menas-web/ui/service/MonitoringService.js index 729755bbf..124890846 100644 --- a/menas/ui/service/MonitoringService.js +++ b/menas-web/ui/service/MonitoringService.js @@ -355,7 +355,7 @@ var MonitoringService = new function() { this.getData = function(sId, sStartDate, sEndDate) { MonitoringService.clearAggregators(); - return Functions.ajax("api/monitoring/data/datasets/" + return Functions.ajax("/monitoring/data/datasets/" + encodeURI(sId) + "/" + encodeURI(sStartDate) + "/" + encodeURI(sEndDate), diff --git a/menas/ui/service/OozieService.js b/menas-web/ui/service/OozieService.js similarity index 92% rename from menas/ui/service/OozieService.js rename to menas-web/ui/service/OozieService.js index a6abb2e18..6fdc12702 100644 --- a/menas/ui/service/OozieService.js +++ b/menas-web/ui/service/OozieService.js @@ -18,19 +18,19 @@ jQuery.sap.require("sap.m.MessageBox"); class OozieDAO { static getCoordinatorStatus(sCoordinatorId) { - return RestClient.get(`api/oozie/coordinatorStatus/${sCoordinatorId}`); + return RestClient.get(`/oozie/coordinatorStatus/${sCoordinatorId}`); } static runNow(oSchedule) { - return RestClient.post("api/oozie/runNow", oSchedule); + return RestClient.post("/oozie/runNow", oSchedule); } static suspend(sCoordinatorId) { - return RestClient.post(`api/oozie/suspend/${sCoordinatorId}`); + return RestClient.post(`/oozie/suspend/${sCoordinatorId}`); } static resume(sCoordinatorId) { - return RestClient.post(`api/oozie/resume/${sCoordinatorId}`); + return RestClient.post(`/oozie/resume/${sCoordinatorId}`); } } diff --git a/menas/ui/service/PropertiesService.js b/menas-web/ui/service/PropertiesService.js similarity index 95% rename from menas/ui/service/PropertiesService.js rename to menas-web/ui/service/PropertiesService.js index 2600ef9ec..96db1ddd1 100644 --- a/menas/ui/service/PropertiesService.js +++ b/menas-web/ui/service/PropertiesService.js @@ -15,7 +15,7 @@ class PropertiesDAO { static getProperties() { - return RestClient.get(`api/properties/datasets`); + return RestClient.get(`/properties/datasets`); } } diff --git a/menas/ui/service/ResponseUtils.js b/menas-web/ui/service/ResponseUtils.js similarity index 100% rename from menas/ui/service/ResponseUtils.js rename to menas-web/ui/service/ResponseUtils.js diff --git a/menas/ui/service/RestDAO.js b/menas-web/ui/service/RestDAO.js similarity index 62% rename from menas/ui/service/RestDAO.js rename to menas-web/ui/service/RestDAO.js index c19f44b7e..0d7142fe9 100644 --- a/menas/ui/service/RestDAO.js +++ b/menas-web/ui/service/RestDAO.js @@ -19,16 +19,25 @@ class RestClient { static get(url, shouldUseCache = false) { let request = { - url: url, + headers: { + "X-CSRF-TOKEN": localStorage.getItem("csrfToken"), + "JWT": localStorage.getItem("jwtToken") + }, + url: window.apiUrl + url, async: true }; const jqXHR = shouldUseCache ? RestClient.cache(request) : $.ajax(request); return jqXHR.then(this.identity(jqXHR), this.handleExpiredSession); } - static getSync(url, shouldUseCache = false) { + static getSync(url, shouldUseCache = false, isWeb = false) { + let requestUrl = isWeb ? url : (window.apiUrl + url); let request = { - url: url, + headers: { + "X-CSRF-TOKEN": localStorage.getItem("csrfToken"), + "JWT": localStorage.getItem("jwtToken") + }, + url: requestUrl, async: false }; const jqXHR = shouldUseCache ? RestClient.cache(request) : $.ajax(request); @@ -37,24 +46,26 @@ class RestClient { static post(url, data) { const jqXHR = $.post({ - url: url, + url: window.apiUrl + url, data: JSON.stringify(data), contentType: "application/json", headers: { - "X-CSRF-TOKEN": localStorage.getItem("csrfToken") - } + "X-CSRF-TOKEN": localStorage.getItem("csrfToken"), + "JWT": localStorage.getItem("jwtToken") + }, }); return jqXHR.then(this.identity(jqXHR), this.handleExpiredSession); } static put(url, data) { const jqXHR = $.ajax({ - url: url, + url: window.apiUrl + url, type: "PUT", data: JSON.stringify(data), contentType: "application/json", headers: { - "X-CSRF-TOKEN": localStorage.getItem("csrfToken") + "X-CSRF-TOKEN": localStorage.getItem("csrfToken"), + "JWT": localStorage.getItem("jwtToken") } }); return jqXHR.then(this.identity(jqXHR), this.handleExpiredSession); @@ -62,10 +73,11 @@ class RestClient { static delete(url) { const jqXHR = $.ajax({ - url: url, + url: window.apiUrl + url, type: "DELETE", headers: { - "X-CSRF-TOKEN": localStorage.getItem("csrfToken") + "X-CSRF-TOKEN": localStorage.getItem("csrfToken"), + "JWT": localStorage.getItem("jwtToken") } }); return jqXHR.then(this.identity(jqXHR), this.handleExpiredSession); @@ -98,47 +110,47 @@ class RestDAO { getList(searchQuery) { let query = searchQuery ? `/${encodeURI(searchQuery)}` : ""; - return RestClient.get(`api/${this.entityType}/list${query}`) + return RestClient.get(`/${this.entityType}/list${query}`) } getSearchSuggestions() { - return RestClient.get(`api/${this.entityType}/searchSuggestions`) + return RestClient.get(`/${this.entityType}/searchSuggestions`) } getAllVersionsByName(name) { - return RestClient.get(`api/${this.entityType}/allVersions/${encodeURI(name)}`) + return RestClient.get(`/${this.entityType}/allVersions/${encodeURI(name)}`) } getLatestVersionByName(name) { - return RestClient.get(`api/${this.entityType}/detail/${encodeURI(name)}/latestVersion`) + return RestClient.get(`/${this.entityType}/detail/${encodeURI(name)}/latestVersion`) } getLatestByName(name) { - return RestClient.get(`api/${this.entityType}/detail/${encodeURI(name)}/latest`) + return RestClient.get(`/${this.entityType}/detail/${encodeURI(name)}/latest`) } getByNameAndVersion(name, version) { - return RestClient.get(`api/${this.entityType}/detail/${encodeURI(name)}/${encodeURI(version)}`, true) + return RestClient.get(`/${this.entityType}/detail/${encodeURI(name)}/${encodeURI(version)}`, true) } getByNameAndVersionSync(name, version) { - return RestClient.getSync(`api/${this.entityType}/detail/${encodeURI(name)}/${encodeURI(version)}`, true) + return RestClient.getSync(`/${this.entityType}/detail/${encodeURI(name)}/${encodeURI(version)}`, true) } getAuditTrail(name) { - return RestClient.get(`api/${this.entityType}/detail/${encodeURI(name)}/audit`) + return RestClient.get(`/${this.entityType}/detail/${encodeURI(name)}/audit`) } create(entity) { - return RestClient.post(`api/${this.entityType}/create`, entity) + return RestClient.post(`/${this.entityType}/create`, entity) } update(entity) { - return RestClient.put(`api/${this.entityType}/edit`, entity) + return RestClient.put(`/${this.entityType}/edit`, entity) } disable(name, version) { - let url = `api/${this.entityType}/disable/${encodeURI(name)}`; + let url = `/${this.entityType}/disable/${encodeURI(name)}`; if (version !== undefined) { url += `/${encodeURI(version)}` } @@ -163,7 +175,7 @@ class DependentRestDAO extends RestDAO { } getUsedIn(name, version) { - return RestClient.get(`api/${this.entityType}/usedIn/${encodeURI(name)}/${encodeURI(version)}`) + return RestClient.get(`/${this.entityType}/usedIn/${encodeURI(name)}/${encodeURI(version)}`) } } @@ -175,11 +187,11 @@ class SchemaRestDAO extends DependentRestDAO { } getSchemaFile(name, version) { - return RestClient.get(`api/${this.entityType}/export/${encodeURI(name)}/${encodeURI(version)}`) + return RestClient.get(`/${this.entityType}/export/${encodeURI(name)}/${encodeURI(version)}`) } getSchemaStruct(name, version) { - return RestClient.get(`api/${this.entityType}/json/${encodeURI(name)}/${encodeURI(version)}?pretty=true`) + return RestClient.get(`/${this.entityType}/json/${encodeURI(name)}/${encodeURI(version)}?pretty=true`) } } @@ -191,7 +203,7 @@ class MappingTableRestDAO extends DependentRestDAO { } addDefaultValue(sName, iVersion, oDefault) { - return RestClient.post(`api/${this.entityType}/addDefault`, { + return RestClient.post(`/${this.entityType}/addDefault`, { id: { name: sName, version: iVersion @@ -204,7 +216,7 @@ class MappingTableRestDAO extends DependentRestDAO { } editDefaultValues(sName, iVersion, aDefaults) { - return RestClient.post(`api/${this.entityType}/updateDefaults`, { + return RestClient.post(`/${this.entityType}/updateDefaults`, { id: { name: sName, version: iVersion @@ -218,6 +230,6 @@ class MappingTableRestDAO extends DependentRestDAO { class ConfigRestClient { static getEnvironmentName() { - return RestClient.get(`api/configuration/environment`) + return RestClient.get(`/configuration/environment`) } } diff --git a/menas/ui/service/RuleService.js b/menas-web/ui/service/RuleService.js similarity index 100% rename from menas/ui/service/RuleService.js rename to menas-web/ui/service/RuleService.js diff --git a/menas/ui/service/RunRestDAO.js b/menas-web/ui/service/RunRestDAO.js similarity index 62% rename from menas/ui/service/RunRestDAO.js rename to menas-web/ui/service/RunRestDAO.js index e2728b2f1..ae48e6e37 100644 --- a/menas/ui/service/RunRestDAO.js +++ b/menas-web/ui/service/RunRestDAO.js @@ -16,35 +16,35 @@ class RunRestDAO { getSplineUrlTemplate() { - return RestClient.getSync(`api/runs/splineUrlTemplate`) + return RestClient.getSync(`/runs/splineUrlTemplate`) } getAllRunSummaries() { - return RestClient.get("api/runs/summaries") + return RestClient.get("/runs/summaries") } getRunsGroupedByDatasetName() { - return RestClient.get("api/runs/grouped") + return RestClient.get("/runs/grouped") } getRunsGroupedByDatasetVersion(datasetName) { - return RestClient.get(`api/runs/grouped/${encodeURI(datasetName)}`) + return RestClient.get(`/runs/grouped/${encodeURI(datasetName)}`) } getRunSummariesByDatasetNameAndVersion(datasetName, datasetVersion) { - return RestClient.get(`api/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}`) + return RestClient.get(`/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}`) } getRun(datasetName, datasetVersion, runId) { - return RestClient.get(`api/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}/${encodeURI(runId)}`) + return RestClient.get(`/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}/${encodeURI(runId)}`) } getLatestRun(datasetName, datasetVersion){ - return RestClient.get(`api/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}/latestrun`) + return RestClient.get(`/runs/${encodeURI(datasetName)}/${encodeURI(datasetVersion)}/latestrun`) } getLatestRunOfLatestVersion(datasetName){ - return RestClient.get(`api/runs/${encodeURI(datasetName)}/latestrun`) + return RestClient.get(`/runs/${encodeURI(datasetName)}/latestrun`) } } diff --git a/menas/ui/service/RunService.js b/menas-web/ui/service/RunService.js similarity index 100% rename from menas/ui/service/RunService.js rename to menas-web/ui/service/RunService.js diff --git a/menas/ui/service/SchemaFieldSelector.js b/menas-web/ui/service/SchemaFieldSelector.js similarity index 100% rename from menas/ui/service/SchemaFieldSelector.js rename to menas-web/ui/service/SchemaFieldSelector.js diff --git a/menas/ui/service/ValidationResult.js b/menas-web/ui/service/ValidationResult.js similarity index 100% rename from menas/ui/service/ValidationResult.js rename to menas-web/ui/service/ValidationResult.js diff --git a/menas-web/ui/ui5.yaml b/menas-web/ui/ui5.yaml new file mode 100644 index 000000000..5ff8a0045 --- /dev/null +++ b/menas-web/ui/ui5.yaml @@ -0,0 +1,107 @@ +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +specVersion: '2.2' +metadata: + name: menas-web +type: application +framework: + name: OpenUI5 + version: 1.67.1 + libraries: + - name: sap.ui.core + - name: sap.m + - name: sap.tnt + - name: sap.ui.core + - name: sap.ui.layout + - name: sap.ui.table + - name: sap.ui.unified + - name: themelib_sap_belize +resources: + configuration: + paths: + webapp: / +builder: + resources: + excludes: + - "node_modules/**" + - "dist/**" + bundles: + - bundleDefinition: + name: sap/ui/table/library-preload.js + defaultFileTypes: + - ".js" + - ".fragment.xml" + - ".view.xml" + - ".properties" + - ".json" + sections: + - mode: preload + filters: + - "sap/ui/table/" + - "!sap/ui/table/.library" + - "!sap/ui/table/messagebundle*" + resolve: false + resolveConditional: false + renderer: true + - bundleDefinition: + name: sap/m/library-preload.js + defaultFileTypes: + - ".js" + - ".fragment.xml" + - ".view.xml" + - ".properties" + - ".json" + sections: + - mode: preload + filters: + - "sap/m/" + - "!sap/m/.library" + - "!sap/m/messagebundle*" + resolve: false + resolveConditional: false + renderer: true + - bundleDefinition: + name: sap/ui/layout/library-preload.js + defaultFileTypes: + - ".js" + - ".fragment.xml" + - ".view.xml" + - ".properties" + - ".json" + sections: + - mode: preload + filters: + - "sap/ui/layout" + - "!sap/ui/layout/.library" + - "!sap/ui/layout/messagebundle*" + resolve: false + resolveConditional: false + renderer: true + - bundleDefinition: + name: sap/tnt/library-preload.js + defaultFileTypes: + - ".js" + - ".fragment.xml" + - ".view.xml" + - ".properties" + - ".json" + sections: + - mode: preload + filters: + - "sap/tnt/" + - "!sap/tnt/.library" + - "!sap/tnt/messagebundle*" + resolve: false + resolveConditional: false + renderer: true diff --git a/menas/Dockerfile b/menas/Dockerfile index 2242f20c4..4030cc61e 100644 --- a/menas/Dockerfile +++ b/menas/Dockerfile @@ -43,5 +43,6 @@ ADD src/main/resources/docker/server.xml /tmp/server.xml EXPOSE 8080 EXPOSE 8443 EXPOSE 8009 - +#Debugging +#EXPOSE 5005 CMD ["./start_menas.sh"] diff --git a/menas/pom.xml b/menas/pom.xml index 743ae7f99..c31de99ff 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -27,7 +27,6 @@ 1.8 1.0.4 - ${project.basedir}/ui ${project.parent.basedir}/scalastyle-config.xml 2.2.0 @@ -210,32 +209,6 @@ scala-java8-compat_${scala.compat.version} ${scala.java8.compat.version} - - - africa.absa - openui5 - ${openui5.version} - - - africa.absa - cronstrue-webjar - ${cronstrue.version} - - - org.webjars.bower - lodash - ${lodash.version} - - - org.webjars - momentjs - ${momentjs.version} - - - org.webjars - webjars-locator-core - ${webjars.locator.version} - org.apache.oozie oozie-client @@ -247,12 +220,6 @@ - - - org.webjars.bower - chart.js - ${bower.chart.js.version} - za.co.absa.cobrix @@ -298,7 +265,7 @@ dockerfile-maven-plugin ${dockerfile.maven.version} - ${dockerfile.repository} + ${dockerfile.menas.repository} ${dockerfile.tag} ${project.build.finalName}.war @@ -345,13 +312,6 @@ ${maven.war.version} false - - - ui - / - false - - META-INF/*.SF, META-INF/*.DSA, META-INF/*.RSA @@ -393,81 +353,4 @@ - - - generateComponentPreload - - - - com.github.eirslett - frontend-maven-plugin - 1.7.6 - - - install node and npm - - install-node-and-npm - - generate-resources - - - install grunt-openui5 - - npm - - - install grunt grunt-cli grunt-openui5 --save-dev - - - - generate preload - - grunt - - - openui5_preload - - - - - ui - v10.16.0 - - - - org.apache.maven.plugins - maven-antrun-plugin - ${maven.ant.plugin.version} - - - Clean up after generating component preload - generate-resources - - - - - - - - run - - - - - - org.apache.maven.plugins - maven-jar-plugin - ${maven.jar.plugin.version} - - - - true - - - - - - - - diff --git a/menas/src/main/resources/start_menas.sh b/menas/src/main/resources/start_menas.sh new file mode 100644 index 000000000..d0311f8ee --- /dev/null +++ b/menas/src/main/resources/start_menas.sh @@ -0,0 +1,26 @@ +#!/bin/bash + +# Copyright 2018 ABSA Group Limited +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +if [[ -n ${PRIVATE_KEY} && -n ${CERTIFICATE} && -n ${CA_CHAIN} ]]; then + echo "Certificate, chain and private key present, running secured version" + echo "${PRIVATE_KEY}" >> conf/private.pem + echo "${CERTIFICATE}" >> conf/certificate.pem + echo "${CA_CHAIN}" >> conf/cachain.pem + rm conf/server.xml + cp /tmp/server.xml conf/server.xml +fi +#Debugging +#export CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" +catalina.sh run diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala index 2f8f2295b..023fcbca1 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala @@ -16,12 +16,20 @@ package za.co.absa.enceladus.menas import org.springframework.context.annotation.Configuration -import org.springframework.web.servlet.config.annotation.ViewControllerRegistry -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer +import org.springframework.web.servlet.config.annotation.{CorsRegistry, ViewControllerRegistry, WebMvcConfigurer} +import za.co.absa.enceladus.menas.auth.AuthConstants.{CsrfTokenKey, JwtKey} @Configuration class MvcConfig extends WebMvcConfigurer { override def addViewControllers(registry: ViewControllerRegistry) { registry.addViewController("/login").setViewName("login") } + + override def addCorsMappings(registry: CorsRegistry): Unit = { + registry.addMapping("/**") + .exposedHeaders(JwtKey, CsrfTokenKey) + .allowedMethods("PUT", "GET", "DELETE", "OPTIONS", "PATCH", "POST") + .allowedHeaders("*") + .allowedOrigins("*") + } } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala index fb9dee699..40880ceba 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala @@ -38,7 +38,7 @@ import za.co.absa.enceladus.utils.general.ProjectMetadata class WebSecurityConfig @Autowired()(beanFactory: BeanFactory, jwtAuthFilter: JwtAuthenticationFilter, @Value("${menas.auth.mechanism:}") - authMechanism: String) extends ProjectMetadata { + authMechanism: String) { private val logger = LoggerFactory.getLogger(this.getClass) @Configuration @@ -51,6 +51,7 @@ class WebSecurityConfig @Autowired()(beanFactory: BeanFactory, .spnegoAuthenticationProcessingFilter(authenticationManager, authenticationSuccessHandler) http + .cors().and() .csrf() .disable() .sessionManagement() @@ -60,9 +61,8 @@ class WebSecurityConfig @Autowired()(beanFactory: BeanFactory, .authenticationEntryPoint(spnegoEntryPoint()) .and() .authorizeRequests() - .antMatchers("/index.html", "/resources/**", "/generic/**", - "/service/**", "/webjars/**", "/css/**", "/components/**", "/admin/health", - "/api/oozie/isEnabled", "/api/user/version", s"/${projectVersion}/**", "/api/configuration/**") + .antMatchers("/admin/health", "/api/oozie/isEnabled", + "/api/user/version", "/api/configuration/**") .permitAll() .anyRequest() .authenticated() diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala index b5cc4db69..72d2db80f 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala @@ -30,7 +30,8 @@ class AuthConstants @Autowired()() { } object AuthConstants { - val JwtCookieKey: String = "JWT" + + val JwtKey: String = "JWT" val CsrfTokenKey: String = "X-CSRF-TOKEN" val RolesKey: String = "Roles" } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala index c1e1bce87..caef3c7e6 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala @@ -47,7 +47,6 @@ class MenasAuthenticationSuccessHandler @Autowired()(jwtFactory: JwtFactory, val expiry = Hours.hours(jwtLifespanHours).toStandardSeconds val jwtExpirationTime = DateTime.now(DateTimeZone.forID(timezone)).plus(expiry).toDate - val cookieLifetime = expiry.getSeconds val groups = user.getAuthorities.toArray(Array[GrantedAuthority]()).map(auth => auth.getAuthority) @@ -66,10 +65,7 @@ class MenasAuthenticationSuccessHandler @Autowired()(jwtFactory: JwtFactory, .claim(RolesKey, filteredGroups) .compact() - val cookie = new Cookie(JwtCookieKey, jwt) - cookie.setPath(request.getContextPath) - cookie.setMaxAge(cookieLifetime) - response.addCookie(cookie) + response.addHeader(JwtKey, jwt) clearAuthenticationAttributes(request) } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala index 70bdb08bd..71e2c1c82 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala @@ -44,7 +44,7 @@ class JwtAuthenticationFilter @Autowired()(jwtFactory: JwtFactory) extends OnceP } private def getAuthentication(request: HttpServletRequest): Option[Authentication] = { - getJwtCookie(request).flatMap { jwt => + getJwt(request).flatMap { jwt => Try { jwtFactory .jwtParser() @@ -91,10 +91,11 @@ class JwtAuthenticationFilter @Autowired()(jwtFactory: JwtFactory) extends OnceP } - private def getJwtCookie(request: HttpServletRequest): Option[String] = { - Option(request.getCookies).getOrElse(Array()).collectFirst { - case cookie if cookie.getName == JwtCookieKey => cookie.getValue - } + private def getJwt(request: HttpServletRequest): Option[String] = { + val jwtHeader = request.getHeader(JwtKey) + if(jwtHeader != null && jwtHeader.nonEmpty){ + Some(jwtHeader) + } else None } } diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala b/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala index 4def76e4b..1a223716e 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala +++ b/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala @@ -38,7 +38,7 @@ class AuthenticationIntegrationSuite extends BaseRestApiTest { @Autowired val jwtFactory: JwtFactory = null - private val jwtRegex = "JWT=([^;]+);?.*".r + private val jwtRegex = "([^;]+);?.*".r "Username and password authentication" should { "handle multiple users login in concurrently" in { @@ -50,7 +50,7 @@ class AuthenticationIntegrationSuite extends BaseRestApiTest { val results = Await.result(futures, awaitDuration) val usernames = results.map { headers => - headers.get("cookie").get(0) match { + headers.get("jwt").get(0) match { case jwtRegex(jwt) => jwtFactory.jwtParser() .parseClaimsJws(jwt) diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala b/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala index 55b6cb31a..909d9712b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala +++ b/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala @@ -75,10 +75,10 @@ abstract class BaseRestApiTest extends BaseRepositoryTest { val response = restTemplate.postForEntity(loginUrl, HttpEntity.EMPTY, classOf[String]) - val cookie = response.getHeaders.get("set-cookie").get(0) + val jwtToken = response.getHeaders.get("jwt").get(0) val csrfToken = response.getHeaders.get("X-CSRF-TOKEN").get(0) val headers = new HttpHeaders() - headers.add("cookie", cookie) + headers.add("jwt", jwtToken) headers.add("X-CSRF-TOKEN", csrfToken) headers } diff --git a/menas/ui/Gruntfile.js b/menas/ui/Gruntfile.js deleted file mode 100644 index 0bb6e41e9..000000000 --- a/menas/ui/Gruntfile.js +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2018 ABSA Group Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -module.exports = function(grunt) { - // Project configuration. - grunt.initConfig({ - pkg: grunt.file.readJSON('package.json'), - openui5_preload: { - component: { - options: { - resources: { - cwd: '', - prefix: '', - src: ['components/**/*.js', 'components/**/*.fragment.xml', 'components/**/*.view.xml'] - }, - dest: '', - compress: true - }, - components: true - } - } - }); - grunt.loadNpmTasks('grunt-openui5'); -} diff --git a/menas/ui/index.html b/menas/ui/index.html deleted file mode 100644 index 436faff93..000000000 --- a/menas/ui/index.html +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
- - diff --git a/menas/ui/npm-shrinkwrap.json b/menas/ui/npm-shrinkwrap.json deleted file mode 100644 index c3d568105..000000000 --- a/menas/ui/npm-shrinkwrap.json +++ /dev/null @@ -1,3166 +0,0 @@ -{ - "name": "enceladus-menas", - "version": "1.0.0", - "lockfileVersion": 1, - "requires": true, - "dependencies": { - "abbrev": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", - "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", - "dev": true - }, - "ajv": { - "version": "6.10.2", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.2.tgz", - "integrity": "sha512-TXtUUEYHuaTEbLZWIKUr5pmBuhDLy+8KYtPYdcV8qC+pOZL+NKqYwvWSRrVXHn+ZmRRAu8vJTAznH7Oag6RVRw==", - "dev": true, - "optional": 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" - } - }, - "amdefine": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", - "dev": true, - "optional": true - }, - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "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" - } - }, - "argparse": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - }, - "dependencies": { - "sprintf-js": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", - "dev": true - } - } - }, - "arr-diff": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", - "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", - "dev": true - }, - "arr-flatten": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", - "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", - "dev": true - }, - "arr-union": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", - "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", - "dev": true - }, - "array-each": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/array-each/-/array-each-1.0.1.tgz", - "integrity": "sha1-p5SvDAWrF1KEbudTofIRoFugxE8=", - "dev": true - }, - "array-find-index": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", - "dev": true - }, - "array-slice": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/array-slice/-/array-slice-1.1.0.tgz", - "integrity": "sha512-B1qMD3RBP7O8o0H2KbrXDyB0IccejMF15+87Lvlor12ONPRHP6gTjXMNkt/d3ZuOGbAe66hFmaCfECI24Ufp6w==", - "dev": true - }, - "array-unique": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", - "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", - "dev": true - }, - "asn1": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", - "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "~2.1.0" - } - }, - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true, - "optional": true - }, - "assign-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", - "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", - "dev": true - }, - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true, - "optional": true - }, - "atob": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", - "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", - "dev": true - }, - "aws-sign2": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", - "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", - "dev": true, - "optional": true - }, - "aws4": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.8.0.tgz", - "integrity": "sha512-ReZxvNHIOv88FlT7rxcXIIC0fPt4KZqZbOlivyWtXLt8ESx84zd3kMC6iK5jVeS2qt+g7ftS7ye4fi06X5rtRQ==", - "dev": true, - "optional": true - }, - "balanced-match": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", - "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", - "dev": true - }, - "base": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", - "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "bcrypt-pbkdf": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", - "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "^0.14.3" - } - }, - "brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "cache-base": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", - "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", - "dev": true, - "requires": { - "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" - } - }, - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true - }, - "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, - "requires": { - "camelcase": "^2.0.0", - "map-obj": "^1.0.0" - } - }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true, - "optional": true - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "class-utils": { - "version": "0.3.6", - "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", - "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "define-property": "^0.2.5", - "isobject": "^3.0.0", - "static-extend": "^0.1.1" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "clean-css": { - "version": "2.0.8", - "resolved": "https://registry.npmjs.org/clean-css/-/clean-css-2.0.8.tgz", - "integrity": "sha1-6TfN/cxXgaAIF67EB56Fs+wVeiA=", - "dev": true, - "optional": true, - "requires": { - "commander": "2.0.x" - } - }, - "clone": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", - "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", - "dev": true - }, - "coffeescript": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/coffeescript/-/coffeescript-1.10.0.tgz", - "integrity": "sha1-56qDAZF+9iGzXYo580jc3R234z4=", - "dev": true - }, - "collection-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", - "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", - "dev": true, - "requires": { - "map-visit": "^1.0.0", - "object-visit": "^1.0.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 - }, - "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", - "dev": true - }, - "combined-stream": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", - "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, - "optional": true, - "requires": { - "delayed-stream": "~1.0.0" - } - }, - "commander": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.0.0.tgz", - "integrity": "sha1-0bhvkB+LZL2UG96tr5JFMDk76Sg=", - "dev": true, - "optional": true - }, - "component-emitter": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", - "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "connect-inject": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/connect-inject/-/connect-inject-0.4.0.tgz", - "integrity": "sha1-wunrHjd08sVqF8hY+WNnd62x4L4=", - "dev": true - }, - "connect-openui5": { - "version": "0.7.7", - "resolved": "https://registry.npmjs.org/connect-openui5/-/connect-openui5-0.7.7.tgz", - "integrity": "sha512-7tV7ePr4ervxd81LSeIx012U1zWsqnpBRL7tpMsx2c8KKZgm6JGl8OrxGIuANOXX0Rbp5sdfYrpEQW0ztyKQzw==", - "dev": true, - "requires": { - "async": "^2.6.0", - "extend": "^3.0.0", - "glob": "^7.1.4", - "http-proxy": "^1.12.0", - "less-openui5": "^0.6.0" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "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" - } - } - } - }, - "copy-descriptor": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", - "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", - "dev": true - }, - "core-util-is": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", - "dev": true, - "optional": true - }, - "cors": { - "version": "2.8.5", - "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", - "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", - "dev": true, - "requires": { - "object-assign": "^4", - "vary": "^1" - } - }, - "css": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/css/-/css-2.2.4.tgz", - "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "source-map": "^0.6.1", - "source-map-resolve": "^0.5.2", - "urix": "^0.1.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "currently-unhandled": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "dateformat": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-1.0.12.tgz", - "integrity": "sha1-nxJLZ1lMk3/3BpMuSmQsyo27/uk=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1", - "meow": "^3.3.0" - } - }, - "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", - "dev": true, - "requires": { - "ms": "2.0.0" - } - }, - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", - "dev": true - }, - "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=", - "dev": true - }, - "define-property": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", - "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", - "dev": true, - "requires": { - "is-descriptor": "^1.0.2", - "isobject": "^3.0.1" - }, - "dependencies": { - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true, - "optional": true - }, - "depd": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", - "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", - "dev": true - }, - "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", - "dev": true - }, - "detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc=", - "dev": true - }, - "duplexer": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.1.tgz", - "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", - "dev": true - }, - "ecc-jsbn": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", - "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "~0.1.0", - "safer-buffer": "^2.1.0" - } - }, - "ee-first": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", - "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", - "dev": true - }, - "encodeurl": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", - "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", - "dev": true - }, - "error-ex": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", - "dev": true, - "requires": { - "is-arrayish": "^0.2.1" - } - }, - "escape-html": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", - "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", - "dev": true - }, - "esprima": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", - "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", - "dev": true - }, - "etag": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", - "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", - "dev": true - }, - "eventemitter2": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eventemitter2/-/eventemitter2-0.4.14.tgz", - "integrity": "sha1-j2G3XN4BKy6esoTUVFWDtWQ7Yas=", - "dev": true - }, - "eventemitter3": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-3.1.2.tgz", - "integrity": "sha512-tvtQIeLVHjDkJYnzf2dgVMxfuSGJeM/7UCG17TT4EumTfNtF+0nebF/4zWOIkCreAbtNqhGEboB6BWrwqNaw4Q==", - "dev": true - }, - "exit": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/exit/-/exit-0.1.2.tgz", - "integrity": "sha1-BjJjj42HfMghB9MKD/8aF8uhzQw=", - "dev": true - }, - "expand-brackets": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", - "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "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" - } - } - } - }, - "expand-tilde": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/expand-tilde/-/expand-tilde-2.0.2.tgz", - "integrity": "sha1-l+gBqgUt8CRU3kawK/YhZCzchQI=", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "extend": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", - "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", - "dev": true - }, - "extend-shallow": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", - "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", - "dev": true, - "requires": { - "assign-symbols": "^1.0.0", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "extglob": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", - "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "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" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true, - "optional": true - }, - "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, - "optional": true - }, - "fast-json-stable-stringify": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.0.0.tgz", - "integrity": "sha1-1RQsDK7msRifh9OnYREGT4bIu/I=", - "dev": true, - "optional": true - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "^1.0.5", - "object-assign": "^4.1.0" - } - }, - "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" - }, - "dependencies": { - "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" - } - } - } - }, - "find-up": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", - "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", - "dev": true, - "requires": { - "path-exists": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "findup-sync": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-0.3.0.tgz", - "integrity": "sha1-N5MKpdgWt3fANEXhlmzGeQpMCxY=", - "dev": true, - "requires": { - "glob": "~5.0.0" - }, - "dependencies": { - "glob": { - "version": "5.0.15", - "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", - "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", - "dev": true, - "requires": { - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "2 || 3", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - } - } - }, - "fined": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/fined/-/fined-1.2.0.tgz", - "integrity": "sha512-ZYDqPLGxDkDhDZBjZBb+oD1+j0rA4E0pXY50eplAAOPg2N/gUBSSk5IM1/QhPfyVo19lJ+CvXpqfvk+b2p/8Ng==", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "is-plain-object": "^2.0.3", - "object.defaults": "^1.1.0", - "object.pick": "^1.2.0", - "parse-filepath": "^1.0.1" - } - }, - "flagged-respawn": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/flagged-respawn/-/flagged-respawn-1.0.1.tgz", - "integrity": "sha512-lNaHNVymajmk0OJMBn8fVUAU1BtDeKIqKoVhk4xAALB57aALg6b4W0MfJ/cUE0g9YBXy5XhSlPIpYIJ7HaY/3Q==", - "dev": true - }, - "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", - "dev": true, - "requires": { - "debug": "^3.2.6" - }, - "dependencies": { - "debug": { - "version": "3.2.6", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", - "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", - "dev": true, - "requires": { - "ms": "^2.1.1" - } - }, - "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 - } - } - }, - "for-in": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", - "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", - "dev": true - }, - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "^1.0.1" - } - }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true, - "optional": true - }, - "form-data": { - "version": "2.3.3", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", - "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", - "dev": true, - "optional": true, - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", - "mime-types": "^2.1.12" - } - }, - "fragment-cache": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", - "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", - "dev": true, - "requires": { - "map-cache": "^0.2.2" - } - }, - "fresh": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", - "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getobject": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/getobject/-/getobject-0.1.0.tgz", - "integrity": "sha1-BHpEl4n6Fg0Bj1SG7ZEyC27HiFw=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0" - } - }, - "glob": { - "version": "7.0.6", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.0.6.tgz", - "integrity": "sha1-IRuvr0nlJbjNkyYNFKsTYVKz9Xo=", - "dev": true, - "requires": { - "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" - } - }, - "global-modules": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", - "integrity": "sha512-sKzpEkf11GpOFuw0Zzjzmt4B4UZwjOcG757PPvrfhxcLFbq0wpsgpOqxpxtxFiCG4DtG93M6XRVbF2oGdev7bg==", - "dev": true, - "requires": { - "global-prefix": "^1.0.1", - "is-windows": "^1.0.1", - "resolve-dir": "^1.0.0" - } - }, - "global-prefix": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-1.0.2.tgz", - "integrity": "sha1-2/dDxsFJklk8ZVVoy2btMsASLr4=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.2", - "homedir-polyfill": "^1.0.1", - "ini": "^1.3.4", - "is-windows": "^1.0.1", - "which": "^1.2.14" - } - }, - "graceful-fs": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.1.tgz", - "integrity": "sha512-b9usnbDGnD928gJB3LrCmxoibr3VE4U2SMo5PBuBnokWyDADTqDPXg4YpwKF1trpH+UbGp7QLicO3+aWEy0+mw==", - "dev": true - }, - "grunt": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/grunt/-/grunt-1.0.4.tgz", - "integrity": "sha512-PYsMOrOC+MsdGEkFVwMaMyc6Ob7pKmq+deg1Sjr+vvMWp35sztfwKE7qoN51V+UEtHsyNuMcGdgMLFkBHvMxHQ==", - "dev": true, - "requires": { - "coffeescript": "~1.10.0", - "dateformat": "~1.0.12", - "eventemitter2": "~0.4.13", - "exit": "~0.1.1", - "findup-sync": "~0.3.0", - "glob": "~7.0.0", - "grunt-cli": "~1.2.0", - "grunt-known-options": "~1.1.0", - "grunt-legacy-log": "~2.0.0", - "grunt-legacy-util": "~1.1.1", - "iconv-lite": "~0.4.13", - "js-yaml": "~3.13.0", - "minimatch": "~3.0.2", - "mkdirp": "~0.5.1", - "nopt": "~3.0.6", - "path-is-absolute": "~1.0.0", - "rimraf": "~2.6.2" - }, - "dependencies": { - "grunt-cli": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.2.0.tgz", - "integrity": "sha1-VisRnrsGndtGSs4oRVAb6Xs1tqg=", - "dev": true, - "requires": { - "findup-sync": "~0.3.0", - "grunt-known-options": "~1.1.0", - "nopt": "~3.0.6", - "resolve": "~1.1.0" - } - }, - "resolve": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", - "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", - "dev": true - } - } - }, - "grunt-cli": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/grunt-cli/-/grunt-cli-1.3.2.tgz", - "integrity": "sha512-8OHDiZZkcptxVXtMfDxJvmN7MVJNE8L/yIcPb4HB7TlyFD1kDvjHrb62uhySsU14wJx9ORMnTuhRMQ40lH/orQ==", - "dev": true, - "requires": { - "grunt-known-options": "~1.1.0", - "interpret": "~1.1.0", - "liftoff": "~2.5.0", - "nopt": "~4.0.1", - "v8flags": "~3.1.1" - }, - "dependencies": { - "nopt": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.1.tgz", - "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", - "dev": true, - "requires": { - "abbrev": "1", - "osenv": "^0.1.4" - } - } - } - }, - "grunt-known-options": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-known-options/-/grunt-known-options-1.1.1.tgz", - "integrity": "sha512-cHwsLqoighpu7TuYj5RonnEuxGVFnztcUqTqp5rXFGYL4OuPFofwC4Ycg7n9fYwvK6F5WbYgeVOwph9Crs2fsQ==", - "dev": true - }, - "grunt-legacy-log": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/grunt-legacy-log/-/grunt-legacy-log-2.0.0.tgz", - "integrity": "sha512-1m3+5QvDYfR1ltr8hjiaiNjddxGdQWcH0rw1iKKiQnF0+xtgTazirSTGu68RchPyh1OBng1bBUjLmX8q9NpoCw==", - "dev": true, - "requires": { - "colors": "~1.1.2", - "grunt-legacy-log-utils": "~2.0.0", - "hooker": "~0.2.3", - "lodash": "~4.17.5" - } - }, - "grunt-legacy-log-utils": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-log-utils/-/grunt-legacy-log-utils-2.0.1.tgz", - "integrity": "sha512-o7uHyO/J+i2tXG8r2bZNlVk20vlIFJ9IEYyHMCQGfWYru8Jv3wTqKZzvV30YW9rWEjq0eP3cflQ1qWojIe9VFA==", - "dev": true, - "requires": { - "chalk": "~2.4.1", - "lodash": "~4.17.10" - } - }, - "grunt-legacy-util": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/grunt-legacy-util/-/grunt-legacy-util-1.1.1.tgz", - "integrity": "sha512-9zyA29w/fBe6BIfjGENndwoe1Uy31BIXxTH3s8mga0Z5Bz2Sp4UCjkeyv2tI449ymkx3x26B+46FV4fXEddl5A==", - "dev": true, - "requires": { - "async": "~1.5.2", - "exit": "~0.1.1", - "getobject": "~0.1.0", - "hooker": "~0.2.3", - "lodash": "~4.17.10", - "underscore.string": "~3.3.4", - "which": "~1.3.0" - } - }, - "grunt-openui5": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/grunt-openui5/-/grunt-openui5-0.15.0.tgz", - "integrity": "sha512-MlPLNY9HgAYmGs0BovzbD9r29GZe46PUzaBtbJo49T/MiXIqrMy4IHqrI9lu/sl5IqHuYiJCtRQjlanOZhWtFQ==", - "dev": true, - "requires": { - "async": "^2.6.0", - "connect-inject": "^0.4.0", - "connect-openui5": "^0.7.5", - "cors": "^2.8.4", - "less-openui5": "^0.6.0", - "maxmin": "^2.1.0", - "multiline": "^1.0.2", - "pretty-data": "^0.40.0", - "serve-static": "^1.13.2", - "slash": "^1.0.0", - "uglify-es": "^3.3.9", - "urljoin": "^0.1.5" - }, - "dependencies": { - "async": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.3.tgz", - "integrity": "sha512-zflvls11DCy+dQWzTW2dzuilv8Z5X/pjfmZOWba6TNIVDm+2UDaJmXSOXlasHKfNBs8oo3M0aT50fDEWfKZjXg==", - "dev": true, - "requires": { - "lodash": "^4.17.14" - } - } - } - }, - "gzip-size": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-3.0.0.tgz", - "integrity": "sha1-VGGI6b3DN/Zzdy+BZgRks4nc5SA=", - "dev": true, - "requires": { - "duplexer": "^0.1.1" - } - }, - "har-schema": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", - "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", - "dev": true, - "optional": true - }, - "har-validator": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.3.tgz", - "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", - "dev": true, - "optional": true, - "requires": { - "ajv": "^6.5.5", - "har-schema": "^2.0.0" - } - }, - "has-ansi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", - "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", - "dev": true - }, - "has-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", - "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", - "dev": true, - "requires": { - "get-value": "^2.0.6", - "has-values": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "has-values": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", - "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "kind-of": "^4.0.0" - }, - "dependencies": { - "kind-of": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", - "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "homedir-polyfill": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz", - "integrity": "sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==", - "dev": true, - "requires": { - "parse-passwd": "^1.0.0" - } - }, - "hooker": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/hooker/-/hooker-0.2.3.tgz", - "integrity": "sha1-uDT3I8xKJCqmWWNFnfbZhMXT2Vk=", - "dev": true - }, - "hosted-git-info": { - "version": "2.8.2", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.2.tgz", - "integrity": "sha512-CyjlXII6LMsPMyUzxpTt8fzh5QwzGqPmQXgY/Jyf4Zfp27t/FvfhwoE/8laaMUcMy816CkWF20I7NeQhwwY88w==", - "dev": true, - "requires": { - "lru-cache": "^5.1.1" - } - }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", - "dev": true, - "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" - } - }, - "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", - "dev": true, - "requires": { - "eventemitter3": "^3.0.0", - "follow-redirects": "^1.0.0", - "requires-port": "^1.0.0" - } - }, - "http-signature": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", - "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "jsprim": "^1.2.2", - "sshpk": "^1.7.0" - } - }, - "iconv-lite": { - "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, - "requires": { - "safer-buffer": ">= 2.1.2 < 3" - } - }, - "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "^2.0.0" - } - }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", - "dev": true - }, - "interpret": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/interpret/-/interpret-1.1.0.tgz", - "integrity": "sha1-ftGxQQxqDg94z5XTuEQMY/eLhhQ=", - "dev": true - }, - "is-absolute": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", - "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", - "dev": true, - "requires": { - "is-relative": "^1.0.0", - "is-windows": "^1.0.1" - } - }, - "is-accessor-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", - "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-arrayish": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true - }, - "is-buffer": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", - "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", - "dev": true - }, - "is-data-descriptor": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", - "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-descriptor": { - "version": "0.1.6", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", - "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^0.1.6", - "is-data-descriptor": "^0.1.4", - "kind-of": "^5.0.0" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } - } - }, - "is-extendable": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", - "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", - "dev": true - }, - "is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true - }, - "is-finite": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.0.2.tgz", - "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "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-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" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "is-plain-object": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", - "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "is-relative": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", - "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", - "dev": true, - "requires": { - "is-unc-path": "^1.0.0" - } - }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true, - "optional": true - }, - "is-unc-path": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", - "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", - "dev": true, - "requires": { - "unc-path-regex": "^0.1.2" - } - }, - "is-utf8": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", - "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", - "dev": true - }, - "is-windows": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", - "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", - "dev": true - }, - "isarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", - "dev": true - }, - "isexe": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", - "dev": true - }, - "isobject": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", - "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", - "dev": true - }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true, - "optional": true - }, - "js-yaml": { - "version": "3.13.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.13.1.tgz", - "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", - "dev": true, - "optional": true - }, - "json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true, - "optional": true - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true, - "optional": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - } - }, - "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true - }, - "less": { - "version": "1.6.3", - "resolved": "https://registry.npmjs.org/less/-/less-1.6.3.tgz", - "integrity": "sha1-cc6J7DC3dLNWfyVMZ5WPLywZO94=", - "dev": true, - "requires": { - "clean-css": "2.0.x", - "mime": "1.2.x", - "mkdirp": "~0.3.5", - "request": ">=2.12.0", - "source-map": "0.1.x" - }, - "dependencies": { - "mkdirp": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.3.5.tgz", - "integrity": "sha1-3j5fiWHIjHh+4TaN+EmsRBPsqNc=", - "dev": true, - "optional": true - }, - "source-map": { - "version": "0.1.43", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", - "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", - "dev": true, - "optional": true, - "requires": { - "amdefine": ">=0.0.4" - } - } - } - }, - "less-openui5": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/less-openui5/-/less-openui5-0.6.0.tgz", - "integrity": "sha512-Ncv9fhCkpssBut4Cefqfbf4IRVk8dz44LQJ80zHB6WG9BBsuqoLvWUxbV1VhxRJVGsDNbDcGb2i5s0KvoXJqdg==", - "dev": true, - "requires": { - "clone": "^2.1.0", - "css": "^2.2.1", - "less": "1.6.3", - "object-assign": "^4.0.1" - } - }, - "liftoff": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/liftoff/-/liftoff-2.5.0.tgz", - "integrity": "sha1-IAkpG7Mc6oYbvxCnwVooyvdcMew=", - "dev": true, - "requires": { - "extend": "^3.0.0", - "findup-sync": "^2.0.0", - "fined": "^1.0.1", - "flagged-respawn": "^1.0.0", - "is-plain-object": "^2.0.4", - "object.map": "^1.0.0", - "rechoir": "^0.6.2", - "resolve": "^1.1.7" - }, - "dependencies": { - "findup-sync": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/findup-sync/-/findup-sync-2.0.0.tgz", - "integrity": "sha1-kyaxSIwi0aYIhlCoaQGy2akKLLw=", - "dev": true, - "requires": { - "detect-file": "^1.0.0", - "is-glob": "^3.1.0", - "micromatch": "^3.0.4", - "resolve-dir": "^1.0.1" - } - } - } - }, - "load-json-file": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", - "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "parse-json": "^2.2.0", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0", - "strip-bom": "^2.0.0" - } - }, - "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", - "dev": true - }, - "loud-rejection": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", - "dev": true, - "requires": { - "currently-unhandled": "^0.4.1", - "signal-exit": "^3.0.0" - } - }, - "lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "requires": { - "yallist": "^3.0.2" - } - }, - "make-iterator": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", - "integrity": "sha512-pxiuXh0iVEq7VM7KMIhs5gxsfxCux2URptUQaXo4iZZJxBAzTPOLE2BumO5dbfVYq/hBJFBR/a1mFDmOx5AGmw==", - "dev": true, - "requires": { - "kind-of": "^6.0.2" - } - }, - "map-cache": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", - "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", - "dev": true - }, - "map-visit": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", - "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", - "dev": true, - "requires": { - "object-visit": "^1.0.0" - } - }, - "maxmin": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/maxmin/-/maxmin-2.1.0.tgz", - "integrity": "sha1-TTsiCQPZXu5+t6x/qGTnLcCaMWY=", - "dev": true, - "requires": { - "chalk": "^1.0.0", - "figures": "^1.0.1", - "gzip-size": "^3.0.0", - "pretty-bytes": "^3.0.0" - }, - "dependencies": { - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "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" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - } - } - }, - "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "^2.0.0", - "decamelize": "^1.1.2", - "loud-rejection": "^1.0.0", - "map-obj": "^1.0.1", - "minimist": "^1.1.3", - "normalize-package-data": "^2.3.4", - "object-assign": "^4.0.1", - "read-pkg-up": "^1.0.1", - "redent": "^1.0.0", - "trim-newlines": "^1.0.0" - } - }, - "micromatch": { - "version": "3.1.10", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", - "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", - "dev": true, - "requires": { - "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" - } - }, - "mime": { - "version": "1.2.11", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.2.11.tgz", - "integrity": "sha1-WCA+7Ybjpe8XrtK32evUfwpg3RA=", - "dev": true, - "optional": true - }, - "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true, - "optional": true - }, - "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, - "optional": true, - "requires": { - "mime-db": "1.40.0" - } - }, - "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - }, - "mixin-deep": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", - "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", - "dev": true, - "requires": { - "for-in": "^1.0.2", - "is-extendable": "^1.0.1" - }, - "dependencies": { - "is-extendable": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", - "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", - "dev": true, - "requires": { - "is-plain-object": "^2.0.4" - } - } - } - }, - "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", - "dev": true, - "requires": { - "minimist": "0.0.8" - }, - "dependencies": { - "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true - } - } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, - "multiline": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/multiline/-/multiline-1.0.2.tgz", - "integrity": "sha1-abHyX/B00oKJBPJE3dBrfZbvbJM=", - "dev": true, - "requires": { - "strip-indent": "^1.0.0" - } - }, - "nanomatch": { - "version": "1.2.13", - "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", - "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", - "dev": true, - "requires": { - "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" - } - }, - "nopt": { - "version": "3.0.6", - "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", - "dev": true, - "requires": { - "abbrev": "1" - } - }, - "normalize-package-data": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", - "dev": true, - "requires": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" - } - }, - "number-is-nan": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", - "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", - "dev": true - }, - "oauth-sign": { - "version": "0.9.0", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", - "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", - "dev": true, - "optional": true - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "object-copy": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", - "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", - "dev": true, - "requires": { - "copy-descriptor": "^0.1.0", - "define-property": "^0.2.5", - "kind-of": "^3.0.3" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "object-visit": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", - "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", - "dev": true, - "requires": { - "isobject": "^3.0.0" - } - }, - "object.defaults": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/object.defaults/-/object.defaults-1.1.0.tgz", - "integrity": "sha1-On+GgzS0B96gbaFtiNXNKeQ1/s8=", - "dev": true, - "requires": { - "array-each": "^1.0.1", - "array-slice": "^1.0.0", - "for-own": "^1.0.0", - "isobject": "^3.0.0" - } - }, - "object.map": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.map/-/object.map-1.0.1.tgz", - "integrity": "sha1-z4Plncj8wK1fQlDh94s7gb2AHTc=", - "dev": true, - "requires": { - "for-own": "^1.0.0", - "make-iterator": "^1.0.0" - } - }, - "object.pick": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", - "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", - "dev": true, - "requires": { - "isobject": "^3.0.1" - } - }, - "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", - "dev": true, - "requires": { - "ee-first": "1.1.1" - } - }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" - } - }, - "os-homedir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", - "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", - "dev": true - }, - "os-tmpdir": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", - "dev": true - }, - "osenv": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", - "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", - "dev": true, - "requires": { - "os-homedir": "^1.0.0", - "os-tmpdir": "^1.0.0" - } - }, - "parse-filepath": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", - "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", - "dev": true, - "requires": { - "is-absolute": "^1.0.0", - "map-cache": "^0.2.0", - "path-root": "^0.1.1" - } - }, - "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", - "dev": true, - "requires": { - "error-ex": "^1.2.0" - } - }, - "parse-passwd": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/parse-passwd/-/parse-passwd-1.0.0.tgz", - "integrity": "sha1-bVuTSkVpk7I9N/QKOC1vFmao5cY=", - "dev": true - }, - "parseurl": { - "version": "1.3.3", - "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", - "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", - "dev": true - }, - "pascalcase": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", - "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", - "dev": true - }, - "path-exists": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", - "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", - "dev": true, - "requires": { - "pinkie-promise": "^2.0.0" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", - "dev": true - }, - "path-root": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", - "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", - "dev": true, - "requires": { - "path-root-regex": "^0.1.0" - } - }, - "path-root-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", - "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", - "dev": true - }, - "path-type": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", - "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", - "dev": true, - "requires": { - "graceful-fs": "^4.1.2", - "pify": "^2.0.0", - "pinkie-promise": "^2.0.0" - } - }, - "performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", - "dev": true, - "optional": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "pinkie": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", - "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", - "dev": true - }, - "pinkie-promise": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", - "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", - "dev": true, - "requires": { - "pinkie": "^2.0.0" - } - }, - "posix-character-classes": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", - "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", - "dev": true - }, - "pretty-bytes": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-3.0.1.tgz", - "integrity": "sha1-J9AAjXeAY6C0gRuzXHnxvV1fvM8=", - "dev": true, - "requires": { - "number-is-nan": "^1.0.0" - } - }, - "pretty-data": { - "version": "0.40.0", - "resolved": "https://registry.npmjs.org/pretty-data/-/pretty-data-0.40.0.tgz", - "integrity": "sha1-Vyqo6iNGdGerlLa1Jmpv2cj93XI=", - "dev": true - }, - "psl": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.3.0.tgz", - "integrity": "sha512-avHdspHO+9rQTLbv1RO+MPYeP/SzsCoxofjVnHanETfQhTJrmB0HlDoW+EiN/R+C0BZ+gERab9NY0lPN2TxNag==", - "dev": true, - "optional": true - }, - "punycode": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", - "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", - "dev": true, - "optional": true - }, - "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", - "dev": true, - "optional": true - }, - "range-parser": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", - "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", - "dev": true - }, - "read-pkg": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", - "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", - "dev": true, - "requires": { - "load-json-file": "^1.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^1.0.0" - } - }, - "read-pkg-up": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", - "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", - "dev": true, - "requires": { - "find-up": "^1.0.0", - "read-pkg": "^1.0.0" - } - }, - "rechoir": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/rechoir/-/rechoir-0.6.2.tgz", - "integrity": "sha1-hSBLVNuoLVdC4oyWdW70OvUOM4Q=", - "dev": true, - "requires": { - "resolve": "^1.1.6" - } - }, - "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, - "requires": { - "indent-string": "^2.1.0", - "strip-indent": "^1.0.1" - } - }, - "regex-not": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", - "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.2", - "safe-regex": "^1.1.0" - } - }, - "repeat-element": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.3.tgz", - "integrity": "sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g==", - "dev": true - }, - "repeat-string": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", - "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", - "dev": true - }, - "repeating": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", - "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", - "dev": true, - "requires": { - "is-finite": "^1.0.0" - } - }, - "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "optional": true, - "requires": { - "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.0", - "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.4.3", - "tunnel-agent": "^0.6.0", - "uuid": "^3.3.2" - } - }, - "requires-port": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", - "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", - "dev": true - }, - "resolve": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.12.0.tgz", - "integrity": "sha512-B/dOmuoAik5bKcD6s6nXDCjzUKnaDvdkRyAk6rsmsKLipWj4797iothd7jmmUhWTfinVMU+wc56rYKsit2Qy4w==", - "dev": true, - "requires": { - "path-parse": "^1.0.6" - } - }, - "resolve-dir": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/resolve-dir/-/resolve-dir-1.0.1.tgz", - "integrity": "sha1-eaQGRMNivoLybv/nOcm7U4IEb0M=", - "dev": true, - "requires": { - "expand-tilde": "^2.0.0", - "global-modules": "^1.0.0" - } - }, - "resolve-url": { - "version": "0.2.1", - "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", - "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", - "dev": true - }, - "ret": { - "version": "0.1.15", - "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", - "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", - "dev": true - }, - "rimraf": { - "version": "2.6.3", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", - "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, - "requires": { - "glob": "^7.1.3" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "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" - } - } - } - }, - "safe-buffer": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.0.tgz", - "integrity": "sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg==", - "dev": true, - "optional": true - }, - "safe-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", - "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", - "dev": true, - "requires": { - "ret": "~0.1.10" - } - }, - "safer-buffer": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", - "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true - }, - "semver": { - "version": "5.7.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", - "dev": true - }, - "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "mime": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", - "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", - "dev": true - }, - "ms": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true - } - } - }, - "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", - "dev": true, - "requires": { - "encodeurl": "~1.0.2", - "escape-html": "~1.0.3", - "parseurl": "~1.3.3", - "send": "0.17.1" - } - }, - "set-value": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", - "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", - "dev": true, - "requires": { - "extend-shallow": "^2.0.1", - "is-extendable": "^0.1.1", - "is-plain-object": "^2.0.3", - "split-string": "^3.0.1" - }, - "dependencies": { - "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" - } - } - } - }, - "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - }, - "signal-exit": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", - "dev": true - }, - "slash": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", - "dev": true - }, - "snapdragon": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", - "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", - "dev": true, - "requires": { - "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" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - }, - "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" - } - } - } - }, - "snapdragon-node": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", - "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", - "dev": true, - "requires": { - "define-property": "^1.0.0", - "isobject": "^3.0.0", - "snapdragon-util": "^3.0.1" - }, - "dependencies": { - "define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", - "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", - "dev": true, - "requires": { - "is-descriptor": "^1.0.0" - } - }, - "is-accessor-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", - "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-data-descriptor": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", - "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", - "dev": true, - "requires": { - "kind-of": "^6.0.0" - } - }, - "is-descriptor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", - "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", - "dev": true, - "requires": { - "is-accessor-descriptor": "^1.0.0", - "is-data-descriptor": "^1.0.0", - "kind-of": "^6.0.2" - } - } - } - }, - "snapdragon-util": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", - "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", - "dev": true, - "requires": { - "kind-of": "^3.2.0" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", - "dev": true - }, - "source-map-resolve": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.2.tgz", - "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", - "dev": true, - "requires": { - "atob": "^2.1.1", - "decode-uri-component": "^0.2.0", - "resolve-url": "^0.2.1", - "source-map-url": "^0.4.0", - "urix": "^0.1.0" - } - }, - "source-map-url": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.0.tgz", - "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", - "dev": true - }, - "spdx-correct": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", - "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", - "dev": true, - "requires": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-exceptions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz", - "integrity": "sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA==", - "dev": true - }, - "spdx-expression-parse": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", - "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", - "dev": true, - "requires": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" - } - }, - "spdx-license-ids": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz", - "integrity": "sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q==", - "dev": true - }, - "split-string": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", - "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", - "dev": true, - "requires": { - "extend-shallow": "^3.0.0" - } - }, - "sprintf-js": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.2.tgz", - "integrity": "sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug==", - "dev": true - }, - "sshpk": { - "version": "1.16.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", - "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", - "dev": true, - "optional": true, - "requires": { - "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" - } - }, - "static-extend": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", - "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", - "dev": true, - "requires": { - "define-property": "^0.2.5", - "object-copy": "^0.1.0" - }, - "dependencies": { - "define-property": { - "version": "0.2.5", - "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", - "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", - "dev": true, - "requires": { - "is-descriptor": "^0.1.0" - } - } - } - }, - "statuses": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", - "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", - "dev": true - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "^2.0.0" - } - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "^0.2.0" - } - }, - "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, - "requires": { - "get-stdin": "^4.0.1" - } - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - }, - "to-object-path": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", - "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", - "dev": true, - "requires": { - "kind-of": "^3.0.2" - }, - "dependencies": { - "kind-of": { - "version": "3.2.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", - "dev": true, - "requires": { - "is-buffer": "^1.1.5" - } - } - } - }, - "to-regex": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", - "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", - "dev": true, - "requires": { - "define-property": "^2.0.2", - "extend-shallow": "^3.0.2", - "regex-not": "^1.0.2", - "safe-regex": "^1.1.0" - } - }, - "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=", - "dev": true, - "requires": { - "is-number": "^3.0.0", - "repeat-string": "^1.6.1" - } - }, - "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", - "dev": true - }, - "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", - "dev": true, - "optional": true, - "requires": { - "psl": "^1.1.24", - "punycode": "^1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true, - "optional": true - } - } - }, - "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true - }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, - "uglify-es": { - "version": "3.3.9", - "resolved": "https://registry.npmjs.org/uglify-es/-/uglify-es-3.3.9.tgz", - "integrity": "sha512-r+MU0rfv4L/0eeW3xZrd16t4NZfK8Ld4SWVglYBb7ez5uXFWHuVRs6xCTrf1yirs9a4j4Y27nn7SRfO6v67XsQ==", - "dev": true, - "requires": { - "commander": "~2.13.0", - "source-map": "~0.6.1" - }, - "dependencies": { - "commander": { - "version": "2.13.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", - "integrity": "sha512-MVuS359B+YzaWqjCL/c+22gfryv+mCBPHAv3zyVI2GN8EY6IRP8VwtasXn8jyyhvvq84R4ImN1OKRtcbIasjYA==", - "dev": true - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true - } - } - }, - "unc-path-regex": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", - "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", - "dev": true - }, - "underscore.string": { - "version": "3.3.5", - "resolved": "https://registry.npmjs.org/underscore.string/-/underscore.string-3.3.5.tgz", - "integrity": "sha512-g+dpmgn+XBneLmXXo+sGlW5xQEt4ErkS3mgeN2GFbremYeMBSJKr9Wf2KJplQVaiPY/f7FN6atosWYNm9ovrYg==", - "dev": true, - "requires": { - "sprintf-js": "^1.0.3", - "util-deprecate": "^1.0.2" - } - }, - "union-value": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", - "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", - "dev": true, - "requires": { - "arr-union": "^3.1.0", - "get-value": "^2.0.6", - "is-extendable": "^0.1.1", - "set-value": "^2.0.1" - } - }, - "unset-value": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", - "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", - "dev": true, - "requires": { - "has-value": "^0.3.1", - "isobject": "^3.0.0" - }, - "dependencies": { - "has-value": { - "version": "0.3.1", - "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", - "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", - "dev": true, - "requires": { - "get-value": "^2.0.3", - "has-values": "^0.1.4", - "isobject": "^2.0.0" - }, - "dependencies": { - "isobject": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", - "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", - "dev": true, - "requires": { - "isarray": "1.0.0" - } - } - } - }, - "has-values": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", - "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", - "dev": true - } - } - }, - "uri-js": { - "version": "4.2.2", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.2.2.tgz", - "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", - "dev": true, - "optional": true, - "requires": { - "punycode": "^2.1.0" - } - }, - "urix": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", - "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", - "dev": true - }, - "urljoin": { - "version": "0.1.5", - "resolved": "https://registry.npmjs.org/urljoin/-/urljoin-0.1.5.tgz", - "integrity": "sha1-sl0sYRLFWsnVAJakmg8ft/T1OSE=", - "dev": true, - "requires": { - "extend": "~2.0.0" - }, - "dependencies": { - "extend": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/extend/-/extend-2.0.2.tgz", - "integrity": "sha512-AgFD4VU+lVLP6vjnlNfF7OeInLTyeyckCNPEsuxz1vi786UuK/nk6ynPuhn/h+Ju9++TQyr5EpLRI14fc1QtTQ==", - "dev": true - } - } - }, - "use": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", - "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", - "dev": true - }, - "uuid": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.3.2.tgz", - "integrity": "sha512-yXJmeNaw3DnnKAOKJE51sL/ZaYfWJRl1pK9dr19YFCu0ObS231AB1/LbqTKRAQ5kw8A90rA6fr4riOUpTZvQZA==", - "dev": true, - "optional": true - }, - "v8flags": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/v8flags/-/v8flags-3.1.3.tgz", - "integrity": "sha512-amh9CCg3ZxkzQ48Mhcb8iX7xpAfYJgePHxWMQCBWECpOSqJUXgY26ncA61UTV0BkPqfhcy6mzwCIoP4ygxpW8w==", - "dev": true, - "requires": { - "homedir-polyfill": "^1.0.1" - } - }, - "validate-npm-package-license": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", - "dev": true, - "requires": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" - } - }, - "vary": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", - "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", - "dev": true - }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "optional": true, - "requires": { - "assert-plus": "^1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "^1.2.0" - } - }, - "which": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", - "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, - "requires": { - "isexe": "^2.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.0.3.tgz", - "integrity": "sha512-S+Zk8DEWE6oKpV+vI3qWkaK+jSbIK86pCwe2IF/xwIpQ8jEuxpw9NyaGjmp9+BoJv5FV2piqCDcoCtStppiq2A==", - "dev": true - } - } -} diff --git a/menas/ui/package.json b/menas/ui/package.json deleted file mode 100644 index 2f8502575..000000000 --- a/menas/ui/package.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "name": "enceladus-menas", - "version": "1.0.0", - "description": "Menas", - "main": "index.html", - "author": "ABSA Big Data R&D", - "license": "Apache License, Version 2.0", - "devDependencies": { - "grunt": "^1.0.4", - "grunt-cli": "^1.3.2", - "grunt-openui5": "^0.15.0" - }, - "dependencies": {} -} diff --git a/pom.xml b/pom.xml index 377176c12..d1624e46c 100644 --- a/pom.xml +++ b/pom.xml @@ -125,6 +125,7 @@ plugins-builtin spark-jobs utils + menas-web @@ -197,7 +198,8 @@ true ${project.basedir}/scalastyle-config.xml - docker.io/absaoss/menas + docker.io/absaoss/menas + docker.io/absaoss/menas-ui ${project.version} docker @@ -535,6 +537,8 @@ .editorconfig dependency-reduced-pom.xml **/node_modules/** + **/_site/** + **/ui/dist/** scripts/cmd/tee.bat
From 1c7d8a9441e48435f2b526f7cfbb5a36f05713f1 Mon Sep 17 00:00:00 2001 From: Daniel Kavan Date: Wed, 14 Apr 2021 13:44:30 +0200 Subject: [PATCH 03/41] MANIFEST.MFs LF commit --- dao/src/main/scala/META-INF/MANIFEST.MF | 6 +++--- data-model/src/main/scala/META-INF/MANIFEST.MF | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/dao/src/main/scala/META-INF/MANIFEST.MF b/dao/src/main/scala/META-INF/MANIFEST.MF index 5e9495128..254272e1c 100644 --- a/dao/src/main/scala/META-INF/MANIFEST.MF +++ b/dao/src/main/scala/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ -Manifest-Version: 1.0 -Class-Path: - +Manifest-Version: 1.0 +Class-Path: + diff --git a/data-model/src/main/scala/META-INF/MANIFEST.MF b/data-model/src/main/scala/META-INF/MANIFEST.MF index 5e9495128..254272e1c 100644 --- a/data-model/src/main/scala/META-INF/MANIFEST.MF +++ b/data-model/src/main/scala/META-INF/MANIFEST.MF @@ -1,3 +1,3 @@ -Manifest-Version: 1.0 -Class-Path: - +Manifest-Version: 1.0 +Class-Path: + From 07d48883019da8a564115f61bc032e8cdbe5bea0 Mon Sep 17 00:00:00 2001 From: Daniel Kavan Date: Wed, 14 Apr 2021 14:18:14 +0200 Subject: [PATCH 04/41] [develop-ver3.0] mergefix --- .../MappingConformanceRule/OutputColumnDialog.js | 0 .../MappingConformanceRule/OutputColumnDialogFactory.js | 0 .../MappingConformanceRule/outputColumnDialog.fragment.xml | 0 .../MappingConformanceRule/outputColumns.fragment.xml | 0 menas-web/ui/index.html | 2 ++ menas/ui/index.html | 0 6 files changed, 2 insertions(+) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml (100%) rename {menas => menas-web}/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml (100%) delete mode 100644 menas/ui/index.html diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml diff --git a/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml b/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml similarity index 100% rename from menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml rename to menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml diff --git a/menas-web/ui/index.html b/menas-web/ui/index.html index 67bbee953..ad1325ee5 100644 --- a/menas-web/ui/index.html +++ b/menas-web/ui/index.html @@ -65,6 +65,8 @@ _menasLoadElem("script", "components/dataset/conformanceRule/SchemaManager.js", []); _menasLoadElem("script", "components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js", []); _menasLoadElem("script", "components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js", []); + _menasLoadElem("script", "components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js", []); + _menasLoadElem("script", "components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js", []); _menasLoadElem("script", "components/dataset/conformanceRule/RuleColumnDialog.js", []); _menasLoadElem("script", "components/dataset/conformanceRule/RuleColumnDialogFactory.js", []); _menasLoadElem("script", "components/SchemaTable.js", []); diff --git a/menas/ui/index.html b/menas/ui/index.html deleted file mode 100644 index e69de29bb..000000000 From 8a1c17184a7fcf68445d919fd8c8998d1ea49f86 Mon Sep 17 00:00:00 2001 From: Danil Vagapov Date: Mon, 19 Apr 2021 10:24:49 +0200 Subject: [PATCH 05/41] changes in Dockerfile - added new ARGs and in menas new ENV with default values --- menas-web/Dockerfile | 5 ++++- menas-web/pom.xml | 4 ++++ menas/Dockerfile | 23 ++++++++++++++++++++++- menas/pom.xml | 2 ++ 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/menas-web/Dockerfile b/menas-web/Dockerfile index 8775f516a..3ffa8c72a 100644 --- a/menas-web/Dockerfile +++ b/menas-web/Dockerfile @@ -11,7 +11,10 @@ # See the License for the specific language governing permissions and # limitations under the License. -FROM nginx:1-alpine +ARG DOCKER_BASE_ARTIFACT=nginx +ARG DOCKER_BASE_TAG=1-alpine + +FROM ${DOCKER_BASE_ARTIFACT}:${DOCKER_BASE_TAG} LABEL \ vendor="AbsaOSS" \ diff --git a/menas-web/pom.xml b/menas-web/pom.xml index 521c1b48e..0d5807de2 100644 --- a/menas-web/pom.xml +++ b/menas-web/pom.xml @@ -33,6 +33,10 @@ ${dockerfile.menas-ui.repository} ${dockerfile.tag} + + ${dockerfile.base.artifact} + ${dockerfile.base.tag} + diff --git a/menas/Dockerfile b/menas/Dockerfile index 4030cc61e..617bf69fd 100644 --- a/menas/Dockerfile +++ b/menas/Dockerfile @@ -20,7 +20,11 @@ # -Dmenas.mongo.connection.database=menas \ # -p 8080:8080 \ # menas -FROM tomcat:9-jre8-alpine + +ARG DOCKER_BASE_ARTIFACT=tomcat +ARG DOCKER_BASE_TAG=9-jre8-alpine + +FROM ${DOCKER_BASE_ARTIFACT}:${DOCKER_BASE_TAG} LABEL \ vendor="AbsaOSS" \ @@ -40,6 +44,23 @@ RUN chmod +x start_menas.sh && \ ADD ./target/${WAR_FILE} webapps/ROOT.war ADD src/main/resources/docker/server.xml /tmp/server.xml +ENV MENAS_ENVIRONMENT=Dev + +ENV MENAS_MONGO_CONNECTION_STRING="mongodb://localhost:27017" +ENV MENAS_MONGO_CONNECTION_DATABASE=menas + +ENV MENAS_HADOOP_AUTH_METHOD=default + +ENV MENAS_AUTH_MECHANISM=inmemory +ENV MENAS_AUTH_INMEMORY_USER=user +ENV MENAS_AUTH_INMEMORY_PASSWORD=StrongPassword + +ENV MENAS_AUTH_ADMIN_ROLE=ROLE_ADMIN +ENV MENAS_AUTH_INMEMORY_ADMIN_USER=menas_admin +ENV MENAS_AUTH_INMEMORY_ADMIN_PASSWORD=admin123 + +ENV HADOOP_CONF_DIR=/tmp + EXPOSE 8080 EXPOSE 8443 EXPOSE 8009 diff --git a/menas/pom.xml b/menas/pom.xml index c31de99ff..79145fe5c 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -270,6 +270,8 @@ ${project.build.finalName}.war ${dockerfile.property.file} + ${dockerfile.base.artifact} + ${dockerfile.base.tag}
From 952e52a044cde3f1af76da9d1139e16efc056c10 Mon Sep 17 00:00:00 2001 From: Danil Vagapov Date: Mon, 19 Apr 2021 11:02:28 +0200 Subject: [PATCH 06/41] chnaged docker.properties.template and one more ENV for dockerfile --- menas/Dockerfile | 1 + menas/src/main/resources/docker.properties.template | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/menas/Dockerfile b/menas/Dockerfile index 617bf69fd..232536681 100644 --- a/menas/Dockerfile +++ b/menas/Dockerfile @@ -52,6 +52,7 @@ ENV MENAS_MONGO_CONNECTION_DATABASE=menas ENV MENAS_HADOOP_AUTH_METHOD=default ENV MENAS_AUTH_MECHANISM=inmemory +ENV MENAS.AUTH.JWT.SECRET="u7w!z%C*F-JaNdRgUkXp2s5v8y/A?D(G+KbPeShVmYq3t6w9z$C&E)H@McQfTjWn" ENV MENAS_AUTH_INMEMORY_USER=user ENV MENAS_AUTH_INMEMORY_PASSWORD=StrongPassword diff --git a/menas/src/main/resources/docker.properties.template b/menas/src/main/resources/docker.properties.template index 4079d5acf..438de4a64 100644 --- a/menas/src/main/resources/docker.properties.template +++ b/menas/src/main/resources/docker.properties.template @@ -34,11 +34,18 @@ spring.resources.chain.strategy.fixed.version=@project.version@ # Disable second security filter chain passes for ASYNC requests spring.security.filter.dispatcher-types=REQUEST,ERROR +# Generate your own secret, must be be at least 256-bit +menas.auth.jwt.lifespan.hours=8 + # Timeout (in seconds) for MongoDB migration queries migrations.mongo.query.timeout.seconds=300 menas.spark.master=local[1] +# The template for Lineage (Spline) display. If empty Lineage button is not shown. +# Avoiding the http(s) protocol will cause that the same protocol will be used as for Menas itself, avoiding issues +spline.urlTemplate=//localhost:8080/spline/dataset/lineage/_search?path=%s&application_id=%s + #system-wide time zone timezone=UTC From 2b0f3719ec309a288c618f68cb4c6a2229c94cc9 Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Mon, 19 Apr 2021 15:42:02 +0200 Subject: [PATCH 07/41] spark master and password as before --- menas/Dockerfile | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/menas/Dockerfile b/menas/Dockerfile index 232536681..5e8cb5c4d 100644 --- a/menas/Dockerfile +++ b/menas/Dockerfile @@ -51,10 +51,12 @@ ENV MENAS_MONGO_CONNECTION_DATABASE=menas ENV MENAS_HADOOP_AUTH_METHOD=default +ENV MENAS_SPARK_MASTER=local[1] + ENV MENAS_AUTH_MECHANISM=inmemory ENV MENAS.AUTH.JWT.SECRET="u7w!z%C*F-JaNdRgUkXp2s5v8y/A?D(G+KbPeShVmYq3t6w9z$C&E)H@McQfTjWn" ENV MENAS_AUTH_INMEMORY_USER=user -ENV MENAS_AUTH_INMEMORY_PASSWORD=StrongPassword +ENV MENAS_AUTH_INMEMORY_PASSWORD=changeme ENV MENAS_AUTH_ADMIN_ROLE=ROLE_ADMIN ENV MENAS_AUTH_INMEMORY_ADMIN_USER=menas_admin From 90188dcd42b9b1963a650787d53fd0fcbf61e2cc Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Mon, 19 Apr 2021 22:08:11 +0200 Subject: [PATCH 08/41] integration --- menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala | 1 + 1 file changed, 1 insertion(+) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala index d1fee1973..9ef14fd22 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala @@ -19,6 +19,7 @@ import org.springframework.context.annotation.Configuration import org.springframework.format.FormatterRegistry import org.springframework.web.servlet.config.annotation.{CorsRegistry, ViewControllerRegistry, WebMvcConfigurer} import za.co.absa.enceladus.menas.auth.AuthConstants.{CsrfTokenKey, JwtKey} +import za.co.absa.enceladus.menas.utils.converters.StringToValidationKindConverter @Configuration class MvcConfig extends WebMvcConfigurer { From 5e90cbd2e9b49954c414e7d4d1dfd87730222311 Mon Sep 17 00:00:00 2001 From: Danil Vagapov Date: Tue, 20 Apr 2021 09:54:22 +0200 Subject: [PATCH 09/41] SPLINE_URLTEMPLATE moved from docker.prop to Dockerfile --- menas/Dockerfile | 8 ++++---- menas/src/main/resources/docker.properties.template | 4 ---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/menas/Dockerfile b/menas/Dockerfile index 5e8cb5c4d..c2f7db100 100644 --- a/menas/Dockerfile +++ b/menas/Dockerfile @@ -15,9 +15,8 @@ # $> docker build -t menas . # Run image using: # $> docker run \ -# -e JAVA_OPTS=' \ -# -Dmenas.mongo.connection.string=mongodb://host.docker.internal:27017 \ -# -Dmenas.mongo.connection.database=menas \ +# -e MENAS_MONGO_CONNECTION_STRING=mongodb://host.docker.internal:27017 \ +# -e MENAS_MONGO_CONNECTION_DATABASE=menas \ # -p 8080:8080 \ # menas @@ -51,7 +50,8 @@ ENV MENAS_MONGO_CONNECTION_DATABASE=menas ENV MENAS_HADOOP_AUTH_METHOD=default -ENV MENAS_SPARK_MASTER=local[1] +ENV MENAS_SPARK_MASTER="local[1]" +ENV SPLINE_URLTEMPLATE="//localhost:8080/spline/dataset/lineage/_search?path=%s&application_id=%s" ENV MENAS_AUTH_MECHANISM=inmemory ENV MENAS.AUTH.JWT.SECRET="u7w!z%C*F-JaNdRgUkXp2s5v8y/A?D(G+KbPeShVmYq3t6w9z$C&E)H@McQfTjWn" diff --git a/menas/src/main/resources/docker.properties.template b/menas/src/main/resources/docker.properties.template index 438de4a64..57ced7bb4 100644 --- a/menas/src/main/resources/docker.properties.template +++ b/menas/src/main/resources/docker.properties.template @@ -42,10 +42,6 @@ migrations.mongo.query.timeout.seconds=300 menas.spark.master=local[1] -# The template for Lineage (Spline) display. If empty Lineage button is not shown. -# Avoiding the http(s) protocol will cause that the same protocol will be used as for Menas itself, avoiding issues -spline.urlTemplate=//localhost:8080/spline/dataset/lineage/_search?path=%s&application_id=%s - #system-wide time zone timezone=UTC From 027f6952397484eb3cce4f00f5a5eba96b717bf9 Mon Sep 17 00:00:00 2001 From: Daniel K Date: Mon, 26 Apr 2021 10:39:12 +0200 Subject: [PATCH 10/41] #1774 test fix, the main is unchanged. (#1775) KafkaErrorSenderPluginSuite test fix for SourcePhase.{Standardization, Conformance} capitalization. --- .../errorsender/mq/KafkaErrorSenderPluginSuite.scala | 8 ++++---- .../za/co/absa/enceladus/utils/modules/SourcePhase.scala | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/plugins-builtin/src/test/scala/za/co/absa/enceladus/plugins/builtin/errorsender/mq/KafkaErrorSenderPluginSuite.scala b/plugins-builtin/src/test/scala/za/co/absa/enceladus/plugins/builtin/errorsender/mq/KafkaErrorSenderPluginSuite.scala index d2d29d335..83bc82edf 100644 --- a/plugins-builtin/src/test/scala/za/co/absa/enceladus/plugins/builtin/errorsender/mq/KafkaErrorSenderPluginSuite.scala +++ b/plugins-builtin/src/test/scala/za/co/absa/enceladus/plugins/builtin/errorsender/mq/KafkaErrorSenderPluginSuite.scala @@ -163,12 +163,12 @@ class KafkaErrorSenderPluginSuite extends AnyFlatSpec with SparkTestBase with Ma Seq( SourcePhase.Standardization -> Seq( - "standardizaton,stdCastError,E00000,Standardization Error - Type cast", - "standardizaton,stdNullError,E00002,Standardization Error - Null detected in non-nullable attribute" + "Standardization,stdCastError,E00000,Standardization Error - Type cast", + "Standardization,stdNullError,E00002,Standardization Error - Null detected in non-nullable attribute" ), SourcePhase.Conformance -> Seq( - "conformance,confNegErr,E00004,Conformance Negation Error", - "conformance,confLitErr,E00005,Conformance Literal Error" + "Conformance,confNegErr,E00004,Conformance Negation Error", + "Conformance,confLitErr,E00005,Conformance Literal Error" ) ).foreach { case (source, specificErrorParts) => it should s"send $source errors to kafka as confluent_avro" in { diff --git a/utils/src/main/scala/za/co/absa/enceladus/utils/modules/SourcePhase.scala b/utils/src/main/scala/za/co/absa/enceladus/utils/modules/SourcePhase.scala index 643b2a85e..5751d0b52 100644 --- a/utils/src/main/scala/za/co/absa/enceladus/utils/modules/SourcePhase.scala +++ b/utils/src/main/scala/za/co/absa/enceladus/utils/modules/SourcePhase.scala @@ -26,7 +26,7 @@ sealed trait SourcePhase { object SourcePhase { def withIdentifier(name: String): SourcePhase = { - name match { + name.toLowerCase match { case "conformance" => SourcePhase.Conformance case "standardization" => SourcePhase.Standardization case _ => throw new NoSuchElementException(s"No value found for '$name'") From d3b57a05047ece9572fffbc55557162e85afe772 Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Wed, 5 May 2021 10:40:43 +0300 Subject: [PATCH 11/41] Feature/601 swagger api docs (#1762) * #601 Swagger api docs --- README.md | 9 +-- menas/pom.xml | 10 ++++ .../co/absa/enceladus/menas/Application.scala | 2 + .../enceladus/menas/SpringFoxConfig.scala | 56 +++++++++++++++++++ .../enceladus/menas/WebSecurityConfig.scala | 5 +- 5 files changed, 76 insertions(+), 6 deletions(-) create mode 100644 menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala diff --git a/README.md b/README.md index 65389098f..ce4e7aabf 100644 --- a/README.md +++ b/README.md @@ -45,6 +45,9 @@ There are three models used to do this: - **Dataset**: Specifies where the dataset will be read from on HDFS (**RAW**), the conformance rules that will be applied to it, and where it will land on HDFS once it is conformed (**PUBLISH**) - **Schema**: Specifies the schema towards which the dataset will be standardized - **Mapping Table**: Specifies where tables with master reference data can be found (parquet on HDFS), which are used when applying Mapping conformance rules (e.g. the dataset uses **Germany**, which maps to the master reference **DE** in the mapping table) + +The Menas web client calls the REST API to get the needed entities. +The REST API exposes a Swagger Documentation UI which documents all the HTTP endpoints exposed. It can be found at **REST_API_HOST/swagger-ui.html** ### Standardization This is a Spark job which reads an input dataset in any of the supported formats and **produces a parquet dataset with the Menas-specified schema** as output. @@ -69,7 +72,6 @@ Ensure the properties there fit your environment. - Without tests: `mvn clean package -DskipTests ` - With unit tests: `mvn clean package` - With integration tests: `mvn clean package -Pintegration` -- With component preload file generated: `mvn clean package -PgenerateComponentPreload` #### Test coverage: - Test coverage: `mvn scoverage:report` @@ -87,10 +89,9 @@ The coverage reports are written in each module's `target` directory and aggrega The _Spline UI_ can be omitted; in such case the **Menas** `spline.urlTemplate` setting should be set to empty string. #### Deploying Menas -Simply copy the **menas.war** file produced when building the project into Tomcat's webapps directory. +Simply copy the **menas.war** and **menas-web.war** files produced when building the project into Tomcat's webapps directory. -#### Speed up initial loading time of menas -- Build the project with the generateComponentPreload profile. Component preload will greatly reduce the number of HTTP requests required for the initial load of Menas +#### Speed up initial loading time of Menas - Enable the HTTP compression - Configure `spring.resources.cache.cachecontrol.max-age` in `application.properties` of Menas for caching of static resources diff --git a/menas/pom.xml b/menas/pom.xml index 79145fe5c..b3a7b6be0 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -257,6 +257,16 @@ ${embedded.mongo.version} test
+ + io.springfox + springfox-swagger2 + 2.9.2 + + + io.springfox + springfox-swagger-ui + 2.9.2 + diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala index 8654e02c2..a4d10e1f0 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala @@ -24,11 +24,13 @@ import org.springframework.scheduling.annotation.EnableAsync import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor import org.springframework.security.core.context.SecurityContextHolder import org.springframework.scheduling.annotation.EnableScheduling +import springfox.documentation.swagger2.annotations.EnableSwagger2 @SpringBootApplication @EnableAsync @EnableScheduling @Configuration +@EnableSwagger2 class Application() { private val DefaultCorePoolSize = 12 private val DefaultMaxPoolSize = 24 diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala new file mode 100644 index 000000000..133619d49 --- /dev/null +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala @@ -0,0 +1,56 @@ +/* + * Copyright 2018 ABSA Group Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package za.co.absa.enceladus.menas + +import com.google.common.base.Predicate +import com.google.common.base.Predicates.or +import org.springframework.context.annotation.{Bean, Configuration} +import springfox.documentation.builders.PathSelectors.regex +import springfox.documentation.builders.{ApiInfoBuilder, RequestHandlerSelectors} +import springfox.documentation.spi.DocumentationType +import springfox.documentation.spring.web.plugins.Docket +import springfox.documentation.swagger2.annotations.EnableSwagger2 +import za.co.absa.enceladus.utils.general.ProjectMetadata + +@Configuration +@EnableSwagger2 +class SpringFoxConfig extends ProjectMetadata { + @Bean + def api(): Docket = { + new Docket(DocumentationType.SWAGGER_2) + .apiInfo(apiInfo) + .select + .apis(RequestHandlerSelectors.any) + .paths(filteredPaths) + .build + } + + private def filteredPaths: Predicate[String] = + or[String](regex("/api/dataset.*"), regex("/api/schema.*"), + regex("/api/mappingTable.*"), regex("/api/properties.*"), + regex("/api/monitoring.*"),regex("/api/runs.*"), + regex("/api/user.*"), regex("/api/spark.*"), + regex("/api/configuration.*") + ) + + private def apiInfo = + new ApiInfoBuilder() + .title("Menas API") + .description("Menas API reference for developers") + .license("Apache 2.0 License") + .version(projectVersion) // api or project? + .build +} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala b/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala index 40880ceba..714b5d020 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala +++ b/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala @@ -30,7 +30,6 @@ import org.springframework.security.web.authentication._ import za.co.absa.enceladus.menas.auth._ import za.co.absa.enceladus.menas.auth.jwt.JwtAuthenticationFilter import za.co.absa.enceladus.menas.auth.kerberos.MenasKerberosAuthentication -import za.co.absa.enceladus.utils.general.ProjectMetadata @EnableWebSecurity @@ -62,7 +61,9 @@ class WebSecurityConfig @Autowired()(beanFactory: BeanFactory, .and() .authorizeRequests() .antMatchers("/admin/health", "/api/oozie/isEnabled", - "/api/user/version", "/api/configuration/**") + "/api/user/version", "/api/configuration/**", + "/swagger-ui.html", "/webjars/**", "/v2/api-docs", "/swagger-resources", + "/swagger-resources/configuration/ui", "/swagger-resources/configuration/security") .permitAll() .anyRequest() .authenticated() From fa2bbd59c11abee32ba2fe198188ebe2bddac92a Mon Sep 17 00:00:00 2001 From: Daniel K Date: Fri, 14 May 2021 10:48:59 +0200 Subject: [PATCH 12/41] #417 SparkXML-related unit test added first (regression guard), SparkXMLHack removed, the test holds. (#1783) --- .../StandardizationInterpreter.scala | 13 +-- .../interpreter/stages/SparkXMLHack.scala | 45 ---------- .../data/standardization_xml_suite_data.txt | 4 + .../StandardizationXmlSuite.scala | 84 +++++++++++++++++++ 4 files changed, 90 insertions(+), 56 deletions(-) delete mode 100644 spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/stages/SparkXMLHack.scala create mode 100644 spark-jobs/src/test/resources/data/standardization_xml_suite_data.txt create mode 100644 spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationXmlSuite.scala diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/StandardizationInterpreter.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/StandardizationInterpreter.scala index a38ded1b9..941788920 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/StandardizationInterpreter.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/StandardizationInterpreter.scala @@ -22,7 +22,7 @@ import org.slf4j.{Logger, LoggerFactory} import za.co.absa.enceladus.common.{Constants, RecordIdGeneration} import za.co.absa.enceladus.common.RecordIdGeneration._ import za.co.absa.enceladus.standardization.interpreter.dataTypes._ -import za.co.absa.enceladus.standardization.interpreter.stages.{SchemaChecker, SparkXMLHack, TypeParser} +import za.co.absa.enceladus.standardization.interpreter.stages.{SchemaChecker, TypeParser} import za.co.absa.enceladus.utils.error.ErrorMessage import za.co.absa.enceladus.utils.schema.{SchemaUtils, SparkUtils} import za.co.absa.enceladus.utils.transformations.ArrayTransformations @@ -54,17 +54,8 @@ object StandardizationInterpreter { logger.info(s"Step 1: Schema validation") validateSchemaAgainstSelfInconsistencies(expSchema) - // TODO: remove when spark-xml handles empty arrays #417 - val dfXmlSafe: Dataset[Row] = if (inputType.toLowerCase() == "xml") { - df.select(expSchema.fields.map { field: StructField => - SparkXMLHack.hack(field, "", df).as(field.name) - }: _*) - } else { - df - } - logger.info(s"Step 2: Standardization") - val std = standardizeDataset(dfXmlSafe, expSchema, failOnInputNotPerSchema) + val std = standardizeDataset(df, expSchema, failOnInputNotPerSchema) logger.info(s"Step 3: Clean the final error column") val cleanedStd = cleanTheFinalErrorColumn(std) diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/stages/SparkXMLHack.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/stages/SparkXMLHack.scala deleted file mode 100644 index 682e8235f..000000000 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/interpreter/stages/SparkXMLHack.scala +++ /dev/null @@ -1,45 +0,0 @@ -/* - * Copyright 2018 ABSA Group Limited - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package za.co.absa.enceladus.standardization.interpreter.stages - -import org.apache.spark.sql.functions._ -import org.apache.spark.sql.types._ -import org.apache.spark.sql.{Column, Dataset, Row, SparkSession} -import za.co.absa.enceladus.utils.schema.SchemaUtils.appendPath -import za.co.absa.enceladus.utils.transformations.ArrayTransformations.arrCol -import za.co.absa.enceladus.utils.udf.UDFLibrary - -/** - * Hack around spark-xml bug: Null arrays produce array(null) instead of null. - * - * Get rid of this as soon as this is fixed in spark-xml - */ - -object SparkXMLHack { - - def hack(field: StructField, path: String, df: Dataset[Row])(implicit spark: SparkSession, udfLib: UDFLibrary): Column = { - val currentAttrPath = appendPath(path, field.name) - - field.dataType match { - case a @ ArrayType(elType, nullable) => - when((size(arrCol(currentAttrPath)) === 1) and arrCol(currentAttrPath)(0).isNull, lit(null)).otherwise(arrCol(currentAttrPath)) as field.name // scalastyle:ignore null - case t: StructType => - struct(t.fields.toSeq.map(x => hack(x, currentAttrPath, df)): _*) as field.name - case _ => - arrCol(currentAttrPath) as field.name - } - } -} diff --git a/spark-jobs/src/test/resources/data/standardization_xml_suite_data.txt b/spark-jobs/src/test/resources/data/standardization_xml_suite_data.txt new file mode 100644 index 000000000..8facae313 --- /dev/null +++ b/spark-jobs/src/test/resources/data/standardization_xml_suite_data.txt @@ -0,0 +1,4 @@ +2018-08-1011000 +2018-08-1022000 +2018-08-103 +2018-08-104 diff --git a/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationXmlSuite.scala b/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationXmlSuite.scala new file mode 100644 index 000000000..7b2969020 --- /dev/null +++ b/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationXmlSuite.scala @@ -0,0 +1,84 @@ +/* + * Copyright 2018 ABSA Group Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package za.co.absa.enceladus.standardization + +import org.apache.spark.sql.functions.col +import org.apache.spark.sql.types +import org.apache.spark.sql.types._ +import org.mockito.scalatest.MockitoSugar +import org.scalatest.funsuite.AnyFunSuite +import za.co.absa.enceladus.dao.MenasDAO +import za.co.absa.enceladus.model.Dataset +import za.co.absa.enceladus.standardization.config.StandardizationConfig +import za.co.absa.enceladus.standardization.interpreter.StandardizationInterpreter +import za.co.absa.enceladus.standardization.interpreter.stages.PlainSchemaGenerator +import za.co.absa.enceladus.utils.implicits.DataFrameImplicits.DataFrameEnhancements +import za.co.absa.enceladus.utils.testUtils.SparkTestBase +import za.co.absa.enceladus.utils.udf.UDFLibrary + +class StandardizationXmlSuite extends AnyFunSuite with SparkTestBase with MockitoSugar{ + private implicit val udfLibrary:UDFLibrary = new UDFLibrary() + + private val standardizationReader = new StandardizationPropertiesProvider() + + test("Reading data from XML input") { + + implicit val dao: MenasDAO = mock[MenasDAO] + + val args = ("--dataset-name Foo --dataset-version 1 --report-date 2018-08-10 --report-version 1 " + + "--menas-auth-keytab src/test/resources/user.keytab.example " + + "--raw-format xml --row-tag instrument").split(" ") + + val dataSet = Dataset("SpecialChars", 1, None, "", "", "SpecialChars", 1, conformance = Nil) + val cmd = StandardizationConfig.getFromArguments(args) + + val csvReader = standardizationReader.getFormatSpecificReader(cmd, dataSet) + + val baseSchema = StructType(Array( + StructField("rowId", LongType), + StructField("reportDate", StringType), + StructField("legs", types.ArrayType(StructType(Array( + StructField("leg", StructType(Array( + StructField("price", IntegerType) + ))) + )))) + )) + val inputSchema = PlainSchemaGenerator.generateInputSchema(baseSchema, Option("_corrupt_record")) + val reader = csvReader.schema(inputSchema) + + val sourceDF = reader.load("src/test/resources/data/standardization_xml_suite_data.txt") + // not expecting corrupted records, but checking to be sure + val corruptedRecords = sourceDF.filter(col("_corrupt_record").isNotNull) + assert(corruptedRecords.isEmpty, s"Unexpected corrupted records found: ${corruptedRecords.collectAsList()}") + + val destDF = StandardizationInterpreter.standardize(sourceDF, baseSchema, cmd.rawFormat) + + val actual = destDF.dataAsString(truncate = false) + val expected = + """+-----+----------+----------+------+ + ||rowId|reportDate|legs |errCol| + |+-----+----------+----------+------+ + ||1 |2018-08-10|[[[1000]]]|[] | + ||2 |2018-08-10|[[[2000]]]|[] | + ||3 |2018-08-10|[[[]]] |[] | + ||4 |2018-08-10|null |[] | + |+-----+----------+----------+------+ + | + |""".stripMargin.replace("\r\n", "\n") + + assert(actual == expected) + } +} From 88fabebe592625b82a86558e993eef56ed243c0e Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Fri, 14 May 2021 13:44:53 +0300 Subject: [PATCH 13/41] #1769 Rename Menas to rest-api (#1781) * #1769 rename menas to rest-api * #1769 README update and other feedback --- README.md | 48 ++++++++++++------- menas/src/main/resources/banner.txt | 7 --- menas/src/main/resources/start_menas.sh | 26 ---------- pom.xml | 2 +- {menas => rest-api}/Dockerfile | 14 +++--- {menas => rest-api}/pom.xml | 4 +- .../resources/application.properties.template | 0 rest-api/src/main/resources/banner.txt | 7 +++ .../main/resources/docker.properties.template | 0 .../main/resources/docker/envoy/Dockerfile | 0 .../main/resources/docker/envoy/envoy.yaml | 2 +- .../resources/docker/envoy/start_envoy.sh | 0 .../src/main/resources/docker/server.xml | 0 .../main/resources/docker/start_rest_api.sh | 0 .../scheduling/oozie/coordinator_template.xml | 0 .../scheduling/oozie/workflow_template.xml | 0 .../enceladus/rest_api}/Application.scala | 2 +- .../absa/enceladus/rest_api}/HDFSConfig.scala | 2 +- .../enceladus/rest_api}/MongoConfig.scala | 4 +- .../absa/enceladus/rest_api}/MvcConfig.scala | 6 +-- .../enceladus/rest_api}/OozieConfig.scala | 4 +- .../rest_api}/ServletInitializer.scala | 2 +- .../enceladus/rest_api}/SparkConfig.scala | 2 +- .../enceladus/rest_api}/SpringFoxConfig.scala | 2 +- .../rest_api}/WebSecurityConfig.scala | 8 ++-- .../rest_api}/auth/AuthConstants.scala | 2 +- .../auth/InMemoryMenasAuthentication.scala | 2 +- .../rest_api}/auth/MenasAuthentication.scala | 2 +- .../MenasAuthenticationFailureHandler.scala | 4 +- .../MenasAuthenticationSuccessHandler.scala | 8 ++-- .../exceptions/AuthHostTimeoutException.scala | 2 +- .../auth/exceptions/BadKrbHostException.scala | 2 +- .../exceptions/BadLdapHostException.scala | 2 +- .../auth/jwt/JwtAuthenticationFilter.scala | 4 +- .../rest_api}/auth/jwt/JwtFactory.scala | 2 +- ...iveDirectoryLdapAuthoritiesPopulator.scala | 2 +- .../kerberos/KerberosLdapUserSearch.scala | 2 +- .../MenasKerberosAuthentication.scala | 6 +-- .../MenasKerberosAuthenticationProvider.scala | 4 +- .../MenasKerberosLdapContextSource.scala | 2 +- .../controllers/BaseController.scala | 4 +- .../controllers/ConfigurationController.scala | 2 +- .../controllers/DatasetController.scala | 6 +-- .../controllers/HDFSController.scala | 6 +-- .../controllers/LandingPageController.scala | 18 +++---- .../controllers/MappingTableController.scala | 6 +-- .../controllers/MonitoringController.scala | 6 +-- .../controllers/OozieController.scala | 8 ++-- .../PropertyDefinitionController.scala | 8 ++-- .../controllers/RestExceptionHandler.scala | 12 ++--- .../rest_api}/controllers/RunController.scala | 8 ++-- .../controllers/SchemaController.scala | 18 +++---- .../controllers/SparkController.scala | 2 +- .../controllers/UserInfoController.scala | 2 +- .../VersionedModelController.scala | 8 ++-- .../exceptions/EndpointDisabled.scala | 2 +- .../EntityAlreadyExistsException.scala | 2 +- .../exceptions/EntityInUseException.scala | 2 +- .../exceptions/NotFoundException.scala | 2 +- .../exceptions/OozieActionException.scala | 5 +- .../OozieConfigurationException.scala | 2 +- .../exceptions/ValidationException.scala | 2 +- .../rest_api}/health/HdfsHealthChecker.scala | 2 +- .../rest_api}/health/MongoHealthChecker.scala | 2 +- .../models/LandingPageInformation.scala | 2 +- .../models/OozieCoordinatorStatus.scala | 2 +- .../rest_api}/models/RestError.scala | 2 +- .../rest_api}/models/RunSummary.scala | 2 +- .../rest_api}/models/SchemaApiFeatures.scala | 2 +- .../models/TodaysRunsStatistics.scala | 2 +- .../rest_api}/models/rest/ResponseError.scala | 4 +- .../rest_api}/models/rest/RestResponse.scala | 2 +- .../errors/RemoteSchemaRetrievalError.scala | 8 ++-- .../errors/RequestTimeoutExpiredError.scala | 4 +- .../rest/errors/SchemaFormatError.scala | 6 +-- .../rest/errors/SchemaParsingError.scala | 8 ++-- .../RemoteSchemaRetrievalException.scala | 4 +- .../exceptions/SchemaFormatException.scala | 2 +- .../exceptions/SchemaParsingException.scala | 4 +- .../AttachmentMongoRepository.scala | 4 +- .../repositories/DatasetMongoRepository.scala | 4 +- ...LandingPageStatisticsMongoRepository.scala | 8 ++-- .../MappingTableMongoRepository.scala | 4 +- .../repositories/MongoRepository.scala | 6 +-- .../MonitoringMongoRepository.scala | 4 +- .../repositories/OozieRepository.scala | 8 ++-- .../PropertyDefinitionMongoRepository.scala | 4 +- .../rest_api}/repositories/RefCollection.java | 2 +- .../repositories/RunMongoRepository.scala | 6 +-- .../repositories/SchemaMongoRepository.scala | 4 +- .../VersionedMongoRepository.scala | 6 +-- .../services/AttachmentService.scala | 6 +-- .../rest_api}/services/DatasetService.scala | 6 +-- .../rest_api}/services/HDFSService.scala | 2 +- .../services/MappingTableService.scala | 4 +- .../rest_api}/services/MigrationService.scala | 2 +- .../rest_api}/services/ModelService.scala | 4 +- .../services/MonitoringService.scala | 4 +- .../rest_api}/services/OozieService.scala | 12 ++--- .../services/PropertyDefinitionService.scala | 6 +-- .../rest_api}/services/RunService.scala | 8 ++-- .../services/SchemaRegistryService.scala | 10 ++-- .../rest_api}/services/SchemaService.scala | 6 +-- .../services/VersionedModelService.scala | 10 ++-- .../rest_api}/utils/SchemaType.scala | 4 +- .../SparkMenasSchemaConvertor.scala | 4 +- .../StringToValidationKindConverter.scala | 2 +- .../utils/converters/model0/Schema.scala | 2 +- .../utils/converters/model0/SchemaField.scala | 2 +- .../utils/converters/model0/Serializer.scala | 2 +- .../converters/model0/VersionedModel.scala | 2 +- .../rest_api}/utils/implicits/package.scala | 6 +-- .../utils/parsers/SchemaParser.scala | 8 ++-- .../src/test/resources/application.properties | 6 +-- .../src/test/resources/log4j.properties | 0 .../schemas/avro/avroschema_json_bogus.avsc | 0 .../schemas/avro/avroschema_json_ok.avsc | 0 .../avro/equivalent-to-avroschema.json | 0 .../schemas/copybook/copybook_bogus.cob | 0 .../schemas/copybook/copybook_ok.cob | 0 .../copybook/equivalent-to-copybook.json | 0 .../schemas/json/schema_json_bogus.json | 0 .../schemas/json/schema_json_ok.json | 0 .../rest_api}/auth/jwt/JwtFactoryTest.scala | 2 +- .../controllers/SchemaControllerSuite.scala | 6 +-- .../rest_api}/integration/InMemoryUsers.scala | 2 +- .../rest_api}/integration/RunImplicits.scala | 4 +- .../integration/TestContextManagement.scala | 2 +- .../TestInMemoryMenasAuthentication.scala | 4 +- .../AuthenticationIntegrationSuite.scala | 8 ++-- .../controllers/BaseRestApiTest.scala | 4 +- .../DatasetApiIntegrationSuite.scala | 4 +- ...ropertyDefinitionApiIntegrationSuite.scala | 4 +- .../controllers/RunApiIntegrationSuite.scala | 8 ++-- .../SchemaApiFeaturesIntegrationSuite.scala | 19 ++++---- .../integration/controllers/package.scala | 2 +- .../fixtures/AttachmentFixtureService.scala | 4 +- .../fixtures/DatasetFixtureService.scala | 4 +- .../integration/fixtures/FixtureService.scala | 2 +- .../fixtures/MappingTableFixtureService.scala | 4 +- .../PropertyDefinitionFixtureService.scala | 4 +- .../fixtures/RunFixtureService.scala | 4 +- .../fixtures/SchemaFixtureService.scala | 4 +- .../integration/mongo/EmbeddedMongo.scala | 4 +- ...AttachmentRepositoryIntegrationSuite.scala | 6 +-- .../repositories/BaseRepositoryTest.scala | 8 ++-- .../DatasetRepositoryIntegrationSuite.scala | 8 ++-- .../RunRepositoryIntegrationSuite.scala | 10 ++-- .../co/absa/enceladus/rest_api}/package.scala | 2 +- .../schema/SchemaConvertersSuite.scala | 4 +- .../rest_api}/services/BaseServiceTest.scala | 2 +- .../services/DatasetServiceTest.scala | 6 +-- .../rest_api}/services/HDFSServiceSuite.scala | 2 +- .../services/MappingTableServiceTest.scala | 4 +- .../rest_api}/services/RunServiceTest.scala | 6 +-- .../services/SchemaServiceTest.scala | 6 +-- .../VersionedModelServiceAuditTest.scala | 8 ++-- .../services/VersionedModelServiceTest.scala | 4 +- .../rest_api}/utils/SchemaTypeSuite.scala | 4 +- .../SparkMenasSchemaConvertorSuite.scala | 4 +- ...tringToValidationLevelConverterSuite.scala | 2 +- .../utils/parsers/SchemaParserSuite.scala | 10 ++-- .../common/config/JobConfigParser.scala | 2 +- 163 files changed, 368 insertions(+), 384 deletions(-) delete mode 100644 menas/src/main/resources/banner.txt delete mode 100644 menas/src/main/resources/start_menas.sh rename {menas => rest-api}/Dockerfile (86%) rename {menas => rest-api}/pom.xml (99%) rename {menas => rest-api}/src/main/resources/application.properties.template (100%) create mode 100644 rest-api/src/main/resources/banner.txt rename {menas => rest-api}/src/main/resources/docker.properties.template (100%) rename {menas => rest-api}/src/main/resources/docker/envoy/Dockerfile (100%) rename {menas => rest-api}/src/main/resources/docker/envoy/envoy.yaml (97%) rename {menas => rest-api}/src/main/resources/docker/envoy/start_envoy.sh (100%) rename {menas => rest-api}/src/main/resources/docker/server.xml (100%) rename menas/src/main/resources/docker/start_menas.sh => rest-api/src/main/resources/docker/start_rest_api.sh (100%) rename {menas => rest-api}/src/main/resources/scheduling/oozie/coordinator_template.xml (100%) rename {menas => rest-api}/src/main/resources/scheduling/oozie/workflow_template.xml (100%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/Application.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/HDFSConfig.scala (99%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/MongoConfig.scala (92%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/MvcConfig.scala (87%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/OozieConfig.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/ServletInitializer.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/SparkConfig.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/SpringFoxConfig.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/WebSecurityConfig.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/AuthConstants.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/InMemoryMenasAuthentication.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/MenasAuthentication.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/MenasAuthenticationFailureHandler.scala (91%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/MenasAuthenticationSuccessHandler.scala (92%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/exceptions/AuthHostTimeoutException.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/exceptions/BadKrbHostException.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/exceptions/BadLdapHostException.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/jwt/JwtAuthenticationFilter.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/jwt/JwtFactory.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/kerberos/KerberosLdapUserSearch.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/kerberos/MenasKerberosAuthentication.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/kerberos/MenasKerberosAuthenticationProvider.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/auth/kerberos/MenasKerberosLdapContextSource.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/BaseController.scala (87%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/ConfigurationController.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/DatasetController.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/HDFSController.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/LandingPageController.scala (81%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/MappingTableController.scala (92%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/MonitoringController.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/OozieController.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/PropertyDefinitionController.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/RestExceptionHandler.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/RunController.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/SchemaController.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/SparkController.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/UserInfoController.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/controllers/VersionedModelController.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/EndpointDisabled.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/EntityAlreadyExistsException.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/EntityInUseException.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/NotFoundException.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/OozieActionException.scala (82%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/OozieConfigurationException.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/exceptions/ValidationException.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/health/HdfsHealthChecker.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/health/MongoHealthChecker.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/LandingPageInformation.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/OozieCoordinatorStatus.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/RestError.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/RunSummary.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/SchemaApiFeatures.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/TodaysRunsStatistics.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/ResponseError.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/RestResponse.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/errors/RemoteSchemaRetrievalError.scala (83%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/errors/RequestTimeoutExpiredError.scala (86%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/errors/SchemaFormatError.scala (84%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/errors/SchemaParsingError.scala (83%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/exceptions/RemoteSchemaRetrievalException.scala (90%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/exceptions/SchemaFormatException.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/models/rest/exceptions/SchemaParsingException.scala (91%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/AttachmentMongoRepository.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/DatasetMongoRepository.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/LandingPageStatisticsMongoRepository.scala (85%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/MappingTableMongoRepository.scala (91%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/MongoRepository.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/MonitoringMongoRepository.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/OozieRepository.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/PropertyDefinitionMongoRepository.scala (88%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/RefCollection.java (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/RunMongoRepository.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/SchemaMongoRepository.scala (88%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/repositories/VersionedMongoRepository.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/AttachmentService.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/DatasetService.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/HDFSService.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/MappingTableService.scala (96%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/MigrationService.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/ModelService.scala (90%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/MonitoringService.scala (90%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/OozieService.scala (89%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/PropertyDefinitionService.scala (91%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/RunService.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/SchemaRegistryService.scala (95%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/SchemaService.scala (92%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/services/VersionedModelService.scala (97%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/SchemaType.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/SparkMenasSchemaConvertor.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/StringToValidationKindConverter.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/model0/Schema.scala (92%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/model0/SchemaField.scala (93%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/model0/Serializer.scala (98%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/converters/model0/VersionedModel.scala (91%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/implicits/package.scala (94%) rename {menas/src/main/scala/za/co/absa/enceladus/menas => rest-api/src/main/scala/za/co/absa/enceladus/rest_api}/utils/parsers/SchemaParser.scala (93%) rename {menas => rest-api}/src/test/resources/application.properties (91%) rename {menas => rest-api}/src/test/resources/log4j.properties (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/avro/avroschema_json_bogus.avsc (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/avro/avroschema_json_ok.avsc (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/avro/equivalent-to-avroschema.json (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/copybook/copybook_bogus.cob (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/copybook/copybook_ok.cob (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/copybook/equivalent-to-copybook.json (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/json/schema_json_bogus.json (100%) rename {menas => rest-api}/src/test/resources/test_data/schemas/json/schema_json_ok.json (100%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/auth/jwt/JwtFactoryTest.scala (97%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/controllers/SchemaControllerSuite.scala (90%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/InMemoryUsers.scala (94%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/RunImplicits.scala (90%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/TestContextManagement.scala (95%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/TestInMemoryMenasAuthentication.scala (91%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/AuthenticationIntegrationSuite.scala (88%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/BaseRestApiTest.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/DatasetApiIntegrationSuite.scala (99%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala (99%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/RunApiIntegrationSuite.scala (99%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/controllers/package.scala (96%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/AttachmentFixtureService.scala (87%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/DatasetFixtureService.scala (87%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/FixtureService.scala (96%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/MappingTableFixtureService.scala (87%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/PropertyDefinitionFixtureService.scala (87%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/RunFixtureService.scala (92%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/fixtures/SchemaFixtureService.scala (87%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/mongo/EmbeddedMongo.scala (95%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/repositories/AttachmentRepositoryIntegrationSuite.scala (94%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/repositories/BaseRepositoryTest.scala (85%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/repositories/DatasetRepositoryIntegrationSuite.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/integration/repositories/RunRepositoryIntegrationSuite.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/package.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/schema/SchemaConvertersSuite.scala (99%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/BaseServiceTest.scala (96%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/DatasetServiceTest.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/HDFSServiceSuite.scala (98%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/MappingTableServiceTest.scala (85%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/RunServiceTest.scala (95%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/SchemaServiceTest.scala (84%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/VersionedModelServiceAuditTest.scala (94%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/services/VersionedModelServiceTest.scala (94%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/utils/SchemaTypeSuite.scala (94%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/utils/converters/SparkMenasSchemaConvertorSuite.scala (97%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/utils/converters/StringToValidationLevelConverterSuite.scala (95%) rename {menas/src/test/scala/za/co/absa/enceladus/menas => rest-api/src/test/scala/za/co/absa/enceladus/rest_api}/utils/parsers/SchemaParserSuite.scala (93%) diff --git a/README.md b/README.md index ce4e7aabf..a9f5a999a 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,7 @@ ___ - [What is Enceladus?](#what-is-enceladus) + - [REST API](#rest-api) - [Menas](#menas) - [Standardization](#standardization) - [Conformance](#conformance) @@ -38,16 +39,20 @@ ___ ## What is Enceladus? **Enceladus** is a **Dynamic Conformance Engine** which allows data from different formats to be standardized to parquet and conformed to group-accepted common reference (e.g. data for country designation which are **DE** in one source system and **Deutschland** in another, can be conformed to **Germany**). -The project is comprised of three main components: -### Menas -This is the user-facing web client, used to **specify the standardization schema**, and **define the steps required to conform** a dataset. -There are three models used to do this: +The project is comprised of four main components: + +### REST API +The REST API exposes the Enceladus endpoints for creating, reading, updating and deleting the models, as well as other functionalities. +The main three models used are: - **Dataset**: Specifies where the dataset will be read from on HDFS (**RAW**), the conformance rules that will be applied to it, and where it will land on HDFS once it is conformed (**PUBLISH**) - **Schema**: Specifies the schema towards which the dataset will be standardized - **Mapping Table**: Specifies where tables with master reference data can be found (parquet on HDFS), which are used when applying Mapping conformance rules (e.g. the dataset uses **Germany**, which maps to the master reference **DE** in the mapping table) - -The Menas web client calls the REST API to get the needed entities. -The REST API exposes a Swagger Documentation UI which documents all the HTTP endpoints exposed. It can be found at **REST_API_HOST/swagger-ui.html** + +The REST API exposes a Swagger Documentation UI which documents all the HTTP exposed endpoints. It can be found at **REST_API_HOST/swagger-ui.html** + +### Menas +This is the user-facing web client, used to **specify the standardization schema**, and **define the steps required to conform** a dataset. +The Menas web client calls and is based on the REST API to get the needed entities. ### Standardization This is a Spark job which reads an input dataset in any of the supported formats and **produces a parquet dataset with the Menas-specified schema** as output. @@ -79,26 +84,33 @@ Ensure the properties there fit your environment. The coverage reports are written in each module's `target` directory and aggregated in the root `target` directory. ## How to run -#### Menas requirements: +#### REST API requirements: - [**Tomcat 8.5/9.0** installation](https://tomcat.apache.org/download-90.cgi) - [**MongoDB 4.0** installation](https://docs.mongodb.com/manual/administration/install-community/) - [**Spline UI deployment**](https://absaoss.github.io/spline/) - place the [spline.war](https://search.maven.org/remotecontent?filepath=za/co/absa/spline/spline-web/0.3.9/spline-web-0.3.9.war) in your Tomcat webapps directory (rename after downloading to _spline.war_); NB! don't forget to set up the `spline.mongodb.url` configuration for the _war_ - **HADOOP_CONF_DIR** environment variable, pointing to the location of your hadoop configuration (pointing to a hadoop installation) -The _Spline UI_ can be omitted; in such case the **Menas** `spline.urlTemplate` setting should be set to empty string. +The _Spline UI_ can be omitted; in such case the **REST API** `spline.urlTemplate` setting should be set to empty string. + +#### Deploying REST API +Simply copy the **rest-api.war** file produced when building the project into Tomcat's webapps directory. +Another possible method is building the Docker image based on the existing Dockerfile and deploying it as a container. #### Deploying Menas -Simply copy the **menas.war** and **menas-web.war** files produced when building the project into Tomcat's webapps directory. +There are several ways of deploying Menas: +- Tomcat deployment: copy the **menas.war** file produced when building the project into Tomcat's webapps directory. The **"apiUrl"** value in package.json should be set either before building or after building the artifact and modifying it in place +- Docker deployment: build the Docker image based on the existing Dockerfile and deploy it as a container. The **API_URL** environment variable should be provided when running the container +- CDN deployment: copy the built contents in the **dist** directory into your preferred CDN server. The **"apiUrl"** value in package.json in the **dist** directory should be set -#### Speed up initial loading time of Menas +#### Speed up initial loading time of REST API - Enable the HTTP compression -- Configure `spring.resources.cache.cachecontrol.max-age` in `application.properties` of Menas for caching of static resources +- Configure `spring.resources.cache.cachecontrol.max-age` in `application.properties` of REST API for caching of static resources #### Standardization and Conformance requirements: - [**Spark 2.4.4 (Scala 2.11)** installation](https://spark.apache.org/downloads.html) - [**Hadoop 2.7** installation](https://hadoop.apache.org/releases.html) -- **Menas** running instance +- **REST API** running instance - **Menas Credentials File** in your home directory or on HDFS (a configuration file for authenticating the Spark jobs with Menas) - **Use with in-memory authentication** e.g. `~/menas-credential.properties`: @@ -106,7 +118,7 @@ e.g. `~/menas-credential.properties`: username=user password=changeme ``` -- **Menas Keytab File** in your home directory or on HDFS +- **REST API Keytab File** in your home directory or on HDFS - **Use with kerberos authentication**, see [link](https://kb.iu.edu/d/aumh) for details on creating keytab files - **Directory structure** for the **RAW** dataset should follow the convention of `////v`. This date is specified with the `--report-date` option when running the **Standardization** and **Conformance** jobs. - **_INFO file** must be present along with the **RAW** data on HDFS as per the above directory structure. This is a file tracking control measures via [Atum](https://github.com/AbsaOSS/atum), an example can be found [here](examples/data/input/_INFO). @@ -132,7 +144,7 @@ password=changeme --row-tag ``` * Here `row-tag` is a specific option for `raw-format` of type `XML`. For more options for different types please see our WIKI. -* In case Menas is configured for in-memory authentication (e.g. in dev environments), replace `--menas-auth-keytab` with `--menas-credentials-file` +* In case REST API is configured for in-memory authentication (e.g. in dev environments), replace `--menas-auth-keytab` with `--menas-credentials-file` #### Running Conformance ``` @@ -176,7 +188,7 @@ password=changeme --row-tag ``` -* In case Menas is configured for in-memory authentication (e.g. in dev environments), replace `--menas-auth-keytab` with `--menas-credentials-file` +* In case REST API is configured for in-memory authentication (e.g. in dev environments), replace `--menas-auth-keytab` with `--menas-credentials-file` #### Helper scripts for running Standardization, Conformance or both together @@ -273,8 +285,8 @@ The list of all options for running Standardization, Conformance and the combine | Option | Description | |---------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| -| --menas-auth-keytab **filename** | A keytab file used for Kerberized authentication to Menas. Cannot be used together with `--menas-credentials-file`. | -| --menas-credentials-file **filename** | A credentials file containing a login and a password used to authenticate to Menas. Cannot be used together with `--menas-auth-keytab`. | +| --menas-auth-keytab **filename** | A keytab file used for Kerberized authentication to REST API. Cannot be used together with `--menas-credentials-file`. | +| --menas-credentials-file **filename** | A credentials file containing a login and a password used to authenticate to REST API. Cannot be used together with `--menas-auth-keytab`. | | --dataset-name **name** | A dataset name to be standardized or conformed. | | --dataset-version **version** | A version of a dataset to be standardized or conformed. | | --report-date **YYYY-mm-dd** | A date specifying a day for which a raw data is landed. | diff --git a/menas/src/main/resources/banner.txt b/menas/src/main/resources/banner.txt deleted file mode 100644 index 07089b3e9..000000000 --- a/menas/src/main/resources/banner.txt +++ /dev/null @@ -1,7 +0,0 @@ - __ __ -| \/ | -| \ / | ___ _ __ __ _ ___ -| |\/| |/ _ \ '_ \ / _` / __| -| | | | __/ | | | (_| \__ \ -|_| |_|\___|_| |_|\__,_|___/ -version ${application.version} diff --git a/menas/src/main/resources/start_menas.sh b/menas/src/main/resources/start_menas.sh deleted file mode 100644 index d0311f8ee..000000000 --- a/menas/src/main/resources/start_menas.sh +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/bash - -# Copyright 2018 ABSA Group Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -if [[ -n ${PRIVATE_KEY} && -n ${CERTIFICATE} && -n ${CA_CHAIN} ]]; then - echo "Certificate, chain and private key present, running secured version" - echo "${PRIVATE_KEY}" >> conf/private.pem - echo "${CERTIFICATE}" >> conf/certificate.pem - echo "${CA_CHAIN}" >> conf/cachain.pem - rm conf/server.xml - cp /tmp/server.xml conf/server.xml -fi -#Debugging -#export CATALINA_OPTS="$CATALINA_OPTS -agentlib:jdwp=transport=dt_socket,address=5005,server=y,suspend=n" -catalina.sh run diff --git a/pom.xml b/pom.xml index 1fc45b1e0..cbd688d30 100644 --- a/pom.xml +++ b/pom.xml @@ -118,7 +118,7 @@ dao data-model examples - menas + rest-api migrations-cli migrations plugins-api diff --git a/menas/Dockerfile b/rest-api/Dockerfile similarity index 86% rename from menas/Dockerfile rename to rest-api/Dockerfile index c2f7db100..517bc0a51 100644 --- a/menas/Dockerfile +++ b/rest-api/Dockerfile @@ -11,14 +11,14 @@ # See the License for the specific language governing permissions and # limitations under the License. -# To build, first build menas and be in enceladus/menas folder. Then run: -# $> docker build -t menas . +# To build, first build rest-api and be in enceladus/rest-api folder. Then run: +# $> docker build -t rest-api . # Run image using: # $> docker run \ # -e MENAS_MONGO_CONNECTION_STRING=mongodb://host.docker.internal:27017 \ # -e MENAS_MONGO_CONNECTION_DATABASE=menas \ # -p 8080:8080 \ -# menas +# rest-api ARG DOCKER_BASE_ARTIFACT=tomcat ARG DOCKER_BASE_TAG=9-jre8-alpine @@ -29,15 +29,15 @@ LABEL \ vendor="AbsaOSS" \ copyright="2020 ABSA Group Limited" \ license="Apache License, version 2.0" \ - name="Menas" + name="Encelauds REST API" ARG WAR_FILE ARG PROPERTY_FILE ENV SPRING_CONFIG_NAME=${PROPERTY_FILE:-"application"} -ADD ./src/main/resources/docker/start_menas.sh start_menas.sh -RUN chmod +x start_menas.sh && \ +ADD ./src/main/resources/docker/start_rest_api.sh start_rest_api.sh +RUN chmod +x start_rest_api.sh && \ rm -rf webapps/* ADD ./target/${WAR_FILE} webapps/ROOT.war @@ -69,4 +69,4 @@ EXPOSE 8443 EXPOSE 8009 #Debugging #EXPOSE 5005 -CMD ["./start_menas.sh"] +CMD ["./start_rest_api.sh"] diff --git a/menas/pom.xml b/rest-api/pom.xml similarity index 99% rename from menas/pom.xml rename to rest-api/pom.xml index b3a7b6be0..2f2129ef5 100644 --- a/menas/pom.xml +++ b/rest-api/pom.xml @@ -15,7 +15,7 @@ 4.0.0 - menas + rest-api war @@ -294,7 +294,7 @@ spring-boot-maven-plugin ${spring.version} - za.co.absa.enceladus.menas.Application + za.co.absa.enceladus.rest_api.Application diff --git a/menas/src/main/resources/application.properties.template b/rest-api/src/main/resources/application.properties.template similarity index 100% rename from menas/src/main/resources/application.properties.template rename to rest-api/src/main/resources/application.properties.template diff --git a/rest-api/src/main/resources/banner.txt b/rest-api/src/main/resources/banner.txt new file mode 100644 index 000000000..502bd6261 --- /dev/null +++ b/rest-api/src/main/resources/banner.txt @@ -0,0 +1,7 @@ + ____ _____ ____ _____ _ ____ ___ + | _ \| ____/ ___|_ _| / \ | _ \_ _| + | |_) | _| \___ \ | |_____ / _ \ | |_) | | + | _ <| |___ ___) || |_____/ ___ \| __/| | + |_| \_\_____|____/ |_| /_/ \_\_| |___| + +Enceladus version ${application.version} diff --git a/menas/src/main/resources/docker.properties.template b/rest-api/src/main/resources/docker.properties.template similarity index 100% rename from menas/src/main/resources/docker.properties.template rename to rest-api/src/main/resources/docker.properties.template diff --git a/menas/src/main/resources/docker/envoy/Dockerfile b/rest-api/src/main/resources/docker/envoy/Dockerfile similarity index 100% rename from menas/src/main/resources/docker/envoy/Dockerfile rename to rest-api/src/main/resources/docker/envoy/Dockerfile diff --git a/menas/src/main/resources/docker/envoy/envoy.yaml b/rest-api/src/main/resources/docker/envoy/envoy.yaml similarity index 97% rename from menas/src/main/resources/docker/envoy/envoy.yaml rename to rest-api/src/main/resources/docker/envoy/envoy.yaml index 1e5ad86aa..6cbf7578f 100644 --- a/menas/src/main/resources/docker/envoy/envoy.yaml +++ b/rest-api/src/main/resources/docker/envoy/envoy.yaml @@ -40,7 +40,7 @@ static_resources: - "*" routes: - match: - prefix: "/menas" + prefix: "/rest_api" route: cluster: local_service http_filters: diff --git a/menas/src/main/resources/docker/envoy/start_envoy.sh b/rest-api/src/main/resources/docker/envoy/start_envoy.sh similarity index 100% rename from menas/src/main/resources/docker/envoy/start_envoy.sh rename to rest-api/src/main/resources/docker/envoy/start_envoy.sh diff --git a/menas/src/main/resources/docker/server.xml b/rest-api/src/main/resources/docker/server.xml similarity index 100% rename from menas/src/main/resources/docker/server.xml rename to rest-api/src/main/resources/docker/server.xml diff --git a/menas/src/main/resources/docker/start_menas.sh b/rest-api/src/main/resources/docker/start_rest_api.sh similarity index 100% rename from menas/src/main/resources/docker/start_menas.sh rename to rest-api/src/main/resources/docker/start_rest_api.sh diff --git a/menas/src/main/resources/scheduling/oozie/coordinator_template.xml b/rest-api/src/main/resources/scheduling/oozie/coordinator_template.xml similarity index 100% rename from menas/src/main/resources/scheduling/oozie/coordinator_template.xml rename to rest-api/src/main/resources/scheduling/oozie/coordinator_template.xml diff --git a/menas/src/main/resources/scheduling/oozie/workflow_template.xml b/rest-api/src/main/resources/scheduling/oozie/workflow_template.xml similarity index 100% rename from menas/src/main/resources/scheduling/oozie/workflow_template.xml rename to rest-api/src/main/resources/scheduling/oozie/workflow_template.xml diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/Application.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/Application.scala index a4d10e1f0..39e9f5b97 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/Application.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/Application.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper, SerializationFeature} import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/HDFSConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala similarity index 99% rename from menas/src/main/scala/za/co/absa/enceladus/menas/HDFSConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala index 034025cef..33eff405a 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/HDFSConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.apache.hadoop.conf.{Configuration => HadoopConfiguration} import org.apache.hadoop.fs.{FileSystem, Path} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/MongoConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MongoConfig.scala similarity index 92% rename from menas/src/main/scala/za/co/absa/enceladus/menas/MongoConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MongoConfig.scala index 4bfd044f1..70af96dc1 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/MongoConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MongoConfig.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.mongodb.scala.{MongoClient, MongoDatabase} import org.springframework.beans.factory.annotation.Value @@ -21,7 +21,7 @@ import org.springframework.context.annotation.{Bean, Configuration} @Configuration class MongoConfig { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ @Value("${menas.mongo.connection.string}") val connectionString: String = "" diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MvcConfig.scala similarity index 87% rename from menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MvcConfig.scala index 9ef14fd22..108a63fb8 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/MvcConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/MvcConfig.scala @@ -13,13 +13,13 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.springframework.context.annotation.Configuration import org.springframework.format.FormatterRegistry import org.springframework.web.servlet.config.annotation.{CorsRegistry, ViewControllerRegistry, WebMvcConfigurer} -import za.co.absa.enceladus.menas.auth.AuthConstants.{CsrfTokenKey, JwtKey} -import za.co.absa.enceladus.menas.utils.converters.StringToValidationKindConverter +import za.co.absa.enceladus.rest_api.auth.AuthConstants.{CsrfTokenKey, JwtKey} +import za.co.absa.enceladus.rest_api.utils.converters.StringToValidationKindConverter @Configuration class MvcConfig extends WebMvcConfigurer { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/OozieConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/OozieConfig.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/OozieConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/OozieConfig.scala index 221944805..28072ea1e 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/OozieConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/OozieConfig.scala @@ -13,13 +13,13 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.springframework.context.annotation.{ Configuration, Bean } import org.springframework.beans.factory.annotation.Value import org.apache.oozie.client.OozieClient import scala.util.Try -import za.co.absa.enceladus.menas.exceptions.OozieConfigurationException +import za.co.absa.enceladus.rest_api.exceptions.OozieConfigurationException import scala.util.Success import scala.util.Failure import org.apache.oozie.client.AuthOozieClient diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/ServletInitializer.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/ServletInitializer.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/ServletInitializer.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/ServletInitializer.scala index 8f244adbe..a234bd29b 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/ServletInitializer.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/ServletInitializer.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.springframework.boot.builder.SpringApplicationBuilder import org.springframework.boot.web.servlet.support.SpringBootServletInitializer diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/SparkConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SparkConfig.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/SparkConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SparkConfig.scala index 13fed8137..e8244c2dc 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/SparkConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SparkConfig.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.springframework.context.annotation.{ Configuration, Bean } import org.apache.spark.sql.SparkSession diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SpringFoxConfig.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SpringFoxConfig.scala index 133619d49..6121ad047 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/SpringFoxConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/SpringFoxConfig.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import com.google.common.base.Predicate import com.google.common.base.Predicates.or diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala index 714b5d020..43ab92128 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/WebSecurityConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas +package za.co.absa.enceladus.rest_api import org.slf4j.LoggerFactory import org.springframework.beans.factory.BeanFactory @@ -27,9 +27,9 @@ import org.springframework.security.config.annotation.web.configuration.{EnableW import org.springframework.security.config.http.SessionCreationPolicy import org.springframework.security.kerberos.web.authentication.{SpnegoAuthenticationProcessingFilter, SpnegoEntryPoint} import org.springframework.security.web.authentication._ -import za.co.absa.enceladus.menas.auth._ -import za.co.absa.enceladus.menas.auth.jwt.JwtAuthenticationFilter -import za.co.absa.enceladus.menas.auth.kerberos.MenasKerberosAuthentication +import za.co.absa.enceladus.rest_api.auth._ +import za.co.absa.enceladus.rest_api.auth.jwt.JwtAuthenticationFilter +import za.co.absa.enceladus.rest_api.auth.kerberos.MenasKerberosAuthentication @EnableWebSecurity diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/AuthConstants.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/AuthConstants.scala index 72d2db80f..f698f7221 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/AuthConstants.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/AuthConstants.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth +package za.co.absa.enceladus.rest_api.auth import org.springframework.beans.factory.annotation.{Autowired, Value} import org.springframework.security.core.{Authentication, GrantedAuthority} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/InMemoryMenasAuthentication.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/InMemoryMenasAuthentication.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/InMemoryMenasAuthentication.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/InMemoryMenasAuthentication.scala index 4e979c947..5a8804ee7 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/InMemoryMenasAuthentication.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/InMemoryMenasAuthentication.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth +package za.co.absa.enceladus.rest_api.auth import org.springframework.beans.factory.annotation.Value import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthentication.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthentication.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthentication.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthentication.scala index 953630e75..98986aad4 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthentication.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthentication.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth +package za.co.absa.enceladus.rest_api.auth import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationFailureHandler.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationFailureHandler.scala similarity index 91% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationFailureHandler.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationFailureHandler.scala index d8aec5a08..1202784f4 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationFailureHandler.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationFailureHandler.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth +package za.co.absa.enceladus.rest_api.auth import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.slf4j.LoggerFactory @@ -21,7 +21,7 @@ import org.springframework.http.HttpStatus import org.springframework.security.core.AuthenticationException import org.springframework.security.web.authentication.AuthenticationFailureHandler import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.auth.exceptions.{AuthHostTimeoutException, BadKrbHostException, BadLdapHostException} +import za.co.absa.enceladus.rest_api.auth.exceptions.{AuthHostTimeoutException, BadKrbHostException, BadLdapHostException} /** * This class is responsible for mapping authentication exceptions to status codes in HTTP responses. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationSuccessHandler.scala similarity index 92% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationSuccessHandler.scala index caef3c7e6..bc3abac91 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/MenasAuthenticationSuccessHandler.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/MenasAuthenticationSuccessHandler.scala @@ -13,19 +13,19 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth +package za.co.absa.enceladus.rest_api.auth import java.util.UUID -import javax.servlet.http.{Cookie, HttpServletRequest, HttpServletResponse} +import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.joda.time.{DateTime, DateTimeZone, Hours} import org.springframework.beans.factory.annotation.{Autowired, Value} import org.springframework.security.core.{Authentication, GrantedAuthority} import org.springframework.security.core.userdetails.UserDetails import org.springframework.security.web.authentication.SimpleUrlAuthenticationSuccessHandler import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.auth.AuthConstants._ -import za.co.absa.enceladus.menas.auth.jwt.JwtFactory +import za.co.absa.enceladus.rest_api.auth.AuthConstants._ +import za.co.absa.enceladus.rest_api.auth.jwt.JwtFactory @Component class MenasAuthenticationSuccessHandler @Autowired()(jwtFactory: JwtFactory, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/AuthHostTimeoutException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/AuthHostTimeoutException.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/AuthHostTimeoutException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/AuthHostTimeoutException.scala index 55e6fb8a9..705162805 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/AuthHostTimeoutException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/AuthHostTimeoutException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.exceptions +package za.co.absa.enceladus.rest_api.auth.exceptions import org.springframework.security.core.AuthenticationException diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadKrbHostException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadKrbHostException.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadKrbHostException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadKrbHostException.scala index 1526cff94..1bb71fc67 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadKrbHostException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadKrbHostException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.exceptions +package za.co.absa.enceladus.rest_api.auth.exceptions import org.springframework.security.core.AuthenticationException diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadLdapHostException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadLdapHostException.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadLdapHostException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadLdapHostException.scala index a6121af2f..1453fb52a 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/exceptions/BadLdapHostException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/exceptions/BadLdapHostException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.exceptions +package za.co.absa.enceladus.rest_api.auth.exceptions import org.springframework.security.core.AuthenticationException diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtAuthenticationFilter.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtAuthenticationFilter.scala index 71e2c1c82..000e4f5dd 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtAuthenticationFilter.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtAuthenticationFilter.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.jwt +package za.co.absa.enceladus.rest_api.auth.jwt import java.util @@ -28,7 +28,7 @@ import org.springframework.security.core.context.SecurityContextHolder import org.springframework.security.core.userdetails.User import org.springframework.stereotype.Component import org.springframework.web.filter.OncePerRequestFilter -import za.co.absa.enceladus.menas.auth.AuthConstants._ +import za.co.absa.enceladus.rest_api.auth.AuthConstants._ import scala.collection.JavaConverters._ import scala.util.{Failure, Success, Try} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactory.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactory.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactory.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactory.scala index 629db31f4..3a9db3880 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactory.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactory.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.jwt +package za.co.absa.enceladus.rest_api.auth.jwt import com.fasterxml.jackson.databind.{DeserializationFeature, ObjectMapper, SerializationFeature} import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala index 241df9293..c12965387 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/ActiveDirectoryLdapAuthoritiesPopulator.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.kerberos +package za.co.absa.enceladus.rest_api.auth.kerberos import java.util diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/KerberosLdapUserSearch.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/KerberosLdapUserSearch.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/KerberosLdapUserSearch.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/KerberosLdapUserSearch.scala index f5964da57..685078866 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/KerberosLdapUserSearch.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/KerberosLdapUserSearch.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.kerberos +package za.co.absa.enceladus.rest_api.auth.kerberos import org.springframework.security.ldap.search.FilterBasedLdapUserSearch import org.springframework.ldap.core.support.BaseLdapPathContextSource diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthentication.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthentication.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthentication.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthentication.scala index 9f69049b1..1d9bcd7f4 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthentication.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthentication.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.kerberos +package za.co.absa.enceladus.rest_api.auth.kerberos import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.apache.log4j.Logger @@ -32,8 +32,8 @@ import org.springframework.security.kerberos.web.authentication.SpnegoAuthentica import org.springframework.security.ldap.userdetails.{LdapUserDetailsMapper, LdapUserDetailsService} import org.springframework.security.web.authentication.{AuthenticationFailureHandler, AuthenticationSuccessHandler} import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.auth.MenasAuthentication -import za.co.absa.enceladus.menas.auth.kerberos.MenasKerberosAuthentication._ +import za.co.absa.enceladus.rest_api.auth.MenasAuthentication +import za.co.absa.enceladus.rest_api.auth.kerberos.MenasKerberosAuthentication._ @Component("kerberosMenasAuthentication") class MenasKerberosAuthentication @Autowired()(@Value("${menas.auth.ad.domain:}") diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthenticationProvider.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthenticationProvider.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthenticationProvider.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthenticationProvider.scala index 0d9aeabc9..fcd169d95 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosAuthenticationProvider.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosAuthenticationProvider.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.kerberos +package za.co.absa.enceladus.rest_api.auth.kerberos import java.net.{SocketTimeoutException, UnknownHostException} import java.security.PrivilegedActionException @@ -26,7 +26,7 @@ import org.springframework.security.authentication.{AuthenticationProvider, BadC import org.springframework.security.core.Authentication import org.springframework.security.ldap.userdetails.LdapUserDetailsService import sun.security.krb5.KrbException -import za.co.absa.enceladus.menas.auth.exceptions.{AuthHostTimeoutException, BadKrbHostException, BadLdapHostException} +import za.co.absa.enceladus.rest_api.auth.exceptions.{AuthHostTimeoutException, BadKrbHostException, BadLdapHostException} import scala.util.control.NonFatal diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosLdapContextSource.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosLdapContextSource.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosLdapContextSource.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosLdapContextSource.scala index 65c636b70..ae9e4e122 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/auth/kerberos/MenasKerberosLdapContextSource.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/auth/kerberos/MenasKerberosLdapContextSource.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.kerberos +package za.co.absa.enceladus.rest_api.auth.kerberos import java.security.PrivilegedAction diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/BaseController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/BaseController.scala similarity index 87% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/BaseController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/BaseController.scala index 097af4984..319ce49e6 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/BaseController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/BaseController.scala @@ -13,10 +13,10 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import org.slf4j.LoggerFactory -import za.co.absa.enceladus.menas.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException abstract class BaseController { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/ConfigurationController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/ConfigurationController.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/ConfigurationController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/ConfigurationController.scala index 2c32fbe6b..840d40293 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/ConfigurationController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/ConfigurationController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import org.springframework.beans.factory.annotation.Value import org.springframework.web.bind.annotation.{GetMapping, RequestMapping, RestController} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/DatasetController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/DatasetController.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/DatasetController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/DatasetController.scala index 9689a2d8d..01af42ea3 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/DatasetController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/DatasetController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.net.URI import java.util @@ -25,7 +25,7 @@ import org.springframework.http.{HttpStatus, ResponseEntity} import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.security.core.userdetails.UserDetails import org.springframework.web.bind.annotation._ -import za.co.absa.enceladus.menas.services.DatasetService +import za.co.absa.enceladus.rest_api.services.DatasetService import za.co.absa.enceladus.utils.validation.ValidationLevel.{NoValidationName, ValidationLevel} import za.co.absa.enceladus.model.conformanceRule.ConformanceRule import za.co.absa.enceladus.model.properties.PropertyDefinition @@ -39,7 +39,7 @@ import scala.util.Try class DatasetController @Autowired()(datasetService: DatasetService) extends VersionedModelController(datasetService) { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/HDFSController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/HDFSController.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/HDFSController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/HDFSController.scala index cc88a2a2e..d5ed48dae 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/HDFSController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/HDFSController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.concurrent.CompletableFuture @@ -22,13 +22,13 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation._ import za.co.absa.enceladus.model.menas.HDFSFolder -import za.co.absa.enceladus.menas.services.HDFSService +import za.co.absa.enceladus.rest_api.services.HDFSService @RestController @RequestMapping(Array("/api/hdfs")) class HDFSController @Autowired() (hdfsService: HDFSService) extends BaseController { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/LandingPageController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/LandingPageController.scala similarity index 81% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/LandingPageController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/LandingPageController.scala index e372b5be8..1d8d62c06 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/LandingPageController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/LandingPageController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.concurrent.CompletableFuture @@ -26,12 +26,12 @@ import org.springframework.web.bind.annotation.GetMapping import org.springframework.web.bind.annotation.RequestMapping import org.springframework.web.bind.annotation.RestController -import za.co.absa.enceladus.menas.models.LandingPageInformation -import za.co.absa.enceladus.menas.repositories.DatasetMongoRepository -import za.co.absa.enceladus.menas.repositories.LandingPageStatisticsMongoRepository -import za.co.absa.enceladus.menas.repositories.MappingTableMongoRepository -import za.co.absa.enceladus.menas.repositories.SchemaMongoRepository -import za.co.absa.enceladus.menas.services.RunService +import za.co.absa.enceladus.rest_api.models.LandingPageInformation +import za.co.absa.enceladus.rest_api.repositories.DatasetMongoRepository +import za.co.absa.enceladus.rest_api.repositories.LandingPageStatisticsMongoRepository +import za.co.absa.enceladus.rest_api.repositories.MappingTableMongoRepository +import za.co.absa.enceladus.rest_api.repositories.SchemaMongoRepository +import za.co.absa.enceladus.rest_api.services.RunService @RestController @RequestMapping(Array("/api/landing")) @@ -42,7 +42,7 @@ class LandingPageController @Autowired() (datasetRepository: DatasetMongoReposit landingPageRepository: LandingPageStatisticsMongoRepository) extends BaseController { import scala.concurrent.ExecutionContext.Implicits.global - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ @GetMapping(path = Array("/info")) def retrieveLandingPageInfo(): CompletableFuture[LandingPageInformation] = { @@ -67,6 +67,6 @@ class LandingPageController @Autowired() (datasetRepository: DatasetMongoReposit for { newStats <- landingPageInfo() res <- landingPageRepository.updateStatistics(newStats) - } yield res + } yield res } } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MappingTableController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MappingTableController.scala similarity index 92% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MappingTableController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MappingTableController.scala index 6f18d122e..57eb11a9b 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MappingTableController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MappingTableController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.concurrent.CompletableFuture @@ -24,14 +24,14 @@ import org.springframework.security.core.userdetails.UserDetails import org.springframework.web.bind.annotation._ import za.co.absa.enceladus.model._ import za.co.absa.enceladus.model.menas._ -import za.co.absa.enceladus.menas.services.MappingTableService +import za.co.absa.enceladus.rest_api.services.MappingTableService @RestController @RequestMapping(Array("/api/mappingTable")) class MappingTableController @Autowired() (mappingTableService: MappingTableService) extends VersionedModelController(mappingTableService) { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global @PostMapping(path = Array("/updateDefaults")) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MonitoringController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MonitoringController.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MonitoringController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MonitoringController.scala index 5c18c3c99..0f3a34d4a 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/MonitoringController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/MonitoringController.scala @@ -13,21 +13,21 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.concurrent.CompletableFuture import org.springframework.beans.factory.annotation.Autowired import org.springframework.http.HttpStatus import org.springframework.web.bind.annotation.{RestController, RequestMapping, GetMapping, ResponseStatus, PathVariable} -import za.co.absa.enceladus.menas.services.MonitoringService +import za.co.absa.enceladus.rest_api.services.MonitoringService @RestController @RequestMapping(Array("/api/monitoring")) class MonitoringController @Autowired()(monitoringService: MonitoringService) extends BaseController { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ @GetMapping(value = Array("data/datasets/{datasetName}/{startDate}/{endDate}"), produces = Array("application/json")) @ResponseStatus(HttpStatus.OK) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/OozieController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/OozieController.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/OozieController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/OozieController.scala index 8d55beec4..6eb40d8b6 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/OozieController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/OozieController.scala @@ -13,21 +13,21 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import org.springframework.web.bind.annotation._ import org.springframework.beans.factory.annotation.Autowired -import za.co.absa.enceladus.menas.services.OozieService +import za.co.absa.enceladus.rest_api.services.OozieService import java.util.concurrent.CompletableFuture import org.springframework.http.HttpStatus -import za.co.absa.enceladus.menas.models.OozieCoordinatorStatus +import za.co.absa.enceladus.rest_api.models.OozieCoordinatorStatus import za.co.absa.enceladus.model.menas.scheduler.oozie.OozieSchedule import java.util.Optional @RestController @RequestMapping(Array("/api/oozie")) class OozieController @Autowired() (oozieService: OozieService) extends BaseController { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ @GetMapping(path = Array("/isEnabled")) @ResponseStatus(HttpStatus.OK) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/PropertyDefinitionController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/PropertyDefinitionController.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/PropertyDefinitionController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/PropertyDefinitionController.scala index 0b53dcdf8..11c26b063 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/PropertyDefinitionController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/PropertyDefinitionController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.net.URI import java.util.Optional @@ -26,8 +26,8 @@ import org.springframework.security.access.prepost.PreAuthorize import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.security.core.userdetails.UserDetails import org.springframework.web.bind.annotation._ -import za.co.absa.enceladus.menas.exceptions.EndpointDisabled -import za.co.absa.enceladus.menas.services.PropertyDefinitionService +import za.co.absa.enceladus.rest_api.exceptions.EndpointDisabled +import za.co.absa.enceladus.rest_api.services.PropertyDefinitionService import za.co.absa.enceladus.model.ExportableObject import za.co.absa.enceladus.model.properties.PropertyDefinition @@ -42,7 +42,7 @@ import scala.concurrent.ExecutionContext.Implicits.global class PropertyDefinitionController @Autowired()(propertyDefService: PropertyDefinitionService) extends VersionedModelController(propertyDefService) { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ @GetMapping(Array("")) def getAllDatasetProperties(): CompletableFuture[Seq[PropertyDefinition]] = { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RestExceptionHandler.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RestExceptionHandler.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RestExceptionHandler.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RestExceptionHandler.scala index 3ef988efe..5fa14a03b 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RestExceptionHandler.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RestExceptionHandler.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import com.fasterxml.jackson.databind.JsonMappingException import org.apache.oozie.client.OozieClientException @@ -24,12 +24,12 @@ import org.springframework.http.converter.HttpMessageConversionException import org.springframework.web.bind.annotation.{ControllerAdvice, ExceptionHandler, RestController} import org.springframework.web.context.request.async.AsyncRequestTimeoutException import org.springframework.web.method.annotation.MethodArgumentTypeMismatchException -import za.co.absa.enceladus.menas.exceptions._ -import za.co.absa.enceladus.menas.models.RestError -import za.co.absa.enceladus.menas.models.rest.RestResponse -import za.co.absa.enceladus.menas.models.rest.errors.{RemoteSchemaRetrievalError, RequestTimeoutExpiredError, +import za.co.absa.enceladus.rest_api.exceptions._ +import za.co.absa.enceladus.rest_api.models.RestError +import za.co.absa.enceladus.rest_api.models.rest.RestResponse +import za.co.absa.enceladus.rest_api.models.rest.errors.{RemoteSchemaRetrievalError, RequestTimeoutExpiredError, SchemaFormatError, SchemaParsingError} -import za.co.absa.enceladus.menas.models.rest.exceptions.{RemoteSchemaRetrievalException, SchemaFormatException, SchemaParsingException} +import za.co.absa.enceladus.rest_api.models.rest.exceptions.{RemoteSchemaRetrievalException, SchemaFormatException, SchemaParsingException} import za.co.absa.enceladus.model.properties.propertyType.PropertyTypeValidationException import za.co.absa.enceladus.model.{UsedIn, Validation} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RunController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RunController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala index 1d54cbe6f..f9ac1698f 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/RunController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.concurrent.CompletableFuture @@ -25,14 +25,14 @@ import org.springframework.web.bind.annotation._ import za.co.absa.atum.model.{Checkpoint, ControlMeasure, RunStatus} import za.co.absa.atum.utils.SerializationUtils import za.co.absa.enceladus.model.{Run, SplineReference} -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} -import za.co.absa.enceladus.menas.services.RunService +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} +import za.co.absa.enceladus.rest_api.services.RunService @RestController @RequestMapping(path = Array("/api/runs"), produces = Array("application/json")) class RunController @Autowired()(runService: RunService) extends BaseController { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SchemaController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SchemaController.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SchemaController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SchemaController.scala index 0fae96171..a29070477 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SchemaController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SchemaController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.Optional import java.util.concurrent.CompletableFuture @@ -26,13 +26,13 @@ import org.springframework.security.core.annotation.AuthenticationPrincipal import org.springframework.security.core.userdetails.UserDetails import org.springframework.web.bind.annotation._ import org.springframework.web.multipart.MultipartFile -import za.co.absa.enceladus.menas.models.SchemaApiFeatures -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException -import za.co.absa.enceladus.menas.repositories.RefCollection -import za.co.absa.enceladus.menas.services.{AttachmentService, SchemaRegistryService, SchemaService} -import za.co.absa.enceladus.menas.utils.SchemaType -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor -import za.co.absa.enceladus.menas.utils.parsers.SchemaParser +import za.co.absa.enceladus.rest_api.models.SchemaApiFeatures +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.repositories.RefCollection +import za.co.absa.enceladus.rest_api.services.{AttachmentService, SchemaRegistryService, SchemaService} +import za.co.absa.enceladus.rest_api.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.utils.parsers.SchemaParser import za.co.absa.enceladus.model.Schema import za.co.absa.enceladus.model.menas._ @@ -50,7 +50,7 @@ class SchemaController @Autowired()( ) extends VersionedModelController(schemaService) { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SparkController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SparkController.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SparkController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SparkController.scala index 15ae617ae..fafb5df47 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/SparkController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/SparkController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import org.springframework.web.bind.annotation.RestController import org.springframework.web.bind.annotation.RequestMapping diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/UserInfoController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/UserInfoController.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/UserInfoController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/UserInfoController.scala index 1e45cf7cc..5ba74d50b 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/UserInfoController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/UserInfoController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import javax.servlet.http.{HttpServletRequest, HttpServletResponse} import org.springframework.security.core.GrantedAuthority diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/VersionedModelController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/VersionedModelController.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/controllers/VersionedModelController.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/VersionedModelController.scala index a84d71324..dbe997478 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/controllers/VersionedModelController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/VersionedModelController.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import java.util.Optional import java.util.concurrent.CompletableFuture @@ -25,14 +25,14 @@ import org.springframework.security.core.userdetails.UserDetails import org.springframework.web.bind.annotation._ import za.co.absa.enceladus.model.{ExportableObject, UsedIn} import za.co.absa.enceladus.model.versionedModel._ -import za.co.absa.enceladus.menas.exceptions.NotFoundException -import za.co.absa.enceladus.menas.services.VersionedModelService +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.services.VersionedModelService import za.co.absa.enceladus.model.menas.audit._ abstract class VersionedModelController[C <: VersionedModel with Product with Auditable[C]](versionedModelService: VersionedModelService[C]) extends BaseController { - import za.co.absa.enceladus.menas.utils.implicits._ + import za.co.absa.enceladus.rest_api.utils.implicits._ import scala.concurrent.ExecutionContext.Implicits.global diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EndpointDisabled.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EndpointDisabled.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EndpointDisabled.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EndpointDisabled.scala index 61380fd1f..fb745d5df 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EndpointDisabled.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EndpointDisabled.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions case class EndpointDisabled(message:String = "", cause: Throwable = None.orNull) extends Exception(message, cause) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityAlreadyExistsException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityAlreadyExistsException.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityAlreadyExistsException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityAlreadyExistsException.scala index a5f18a50b..96f38780d 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityAlreadyExistsException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityAlreadyExistsException.scala @@ -13,6 +13,6 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions case class EntityAlreadyExistsException(message:String = "", cause: Throwable = None.orNull) extends Exception(message, cause) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityInUseException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityInUseException.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityInUseException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityInUseException.scala index 2024083e7..9661f8767 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/EntityInUseException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/EntityInUseException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions import za.co.absa.enceladus.model.UsedIn diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/NotFoundException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/NotFoundException.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/NotFoundException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/NotFoundException.scala index 5c1410cab..f658901ac 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/NotFoundException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/NotFoundException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions case class NotFoundException(message:String = "", cause: Throwable = None.orNull) extends Exception(message, cause) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieActionException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieActionException.scala similarity index 82% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieActionException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieActionException.scala index 49d3aa870..bcd07df33 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieActionException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieActionException.scala @@ -13,9 +13,6 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions - -import org.springframework.web.bind.annotation.ResponseStatus -import org.springframework.http.HttpStatus +package za.co.absa.enceladus.rest_api.exceptions case class OozieActionException(message: String = "", cause: Throwable = None.orNull) extends RuntimeException(message, cause) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieConfigurationException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieConfigurationException.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieConfigurationException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieConfigurationException.scala index b0e2a2f56..512e76ec0 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/OozieConfigurationException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/OozieConfigurationException.scala @@ -13,6 +13,6 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions case class OozieConfigurationException(message: String = "", cause: Throwable = None.orNull) extends Exception(message, cause) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/ValidationException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/ValidationException.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/ValidationException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/ValidationException.scala index e12e0e5e8..97a3639f8 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/exceptions/ValidationException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/exceptions/ValidationException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.exceptions +package za.co.absa.enceladus.rest_api.exceptions import za.co.absa.enceladus.model.Validation diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/health/HdfsHealthChecker.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/HdfsHealthChecker.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/health/HdfsHealthChecker.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/HdfsHealthChecker.scala index 32ca1ef8c..6b8359877 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/health/HdfsHealthChecker.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/HdfsHealthChecker.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.health +package za.co.absa.enceladus.rest_api.health import org.apache.hadoop.fs.FileSystem import org.slf4j.LoggerFactory diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/health/MongoHealthChecker.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/MongoHealthChecker.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/health/MongoHealthChecker.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/MongoHealthChecker.scala index f51e53e27..1eca839b0 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/health/MongoHealthChecker.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/health/MongoHealthChecker.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.health +package za.co.absa.enceladus.rest_api.health import java.util.concurrent.TimeUnit diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/LandingPageInformation.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/LandingPageInformation.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/LandingPageInformation.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/LandingPageInformation.scala index 5950e1ded..0ea860b34 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/LandingPageInformation.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/LandingPageInformation.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models case class LandingPageInformation( totalNumberDatasets: Int, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/OozieCoordinatorStatus.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/OozieCoordinatorStatus.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/OozieCoordinatorStatus.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/OozieCoordinatorStatus.scala index 1f73554e7..c4ffe633f 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/OozieCoordinatorStatus.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/OozieCoordinatorStatus.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models import org.apache.oozie.client.Job.Status diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/RestError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RestError.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/RestError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RestError.scala index 4ce5a0c5c..f19f14e02 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/RestError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RestError.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models import java.time.ZonedDateTime import java.util.UUID diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/RunSummary.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RunSummary.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/RunSummary.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RunSummary.scala index 37d04f586..2eef87727 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/RunSummary.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/RunSummary.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models case class RunSummary( datasetName: String, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/SchemaApiFeatures.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/SchemaApiFeatures.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/SchemaApiFeatures.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/SchemaApiFeatures.scala index fdbb14cef..95a6cf97e 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/SchemaApiFeatures.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/SchemaApiFeatures.scala @@ -13,6 +13,6 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models case class SchemaApiFeatures(registry: Boolean) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/TodaysRunsStatistics.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/TodaysRunsStatistics.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/TodaysRunsStatistics.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/TodaysRunsStatistics.scala index 61a65952f..8f83cde86 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/TodaysRunsStatistics.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/TodaysRunsStatistics.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models +package za.co.absa.enceladus.rest_api.models case class TodaysRunsStatistics( total: Int, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/ResponseError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/ResponseError.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/ResponseError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/ResponseError.scala index beee4a7a2..6fc64c0da 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/ResponseError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/ResponseError.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest +package za.co.absa.enceladus.rest_api.models.rest import com.fasterxml.jackson.annotation.JsonSubTypes.Type import com.fasterxml.jackson.annotation.{JsonSubTypes, JsonTypeInfo} -import za.co.absa.enceladus.menas.models.rest.errors.{SchemaFormatError, SchemaParsingError} +import za.co.absa.enceladus.rest_api.models.rest.errors.{SchemaFormatError, SchemaParsingError} /** * This abstract class is used as a parent for all REST errors. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/RestResponse.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/RestResponse.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/RestResponse.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/RestResponse.scala index f45ceae5e..f8c236b51 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/RestResponse.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/RestResponse.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest +package za.co.absa.enceladus.rest_api.models.rest import java.time.ZonedDateTime import java.util.UUID diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RemoteSchemaRetrievalError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RemoteSchemaRetrievalError.scala similarity index 83% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RemoteSchemaRetrievalError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RemoteSchemaRetrievalError.scala index 7db5c3da2..07eb0ff7c 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RemoteSchemaRetrievalError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RemoteSchemaRetrievalError.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.errors +package za.co.absa.enceladus.rest_api.models.rest.errors -import za.co.absa.enceladus.menas.models.rest.ResponseError -import za.co.absa.enceladus.menas.models.rest.exceptions.RemoteSchemaRetrievalException -import za.co.absa.enceladus.menas.utils.SchemaType +import za.co.absa.enceladus.rest_api.models.rest.ResponseError +import za.co.absa.enceladus.rest_api.models.rest.exceptions.RemoteSchemaRetrievalException +import za.co.absa.enceladus.rest_api.utils.SchemaType /** * This error is produced when an incorrect schema format is provided. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RequestTimeoutExpiredError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RequestTimeoutExpiredError.scala similarity index 86% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RequestTimeoutExpiredError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RequestTimeoutExpiredError.scala index 6aad4f56e..045e4ce40 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/RequestTimeoutExpiredError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/RequestTimeoutExpiredError.scala @@ -13,9 +13,9 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.errors +package za.co.absa.enceladus.rest_api.models.rest.errors -import za.co.absa.enceladus.menas.models.rest.ResponseError +import za.co.absa.enceladus.rest_api.models.rest.ResponseError /** * This error is produced when a request timeout expires. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaFormatError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaFormatError.scala similarity index 84% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaFormatError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaFormatError.scala index c24256e74..b12279068 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaFormatError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaFormatError.scala @@ -13,10 +13,10 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.errors +package za.co.absa.enceladus.rest_api.models.rest.errors -import za.co.absa.enceladus.menas.models.rest.ResponseError -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaFormatException +import za.co.absa.enceladus.rest_api.models.rest.ResponseError +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaFormatException /** * This error is produced when an incorrect schema format is provided. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaParsingError.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaParsingError.scala similarity index 83% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaParsingError.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaParsingError.scala index 7ef76edf4..92b6c2507 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/errors/SchemaParsingError.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/errors/SchemaParsingError.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.errors +package za.co.absa.enceladus.rest_api.models.rest.errors -import za.co.absa.enceladus.menas.models.rest.ResponseError -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException -import za.co.absa.enceladus.menas.utils.SchemaType +import za.co.absa.enceladus.rest_api.models.rest.ResponseError +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.utils.SchemaType /** * This error is produced when a parsing error is occurred when uploading a schema. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/RemoteSchemaRetrievalException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/RemoteSchemaRetrievalException.scala similarity index 90% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/RemoteSchemaRetrievalException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/RemoteSchemaRetrievalException.scala index 062c9faa1..d28d77366 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/RemoteSchemaRetrievalException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/RemoteSchemaRetrievalException.scala @@ -13,9 +13,9 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.exceptions +package za.co.absa.enceladus.rest_api.models.rest.exceptions -import za.co.absa.enceladus.menas.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.SchemaType /** * This exception is thrown if there is problem loading a remote schema (not an issue with format but with the retrieval itself) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaFormatException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaFormatException.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaFormatException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaFormatException.scala index d170f1f70..fe47610f5 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaFormatException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaFormatException.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.exceptions +package za.co.absa.enceladus.rest_api.models.rest.exceptions /** * This exception is thrown when a wrong schema format is specified. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaParsingException.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaParsingException.scala similarity index 91% rename from menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaParsingException.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaParsingException.scala index 28240978d..dec3a5a00 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/models/rest/exceptions/SchemaParsingException.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/models/rest/exceptions/SchemaParsingException.scala @@ -13,9 +13,9 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.models.rest.exceptions +package za.co.absa.enceladus.rest_api.models.rest.exceptions -import za.co.absa.enceladus.menas.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.SchemaType /** * This exception is thrown when a syntax error parsing a schema file is encountered. diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/AttachmentMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/AttachmentMongoRepository.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/AttachmentMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/AttachmentMongoRepository.scala index f935327aa..854a98a58 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/AttachmentMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/AttachmentMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.MongoDatabase import org.mongodb.scala.bson.collection.immutable.Document @@ -37,7 +37,7 @@ object AttachmentMongoRepository { class AttachmentMongoRepository @Autowired()(mongoDb: MongoDatabase) extends MongoRepository[MenasAttachment](mongoDb)(ClassTag(classOf[MenasAttachment])) { - private[menas] override def collectionBaseName: String = AttachmentMongoRepository.collectionBaseName + private[rest_api] override def collectionBaseName: String = AttachmentMongoRepository.collectionBaseName def getSchemaByNameAndVersion(name: String, version: Int): Future[Option[MenasAttachment]] = { getByCollectionAndNameAndVersion(RefCollection.SCHEMA.name().toLowerCase(), name, version) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/DatasetMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/DatasetMongoRepository.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/DatasetMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/DatasetMongoRepository.scala index f476c5c58..cf8c83a43 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/DatasetMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/DatasetMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.{Completed, MongoDatabase} import org.springframework.beans.factory.annotation.Autowired @@ -45,7 +45,7 @@ class DatasetMongoRepository @Autowired()(mongoDb: MongoDatabase) private val schemaCollection = mongoDb.getCollection[Schema](schemaCollectionName) private val mappingTableCollection = mongoDb.getCollection[MappingTable](mappingTableCollectionName) - private[menas] override def collectionBaseName: String = DatasetMongoRepository.collectionBaseName + private[rest_api] override def collectionBaseName: String = DatasetMongoRepository.collectionBaseName def getConnectedSchema(name: String, version: Int): Future[Option[Schema]] = { schemaCollection.find(getNameVersionFilter(name, Some(version))).headOption() diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/LandingPageStatisticsMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/LandingPageStatisticsMongoRepository.scala similarity index 85% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/LandingPageStatisticsMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/LandingPageStatisticsMongoRepository.scala index 3e3609144..e2731770a 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/LandingPageStatisticsMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/LandingPageStatisticsMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import scala.concurrent.Future @@ -21,15 +21,15 @@ import org.mongodb.scala.MongoDatabase import org.mongodb.scala.model.Filters import org.springframework.stereotype.Repository -import za.co.absa.enceladus.menas.exceptions.NotFoundException -import za.co.absa.enceladus.menas.models.LandingPageInformation +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.models.LandingPageInformation import za.co.absa.enceladus.model @Repository class LandingPageStatisticsMongoRepository(mongoDb: MongoDatabase) extends MongoRepository[LandingPageInformation](mongoDb) { - private[menas] override def collectionBaseName: String = LandingPageStatisticsMongoRepository.collectionBaseName + private[rest_api] override def collectionBaseName: String = LandingPageStatisticsMongoRepository.collectionBaseName import scala.concurrent.ExecutionContext.Implicits.global def updateStatistics(newStats: LandingPageInformation): Future[_] = { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MappingTableMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MappingTableMongoRepository.scala similarity index 91% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MappingTableMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MappingTableMongoRepository.scala index 6325212a2..2185e8a13 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MappingTableMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MappingTableMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired @@ -33,7 +33,7 @@ object MappingTableMongoRepository { class MappingTableMongoRepository @Autowired()(mongoDb: MongoDatabase) extends VersionedMongoRepository[MappingTable](mongoDb)(ClassTag(classOf[MappingTable])) { - override private[menas] def collectionBaseName = MappingTableMongoRepository.collectionBaseName + override private[rest_api] def collectionBaseName = MappingTableMongoRepository.collectionBaseName private val schemaCollectionName = SchemaMongoRepository.collectionBaseName + model.CollectionSuffix private val schemaCollection = mongoDb.getCollection[Schema](schemaCollectionName) diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MongoRepository.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MongoRepository.scala index 5d4aaeb7c..ccc3e2c69 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.bson.conversions.Bson import org.mongodb.scala.model.Filters.{equal, and} @@ -29,9 +29,9 @@ abstract class MongoRepository[C](mongoDb: MongoDatabase)(implicit ct: ClassTag[ private[repositories] val collection = mongoDb.getCollection[C](collectionName) - private[menas] def collectionBaseName: String + private[rest_api] def collectionBaseName: String - private[menas] def collectionName: String = collectionBaseName + model.CollectionSuffix + private[rest_api] def collectionName: String = collectionBaseName + model.CollectionSuffix def isUniqueName(name: String, includeDisabled: Boolean = false): Future[Boolean] = { val res = if (includeDisabled) { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MonitoringMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MonitoringMongoRepository.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MonitoringMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MonitoringMongoRepository.scala index aafdcd65f..5b0e3c30a 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/MonitoringMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/MonitoringMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.{AggregateObservable, MongoDatabase} import org.mongodb.scala.model.Aggregates.{filter, group, limit, sort} @@ -35,7 +35,7 @@ object MonitoringMongoRepository { class MonitoringMongoRepository @Autowired()(mongoDb: MongoDatabase) extends MongoRepository[Run](mongoDb) { - private[menas] override def collectionBaseName: String = MonitoringMongoRepository.collectionBaseName + private[rest_api] override def collectionBaseName: String = MonitoringMongoRepository.collectionBaseName @Value("${menas.monitoring.fetch.limit}") private val fetchLimit: Integer = null // scalastyle:ignore null diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/OozieRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/OozieRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala index 3f47d50b5..ed94e9c78 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/OozieRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import java.io.BufferedReader import java.io.InputStreamReader @@ -50,9 +50,9 @@ import sun.security.krb5.KrbAsReqBuilder import sun.security.krb5.PrincipalName import sun.security.krb5.internal.KDCOptions import sun.security.krb5.internal.ccache.CredentialsCache -import za.co.absa.enceladus.menas.exceptions.OozieActionException -import za.co.absa.enceladus.menas.exceptions.OozieConfigurationException -import za.co.absa.enceladus.menas.models.OozieCoordinatorStatus +import za.co.absa.enceladus.rest_api.exceptions.OozieActionException +import za.co.absa.enceladus.rest_api.exceptions.OozieConfigurationException +import za.co.absa.enceladus.rest_api.models.OozieCoordinatorStatus import za.co.absa.enceladus.model.Dataset import za.co.absa.enceladus.model.menas.scheduler.RuntimeConfig import za.co.absa.enceladus.utils.time.TimeZoneNormalizer diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/PropertyDefinitionMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/PropertyDefinitionMongoRepository.scala similarity index 88% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/PropertyDefinitionMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/PropertyDefinitionMongoRepository.scala index e4e4054b4..1afd9e054 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/PropertyDefinitionMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/PropertyDefinitionMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired @@ -34,6 +34,6 @@ object PropertyDefinitionMongoRepository { class PropertyDefinitionMongoRepository @Autowired()(mongoDb: MongoDatabase) extends VersionedMongoRepository[PropertyDefinition](mongoDb)(ClassTag(classOf[PropertyDefinition])) { - override private[menas] def collectionBaseName: String = PropertyDefinitionMongoRepository.collectionBaseName + override private[rest_api] def collectionBaseName: String = PropertyDefinitionMongoRepository.collectionBaseName } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RefCollection.java b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RefCollection.java similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RefCollection.java rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RefCollection.java index f428b309e..2d417e441 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RefCollection.java +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RefCollection.java @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories; +package za.co.absa.enceladus.rest_api.repositories; public enum RefCollection { SCHEMA, MAPPING_TABLE, DATASET; diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RunMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RunMongoRepository.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RunMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RunMongoRepository.scala index 7643f3b95..28286d413 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/RunMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/RunMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import java.time.ZonedDateTime import java.time.format.DateTimeFormatter @@ -31,7 +31,7 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Repository import za.co.absa.atum.model.{Checkpoint, ControlMeasure, RunStatus} import za.co.absa.atum.utils.SerializationUtils -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} import za.co.absa.enceladus.model import za.co.absa.enceladus.model.{Run, SplineReference} @@ -48,7 +48,7 @@ class RunMongoRepository @Autowired()(mongoDb: MongoDatabase) import scala.concurrent.ExecutionContext.Implicits.global - private[menas] override def collectionBaseName: String = RunMongoRepository.collectionBaseName + private[rest_api] override def collectionBaseName: String = RunMongoRepository.collectionBaseName private val summaryProjection: Bson = project(fields( computed("datasetName", "$dataset"), diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/SchemaMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/SchemaMongoRepository.scala similarity index 88% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/SchemaMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/SchemaMongoRepository.scala index 915579465..49a68b20f 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/SchemaMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/SchemaMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired @@ -32,6 +32,6 @@ object SchemaMongoRepository { class SchemaMongoRepository @Autowired()(mongoDb: MongoDatabase) extends VersionedMongoRepository[Schema](mongoDb)(ClassTag(classOf[Schema])) { - override private[menas] def collectionBaseName: String = SchemaMongoRepository.collectionBaseName + override private[rest_api] def collectionBaseName: String = SchemaMongoRepository.collectionBaseName } diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/VersionedMongoRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/VersionedMongoRepository.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/repositories/VersionedMongoRepository.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/VersionedMongoRepository.scala index 3fbce015a..85921900f 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/repositories/VersionedMongoRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/VersionedMongoRepository.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.repositories +package za.co.absa.enceladus.rest_api.repositories import java.time.ZonedDateTime @@ -32,8 +32,8 @@ import za.co.absa.enceladus.model.versionedModel.{VersionedModel, VersionedSumma import scala.concurrent.Future import scala.reflect.ClassTag -import za.co.absa.enceladus.menas.exceptions.EntityAlreadyExistsException -import za.co.absa.enceladus.menas.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.exceptions.EntityAlreadyExistsException +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException abstract class VersionedMongoRepository[C <: VersionedModel](mongoDb: MongoDatabase)(implicit ct: ClassTag[C]) extends MongoRepository[C](mongoDb) { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/AttachmentService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/AttachmentService.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/AttachmentService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/AttachmentService.scala index ae360228a..4a49d919c 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/AttachmentService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/AttachmentService.scala @@ -13,16 +13,16 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.mongodb.scala.Completed import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import za.co.absa.enceladus.model.menas.MenasAttachment -import za.co.absa.enceladus.menas.repositories._ +import za.co.absa.enceladus.rest_api.repositories._ import scala.concurrent.Future -import za.co.absa.enceladus.menas.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException @Service class AttachmentService @Autowired()(attachmentMongoRepository: AttachmentMongoRepository, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/DatasetService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/DatasetService.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/DatasetService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/DatasetService.scala index 317b1b861..09f326723 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/DatasetService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/DatasetService.scala @@ -13,13 +13,13 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import scala.concurrent.Future import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service -import za.co.absa.enceladus.menas.repositories.DatasetMongoRepository -import za.co.absa.enceladus.menas.repositories.OozieRepository +import za.co.absa.enceladus.rest_api.repositories.DatasetMongoRepository +import za.co.absa.enceladus.rest_api.repositories.OozieRepository import za.co.absa.enceladus.model.{Dataset, Schema, UsedIn, Validation} import za.co.absa.enceladus.model.conformanceRule.{ConformanceRule, _} import za.co.absa.enceladus.model.menas.scheduler.oozie.OozieScheduleInstance diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/HDFSService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/HDFSService.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/HDFSService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/HDFSService.scala index df68455ac..5036f0d44 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/HDFSService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/HDFSService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.apache.hadoop.fs.{FileSystem, Path} import org.springframework.beans.factory.annotation.Autowired diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MappingTableService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MappingTableService.scala similarity index 96% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/MappingTableService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MappingTableService.scala index 81f6cff99..ed14a7fa1 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MappingTableService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MappingTableService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import za.co.absa.enceladus.model.{DefaultValue, MappingTable, Schema, UsedIn, Validation} -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, MappingTableMongoRepository} +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, MappingTableMongoRepository} import scala.concurrent.Future diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MigrationService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MigrationService.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/MigrationService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MigrationService.scala index b43bdd997..c5d9a1d32 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MigrationService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MigrationService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import javax.annotation.PostConstruct import org.apache.log4j.{LogManager, Logger} diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/ModelService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/ModelService.scala similarity index 90% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/ModelService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/ModelService.scala index 5c16a76f4..427daf402 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/ModelService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/ModelService.scala @@ -13,10 +13,10 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.slf4j.{Logger, LoggerFactory} -import za.co.absa.enceladus.menas.repositories.MongoRepository +import za.co.absa.enceladus.rest_api.repositories.MongoRepository import scala.concurrent.Future diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MonitoringService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MonitoringService.scala similarity index 90% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/MonitoringService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MonitoringService.scala index d50e64aee..5c946e396 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/MonitoringService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/MonitoringService.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.springframework.beans.factory.annotation.{Autowired, Value} import org.springframework.stereotype.Service -import za.co.absa.enceladus.menas.repositories.MonitoringMongoRepository +import za.co.absa.enceladus.rest_api.repositories.MonitoringMongoRepository import scala.concurrent.Future diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/OozieService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/OozieService.scala similarity index 89% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/OozieService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/OozieService.scala index 4fb5e0554..240da14f5 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/OozieService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/OozieService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import java.time.LocalDate import java.time.format.DateTimeFormatter @@ -23,12 +23,12 @@ import scala.concurrent.Future import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.exceptions.OozieActionException -import za.co.absa.enceladus.menas.models.OozieCoordinatorStatus -import za.co.absa.enceladus.menas.repositories.OozieRepository +import za.co.absa.enceladus.rest_api.exceptions.OozieActionException +import za.co.absa.enceladus.rest_api.models.OozieCoordinatorStatus +import za.co.absa.enceladus.rest_api.repositories.OozieRepository import za.co.absa.enceladus.model.menas.scheduler.oozie.OozieSchedule -import za.co.absa.enceladus.menas.repositories.DatasetMongoRepository -import za.co.absa.enceladus.menas.exceptions.NotFoundException +import za.co.absa.enceladus.rest_api.repositories.DatasetMongoRepository +import za.co.absa.enceladus.rest_api.exceptions.NotFoundException import za.co.absa.enceladus.model.menas.scheduler.RuntimeConfig @Component diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/PropertyDefinitionService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/PropertyDefinitionService.scala similarity index 91% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/PropertyDefinitionService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/PropertyDefinitionService.scala index 2041c3f45..fc4e137b6 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/PropertyDefinitionService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/PropertyDefinitionService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, PropertyDefinitionMongoRepository} -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, PropertyDefinitionMongoRepository} +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor import za.co.absa.enceladus.model.UsedIn import za.co.absa.enceladus.model.properties.PropertyDefinition diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/RunService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/RunService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala index 776b52099..fad9a1ca8 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/RunService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import java.util.UUID @@ -22,9 +22,9 @@ import org.joda.time.format.DateTimeFormat import org.springframework.beans.factory.annotation.{Autowired, Value} import org.springframework.stereotype.Service import za.co.absa.atum.model.{Checkpoint, ControlMeasure, RunStatus} -import za.co.absa.enceladus.menas.exceptions.{NotFoundException, ValidationException} -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary, TodaysRunsStatistics} -import za.co.absa.enceladus.menas.repositories.RunMongoRepository +import za.co.absa.enceladus.rest_api.exceptions.{NotFoundException, ValidationException} +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary, TodaysRunsStatistics} +import za.co.absa.enceladus.rest_api.repositories.RunMongoRepository import za.co.absa.enceladus.model.{Run, SplineReference, Validation} import scala.concurrent.Future diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaRegistryService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaRegistryService.scala similarity index 95% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaRegistryService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaRegistryService.scala index af2b70256..fa9c32346 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaRegistryService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaRegistryService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import java.io.FileInputStream import java.net.URL @@ -24,10 +24,10 @@ import javax.net.ssl.{HttpsURLConnection, KeyManagerFactory, SSLContext, TrustMa import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service -import za.co.absa.enceladus.menas.controllers.SchemaController -import za.co.absa.enceladus.menas.models.rest.exceptions.RemoteSchemaRetrievalException -import za.co.absa.enceladus.menas.services.SchemaRegistryService._ -import za.co.absa.enceladus.menas.utils.SchemaType +import za.co.absa.enceladus.rest_api.controllers.SchemaController +import za.co.absa.enceladus.rest_api.models.rest.exceptions.RemoteSchemaRetrievalException +import za.co.absa.enceladus.rest_api.services.SchemaRegistryService._ +import za.co.absa.enceladus.rest_api.utils.SchemaType import za.co.absa.enceladus.utils.config.ConfigUtils.ConfigImplicits import za.co.absa.enceladus.utils.config.SecureConfig diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaService.scala similarity index 92% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaService.scala index a74cb8ff9..4eb64a691 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/SchemaService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/SchemaService.scala @@ -13,16 +13,16 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Service import za.co.absa.enceladus.model.{Schema, UsedIn} -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, MappingTableMongoRepository, SchemaMongoRepository} +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, MappingTableMongoRepository, SchemaMongoRepository} import scala.concurrent.Future import org.apache.spark.sql.types.StructType -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor @Service class SchemaService @Autowired() (schemaMongoRepository: SchemaMongoRepository, diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/services/VersionedModelService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/VersionedModelService.scala similarity index 97% rename from menas/src/main/scala/za/co/absa/enceladus/menas/services/VersionedModelService.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/VersionedModelService.scala index a486492d5..18997d74e 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/services/VersionedModelService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/VersionedModelService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.mongodb.scala.result.UpdateResult import org.slf4j.LoggerFactory @@ -22,8 +22,8 @@ import org.springframework.security.core.userdetails.UserDetails import za.co.absa.enceladus.model.{ModelVersion, Schema, UsedIn, Validation} import za.co.absa.enceladus.model.menas._ import za.co.absa.enceladus.model.versionedModel.{VersionedModel, VersionedSummary} -import za.co.absa.enceladus.menas.exceptions._ -import za.co.absa.enceladus.menas.repositories.VersionedMongoRepository +import za.co.absa.enceladus.rest_api.exceptions._ +import za.co.absa.enceladus.rest_api.repositories.VersionedMongoRepository import za.co.absa.enceladus.model.menas.audit._ import scala.concurrent.Future @@ -187,11 +187,11 @@ abstract class VersionedModelService[C <: VersionedModel with Product with Audit def getUsedIn(name: String, version: Option[Int]): Future[UsedIn] - private[menas] def getMenasRef(item: C): MenasReference = { + private[rest_api] def getMenasRef(item: C): MenasReference = { MenasReference(Some(versionedMongoRepository.collectionBaseName), item.name, item.version) } - private[menas] def create(item: C, username: String): Future[Option[C]] = { + private[rest_api] def create(item: C, username: String): Future[Option[C]] = { for { validation <- validate(item) _ <- if (validation.isValid) { diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/SchemaType.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/SchemaType.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/SchemaType.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/SchemaType.scala index e34a765fb..c44d3abbb 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/SchemaType.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/SchemaType.scala @@ -13,9 +13,9 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils +package za.co.absa.enceladus.rest_api.utils -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaFormatException +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaFormatException object SchemaType extends Enumeration { val Struct: SchemaType.Value = Value("struct") diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertor.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertor.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertor.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertor.scala index 21f510925..5716bf857 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertor.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertor.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters +package za.co.absa.enceladus.rest_api.utils.converters import org.apache.spark.sql.types._ import za.co.absa.enceladus.model._ @@ -23,7 +23,7 @@ import com.fasterxml.jackson.databind.ObjectMapper import org.springframework.stereotype.Component import java.io.ByteArrayOutputStream -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException import za.co.absa.enceladus.utils.schema.SchemaUtils import scala.util.control.NonFatal diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationKindConverter.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationKindConverter.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationKindConverter.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationKindConverter.scala index 8e22f7eb9..c4f8641ca 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationKindConverter.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationKindConverter.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters +package za.co.absa.enceladus.rest_api.utils.converters import org.springframework.core.convert.converter.Converter import za.co.absa.enceladus.utils.validation.ValidationLevel.ValidationLevel diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Schema.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Schema.scala similarity index 92% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Schema.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Schema.scala index d8a91345c..7c9850518 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Schema.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Schema.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters.model0 +package za.co.absa.enceladus.rest_api.utils.converters.model0 case class Schema ( diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/SchemaField.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/SchemaField.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/SchemaField.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/SchemaField.scala index cb85f19a1..b7cadd604 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/SchemaField.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/SchemaField.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters.model0 +package za.co.absa.enceladus.rest_api.utils.converters.model0 case class SchemaField ( diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Serializer.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Serializer.scala similarity index 98% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Serializer.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Serializer.scala index bca95bc0e..93ba28800 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/Serializer.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/Serializer.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters.model0 +package za.co.absa.enceladus.rest_api.utils.converters.model0 import java.io.ByteArrayOutputStream diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/VersionedModel.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/VersionedModel.scala similarity index 91% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/VersionedModel.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/VersionedModel.scala index fceb38a88..03e1c6582 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/converters/model0/VersionedModel.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/converters/model0/VersionedModel.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters.model0 +package za.co.absa.enceladus.rest_api.utils.converters.model0 trait VersionedModel { val name: String diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/implicits/package.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/implicits/package.scala similarity index 94% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/implicits/package.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/implicits/package.scala index 75980775e..92e82def6 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/implicits/package.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/implicits/package.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils +package za.co.absa.enceladus.rest_api.utils import java.util.Optional import java.util.concurrent.CompletableFuture @@ -23,7 +23,7 @@ import org.bson.codecs.configuration.CodecRegistries.{fromProviders, fromRegistr import org.bson.codecs.configuration.{CodecRegistries, CodecRegistry} import org.mongodb.scala.bson.codecs.DEFAULT_CODEC_REGISTRY import org.mongodb.scala.bson.codecs.Macros._ -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} import za.co.absa.enceladus.model._ import za.co.absa.enceladus.model.api.versionedModelDetail._ import za.co.absa.enceladus.model.conformanceRule._ @@ -31,7 +31,7 @@ import za.co.absa.enceladus.model.menas._ import za.co.absa.enceladus.model.menas.scheduler._ import za.co.absa.enceladus.model.menas.scheduler.dataFormats._ import za.co.absa.enceladus.model.menas.scheduler.oozie._ -import za.co.absa.enceladus.menas.models._ +import za.co.absa.enceladus.rest_api.models._ import za.co.absa.enceladus.model.properties.PropertyDefinition import za.co.absa.enceladus.model.properties.essentiality.Essentiality import za.co.absa.enceladus.model.properties.propertyType.PropertyType diff --git a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParser.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParser.scala similarity index 93% rename from menas/src/main/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParser.scala rename to rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParser.scala index 2ae4c3073..f5803dc08 100644 --- a/menas/src/main/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParser.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParser.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.parsers +package za.co.absa.enceladus.rest_api.utils.parsers import org.apache.avro.{Schema => AvroSchema} import org.apache.spark.sql.avro.SchemaConverters @@ -22,9 +22,9 @@ import za.co.absa.cobrix.cobol.parser.CopybookParser import za.co.absa.cobrix.cobol.parser.exceptions.SyntaxErrorException import za.co.absa.cobrix.cobol.reader.policies.SchemaRetentionPolicy import za.co.absa.cobrix.spark.cobol.schema.CobolSchema -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException -import za.co.absa.enceladus.menas.utils.SchemaType -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor import scala.util.control.NonFatal diff --git a/menas/src/test/resources/application.properties b/rest-api/src/test/resources/application.properties similarity index 91% rename from menas/src/test/resources/application.properties rename to rest-api/src/test/resources/application.properties index 088c02444..9fe59ac63 100644 --- a/menas/src/test/resources/application.properties +++ b/rest-api/src/test/resources/application.properties @@ -40,13 +40,13 @@ menas.auth.ldap.search.filter=(&(samAccountName={0})) menas.auth.jwt.secret=u7w!z%C*F-JaNdRgUkXp2s5v8y/A?D(G+KbPeShVmYq3t6w9z$C&E)H@McQfTjWn menas.auth.jwt.lifespan.hours=8 -# How will users authenticate to menas. Available options: inmemory, kerberos +# How will users authenticate to rest_api. Available options: inmemory, kerberos menas.auth.mechanism=inmemory menas.auth.admin.role=ROLE_ADMIN -# Define how menas authenticates to Hadoop. Supported options are: +# Define how rest_api authenticates to Hadoop. Supported options are: # "default" -> will use the default authentication or kerberos ticket from the system -# "krb5" -> menas will use specified kerberos configurations to authenticate via kerberos using specified username & keytab +# "krb5" -> rest_api will use specified kerberos configurations to authenticate via kerberos using specified username & keytab menas.hadoop.auth.method=default menas.hadoop.auth.krb5.debug=true menas.hadoop.auth.krb5.realm=EXAMPLE.COM diff --git a/menas/src/test/resources/log4j.properties b/rest-api/src/test/resources/log4j.properties similarity index 100% rename from menas/src/test/resources/log4j.properties rename to rest-api/src/test/resources/log4j.properties diff --git a/menas/src/test/resources/test_data/schemas/avro/avroschema_json_bogus.avsc b/rest-api/src/test/resources/test_data/schemas/avro/avroschema_json_bogus.avsc similarity index 100% rename from menas/src/test/resources/test_data/schemas/avro/avroschema_json_bogus.avsc rename to rest-api/src/test/resources/test_data/schemas/avro/avroschema_json_bogus.avsc diff --git a/menas/src/test/resources/test_data/schemas/avro/avroschema_json_ok.avsc b/rest-api/src/test/resources/test_data/schemas/avro/avroschema_json_ok.avsc similarity index 100% rename from menas/src/test/resources/test_data/schemas/avro/avroschema_json_ok.avsc rename to rest-api/src/test/resources/test_data/schemas/avro/avroschema_json_ok.avsc diff --git a/menas/src/test/resources/test_data/schemas/avro/equivalent-to-avroschema.json b/rest-api/src/test/resources/test_data/schemas/avro/equivalent-to-avroschema.json similarity index 100% rename from menas/src/test/resources/test_data/schemas/avro/equivalent-to-avroschema.json rename to rest-api/src/test/resources/test_data/schemas/avro/equivalent-to-avroschema.json diff --git a/menas/src/test/resources/test_data/schemas/copybook/copybook_bogus.cob b/rest-api/src/test/resources/test_data/schemas/copybook/copybook_bogus.cob similarity index 100% rename from menas/src/test/resources/test_data/schemas/copybook/copybook_bogus.cob rename to rest-api/src/test/resources/test_data/schemas/copybook/copybook_bogus.cob diff --git a/menas/src/test/resources/test_data/schemas/copybook/copybook_ok.cob b/rest-api/src/test/resources/test_data/schemas/copybook/copybook_ok.cob similarity index 100% rename from menas/src/test/resources/test_data/schemas/copybook/copybook_ok.cob rename to rest-api/src/test/resources/test_data/schemas/copybook/copybook_ok.cob diff --git a/menas/src/test/resources/test_data/schemas/copybook/equivalent-to-copybook.json b/rest-api/src/test/resources/test_data/schemas/copybook/equivalent-to-copybook.json similarity index 100% rename from menas/src/test/resources/test_data/schemas/copybook/equivalent-to-copybook.json rename to rest-api/src/test/resources/test_data/schemas/copybook/equivalent-to-copybook.json diff --git a/menas/src/test/resources/test_data/schemas/json/schema_json_bogus.json b/rest-api/src/test/resources/test_data/schemas/json/schema_json_bogus.json similarity index 100% rename from menas/src/test/resources/test_data/schemas/json/schema_json_bogus.json rename to rest-api/src/test/resources/test_data/schemas/json/schema_json_bogus.json diff --git a/menas/src/test/resources/test_data/schemas/json/schema_json_ok.json b/rest-api/src/test/resources/test_data/schemas/json/schema_json_ok.json similarity index 100% rename from menas/src/test/resources/test_data/schemas/json/schema_json_ok.json rename to rest-api/src/test/resources/test_data/schemas/json/schema_json_ok.json diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactoryTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactoryTest.scala similarity index 97% rename from menas/src/test/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactoryTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactoryTest.scala index a6409af4f..9fc64028a 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/auth/jwt/JwtFactoryTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/auth/jwt/JwtFactoryTest.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.auth.jwt +package za.co.absa.enceladus.rest_api.auth.jwt import io.jsonwebtoken.security.WeakKeyException import org.scalatest.matchers.should.Matchers diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/controllers/SchemaControllerSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/controllers/SchemaControllerSuite.scala similarity index 90% rename from menas/src/test/scala/za/co/absa/enceladus/menas/controllers/SchemaControllerSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/controllers/SchemaControllerSuite.scala index a8b4fb699..3dbf47476 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/controllers/SchemaControllerSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/controllers/SchemaControllerSuite.scala @@ -13,15 +13,15 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.controllers +package za.co.absa.enceladus.rest_api.controllers import org.mockito.Mockito import org.scalatest.concurrent.Futures import org.mockito.scalatest.MockitoSugar import org.scalatest.flatspec.AsyncFlatSpec import org.scalatest.matchers.should.Matchers -import za.co.absa.enceladus.menas.models.SchemaApiFeatures -import za.co.absa.enceladus.menas.services.SchemaRegistryService +import za.co.absa.enceladus.rest_api.models.SchemaApiFeatures +import za.co.absa.enceladus.rest_api.services.SchemaRegistryService import scala.compat.java8.FutureConverters._ diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/InMemoryUsers.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/InMemoryUsers.scala similarity index 94% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/InMemoryUsers.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/InMemoryUsers.scala index e8022d4bd..35719dab8 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/InMemoryUsers.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/InMemoryUsers.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration +package za.co.absa.enceladus.rest_api.integration object InMemoryUsers { diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/RunImplicits.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/RunImplicits.scala similarity index 90% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/RunImplicits.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/RunImplicits.scala index 2893946ea..cf1834c94 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/RunImplicits.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/RunImplicits.scala @@ -13,9 +13,9 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration +package za.co.absa.enceladus.rest_api.integration -import za.co.absa.enceladus.menas.models.RunSummary +import za.co.absa.enceladus.rest_api.models.RunSummary import za.co.absa.enceladus.model.Run object RunImplicits { diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestContextManagement.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestContextManagement.scala similarity index 95% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestContextManagement.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestContextManagement.scala index 848f2d227..a3c6e0641 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestContextManagement.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestContextManagement.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration +package za.co.absa.enceladus.rest_api.integration import org.scalatest.{BeforeAndAfterAll, Suite} import org.springframework.test.context.TestContextManager diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestInMemoryMenasAuthentication.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestInMemoryMenasAuthentication.scala similarity index 91% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestInMemoryMenasAuthentication.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestInMemoryMenasAuthentication.scala index b0dd941e7..eec7d03da 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/TestInMemoryMenasAuthentication.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/TestInMemoryMenasAuthentication.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration +package za.co.absa.enceladus.rest_api.integration import org.springframework.context.annotation.Primary import org.springframework.security.config.annotation.authentication.configurers.provisioning.InMemoryUserDetailsManagerConfigurer import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.auth.InMemoryMenasAuthentication +import za.co.absa.enceladus.rest_api.auth.InMemoryMenasAuthentication @Component @Primary diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/AuthenticationIntegrationSuite.scala similarity index 88% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/AuthenticationIntegrationSuite.scala index 1a223716e..209497733 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/AuthenticationIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/AuthenticationIntegrationSuite.scala @@ -13,16 +13,16 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.auth.jwt.JwtFactory -import za.co.absa.enceladus.menas.integration.InMemoryUsers -import za.co.absa.enceladus.menas.integration.fixtures.FixtureService +import za.co.absa.enceladus.rest_api.auth.jwt.JwtFactory +import za.co.absa.enceladus.rest_api.integration.InMemoryUsers +import za.co.absa.enceladus.rest_api.integration.fixtures.FixtureService import scala.concurrent.{Await, Future} diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/BaseRestApiTest.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/BaseRestApiTest.scala index 909d9712b..87fbcb3dc 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/BaseRestApiTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/BaseRestApiTest.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import com.fasterxml.jackson.databind.{ObjectMapper, SerializationFeature} import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule @@ -27,7 +27,7 @@ import org.springframework.context.annotation.Bean import org.springframework.http._ import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter import org.springframework.util.{LinkedMultiValueMap, MultiValueMap} -import za.co.absa.enceladus.menas.integration.repositories.BaseRepositoryTest +import za.co.absa.enceladus.rest_api.integration.repositories.BaseRepositoryTest import scala.concurrent.Future import scala.reflect.ClassTag diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/DatasetApiIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/DatasetApiIntegrationSuite.scala similarity index 99% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/DatasetApiIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/DatasetApiIntegrationSuite.scala index ab01c46ae..64f6acb5b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/DatasetApiIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/DatasetApiIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import org.junit.runner.RunWith import org.scalatest.BeforeAndAfterAll @@ -21,7 +21,7 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.integration.fixtures._ +import za.co.absa.enceladus.rest_api.integration.fixtures._ import za.co.absa.enceladus.model.{Dataset, Validation} import za.co.absa.enceladus.model.properties.PropertyDefinition import za.co.absa.enceladus.model.properties.essentiality.Essentiality diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala similarity index 99% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala index fe5ae937e..c4c0574bf 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/PropertyDefinitionApiIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import org.junit.runner.RunWith import org.scalatest.BeforeAndAfterAll @@ -22,7 +22,7 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.integration.fixtures._ +import za.co.absa.enceladus.rest_api.integration.fixtures._ import za.co.absa.enceladus.model.Validation import za.co.absa.enceladus.model.properties.PropertyDefinition import za.co.absa.enceladus.model.properties.propertyType.StringPropertyType diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/RunApiIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala similarity index 99% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/RunApiIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala index 8e885bb1e..ce4b0f245 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/RunApiIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import org.junit.runner.RunWith import org.springframework.beans.factory.annotation.Autowired @@ -22,8 +22,8 @@ import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner import za.co.absa.atum.model.{Checkpoint, ControlMeasure, RunState, RunStatus} import za.co.absa.atum.utils.SerializationUtils -import za.co.absa.enceladus.menas.integration.fixtures.{FixtureService, RunFixtureService} -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} +import za.co.absa.enceladus.rest_api.integration.fixtures.{FixtureService, RunFixtureService} +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary, RunSummary} import za.co.absa.enceladus.model.test.factories.RunFactory import za.co.absa.enceladus.model.{Run, SplineReference, Validation} @@ -32,7 +32,7 @@ import za.co.absa.enceladus.model.{Run, SplineReference, Validation} @ActiveProfiles(Array("withEmbeddedMongo")) class RunApiIntegrationSuite extends BaseRestApiTest { - import za.co.absa.enceladus.menas.integration.RunImplicits.RunExtensions + import za.co.absa.enceladus.rest_api.integration.RunImplicits.RunExtensions import za.co.absa.enceladus.model.Validation._ @Autowired diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala index b3416fb98..15a510f34 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/SchemaApiFeaturesIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.controllers +package za.co.absa.enceladus.rest_api.integration.controllers import java.io.File import java.nio.file.{Files, Path} @@ -29,17 +29,18 @@ import org.springframework.boot.test.context.SpringBootTest import org.springframework.http.{HttpStatus, MediaType} import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.TestResourcePath -import za.co.absa.enceladus.menas.integration.fixtures._ -import za.co.absa.enceladus.menas.models.rest.RestResponse -import za.co.absa.enceladus.menas.models.rest.errors.{SchemaFormatError, SchemaParsingError} -import za.co.absa.enceladus.menas.models.SchemaApiFeatures -import za.co.absa.enceladus.menas.repositories.RefCollection -import za.co.absa.enceladus.menas.utils.SchemaType -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.restapi.TestResourcePath +import za.co.absa.enceladus.rest_api.integration.fixtures._ +import za.co.absa.enceladus.rest_api.models.rest.RestResponse +import za.co.absa.enceladus.rest_api.models.rest.errors.{SchemaFormatError, SchemaParsingError} +import za.co.absa.enceladus.rest_api.models.SchemaApiFeatures +import za.co.absa.enceladus.rest_api.repositories.RefCollection +import za.co.absa.enceladus.rest_api.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor import za.co.absa.enceladus.model.menas.MenasReference import za.co.absa.enceladus.model.test.factories.{AttachmentFactory, DatasetFactory, MappingTableFactory, SchemaFactory} import za.co.absa.enceladus.model.{Schema, UsedIn, Validation} +import za.co.absa.enceladus.restapi.TestResourcePath import scala.collection.immutable.HashMap diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/package.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/package.scala similarity index 96% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/package.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/package.scala index de0881f0e..df63b23d2 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/controllers/package.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/package.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration +package za.co.absa.enceladus.rest_api.integration import za.co.absa.enceladus.model.properties.PropertyDefinition import za.co.absa.enceladus.model.versionedModel.VersionedModel diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/AttachmentFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/AttachmentFixtureService.scala similarity index 87% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/AttachmentFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/AttachmentFixtureService.scala index c10d1b598..e5c478e59 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/AttachmentFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/AttachmentFixtureService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.repositories.AttachmentMongoRepository +import za.co.absa.enceladus.rest_api.repositories.AttachmentMongoRepository import za.co.absa.enceladus.model.menas.MenasAttachment @Component diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/DatasetFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/DatasetFixtureService.scala similarity index 87% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/DatasetFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/DatasetFixtureService.scala index 436f54914..2b0be2b91 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/DatasetFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/DatasetFixtureService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.repositories.DatasetMongoRepository +import za.co.absa.enceladus.rest_api.repositories.DatasetMongoRepository import za.co.absa.enceladus.model.Dataset @Component diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/FixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/FixtureService.scala similarity index 96% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/FixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/FixtureService.scala index 07c0947e6..6e7a8b1cb 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/FixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/FixtureService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import com.mongodb.MongoBulkWriteException import org.mongodb.scala.bson.BsonDocument diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/MappingTableFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/MappingTableFixtureService.scala similarity index 87% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/MappingTableFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/MappingTableFixtureService.scala index 58e2fb2f8..a1aa4247b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/MappingTableFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/MappingTableFixtureService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.repositories.MappingTableMongoRepository +import za.co.absa.enceladus.rest_api.repositories.MappingTableMongoRepository import za.co.absa.enceladus.model.MappingTable @Component diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/PropertyDefinitionFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/PropertyDefinitionFixtureService.scala similarity index 87% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/PropertyDefinitionFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/PropertyDefinitionFixtureService.scala index c05b11550..c3e18fe41 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/PropertyDefinitionFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/PropertyDefinitionFixtureService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.repositories.PropertyDefinitionMongoRepository +import za.co.absa.enceladus.rest_api.repositories.PropertyDefinitionMongoRepository import za.co.absa.enceladus.model.properties.PropertyDefinition @Component diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/RunFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/RunFixtureService.scala similarity index 92% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/RunFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/RunFixtureService.scala index 4348a93fe..1726fef2c 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/RunFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/RunFixtureService.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import com.mongodb.MongoBulkWriteException import org.mongodb.scala.MongoDatabase @@ -21,7 +21,7 @@ import org.mongodb.scala.bson.BsonDocument import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component import za.co.absa.atum.utils.SerializationUtils -import za.co.absa.enceladus.menas.repositories.RunMongoRepository +import za.co.absa.enceladus.rest_api.repositories.RunMongoRepository import za.co.absa.enceladus.model.Run import scala.concurrent.Await diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/SchemaFixtureService.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/SchemaFixtureService.scala similarity index 87% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/SchemaFixtureService.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/SchemaFixtureService.scala index 1d3e539bf..c29561af7 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/fixtures/SchemaFixtureService.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/fixtures/SchemaFixtureService.scala @@ -13,12 +13,12 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.fixtures +package za.co.absa.enceladus.rest_api.integration.fixtures import org.mongodb.scala.MongoDatabase import org.springframework.beans.factory.annotation.Autowired import org.springframework.stereotype.Component -import za.co.absa.enceladus.menas.repositories.SchemaMongoRepository +import za.co.absa.enceladus.rest_api.repositories.SchemaMongoRepository import za.co.absa.enceladus.model.Schema @Component diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/mongo/EmbeddedMongo.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/mongo/EmbeddedMongo.scala similarity index 95% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/mongo/EmbeddedMongo.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/mongo/EmbeddedMongo.scala index ae2c0422f..e623fa0f8 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/mongo/EmbeddedMongo.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/mongo/EmbeddedMongo.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.mongo +package za.co.absa.enceladus.rest_api.integration.mongo import de.flapdoodle.embed.mongo.config.{MongodConfigBuilder, Net} import de.flapdoodle.embed.mongo.distribution.Version @@ -24,7 +24,7 @@ import org.mongodb.scala.{MongoClient, MongoDatabase} import org.slf4j.LoggerFactory import org.springframework.beans.factory.annotation.Value import org.springframework.context.annotation.{Bean, Configuration, Primary, Profile} -import za.co.absa.enceladus.menas.utils.implicits.codecRegistry +import za.co.absa.enceladus.rest_api.utils.implicits.codecRegistry /** * Provides an embedded local mongo. Spawn it before tests and shutdown after diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/AttachmentRepositoryIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/AttachmentRepositoryIntegrationSuite.scala similarity index 94% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/AttachmentRepositoryIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/AttachmentRepositoryIntegrationSuite.scala index 268a3691e..33dba63ed 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/AttachmentRepositoryIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/AttachmentRepositoryIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.repositories +package za.co.absa.enceladus.rest_api.integration.repositories import org.junit.runner.RunWith import org.scalatest.Assertion @@ -21,8 +21,8 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.integration.fixtures.{AttachmentFixtureService, FixtureService} -import za.co.absa.enceladus.menas.repositories.{AttachmentMongoRepository, RefCollection} +import za.co.absa.enceladus.rest_api.integration.fixtures.{AttachmentFixtureService, FixtureService} +import za.co.absa.enceladus.rest_api.repositories.{AttachmentMongoRepository, RefCollection} import za.co.absa.enceladus.model.menas.MenasAttachment import za.co.absa.enceladus.model.test.factories.AttachmentFactory diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/BaseRepositoryTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/BaseRepositoryTest.scala similarity index 85% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/BaseRepositoryTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/BaseRepositoryTest.scala index 773a448f2..ba32fe31a 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/BaseRepositoryTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/BaseRepositoryTest.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.repositories +package za.co.absa.enceladus.rest_api.integration.repositories import java.util.concurrent.TimeUnit @@ -21,9 +21,9 @@ import org.mongodb.scala.MongoDatabase import org.scalatest.wordspec.AnyWordSpec import org.scalatest.BeforeAndAfter import org.springframework.beans.factory.annotation.Autowired -import za.co.absa.enceladus.menas.integration.TestContextManagement -import za.co.absa.enceladus.menas.integration.fixtures.FixtureService -import za.co.absa.enceladus.menas.services.MigrationService +import za.co.absa.enceladus.rest_api.integration.TestContextManagement +import za.co.absa.enceladus.rest_api.integration.fixtures.FixtureService +import za.co.absa.enceladus.rest_api.services.MigrationService import scala.concurrent.duration.Duration import scala.concurrent.{Await, Future} diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/DatasetRepositoryIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/DatasetRepositoryIntegrationSuite.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/DatasetRepositoryIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/DatasetRepositoryIntegrationSuite.scala index eb8838781..e9b3d531b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/DatasetRepositoryIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/DatasetRepositoryIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.repositories +package za.co.absa.enceladus.rest_api.integration.repositories import com.mongodb.MongoWriteException import org.junit.runner.RunWith @@ -21,9 +21,9 @@ import org.springframework.beans.factory.annotation.Autowired import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner -import za.co.absa.enceladus.menas.exceptions.EntityAlreadyExistsException -import za.co.absa.enceladus.menas.integration.fixtures.{DatasetFixtureService, FixtureService} -import za.co.absa.enceladus.menas.repositories.DatasetMongoRepository +import za.co.absa.enceladus.rest_api.exceptions.EntityAlreadyExistsException +import za.co.absa.enceladus.rest_api.integration.fixtures.{DatasetFixtureService, FixtureService} +import za.co.absa.enceladus.rest_api.repositories.DatasetMongoRepository import za.co.absa.enceladus.model.conformanceRule.{ConformanceRule, MappingConformanceRule} import za.co.absa.enceladus.model.test.factories.DatasetFactory import za.co.absa.enceladus.model.menas.scheduler.oozie.OozieSchedule diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/RunRepositoryIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/RunRepositoryIntegrationSuite.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/RunRepositoryIntegrationSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/RunRepositoryIntegrationSuite.scala index cec633823..443b57bbc 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/integration/repositories/RunRepositoryIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/RunRepositoryIntegrationSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.integration.repositories +package za.co.absa.enceladus.rest_api.integration.repositories import java.time.{LocalDate, ZoneId} import java.time.format.DateTimeFormatter @@ -24,9 +24,9 @@ import org.springframework.boot.test.context.SpringBootTest import org.springframework.test.context.ActiveProfiles import org.springframework.test.context.junit4.SpringRunner import za.co.absa.atum.model.{RunState, RunStatus} -import za.co.absa.enceladus.menas.integration.fixtures.{FixtureService, RunFixtureService} -import za.co.absa.enceladus.menas.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary} -import za.co.absa.enceladus.menas.repositories.RunMongoRepository +import za.co.absa.enceladus.rest_api.integration.fixtures.{FixtureService, RunFixtureService} +import za.co.absa.enceladus.rest_api.models.{RunDatasetNameGroupedSummary, RunDatasetVersionGroupedSummary} +import za.co.absa.enceladus.rest_api.repositories.RunMongoRepository import za.co.absa.enceladus.model.Run import za.co.absa.enceladus.model.test.factories.RunFactory import za.co.absa.enceladus.utils.time.TimeZoneNormalizer @@ -36,7 +36,7 @@ import za.co.absa.enceladus.utils.time.TimeZoneNormalizer @ActiveProfiles(Array("withEmbeddedMongo")) class RunRepositoryIntegrationSuite extends BaseRepositoryTest { - import za.co.absa.enceladus.menas.integration.RunImplicits.RunExtensions + import za.co.absa.enceladus.rest_api.integration.RunImplicits.RunExtensions @Autowired private val runFixture: RunFixtureService = null diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/package.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/package.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/package.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/package.scala index 73566696f..993e40726 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/package.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/package.scala @@ -15,7 +15,7 @@ package za.co.absa.enceladus -package object menas { +package object restapi { /** * Resource paths of files for schema testing diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/schema/SchemaConvertersSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/schema/SchemaConvertersSuite.scala similarity index 99% rename from menas/src/test/scala/za/co/absa/enceladus/menas/schema/SchemaConvertersSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/schema/SchemaConvertersSuite.scala index 7c6dceb57..e48cfd43f 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/schema/SchemaConvertersSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/schema/SchemaConvertersSuite.scala @@ -13,14 +13,14 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.schema +package za.co.absa.enceladus.rest_api.schema import com.fasterxml.jackson.databind.{ObjectMapper, SerializationFeature} import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.module.scala.DefaultScalaModule import org.apache.spark.sql.types._ import org.scalatest.funsuite.AnyFunSuite -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor class SchemaConvertersSuite extends AnyFunSuite { diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/BaseServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/BaseServiceTest.scala similarity index 96% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/BaseServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/BaseServiceTest.scala index 97676951c..92ccbdd98 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/BaseServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/BaseServiceTest.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import java.util.concurrent.TimeUnit diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/DatasetServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/DatasetServiceTest.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/DatasetServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/DatasetServiceTest.scala index 4c0273896..1c11f8c0b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/DatasetServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/DatasetServiceTest.scala @@ -13,14 +13,14 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import com.mongodb.{MongoWriteException, ServerAddress, WriteError} import org.mockito.Mockito import org.mongodb.scala.bson.BsonDocument import org.scalatest.matchers.should.Matchers -import za.co.absa.enceladus.menas.exceptions.ValidationException -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, OozieRepository} +import za.co.absa.enceladus.rest_api.exceptions.ValidationException +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, OozieRepository} import za.co.absa.enceladus.model.{Dataset, Validation} import za.co.absa.enceladus.model.properties.PropertyDefinition import za.co.absa.enceladus.model.properties.essentiality.Essentiality._ diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/HDFSServiceSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/HDFSServiceSuite.scala similarity index 98% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/HDFSServiceSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/HDFSServiceSuite.scala index 8befc517f..3cc6072db 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/HDFSServiceSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/HDFSServiceSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import java.util.concurrent.TimeUnit diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/MappingTableServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/MappingTableServiceTest.scala similarity index 85% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/MappingTableServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/MappingTableServiceTest.scala index 50ceb9785..4ade85e29 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/MappingTableServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/MappingTableServiceTest.scala @@ -12,10 +12,10 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import za.co.absa.enceladus.model.MappingTable -import za.co.absa.enceladus.menas.repositories.{ DatasetMongoRepository, MappingTableMongoRepository } +import za.co.absa.enceladus.rest_api.repositories.{ DatasetMongoRepository, MappingTableMongoRepository } class MappingTableServiceTest extends VersionedModelServiceTest[MappingTable] { diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/RunServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/RunServiceTest.scala similarity index 95% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/RunServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/RunServiceTest.scala index aabc57444..6e688df7d 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/RunServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/RunServiceTest.scala @@ -13,14 +13,14 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import com.mongodb.{MongoWriteException, ServerAddress, WriteError} import org.mockito.scalatest.MockitoSugar import org.mongodb.scala.Completed import org.mongodb.scala.bson.BsonDocument -import za.co.absa.enceladus.menas.exceptions.ValidationException -import za.co.absa.enceladus.menas.repositories.RunMongoRepository +import za.co.absa.enceladus.rest_api.exceptions.ValidationException +import za.co.absa.enceladus.rest_api.repositories.RunMongoRepository import za.co.absa.enceladus.model.{Run, Validation} import za.co.absa.enceladus.model.test.factories.RunFactory diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/SchemaServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/SchemaServiceTest.scala similarity index 84% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/SchemaServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/SchemaServiceTest.scala index 98df395b8..6bd39a862 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/SchemaServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/SchemaServiceTest.scala @@ -12,11 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import za.co.absa.enceladus.model.Schema -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, MappingTableMongoRepository, SchemaMongoRepository} -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, MappingTableMongoRepository, SchemaMongoRepository} +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor import za.co.absa.enceladus.model.menas.MenasReference import za.co.absa.enceladus.model.SchemaField import scala.concurrent.Future diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceAuditTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceAuditTest.scala similarity index 94% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceAuditTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceAuditTest.scala index b954b60c4..29bb18fd4 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceAuditTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceAuditTest.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services -import za.co.absa.enceladus.menas.repositories.{DatasetMongoRepository, MappingTableMongoRepository} -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor -import za.co.absa.enceladus.menas.repositories.SchemaMongoRepository +import za.co.absa.enceladus.rest_api.repositories.{DatasetMongoRepository, MappingTableMongoRepository} +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.rest_api.repositories.SchemaMongoRepository import za.co.absa.enceladus.model._ import za.co.absa.enceladus.model.menas._ import za.co.absa.enceladus.model.menas.audit._ diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceTest.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceTest.scala similarity index 94% rename from menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceTest.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceTest.scala index 45cbd942e..c555e6d0b 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/services/VersionedModelServiceTest.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/services/VersionedModelServiceTest.scala @@ -12,11 +12,11 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package za.co.absa.enceladus.menas.services +package za.co.absa.enceladus.rest_api.services import org.mockito.Mockito import za.co.absa.enceladus.model.versionedModel.VersionedModel -import za.co.absa.enceladus.menas.repositories.VersionedMongoRepository +import za.co.absa.enceladus.rest_api.repositories.VersionedMongoRepository import za.co.absa.enceladus.model.Validation import scala.concurrent.{Await, Future} diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/SchemaTypeSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/SchemaTypeSuite.scala similarity index 94% rename from menas/src/test/scala/za/co/absa/enceladus/menas/utils/SchemaTypeSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/SchemaTypeSuite.scala index 805d5a8c1..6bae4bdec 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/SchemaTypeSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/SchemaTypeSuite.scala @@ -13,11 +13,11 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils +package za.co.absa.enceladus.rest_api.utils import org.scalatest.flatspec.AnyFlatSpec import org.scalatest.matchers.should.Matchers -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaFormatException +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaFormatException class SchemaTypeSuite extends AnyFlatSpec with Matchers { diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertorSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertorSuite.scala similarity index 97% rename from menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertorSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertorSuite.scala index d8104c474..3f71eb50a 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/SparkMenasSchemaConvertorSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/SparkMenasSchemaConvertorSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters +package za.co.absa.enceladus.rest_api.utils.converters import org.apache.spark.sql.types._ import za.co.absa.enceladus.model._ @@ -23,7 +23,7 @@ import com.fasterxml.jackson.module.scala.DefaultScalaModule import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule import com.fasterxml.jackson.databind.SerializationFeature import org.scalatest.funsuite.AnyFunSuite -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException class SparkMenasSchemaConvertorSuite extends AnyFunSuite with SparkTestBase { private val objectMapper = new ObjectMapper() diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationLevelConverterSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationLevelConverterSuite.scala similarity index 95% rename from menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationLevelConverterSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationLevelConverterSuite.scala index cf5146eaa..191aa7747 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/converters/StringToValidationLevelConverterSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/converters/StringToValidationLevelConverterSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.converters +package za.co.absa.enceladus.rest_api.utils.converters import org.scalatest.wordspec.AnyWordSpec import org.scalatest.matchers.should.Matchers.convertToAnyShouldWrapper diff --git a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParserSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParserSuite.scala similarity index 93% rename from menas/src/test/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParserSuite.scala rename to rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParserSuite.scala index 854f21894..d94b5011f 100644 --- a/menas/src/test/scala/za/co/absa/enceladus/menas/utils/parsers/SchemaParserSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/utils/parsers/SchemaParserSuite.scala @@ -13,7 +13,7 @@ * limitations under the License. */ -package za.co.absa.enceladus.menas.utils.parsers +package za.co.absa.enceladus.rest_api.utils.parsers import org.apache.avro.SchemaParseException import org.apache.commons.io.IOUtils @@ -24,10 +24,10 @@ import org.mockito.scalatest.MockitoSugar import org.scalatest.Inside import org.scalatest.wordspec.AnyWordSpec import za.co.absa.cobrix.cobol.parser.exceptions.SyntaxErrorException -import za.co.absa.enceladus.menas.TestResourcePath -import za.co.absa.enceladus.menas.models.rest.exceptions.SchemaParsingException -import za.co.absa.enceladus.menas.utils.SchemaType -import za.co.absa.enceladus.menas.utils.converters.SparkMenasSchemaConvertor +import za.co.absa.enceladus.restapi.TestResourcePath +import za.co.absa.enceladus.rest_api.models.rest.exceptions.SchemaParsingException +import za.co.absa.enceladus.rest_api.utils.SchemaType +import za.co.absa.enceladus.rest_api.utils.converters.SparkMenasSchemaConvertor class SchemaParserSuite extends AnyWordSpec with Matchers with MockitoSugar with Inside { val mockSchemaConvertor: SparkMenasSchemaConvertor = mock[SparkMenasSchemaConvertor] diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/config/JobConfigParser.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/config/JobConfigParser.scala index ab1f9aeea..b068992fb 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/config/JobConfigParser.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/config/JobConfigParser.scala @@ -94,7 +94,7 @@ object JobConfigParser extends ProjectMetadata { opt[String]("menas-auth-keytab").optional().action({ (file, config) => { config.withAuthKeytab(Option(file), new MenasKerberosCredentialsFactory(file)) } - }).text("Path to keytab file used for authenticating to menas"), + }).text("Path to keytab file used for authenticating to rest_api"), opt[String]("performance-file").optional().action((value, config) => From 70999f5d118dd6146e5b35a1723f86a487567b1d Mon Sep 17 00:00:00 2001 From: Daniel K Date: Tue, 25 May 2021 08:44:57 +0200 Subject: [PATCH 14/41] Feautre/1733 lineage dumper - 2nd edition (#1766) * #1733 final version 0.6.0 of spline spark agent used * #1733 cherrypicked version: commons 0.0.27, atum 3.5.0, spline agent 0.6.0-snapshot * #1733 PR touchup: maven.shade.version version revert to 3.2.1 --- migrations-cli/pom.xml | 2 +- pom.xml | 6 +- spark-jobs/pom.xml | 56 +------------------ .../main/resources/spline.properties.template | 22 +++----- .../enceladus/common/CommonJobExecution.scala | 2 +- .../plugin/menas/EventListenerMenas.scala | 4 +- .../conformance/ConformanceExecution.scala | 2 +- .../StandardizationExecution.scala | 2 +- .../interpreter/InterpreterSuite.scala | 4 +- .../StandardizationExecutionSuite.scala | 21 +++---- utils/pom.xml | 5 ++ .../enceladus/utils/fs/FileSystemUtils.scala | 4 +- 12 files changed, 41 insertions(+), 89 deletions(-) diff --git a/migrations-cli/pom.xml b/migrations-cli/pom.xml index 4d03fba10..50e1409ef 100644 --- a/migrations-cli/pom.xml +++ b/migrations-cli/pom.xml @@ -27,7 +27,6 @@ ${project.parent.basedir}/scalastyle-config.xml - 3.5.3 1.7.16 @@ -51,6 +50,7 @@ org.json4s json4s-jackson_${scala.compat.version} ${json4s.version} + provided org.slf4j diff --git a/pom.xml b/pom.xml index cbd688d30..e1cb29dea 100644 --- a/pom.xml +++ b/pom.xml @@ -147,10 +147,11 @@ 2.2 3.1.1 - 3.3.0 + 3.5.0 2.7.3 3.5.4 2.1.0 + 0.0.27 1.79.0 2.0.2 2.8.2 @@ -162,6 +163,7 @@ 2.10.4 2.9.8 0.10.7 + 3.5.3 4.11 0-10 4.17.10 @@ -186,7 +188,7 @@ 2.4.4 0.5.0 2.4.16 - 0.3.9 + 0.6.0 1.3.5 1.0.1.RELEASE 5.0.14.RELEASE diff --git a/spark-jobs/pom.xml b/spark-jobs/pom.xml index 09b31aa7d..cd15e0c1b 100644 --- a/spark-jobs/pom.xml +++ b/spark-jobs/pom.xml @@ -27,7 +27,6 @@ ${project.parent.basedir}/scalastyle-config.xml 4.0.0 - 0.0.10 2.4.5 @@ -81,12 +80,6 @@ provided - - za.co.absa.commons - commons_${scala.compat.version} - ${commons.version} - - com.typesafe @@ -111,52 +104,9 @@ - za.co.absa.spline - spline-core - ${spline.version} - - - net.jpountz.lz4 - lz4 - - - - - za.co.absa.spline - spline-core-spark-adapter-${spark.compat.version} - ${spline.version} - - - net.jpountz.lz4 - lz4 - - - - - za.co.absa.spline - spline-persistence-mongo - ${spline.version} - - - net.jpountz.lz4 - lz4 - - - - - za.co.absa.spline - spline-persistence-hdfs - ${spline.version} - - - net.jpountz.lz4 - lz4 - - - org.apache.hadoop - hadoop-common - - + za.co.absa.spline.agent.spark + agent-core_${scala.compat.version} + ${spline.agent.version} diff --git a/spark-jobs/src/main/resources/spline.properties.template b/spark-jobs/src/main/resources/spline.properties.template index a18c6a1b6..2868706c9 100644 --- a/spark-jobs/src/main/resources/spline.properties.template +++ b/spark-jobs/src/main/resources/spline.properties.template @@ -4,6 +4,7 @@ # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at +# # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software @@ -12,19 +13,12 @@ # See the License for the specific language governing permissions and # limitations under the License. # - -# -# Spline properties template. -# Uncomment the following lines to override corresponding Hadoop environment configuration properties. -# -# Set of properties for setting up persistence to MongoDB. +# Spline mode - the way how Spline is integrated. For details see Spline documentation +# possible values (default is BEST_EFFORT): +# DISABLED - no Spline integration (no lineage will be recorded) +# REQUIRED - Spline service has to be running on the spline.producer.url address; if not, job exits without execution +# BEST_EFFORT - job tries to connect to the provided Spline service (spline.producer.url address); but if that fails, job will still execute +spline.mode=BEST_EFFORT # -spline.persistence.factory=za.co.absa.spline.persistence.api.composition.ParallelCompositeFactory -spline.persistence.composition.factories=za.co.absa.spline.persistence.mongo.MongoPersistenceFactory,za.co.absa.spline.persistence.hdfs.HdfsPersistenceFactory - -spline.mongodb.url=mongodb://localhost:27017 -spline.mongodb.name=spline - # -# A property for setting up persistence to Apache Atlas. Additional properties defining connectivity to Atlas are required to be part of this configuration file. (see Atlas configuration file) -# spline.persistence.factory=za.co.absa.spline.persistence.atlas.AtlasPersistenceFactory +spline.producer.url=http://localhost:8080/spline/producer diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/CommonJobExecution.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/CommonJobExecution.scala index bbe1021c3..cf5d8e2a9 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/CommonJobExecution.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/CommonJobExecution.scala @@ -102,7 +102,7 @@ trait CommonJobExecution extends ProjectMetadata { validatePaths(pathCfg) // Enable Spline - import za.co.absa.spline.core.SparkLineageInitializer._ + import za.co.absa.spline.harvester.SparkLineageInitializer._ spark.enableLineageTracking() // Enable non-default persistence storage level if provided in the command line diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/plugin/menas/EventListenerMenas.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/plugin/menas/EventListenerMenas.scala index cf99d6ab9..7dd34d13c 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/plugin/menas/EventListenerMenas.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/plugin/menas/EventListenerMenas.scala @@ -20,7 +20,7 @@ import org.apache.log4j.LogManager import za.co.absa.atum.core.Atum import za.co.absa.atum.model._ import za.co.absa.atum.plugins.EventListener -import za.co.absa.atum.utils.ControlUtils +import za.co.absa.atum.utils.controlmeasure.ControlMeasureUtils import za.co.absa.enceladus.common.plugin.PluginLoader import za.co.absa.enceladus.dao.{DaoException, MenasDAO} import za.co.absa.enceladus.model.{Run, SplineReference} @@ -75,7 +75,7 @@ class EventListenerMenas(config: Config, datasetName, datasetVersion, splineRef, - ControlUtils.getTimestampAsString, + ControlMeasureUtils.getTimestampAsString, runStatus, controlMeasure) val storedRun = dao.storeNewRunObject(run) diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/conformance/ConformanceExecution.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/conformance/ConformanceExecution.scala index cc146bb7c..f81b8964a 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/conformance/ConformanceExecution.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/conformance/ConformanceExecution.scala @@ -66,7 +66,7 @@ trait ConformanceExecution extends CommonJobExecution { // Enable Control Framework // InputPath is standardizationPath in the combined job - spark.enableControlMeasuresTracking(s"${preparationResult.pathCfg.standardization.path}/_INFO") + spark.enableControlMeasuresTracking(Some(s"${preparationResult.pathCfg.standardization.path}/_INFO"), None) .setControlMeasuresWorkflow(sourceId.toString) // Enable control framework performance optimization for pipeline-like jobs diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/StandardizationExecution.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/StandardizationExecution.scala index 48994ae53..219d63eb8 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/StandardizationExecution.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/standardization/StandardizationExecution.scala @@ -59,7 +59,7 @@ trait StandardizationExecution extends CommonJobExecution { preparationResult.performance.startMeasurement(stdDirSize) // Enable Control Framework - spark.enableControlMeasuresTracking(sourceInfoFile = s"${preparationResult.pathCfg.raw.path}/_INFO") + spark.enableControlMeasuresTracking(sourceInfoFilePath = Some(s"${preparationResult.pathCfg.raw.path}/_INFO"), None) .setControlMeasuresWorkflow(sourceId.toString) // Enable control framework performance optimization for pipeline-like jobs diff --git a/spark-jobs/src/test/scala/za/co/absa/enceladus/conformance/interpreter/InterpreterSuite.scala b/spark-jobs/src/test/scala/za/co/absa/enceladus/conformance/interpreter/InterpreterSuite.scala index 4d5d6ec95..9f92610b8 100644 --- a/spark-jobs/src/test/scala/za/co/absa/enceladus/conformance/interpreter/InterpreterSuite.scala +++ b/spark-jobs/src/test/scala/za/co/absa/enceladus/conformance/interpreter/InterpreterSuite.scala @@ -45,7 +45,7 @@ class InterpreterSuite extends AnyFunSuite with SparkTestBase with BeforeAndAfte def testEndToEndDynamicConformance(useExperimentalMappingRule: Boolean): Unit = { // Enable Conformance Framework - spark.enableControlMeasuresTracking("src/test/testData/employee/2017/11/01/_INFO", "src/test/testData/_testOutput/_INFO") + spark.enableControlMeasuresTracking(Some("src/test/testData/employee/2017/11/01/_INFO"), Some("src/test/testData/_testOutput/_INFO")) //configure conf value spark.sessionState.conf.setConfString("co.za.absa.enceladus.confTest", "hello :)") @@ -103,7 +103,7 @@ class InterpreterSuite extends AnyFunSuite with SparkTestBase with BeforeAndAfte def testEndToEndArrayConformance(useExperimentalMappingRule: Boolean): Unit = { // Enable Conformance Framework - spark.enableControlMeasuresTracking("src/test/testData/_tradeData/2017/11/01/_INFO", "src/test/testData/_tradeOutput/_INFO") + spark.enableControlMeasuresTracking(Some("src/test/testData/_tradeData/2017/11/01/_INFO"), Some("src/test/testData/_tradeOutput/_INFO")) implicit val dao: MenasDAO = mock(classOf[MenasDAO]) implicit val progArgs: ConformanceConfig = ConformanceConfig( diff --git a/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationExecutionSuite.scala b/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationExecutionSuite.scala index e7cdf809c..1e23a1659 100644 --- a/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationExecutionSuite.scala +++ b/spark-jobs/src/test/scala/za/co/absa/enceladus/standardization/StandardizationExecutionSuite.scala @@ -19,6 +19,7 @@ import java.io.File import java.nio.file.Files import org.apache.commons.io.FileUtils +import org.apache.hadoop.fs.Path import org.apache.spark.sql.DataFrame import org.apache.spark.sql.types.{StringType, StructField, StructType} import org.mockito.scalatest.MockitoSugar @@ -30,7 +31,7 @@ import org.slf4j.{Logger, LoggerFactory} import za.co.absa.atum.AtumImplicits._ import za.co.absa.atum.model.{ControlMeasure, RunStatus} import za.co.absa.atum.persistence.ControlMeasuresParser -import za.co.absa.atum.utils.ControlUtils +import za.co.absa.atum.utils.controlmeasure.{ControlMeasureBuilder, ControlMeasureUtils} import za.co.absa.enceladus.common.config.PathConfig import za.co.absa.enceladus.common.performance.PerformanceMeasurer import za.co.absa.enceladus.dao.MenasDAO @@ -60,7 +61,6 @@ class StandardizationExecutionSuite extends AnyFlatSpec with Matchers with Spark testDataset.write.csv(stdPath) // Atum framework initialization is part of the 'prepareStandardization' - import za.co.absa.atum.AtumImplicits.SparkSessionWrapper spark.disableControlMeasuresTracking() val infoContentJson = FileReader.readFileAsString(s"$stdPath/_INFO") @@ -88,14 +88,15 @@ class StandardizationExecutionSuite extends AnyFlatSpec with Matchers with Spark ).toDF("id", "data").as("DatasetA") // rawPath must exist, _INFO file creation assures so - ControlUtils.createInfoFile(someDataset, - "test app", - rawPath, - "2020-02-20", - 1, - "CZ", - aggregateColumns = List("id", "data"), - writeToHDFS = true) + val cm = ControlMeasureBuilder.forDF(someDataset) + .withSourceApplication("test app") + .withInputPath(rawPath) + .withReportDate("2020-02-20") + .withReportVersion(1) + .withCountry("CZ") + .withAggregateColumns(List("id", "data")) + .build + ControlMeasureUtils.writeControlMeasureInfoFileToHadoopFs(cm, new Path(rawPath)) Mockito.when(dao.storeNewRunObject(ArgumentMatchers.any[Run])).thenReturn(RunFactory.getDummyRun(Some("uniqueId1"))) Mockito.when(dao.updateRunStatus(ArgumentMatchers.any[String], ArgumentMatchers.any[RunStatus])).thenReturn(RunFactory.getDummyRun(Some("uniqueId1"))) diff --git a/utils/pom.xml b/utils/pom.xml index 9040192c2..9ac91e7cc 100644 --- a/utils/pom.xml +++ b/utils/pom.xml @@ -52,6 +52,11 @@ atum-model_${scala.compat.version} ${atum.version} + + za.co.absa.commons + commons_${scala.compat.version} + ${commons.version} + org.scalatest scalatest-flatspec_${scala.compat.version} diff --git a/utils/src/main/scala/za/co/absa/enceladus/utils/fs/FileSystemUtils.scala b/utils/src/main/scala/za/co/absa/enceladus/utils/fs/FileSystemUtils.scala index 73b58119f..ebbf9d6bc 100644 --- a/utils/src/main/scala/za/co/absa/enceladus/utils/fs/FileSystemUtils.scala +++ b/utils/src/main/scala/za/co/absa/enceladus/utils/fs/FileSystemUtils.scala @@ -21,7 +21,7 @@ import java.net.URI import org.apache.hadoop.conf.Configuration import org.apache.hadoop.fs.FileSystem import org.slf4j.{Logger, LoggerFactory} -import za.co.absa.atum.location.S3Location.StringS3LocationExt +import za.co.absa.commons.s3.SimpleS3Location.SimpleS3LocationExt object FileSystemUtils { @@ -34,7 +34,7 @@ object FileSystemUtils { * @return FileSystem instance (backed by S3/HDFS) */ def getFileSystemFromPath(path: String)(implicit hadoopConf: Configuration): FileSystem = { - path.toS3Location match { + path.toSimpleS3Location match { case Some(s3Location) => // s3 over hadoop fs api val s3BucketUri: String = s"s3://${s3Location.bucketName}" // s3:// From c4dcd92073e94cfbe0da3750ddc3d9d8321f4613 Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Thu, 27 May 2021 00:07:30 +0300 Subject: [PATCH 15/41] 1770 Rename menas web to menas (#1786) * #1770 Rename menas-web to menas --- .github/workflows/pr_labels_check.yml | 4 ++-- {menas-web => menas}/Dockerfile | 6 +++--- {menas-web => menas}/nginx.conf | 0 {menas-web => menas}/pom.xml | 4 ++-- .../start_menas_web.sh => menas/start_menas.sh | 0 {menas-web => menas}/ui/components/AuditTrail.js | 0 {menas-web => menas}/ui/components/Component.js | 0 {menas-web => menas}/ui/components/SchemaTable.js | 0 .../ui/components/app.controller.js | 0 {menas-web => menas}/ui/components/app.view.xml | 0 .../ui/components/auditTrail.fragment.xml | 0 .../ui/components/dataset/addDataset.fragment.xml | 0 .../CastingConformanceRule/add.fragment.xml | 0 .../CastingConformanceRule/display.fragment.xml | 0 .../CoalesceConformanceRule/add.fragment.xml | 0 .../CoalesceConformanceRule/display.fragment.xml | 0 .../ConcatenationConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../dataset/conformanceRule/ConformanceRule.js | 0 .../conformanceRule/ConformanceRuleDialog.js | 0 .../dataset/conformanceRule/ConformanceRuleForm.js | 0 .../conformanceRule/ConformanceRuleFormFactory.js | 0 .../DropConformanceRule/add.fragment.xml | 0 .../DropConformanceRule/display.fragment.xml | 0 .../FillNullsConformanceRule/add.fragment.xml | 0 .../FillNullsConformanceRule/display.fragment.xml | 0 .../LiteralConformanceRule/add.fragment.xml | 0 .../LiteralConformanceRule/display.fragment.xml | 0 .../MappingConformanceRule/JoinConditionDialog.js | 0 .../JoinConditionDialogFactory.js | 0 .../MappingConformanceRule/OutputColumnDialog.js | 0 .../OutputColumnDialogFactory.js | 0 .../MappingConformanceRule/add.fragment.xml | 0 .../MappingConformanceRule/display.fragment.xml | 0 .../joinConditionDialog.fragment.xml | 0 .../joinConditions.fragment.xml | 0 .../outputColumnDialog.fragment.xml | 0 .../outputColumns.fragment.xml | 0 .../NegationConformanceRule/add.fragment.xml | 0 .../NegationConformanceRule/display.fragment.xml | 0 .../conformanceRule/RuleColumnDialog.fragment.xml | 0 .../dataset/conformanceRule/RuleColumnDialog.js | 0 .../conformanceRule/RuleColumnDialogFactory.js | 0 .../dataset/conformanceRule/SchemaManager.js | 0 .../SingleColumnConformanceRule/add.fragment.xml | 0 .../display.fragment.xml | 0 .../add.fragment.xml | 0 .../display.fragment.xml | 0 .../UppercaseConformanceRule/add.fragment.xml | 0 .../UppercaseConformanceRule/display.fragment.xml | 0 .../conformanceRule/add/checkpointBox.fragment.xml | 0 .../add/commonRuleFields.fragment.xml | 0 .../conformanceRule/add/inputColumn.fragment.xml | 0 .../conformanceRule/display/actionMenu.fragment.xml | 0 .../display/checkpointBox.fragment.xml | 0 .../display/commonRuleFields.fragment.xml | 0 .../display/inputColumn.fragment.xml | 0 .../dataset/conformanceRule/upsert.fragment.xml | 0 .../components/dataset/datasetDetail.controller.js | 0 .../ui/components/dataset/datasetDetail.view.xml | 0 .../ui/components/dataset/datasetInfo.fragment.xml | 0 .../components/dataset/datasetMaster.controller.js | 0 .../ui/components/dataset/datasetMaster.view.xml | 0 .../dataset/monitoring/barChartPopover.fragment.xml | 0 .../dataset/monitoring/monitoring.fragment.xml | 0 .../ui/components/dataset/run/runs.fragment.xml | 0 .../dataset/schedule/editSchedule.fragment.xml | 0 .../dataset/schedule/viewSchedule.fragment.xml | 0 .../it/designfuture/chartjs/library-preload.js | 0 .../ui/components/hdfs/HDFSBrowser.js | 0 .../ui/components/hdfs/HDFSBrowserRenderer.js | 0 .../ui/components/home/landingPage.controller.js | 0 .../ui/components/home/landingPage.view.xml | 0 .../ui/components/i18n/message.properties | 0 .../ui/components/login/loginDetail.controller.js | 0 .../ui/components/login/loginDetail.view.xml | 0 .../mappingTable/addDefaultValue.fragment.xml | 0 .../mappingTable/addMappingTable.fragment.xml | 0 .../mappingTable/mappingTableDetail.controller.js | 0 .../mappingTable/mappingTableDetail.view.xml | 0 .../mappingTable/mappingTableInfo.fragment.xml | 0 .../mappingTable/mappingTableMaster.controller.js | 0 .../mappingTable/mappingTableMaster.view.xml | 0 .../ui/components/mappingTableSelector.fragment.xml | 0 .../run/runDatasetNameMaster.controller.js | 0 .../ui/components/run/runDatasetNameMaster.view.xml | 0 .../run/runDatasetVersionMaster.controller.js | 0 .../components/run/runDatasetVersionMaster.view.xml | 0 .../ui/components/run/runDetail.controller.js | 0 .../ui/components/run/runDetail.view.xml | 0 .../ui/components/run/runMaster.controller.js | 0 .../ui/components/run/runMaster.view.xml | 0 .../ui/components/schema/addSchema.fragment.xml | 0 .../ui/components/schema/schemaDetail.controller.js | 0 .../ui/components/schema/schemaDetail.view.xml | 0 .../ui/components/schema/schemaInfo.fragment.xml | 0 .../ui/components/schema/schemaMaster.controller.js | 0 .../ui/components/schema/schemaMaster.view.xml | 0 .../schema/selector/SchemaSelectorUtils.js | 0 .../schema/selector/schemaSelector.fragment.xml | 0 .../selector/schemaSelectorDialog.fragment.xml | 0 .../ui/components/schemaFieldSelector.fragment.xml | 0 .../ui/components/schemaTable.fragment.xml | 0 .../ui/components/tables/TableUtils.js | 0 .../ui/components/tables/groupDialog.fragment.xml | 0 .../ui/components/tables/sortDialog.fragment.xml | 0 .../ui/components/types/CronEntryType.js | 0 .../ui/components/types/NonEmptyArrType.js | 0 .../ui/components/userInfo.fragment.xml | 0 .../ui/components/validator/Validator.js | 0 {menas-web => menas}/ui/css/style.css | 0 {menas-web => menas}/ui/favicon.ico | Bin {menas-web => menas}/ui/generic/formatters.js | 0 {menas-web => menas}/ui/generic/functions.js | 0 {menas-web => menas}/ui/generic/model.js | 0 {menas-web => menas}/ui/generic/prop.js | 0 {menas-web => menas}/ui/index.html | 0 {menas-web => menas}/ui/manifest.json | 2 +- {menas-web => menas}/ui/npm-shrinkwrap.json | 2 +- {menas-web => menas}/ui/package.json | 4 ++-- {menas-web => menas}/ui/service/CheckpointUtils.js | 0 {menas-web => menas}/ui/service/DialogFactory.js | 0 {menas-web => menas}/ui/service/EntityDialog.js | 0 {menas-web => menas}/ui/service/EntityService.js | 0 .../ui/service/EntityValidationService.js | 0 {menas-web => menas}/ui/service/GenericService.js | 0 {menas-web => menas}/ui/service/HdfsService.js | 0 {menas-web => menas}/ui/service/MessageProvider.js | 0 .../ui/service/MonitoringService.js | 0 {menas-web => menas}/ui/service/OozieService.js | 0 .../ui/service/PropertiesService.js | 0 {menas-web => menas}/ui/service/ResponseUtils.js | 0 {menas-web => menas}/ui/service/RestDAO.js | 0 {menas-web => menas}/ui/service/RuleService.js | 0 {menas-web => menas}/ui/service/RunRestDAO.js | 0 {menas-web => menas}/ui/service/RunService.js | 0 .../ui/service/SchemaFieldSelector.js | 0 {menas-web => menas}/ui/service/ValidationResult.js | 0 {menas-web => menas}/ui/ui5.yaml | 2 +- pom.xml | 6 +++--- rest-api/pom.xml | 2 +- 141 files changed, 16 insertions(+), 16 deletions(-) rename {menas-web => menas}/Dockerfile (83%) rename {menas-web => menas}/nginx.conf (100%) rename {menas-web => menas}/pom.xml (98%) rename menas-web/start_menas_web.sh => menas/start_menas.sh (100%) rename {menas-web => menas}/ui/components/AuditTrail.js (100%) rename {menas-web => menas}/ui/components/Component.js (100%) rename {menas-web => menas}/ui/components/SchemaTable.js (100%) rename {menas-web => menas}/ui/components/app.controller.js (100%) rename {menas-web => menas}/ui/components/app.view.xml (100%) rename {menas-web => menas}/ui/components/auditTrail.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/addDataset.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConformanceRule.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConformanceRuleForm.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/RuleColumnDialog.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/SchemaManager.js (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/conformanceRule/upsert.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/datasetDetail.controller.js (100%) rename {menas-web => menas}/ui/components/dataset/datasetDetail.view.xml (100%) rename {menas-web => menas}/ui/components/dataset/datasetInfo.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/datasetMaster.controller.js (100%) rename {menas-web => menas}/ui/components/dataset/datasetMaster.view.xml (100%) rename {menas-web => menas}/ui/components/dataset/monitoring/barChartPopover.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/monitoring/monitoring.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/run/runs.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/schedule/editSchedule.fragment.xml (100%) rename {menas-web => menas}/ui/components/dataset/schedule/viewSchedule.fragment.xml (100%) rename {menas-web => menas}/ui/components/external/it/designfuture/chartjs/library-preload.js (100%) rename {menas-web => menas}/ui/components/hdfs/HDFSBrowser.js (100%) rename {menas-web => menas}/ui/components/hdfs/HDFSBrowserRenderer.js (100%) rename {menas-web => menas}/ui/components/home/landingPage.controller.js (100%) rename {menas-web => menas}/ui/components/home/landingPage.view.xml (100%) rename {menas-web => menas}/ui/components/i18n/message.properties (100%) rename {menas-web => menas}/ui/components/login/loginDetail.controller.js (100%) rename {menas-web => menas}/ui/components/login/loginDetail.view.xml (100%) rename {menas-web => menas}/ui/components/mappingTable/addDefaultValue.fragment.xml (100%) rename {menas-web => menas}/ui/components/mappingTable/addMappingTable.fragment.xml (100%) rename {menas-web => menas}/ui/components/mappingTable/mappingTableDetail.controller.js (100%) rename {menas-web => menas}/ui/components/mappingTable/mappingTableDetail.view.xml (100%) rename {menas-web => menas}/ui/components/mappingTable/mappingTableInfo.fragment.xml (100%) rename {menas-web => menas}/ui/components/mappingTable/mappingTableMaster.controller.js (100%) rename {menas-web => menas}/ui/components/mappingTable/mappingTableMaster.view.xml (100%) rename {menas-web => menas}/ui/components/mappingTableSelector.fragment.xml (100%) rename {menas-web => menas}/ui/components/run/runDatasetNameMaster.controller.js (100%) rename {menas-web => menas}/ui/components/run/runDatasetNameMaster.view.xml (100%) rename {menas-web => menas}/ui/components/run/runDatasetVersionMaster.controller.js (100%) rename {menas-web => menas}/ui/components/run/runDatasetVersionMaster.view.xml (100%) rename {menas-web => menas}/ui/components/run/runDetail.controller.js (100%) rename {menas-web => menas}/ui/components/run/runDetail.view.xml (100%) rename {menas-web => menas}/ui/components/run/runMaster.controller.js (100%) rename {menas-web => menas}/ui/components/run/runMaster.view.xml (100%) rename {menas-web => menas}/ui/components/schema/addSchema.fragment.xml (100%) rename {menas-web => menas}/ui/components/schema/schemaDetail.controller.js (100%) rename {menas-web => menas}/ui/components/schema/schemaDetail.view.xml (100%) rename {menas-web => menas}/ui/components/schema/schemaInfo.fragment.xml (100%) rename {menas-web => menas}/ui/components/schema/schemaMaster.controller.js (100%) rename {menas-web => menas}/ui/components/schema/schemaMaster.view.xml (100%) rename {menas-web => menas}/ui/components/schema/selector/SchemaSelectorUtils.js (100%) rename {menas-web => menas}/ui/components/schema/selector/schemaSelector.fragment.xml (100%) rename {menas-web => menas}/ui/components/schema/selector/schemaSelectorDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/schemaFieldSelector.fragment.xml (100%) rename {menas-web => menas}/ui/components/schemaTable.fragment.xml (100%) rename {menas-web => menas}/ui/components/tables/TableUtils.js (100%) rename {menas-web => menas}/ui/components/tables/groupDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/tables/sortDialog.fragment.xml (100%) rename {menas-web => menas}/ui/components/types/CronEntryType.js (100%) rename {menas-web => menas}/ui/components/types/NonEmptyArrType.js (100%) rename {menas-web => menas}/ui/components/userInfo.fragment.xml (100%) rename {menas-web => menas}/ui/components/validator/Validator.js (100%) rename {menas-web => menas}/ui/css/style.css (100%) rename {menas-web => menas}/ui/favicon.ico (100%) rename {menas-web => menas}/ui/generic/formatters.js (100%) rename {menas-web => menas}/ui/generic/functions.js (100%) rename {menas-web => menas}/ui/generic/model.js (100%) rename {menas-web => menas}/ui/generic/prop.js (100%) rename {menas-web => menas}/ui/index.html (100%) rename {menas-web => menas}/ui/manifest.json (51%) rename {menas-web => menas}/ui/npm-shrinkwrap.json (99%) rename {menas-web => menas}/ui/package.json (89%) rename {menas-web => menas}/ui/service/CheckpointUtils.js (100%) rename {menas-web => menas}/ui/service/DialogFactory.js (100%) rename {menas-web => menas}/ui/service/EntityDialog.js (100%) rename {menas-web => menas}/ui/service/EntityService.js (100%) rename {menas-web => menas}/ui/service/EntityValidationService.js (100%) rename {menas-web => menas}/ui/service/GenericService.js (100%) rename {menas-web => menas}/ui/service/HdfsService.js (100%) rename {menas-web => menas}/ui/service/MessageProvider.js (100%) rename {menas-web => menas}/ui/service/MonitoringService.js (100%) rename {menas-web => menas}/ui/service/OozieService.js (100%) rename {menas-web => menas}/ui/service/PropertiesService.js (100%) rename {menas-web => menas}/ui/service/ResponseUtils.js (100%) rename {menas-web => menas}/ui/service/RestDAO.js (100%) rename {menas-web => menas}/ui/service/RuleService.js (100%) rename {menas-web => menas}/ui/service/RunRestDAO.js (100%) rename {menas-web => menas}/ui/service/RunService.js (100%) rename {menas-web => menas}/ui/service/SchemaFieldSelector.js (100%) rename {menas-web => menas}/ui/service/ValidationResult.js (100%) rename {menas-web => menas}/ui/ui5.yaml (99%) diff --git a/.github/workflows/pr_labels_check.yml b/.github/workflows/pr_labels_check.yml index 2dba51a28..90c668233 100644 --- a/.github/workflows/pr_labels_check.yml +++ b/.github/workflows/pr_labels_check.yml @@ -22,7 +22,7 @@ jobs: name: Test approved or docs runs-on: ubuntu-latest steps: - - uses: danielchabr/pr-labels-checker@master + - uses: danielchabr/pr-labels-checker@v3.0 id: checkLabel with: hasSome: PR:tested,PR:no testing needed,docs @@ -31,7 +31,7 @@ jobs: name: Merge not blocked runs-on: ubuntu-latest steps: - - uses: danielchabr/pr-labels-checker@master + - uses: danielchabr/pr-labels-checker@v3.0 id: checkLabel with: hasNone: PR:reviewing,work in progress diff --git a/menas-web/Dockerfile b/menas/Dockerfile similarity index 83% rename from menas-web/Dockerfile rename to menas/Dockerfile index 3ffa8c72a..339dd8965 100644 --- a/menas-web/Dockerfile +++ b/menas/Dockerfile @@ -20,10 +20,10 @@ LABEL \ vendor="AbsaOSS" \ copyright="2020 ABSA Group Limited" \ license="Apache License, version 2.0" \ - name="Menas Web" + name="Menas" -ADD start_menas_web.sh /docker-entrypoint.d/start_menas_web.sh +ADD start_menas.sh /docker-entrypoint.d/start_menas.sh COPY nginx.conf nginx.conf -RUN chmod +x /docker-entrypoint.d/start_menas_web.sh && rm -rf /usr/share/nginx/html/* +RUN chmod +x /docker-entrypoint.d/start_menas.sh && rm -rf /usr/share/nginx/html/* COPY ./ui/dist /usr/share/nginx/html/ diff --git a/menas-web/nginx.conf b/menas/nginx.conf similarity index 100% rename from menas-web/nginx.conf rename to menas/nginx.conf diff --git a/menas-web/pom.xml b/menas/pom.xml similarity index 98% rename from menas-web/pom.xml rename to menas/pom.xml index 0d5807de2..1a9f9d5b4 100644 --- a/menas-web/pom.xml +++ b/menas/pom.xml @@ -15,7 +15,7 @@ 4.0.0 - menas-web + menas war @@ -31,7 +31,7 @@ dockerfile-maven-plugin ${dockerfile.maven.version} - ${dockerfile.menas-ui.repository} + ${dockerfile.menas.repository} ${dockerfile.tag} ${dockerfile.base.artifact} diff --git a/menas-web/start_menas_web.sh b/menas/start_menas.sh similarity index 100% rename from menas-web/start_menas_web.sh rename to menas/start_menas.sh diff --git a/menas-web/ui/components/AuditTrail.js b/menas/ui/components/AuditTrail.js similarity index 100% rename from menas-web/ui/components/AuditTrail.js rename to menas/ui/components/AuditTrail.js diff --git a/menas-web/ui/components/Component.js b/menas/ui/components/Component.js similarity index 100% rename from menas-web/ui/components/Component.js rename to menas/ui/components/Component.js diff --git a/menas-web/ui/components/SchemaTable.js b/menas/ui/components/SchemaTable.js similarity index 100% rename from menas-web/ui/components/SchemaTable.js rename to menas/ui/components/SchemaTable.js diff --git a/menas-web/ui/components/app.controller.js b/menas/ui/components/app.controller.js similarity index 100% rename from menas-web/ui/components/app.controller.js rename to menas/ui/components/app.controller.js diff --git a/menas-web/ui/components/app.view.xml b/menas/ui/components/app.view.xml similarity index 100% rename from menas-web/ui/components/app.view.xml rename to menas/ui/components/app.view.xml diff --git a/menas-web/ui/components/auditTrail.fragment.xml b/menas/ui/components/auditTrail.fragment.xml similarity index 100% rename from menas-web/ui/components/auditTrail.fragment.xml rename to menas/ui/components/auditTrail.fragment.xml diff --git a/menas-web/ui/components/dataset/addDataset.fragment.xml b/menas/ui/components/dataset/addDataset.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/addDataset.fragment.xml rename to menas/ui/components/dataset/addDataset.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/CastingConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/CastingConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/CoalesceConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/ConcatenationConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/ConformanceRule.js b/menas/ui/components/dataset/conformanceRule/ConformanceRule.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConformanceRule.js rename to menas/ui/components/dataset/conformanceRule/ConformanceRule.js diff --git a/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js b/menas/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js rename to menas/ui/components/dataset/conformanceRule/ConformanceRuleDialog.js diff --git a/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleForm.js b/menas/ui/components/dataset/conformanceRule/ConformanceRuleForm.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConformanceRuleForm.js rename to menas/ui/components/dataset/conformanceRule/ConformanceRuleForm.js diff --git a/menas-web/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js b/menas/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js rename to menas/ui/components/dataset/conformanceRule/ConformanceRuleFormFactory.js diff --git a/menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/DropConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/DropConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/FillNullsConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/LiteralConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialog.js diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/JoinConditionDialogFactory.js diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialog.js diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/OutputColumnDialogFactory.js diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditionDialog.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/joinConditions.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumnDialog.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml b/menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml rename to menas/ui/components/dataset/conformanceRule/MappingConformanceRule/outputColumns.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/NegationConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/NegationConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml b/menas/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml rename to menas/ui/components/dataset/conformanceRule/RuleColumnDialog.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.js b/menas/ui/components/dataset/conformanceRule/RuleColumnDialog.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/RuleColumnDialog.js rename to menas/ui/components/dataset/conformanceRule/RuleColumnDialog.js diff --git a/menas-web/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js b/menas/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js rename to menas/ui/components/dataset/conformanceRule/RuleColumnDialogFactory.js diff --git a/menas-web/ui/components/dataset/conformanceRule/SchemaManager.js b/menas/ui/components/dataset/conformanceRule/SchemaManager.js similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/SchemaManager.js rename to menas/ui/components/dataset/conformanceRule/SchemaManager.js diff --git a/menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/SingleColumnConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/SparkSessionConfConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml b/menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml rename to menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/add.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml b/menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml rename to menas/ui/components/dataset/conformanceRule/UppercaseConformanceRule/display.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml b/menas/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml rename to menas/ui/components/dataset/conformanceRule/add/checkpointBox.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml b/menas/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml rename to menas/ui/components/dataset/conformanceRule/add/commonRuleFields.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml b/menas/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml rename to menas/ui/components/dataset/conformanceRule/add/inputColumn.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml b/menas/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml rename to menas/ui/components/dataset/conformanceRule/display/actionMenu.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml b/menas/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml rename to menas/ui/components/dataset/conformanceRule/display/checkpointBox.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml b/menas/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml rename to menas/ui/components/dataset/conformanceRule/display/commonRuleFields.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml b/menas/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml rename to menas/ui/components/dataset/conformanceRule/display/inputColumn.fragment.xml diff --git a/menas-web/ui/components/dataset/conformanceRule/upsert.fragment.xml b/menas/ui/components/dataset/conformanceRule/upsert.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/conformanceRule/upsert.fragment.xml rename to menas/ui/components/dataset/conformanceRule/upsert.fragment.xml diff --git a/menas-web/ui/components/dataset/datasetDetail.controller.js b/menas/ui/components/dataset/datasetDetail.controller.js similarity index 100% rename from menas-web/ui/components/dataset/datasetDetail.controller.js rename to menas/ui/components/dataset/datasetDetail.controller.js diff --git a/menas-web/ui/components/dataset/datasetDetail.view.xml b/menas/ui/components/dataset/datasetDetail.view.xml similarity index 100% rename from menas-web/ui/components/dataset/datasetDetail.view.xml rename to menas/ui/components/dataset/datasetDetail.view.xml diff --git a/menas-web/ui/components/dataset/datasetInfo.fragment.xml b/menas/ui/components/dataset/datasetInfo.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/datasetInfo.fragment.xml rename to menas/ui/components/dataset/datasetInfo.fragment.xml diff --git a/menas-web/ui/components/dataset/datasetMaster.controller.js b/menas/ui/components/dataset/datasetMaster.controller.js similarity index 100% rename from menas-web/ui/components/dataset/datasetMaster.controller.js rename to menas/ui/components/dataset/datasetMaster.controller.js diff --git a/menas-web/ui/components/dataset/datasetMaster.view.xml b/menas/ui/components/dataset/datasetMaster.view.xml similarity index 100% rename from menas-web/ui/components/dataset/datasetMaster.view.xml rename to menas/ui/components/dataset/datasetMaster.view.xml diff --git a/menas-web/ui/components/dataset/monitoring/barChartPopover.fragment.xml b/menas/ui/components/dataset/monitoring/barChartPopover.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/monitoring/barChartPopover.fragment.xml rename to menas/ui/components/dataset/monitoring/barChartPopover.fragment.xml diff --git a/menas-web/ui/components/dataset/monitoring/monitoring.fragment.xml b/menas/ui/components/dataset/monitoring/monitoring.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/monitoring/monitoring.fragment.xml rename to menas/ui/components/dataset/monitoring/monitoring.fragment.xml diff --git a/menas-web/ui/components/dataset/run/runs.fragment.xml b/menas/ui/components/dataset/run/runs.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/run/runs.fragment.xml rename to menas/ui/components/dataset/run/runs.fragment.xml diff --git a/menas-web/ui/components/dataset/schedule/editSchedule.fragment.xml b/menas/ui/components/dataset/schedule/editSchedule.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/schedule/editSchedule.fragment.xml rename to menas/ui/components/dataset/schedule/editSchedule.fragment.xml diff --git a/menas-web/ui/components/dataset/schedule/viewSchedule.fragment.xml b/menas/ui/components/dataset/schedule/viewSchedule.fragment.xml similarity index 100% rename from menas-web/ui/components/dataset/schedule/viewSchedule.fragment.xml rename to menas/ui/components/dataset/schedule/viewSchedule.fragment.xml diff --git a/menas-web/ui/components/external/it/designfuture/chartjs/library-preload.js b/menas/ui/components/external/it/designfuture/chartjs/library-preload.js similarity index 100% rename from menas-web/ui/components/external/it/designfuture/chartjs/library-preload.js rename to menas/ui/components/external/it/designfuture/chartjs/library-preload.js diff --git a/menas-web/ui/components/hdfs/HDFSBrowser.js b/menas/ui/components/hdfs/HDFSBrowser.js similarity index 100% rename from menas-web/ui/components/hdfs/HDFSBrowser.js rename to menas/ui/components/hdfs/HDFSBrowser.js diff --git a/menas-web/ui/components/hdfs/HDFSBrowserRenderer.js b/menas/ui/components/hdfs/HDFSBrowserRenderer.js similarity index 100% rename from menas-web/ui/components/hdfs/HDFSBrowserRenderer.js rename to menas/ui/components/hdfs/HDFSBrowserRenderer.js diff --git a/menas-web/ui/components/home/landingPage.controller.js b/menas/ui/components/home/landingPage.controller.js similarity index 100% rename from menas-web/ui/components/home/landingPage.controller.js rename to menas/ui/components/home/landingPage.controller.js diff --git a/menas-web/ui/components/home/landingPage.view.xml b/menas/ui/components/home/landingPage.view.xml similarity index 100% rename from menas-web/ui/components/home/landingPage.view.xml rename to menas/ui/components/home/landingPage.view.xml diff --git a/menas-web/ui/components/i18n/message.properties b/menas/ui/components/i18n/message.properties similarity index 100% rename from menas-web/ui/components/i18n/message.properties rename to menas/ui/components/i18n/message.properties diff --git a/menas-web/ui/components/login/loginDetail.controller.js b/menas/ui/components/login/loginDetail.controller.js similarity index 100% rename from menas-web/ui/components/login/loginDetail.controller.js rename to menas/ui/components/login/loginDetail.controller.js diff --git a/menas-web/ui/components/login/loginDetail.view.xml b/menas/ui/components/login/loginDetail.view.xml similarity index 100% rename from menas-web/ui/components/login/loginDetail.view.xml rename to menas/ui/components/login/loginDetail.view.xml diff --git a/menas-web/ui/components/mappingTable/addDefaultValue.fragment.xml b/menas/ui/components/mappingTable/addDefaultValue.fragment.xml similarity index 100% rename from menas-web/ui/components/mappingTable/addDefaultValue.fragment.xml rename to menas/ui/components/mappingTable/addDefaultValue.fragment.xml diff --git a/menas-web/ui/components/mappingTable/addMappingTable.fragment.xml b/menas/ui/components/mappingTable/addMappingTable.fragment.xml similarity index 100% rename from menas-web/ui/components/mappingTable/addMappingTable.fragment.xml rename to menas/ui/components/mappingTable/addMappingTable.fragment.xml diff --git a/menas-web/ui/components/mappingTable/mappingTableDetail.controller.js b/menas/ui/components/mappingTable/mappingTableDetail.controller.js similarity index 100% rename from menas-web/ui/components/mappingTable/mappingTableDetail.controller.js rename to menas/ui/components/mappingTable/mappingTableDetail.controller.js diff --git a/menas-web/ui/components/mappingTable/mappingTableDetail.view.xml b/menas/ui/components/mappingTable/mappingTableDetail.view.xml similarity index 100% rename from menas-web/ui/components/mappingTable/mappingTableDetail.view.xml rename to menas/ui/components/mappingTable/mappingTableDetail.view.xml diff --git a/menas-web/ui/components/mappingTable/mappingTableInfo.fragment.xml b/menas/ui/components/mappingTable/mappingTableInfo.fragment.xml similarity index 100% rename from menas-web/ui/components/mappingTable/mappingTableInfo.fragment.xml rename to menas/ui/components/mappingTable/mappingTableInfo.fragment.xml diff --git a/menas-web/ui/components/mappingTable/mappingTableMaster.controller.js b/menas/ui/components/mappingTable/mappingTableMaster.controller.js similarity index 100% rename from menas-web/ui/components/mappingTable/mappingTableMaster.controller.js rename to menas/ui/components/mappingTable/mappingTableMaster.controller.js diff --git a/menas-web/ui/components/mappingTable/mappingTableMaster.view.xml b/menas/ui/components/mappingTable/mappingTableMaster.view.xml similarity index 100% rename from menas-web/ui/components/mappingTable/mappingTableMaster.view.xml rename to menas/ui/components/mappingTable/mappingTableMaster.view.xml diff --git a/menas-web/ui/components/mappingTableSelector.fragment.xml b/menas/ui/components/mappingTableSelector.fragment.xml similarity index 100% rename from menas-web/ui/components/mappingTableSelector.fragment.xml rename to menas/ui/components/mappingTableSelector.fragment.xml diff --git a/menas-web/ui/components/run/runDatasetNameMaster.controller.js b/menas/ui/components/run/runDatasetNameMaster.controller.js similarity index 100% rename from menas-web/ui/components/run/runDatasetNameMaster.controller.js rename to menas/ui/components/run/runDatasetNameMaster.controller.js diff --git a/menas-web/ui/components/run/runDatasetNameMaster.view.xml b/menas/ui/components/run/runDatasetNameMaster.view.xml similarity index 100% rename from menas-web/ui/components/run/runDatasetNameMaster.view.xml rename to menas/ui/components/run/runDatasetNameMaster.view.xml diff --git a/menas-web/ui/components/run/runDatasetVersionMaster.controller.js b/menas/ui/components/run/runDatasetVersionMaster.controller.js similarity index 100% rename from menas-web/ui/components/run/runDatasetVersionMaster.controller.js rename to menas/ui/components/run/runDatasetVersionMaster.controller.js diff --git a/menas-web/ui/components/run/runDatasetVersionMaster.view.xml b/menas/ui/components/run/runDatasetVersionMaster.view.xml similarity index 100% rename from menas-web/ui/components/run/runDatasetVersionMaster.view.xml rename to menas/ui/components/run/runDatasetVersionMaster.view.xml diff --git a/menas-web/ui/components/run/runDetail.controller.js b/menas/ui/components/run/runDetail.controller.js similarity index 100% rename from menas-web/ui/components/run/runDetail.controller.js rename to menas/ui/components/run/runDetail.controller.js diff --git a/menas-web/ui/components/run/runDetail.view.xml b/menas/ui/components/run/runDetail.view.xml similarity index 100% rename from menas-web/ui/components/run/runDetail.view.xml rename to menas/ui/components/run/runDetail.view.xml diff --git a/menas-web/ui/components/run/runMaster.controller.js b/menas/ui/components/run/runMaster.controller.js similarity index 100% rename from menas-web/ui/components/run/runMaster.controller.js rename to menas/ui/components/run/runMaster.controller.js diff --git a/menas-web/ui/components/run/runMaster.view.xml b/menas/ui/components/run/runMaster.view.xml similarity index 100% rename from menas-web/ui/components/run/runMaster.view.xml rename to menas/ui/components/run/runMaster.view.xml diff --git a/menas-web/ui/components/schema/addSchema.fragment.xml b/menas/ui/components/schema/addSchema.fragment.xml similarity index 100% rename from menas-web/ui/components/schema/addSchema.fragment.xml rename to menas/ui/components/schema/addSchema.fragment.xml diff --git a/menas-web/ui/components/schema/schemaDetail.controller.js b/menas/ui/components/schema/schemaDetail.controller.js similarity index 100% rename from menas-web/ui/components/schema/schemaDetail.controller.js rename to menas/ui/components/schema/schemaDetail.controller.js diff --git a/menas-web/ui/components/schema/schemaDetail.view.xml b/menas/ui/components/schema/schemaDetail.view.xml similarity index 100% rename from menas-web/ui/components/schema/schemaDetail.view.xml rename to menas/ui/components/schema/schemaDetail.view.xml diff --git a/menas-web/ui/components/schema/schemaInfo.fragment.xml b/menas/ui/components/schema/schemaInfo.fragment.xml similarity index 100% rename from menas-web/ui/components/schema/schemaInfo.fragment.xml rename to menas/ui/components/schema/schemaInfo.fragment.xml diff --git a/menas-web/ui/components/schema/schemaMaster.controller.js b/menas/ui/components/schema/schemaMaster.controller.js similarity index 100% rename from menas-web/ui/components/schema/schemaMaster.controller.js rename to menas/ui/components/schema/schemaMaster.controller.js diff --git a/menas-web/ui/components/schema/schemaMaster.view.xml b/menas/ui/components/schema/schemaMaster.view.xml similarity index 100% rename from menas-web/ui/components/schema/schemaMaster.view.xml rename to menas/ui/components/schema/schemaMaster.view.xml diff --git a/menas-web/ui/components/schema/selector/SchemaSelectorUtils.js b/menas/ui/components/schema/selector/SchemaSelectorUtils.js similarity index 100% rename from menas-web/ui/components/schema/selector/SchemaSelectorUtils.js rename to menas/ui/components/schema/selector/SchemaSelectorUtils.js diff --git a/menas-web/ui/components/schema/selector/schemaSelector.fragment.xml b/menas/ui/components/schema/selector/schemaSelector.fragment.xml similarity index 100% rename from menas-web/ui/components/schema/selector/schemaSelector.fragment.xml rename to menas/ui/components/schema/selector/schemaSelector.fragment.xml diff --git a/menas-web/ui/components/schema/selector/schemaSelectorDialog.fragment.xml b/menas/ui/components/schema/selector/schemaSelectorDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/schema/selector/schemaSelectorDialog.fragment.xml rename to menas/ui/components/schema/selector/schemaSelectorDialog.fragment.xml diff --git a/menas-web/ui/components/schemaFieldSelector.fragment.xml b/menas/ui/components/schemaFieldSelector.fragment.xml similarity index 100% rename from menas-web/ui/components/schemaFieldSelector.fragment.xml rename to menas/ui/components/schemaFieldSelector.fragment.xml diff --git a/menas-web/ui/components/schemaTable.fragment.xml b/menas/ui/components/schemaTable.fragment.xml similarity index 100% rename from menas-web/ui/components/schemaTable.fragment.xml rename to menas/ui/components/schemaTable.fragment.xml diff --git a/menas-web/ui/components/tables/TableUtils.js b/menas/ui/components/tables/TableUtils.js similarity index 100% rename from menas-web/ui/components/tables/TableUtils.js rename to menas/ui/components/tables/TableUtils.js diff --git a/menas-web/ui/components/tables/groupDialog.fragment.xml b/menas/ui/components/tables/groupDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/tables/groupDialog.fragment.xml rename to menas/ui/components/tables/groupDialog.fragment.xml diff --git a/menas-web/ui/components/tables/sortDialog.fragment.xml b/menas/ui/components/tables/sortDialog.fragment.xml similarity index 100% rename from menas-web/ui/components/tables/sortDialog.fragment.xml rename to menas/ui/components/tables/sortDialog.fragment.xml diff --git a/menas-web/ui/components/types/CronEntryType.js b/menas/ui/components/types/CronEntryType.js similarity index 100% rename from menas-web/ui/components/types/CronEntryType.js rename to menas/ui/components/types/CronEntryType.js diff --git a/menas-web/ui/components/types/NonEmptyArrType.js b/menas/ui/components/types/NonEmptyArrType.js similarity index 100% rename from menas-web/ui/components/types/NonEmptyArrType.js rename to menas/ui/components/types/NonEmptyArrType.js diff --git a/menas-web/ui/components/userInfo.fragment.xml b/menas/ui/components/userInfo.fragment.xml similarity index 100% rename from menas-web/ui/components/userInfo.fragment.xml rename to menas/ui/components/userInfo.fragment.xml diff --git a/menas-web/ui/components/validator/Validator.js b/menas/ui/components/validator/Validator.js similarity index 100% rename from menas-web/ui/components/validator/Validator.js rename to menas/ui/components/validator/Validator.js diff --git a/menas-web/ui/css/style.css b/menas/ui/css/style.css similarity index 100% rename from menas-web/ui/css/style.css rename to menas/ui/css/style.css diff --git a/menas-web/ui/favicon.ico b/menas/ui/favicon.ico similarity index 100% rename from menas-web/ui/favicon.ico rename to menas/ui/favicon.ico diff --git a/menas-web/ui/generic/formatters.js b/menas/ui/generic/formatters.js similarity index 100% rename from menas-web/ui/generic/formatters.js rename to menas/ui/generic/formatters.js diff --git a/menas-web/ui/generic/functions.js b/menas/ui/generic/functions.js similarity index 100% rename from menas-web/ui/generic/functions.js rename to menas/ui/generic/functions.js diff --git a/menas-web/ui/generic/model.js b/menas/ui/generic/model.js similarity index 100% rename from menas-web/ui/generic/model.js rename to menas/ui/generic/model.js diff --git a/menas-web/ui/generic/prop.js b/menas/ui/generic/prop.js similarity index 100% rename from menas-web/ui/generic/prop.js rename to menas/ui/generic/prop.js diff --git a/menas-web/ui/index.html b/menas/ui/index.html similarity index 100% rename from menas-web/ui/index.html rename to menas/ui/index.html diff --git a/menas-web/ui/manifest.json b/menas/ui/manifest.json similarity index 51% rename from menas-web/ui/manifest.json rename to menas/ui/manifest.json index b40622522..951dc444e 100644 --- a/menas-web/ui/manifest.json +++ b/menas/ui/manifest.json @@ -1,5 +1,5 @@ { "sap.app": { - "id": "menas-web" + "id": "menas" } } diff --git a/menas-web/ui/npm-shrinkwrap.json b/menas/ui/npm-shrinkwrap.json similarity index 99% rename from menas-web/ui/npm-shrinkwrap.json rename to menas/ui/npm-shrinkwrap.json index 7723047cb..9df770e0f 100644 --- a/menas-web/ui/npm-shrinkwrap.json +++ b/menas/ui/npm-shrinkwrap.json @@ -1,5 +1,5 @@ { - "name": "menas-web", + "name": "menas", "version": "3.0.0-SNAPSHOT", "lockfileVersion": 1, "requires": true, diff --git a/menas-web/ui/package.json b/menas/ui/package.json similarity index 89% rename from menas-web/ui/package.json rename to menas/ui/package.json index 5edd3acb1..098d63e68 100644 --- a/menas-web/ui/package.json +++ b/menas/ui/package.json @@ -1,7 +1,7 @@ { - "name": "menas-web", + "name": "menas", "version": "3.0.0-SNAPSHOT", - "description": "Menas Client", + "description": "Menas UI Client", "main": "index.html", "author": "ABSA Big Data R&D", "license": "Apache License, Version 2.0", diff --git a/menas-web/ui/service/CheckpointUtils.js b/menas/ui/service/CheckpointUtils.js similarity index 100% rename from menas-web/ui/service/CheckpointUtils.js rename to menas/ui/service/CheckpointUtils.js diff --git a/menas-web/ui/service/DialogFactory.js b/menas/ui/service/DialogFactory.js similarity index 100% rename from menas-web/ui/service/DialogFactory.js rename to menas/ui/service/DialogFactory.js diff --git a/menas-web/ui/service/EntityDialog.js b/menas/ui/service/EntityDialog.js similarity index 100% rename from menas-web/ui/service/EntityDialog.js rename to menas/ui/service/EntityDialog.js diff --git a/menas-web/ui/service/EntityService.js b/menas/ui/service/EntityService.js similarity index 100% rename from menas-web/ui/service/EntityService.js rename to menas/ui/service/EntityService.js diff --git a/menas-web/ui/service/EntityValidationService.js b/menas/ui/service/EntityValidationService.js similarity index 100% rename from menas-web/ui/service/EntityValidationService.js rename to menas/ui/service/EntityValidationService.js diff --git a/menas-web/ui/service/GenericService.js b/menas/ui/service/GenericService.js similarity index 100% rename from menas-web/ui/service/GenericService.js rename to menas/ui/service/GenericService.js diff --git a/menas-web/ui/service/HdfsService.js b/menas/ui/service/HdfsService.js similarity index 100% rename from menas-web/ui/service/HdfsService.js rename to menas/ui/service/HdfsService.js diff --git a/menas-web/ui/service/MessageProvider.js b/menas/ui/service/MessageProvider.js similarity index 100% rename from menas-web/ui/service/MessageProvider.js rename to menas/ui/service/MessageProvider.js diff --git a/menas-web/ui/service/MonitoringService.js b/menas/ui/service/MonitoringService.js similarity index 100% rename from menas-web/ui/service/MonitoringService.js rename to menas/ui/service/MonitoringService.js diff --git a/menas-web/ui/service/OozieService.js b/menas/ui/service/OozieService.js similarity index 100% rename from menas-web/ui/service/OozieService.js rename to menas/ui/service/OozieService.js diff --git a/menas-web/ui/service/PropertiesService.js b/menas/ui/service/PropertiesService.js similarity index 100% rename from menas-web/ui/service/PropertiesService.js rename to menas/ui/service/PropertiesService.js diff --git a/menas-web/ui/service/ResponseUtils.js b/menas/ui/service/ResponseUtils.js similarity index 100% rename from menas-web/ui/service/ResponseUtils.js rename to menas/ui/service/ResponseUtils.js diff --git a/menas-web/ui/service/RestDAO.js b/menas/ui/service/RestDAO.js similarity index 100% rename from menas-web/ui/service/RestDAO.js rename to menas/ui/service/RestDAO.js diff --git a/menas-web/ui/service/RuleService.js b/menas/ui/service/RuleService.js similarity index 100% rename from menas-web/ui/service/RuleService.js rename to menas/ui/service/RuleService.js diff --git a/menas-web/ui/service/RunRestDAO.js b/menas/ui/service/RunRestDAO.js similarity index 100% rename from menas-web/ui/service/RunRestDAO.js rename to menas/ui/service/RunRestDAO.js diff --git a/menas-web/ui/service/RunService.js b/menas/ui/service/RunService.js similarity index 100% rename from menas-web/ui/service/RunService.js rename to menas/ui/service/RunService.js diff --git a/menas-web/ui/service/SchemaFieldSelector.js b/menas/ui/service/SchemaFieldSelector.js similarity index 100% rename from menas-web/ui/service/SchemaFieldSelector.js rename to menas/ui/service/SchemaFieldSelector.js diff --git a/menas-web/ui/service/ValidationResult.js b/menas/ui/service/ValidationResult.js similarity index 100% rename from menas-web/ui/service/ValidationResult.js rename to menas/ui/service/ValidationResult.js diff --git a/menas-web/ui/ui5.yaml b/menas/ui/ui5.yaml similarity index 99% rename from menas-web/ui/ui5.yaml rename to menas/ui/ui5.yaml index 5ff8a0045..548295fd1 100644 --- a/menas-web/ui/ui5.yaml +++ b/menas/ui/ui5.yaml @@ -13,7 +13,7 @@ specVersion: '2.2' metadata: - name: menas-web + name: menas type: application framework: name: OpenUI5 diff --git a/pom.xml b/pom.xml index e1cb29dea..012b8da19 100644 --- a/pom.xml +++ b/pom.xml @@ -125,7 +125,7 @@ plugins-builtin spark-jobs utils - menas-web + menas @@ -200,8 +200,8 @@ true ${project.basedir}/scalastyle-config.xml - docker.io/absaoss/menas - docker.io/absaoss/menas-ui + docker.io/absaoss/menas + docker.io/absaoss/menas-ui ${project.version} docker diff --git a/rest-api/pom.xml b/rest-api/pom.xml index 2f2129ef5..fc5c25ea1 100644 --- a/rest-api/pom.xml +++ b/rest-api/pom.xml @@ -275,7 +275,7 @@ dockerfile-maven-plugin ${dockerfile.maven.version} - ${dockerfile.menas.repository} + ${dockerfile.rest-api.repository} ${dockerfile.tag} ${project.build.finalName}.war From 7f2d6e55324514b7f4093f260d20091559ab4f09 Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Wed, 2 Jun 2021 13:03:43 +0300 Subject: [PATCH 16/41] 1732 Spline 0.6 integration (#1739) Spline 0.6 integration --- menas/ui/components/run/runDetail.view.xml | 5 +- menas/ui/css/style.css | 7 ++- menas/ui/index.html | 4 +- menas/ui/package.json | 3 +- menas/ui/service/RunRestDAO.js | 24 ++++++-- menas/ui/service/RunService.js | 52 +++++++++++----- .../resources/application.properties.template | 11 ++-- .../scheduling/oozie/workflow_template.xml | 4 +- .../absa/enceladus/rest_api/HDFSConfig.scala | 2 +- .../rest_api/controllers/RunController.scala | 14 ----- .../repositories/OozieRepository.scala | 20 +++---- .../rest_api/services/RunService.scala | 14 ----- .../src/test/resources/application.properties | 3 - .../controllers/RunApiIntegrationSuite.scala | 60 ------------------- scripts/bash/enceladus_env.template.sh | 5 -- scripts/bash/run_enceladus.sh | 3 +- spark-jobs/pom.xml | 20 +------ spark-jobs/src/main/resources/reference.conf | 10 ++++ .../main/resources/spline.properties.template | 24 -------- .../co/absa/enceladus/common/Constants.scala | 1 - .../src/test/resources/spline.properties | 30 ---------- 21 files changed, 100 insertions(+), 216 deletions(-) delete mode 100644 spark-jobs/src/main/resources/spline.properties.template delete mode 100644 spark-jobs/src/test/resources/spline.properties diff --git a/menas/ui/components/run/runDetail.view.xml b/menas/ui/components/run/runDetail.view.xml index 751fb343f..ea3d94c0f 100644 --- a/menas/ui/components/run/runDetail.view.xml +++ b/menas/ui/components/run/runDetail.view.xml @@ -136,8 +136,9 @@ - - + + diff --git a/menas/ui/css/style.css b/menas/ui/css/style.css index e70fcce1c..f2ca4dcb1 100644 --- a/menas/ui/css/style.css +++ b/menas/ui/css/style.css @@ -48,7 +48,7 @@ html, body { .menasAddMappingFlex div { width: calc(100% - 38px); - } +} .monitoringBlockLayoutCell { min-width: 20rem !important; @@ -128,3 +128,8 @@ h5[id$=datasetDetailView--scheduleTimingTitle] { .formWithSmallContainerMargins > div > div > div > div { padding-bottom: 0.9rem !important; } + +.lineageErrorLabel { + font-size: 200%; + padding-top: 2rem; +} diff --git a/menas/ui/index.html b/menas/ui/index.html index ad1325ee5..e1e62ff91 100644 --- a/menas/ui/index.html +++ b/menas/ui/index.html @@ -49,7 +49,9 @@ $.getJSON('package.json', function(json) { window.apiUrl = json.config.apiUrl + "/api"; - window.lineageReadApiUrl = json.config.lineageReadApiUrl; + window.lineageConsumerApiUrl = json.config.lineageConsumerApiUrl; + window.lineageUiCdn = json.config.lineageUiCdn; + _menasLoadElem("link", "css/style.css", [ {k: "type", v: "text/css"}, {k: "rel", v: "stylesheet"} diff --git a/menas/ui/package.json b/menas/ui/package.json index 098d63e68..1f9b77de2 100644 --- a/menas/ui/package.json +++ b/menas/ui/package.json @@ -10,7 +10,8 @@ }, "config": { "apiUrl": "${API_URL}", - "lineageReadApiUrl": "${SPLINE_URL}" + "lineageConsumerApiUrl": "${LINEAGE_CONSUMER_URL}", + "lineageUiCdn": "${LINEAGE_UI_CDN}" }, "dependencies": { "chart.js": "^2.7.3", diff --git a/menas/ui/service/RunRestDAO.js b/menas/ui/service/RunRestDAO.js index ae48e6e37..018a7e5f1 100644 --- a/menas/ui/service/RunRestDAO.js +++ b/menas/ui/service/RunRestDAO.js @@ -15,10 +15,6 @@ class RunRestDAO { - getSplineUrlTemplate() { - return RestClient.getSync(`/runs/splineUrlTemplate`) - } - getAllRunSummaries() { return RestClient.get("/runs/summaries") } @@ -47,4 +43,24 @@ class RunRestDAO { return RestClient.get(`/runs/${encodeURI(datasetName)}/latestrun`) } + getLineageId(urlTemplate, outputPath, applicationId) { + const url = urlTemplate + .replace("%s", applicationId) + .replace("%s", outputPath); + + RestClient.getSync(url,false,true).then((response) => { + this._totalCount = response.totalCount; + if (this._totalCount > 0) { + this._executionEventId = response.items[0].executionEventId; + } else { + this._executionEventId = undefined + } + }); + + return { + totalCount: this._totalCount, + executionEventId: this._executionEventId + } + } + } diff --git a/menas/ui/service/RunService.js b/menas/ui/service/RunService.js index 22a16a76d..9392ade0b 100644 --- a/menas/ui/service/RunService.js +++ b/menas/ui/service/RunService.js @@ -97,7 +97,7 @@ var RunService = new function () { oControl.setModel(new sap.ui.model.json.JSONModel(oRun), "run"); oControl.setModel(new sap.ui.model.json.JSONModel(oRun.controlMeasure.metadata), "metadata"); //the core:HTML data binding doesn't update properly for iframe for some reason, we try to update manually therefore - this._updateLineageIframeSrc(oRun.splineUrl) + this._updateLineageIframeSrc(oControl, oRun.lineageUrl, oRun.lineageError) }; this._bindRunSummaries = function (oRunSummaries, oControl) { @@ -120,7 +120,9 @@ var RunService = new function () { oRun.controlMeasure.metadata.additionalInfo = this._mapAdditionalInfo(info); oRun.status = Formatters.statusToPrettyString(oRun.runStatus.status); - oRun.splineUrl = this._buildSplineUrl(oRun.splineRef.outputPath, oRun.splineRef.sparkApplicationId); + let lineageInfo = this._buildLineageUrl(oRun.splineRef.outputPath, oRun.splineRef.sparkApplicationId); + oRun.lineageUrl = lineageInfo.lineageUrl; + oRun.lineageError = lineageInfo.lineageError; const sStdName = this._nameExists(aCheckpoints, "Standardization Finish") ? "Standardization Finish" : "Standardization - End"; @@ -128,19 +130,32 @@ var RunService = new function () { oRun.cfmTime = this._getTimeSummary(aCheckpoints, "Conformance - Start", "Conformance - End"); }; - this._buildSplineUrl = function (outputPath, applicationId) { - return this._getSplineUrlTemplate() - .replace("%s", outputPath) - .replace("%s", applicationId) - }; - - this._getSplineUrlTemplate = function () { - if (!this.splineUrlTemplate) { - const runRestDAO = new RunRestDAO(); - runRestDAO.getSplineUrlTemplate() - .then(urlTemplate => this.splineUrlTemplate = urlTemplate) + this._buildLineageUrl = function(outputPath, applicationId) { + const urlTemplate = "%s?_splineConsumerApiUrl=%s&_isEmbeddedMode=true&_targetUrl=/events/overview/%s/graph"; + if (window.lineageConsumerApiUrl) { + let lineageExecutionIdApiTemplate = window.lineageConsumerApiUrl + "/execution-events?applicationId=%s&dataSourceUri=%s"; + const lineageIdInfo = new RunRestDAO().getLineageId(lineageExecutionIdApiTemplate, outputPath, applicationId); + + if (lineageIdInfo.totalCount === 1) { + return { + lineageUrl: urlTemplate + .replace("%s", window.lineageUiCdn) + .replace("%s", window.lineageConsumerApiUrl) + .replace("%s", lineageIdInfo.executionEventId), + lineageError: "" + }; + } else { + return { + lineageUrl: "", + lineageError: !!lineageIdInfo.totalCount ? "Multiple lineage records found" : "No lineage found" + }; + } + } else { + return { + lineageUrl: "", + lineageError: "Lineage service not configured" + }; } - return this.splineUrlTemplate }; this._mapAdditionalInfo = function (info) { @@ -248,13 +263,20 @@ var RunService = new function () { return this._durationAsString(duration); }; - this._updateLineageIframeSrc = function (sNewUrl) { + this._updateLineageIframeSrc = function (oControl, sNewUrl, sErrorMessage) { let iframe = document.getElementById("lineage_iframe"); if (iframe) { // the iframe doesn't necessary exists yet // (but if it doesn't it will be created, and initial data binding actually works) + iframe.visible = (sNewUrl !== ""); iframe.src = sNewUrl; } + let view = oControl.getParent(); + let label = view.byId("LineageErrorLabel"); + if (label) { + label.setVisible(sErrorMessage !== ""); + label.setText(sErrorMessage); + } }; }(); diff --git a/rest-api/src/main/resources/application.properties.template b/rest-api/src/main/resources/application.properties.template index 4b92bb307..c058cdc62 100644 --- a/rest-api/src/main/resources/application.properties.template +++ b/rest-api/src/main/resources/application.properties.template @@ -78,10 +78,6 @@ menas.environment=Dev menas.spark.master=local[1] -# The template for Lineage (Spline) display. If empty Lineage button is not shown. -# Avoiding the http(s) protocol will cause that the same protocol will be used as for Menas itself, avoiding issues -spline.urlTemplate=//localhost:8080/spline/dataset/lineage/_search?path=%s&application_id=%s - #system-wide time zone timezone=UTC @@ -130,8 +126,11 @@ menas.oozie.mavenSparkJobsJarLocation=/za/co/absa/enceladus/spark-jobs/@project. #Menas URL for submitted std and conf jobs menas.oozie.menasApiURL=http://menasHostname:8080/menas/api -#Mongo address for spline for the submitted jobs -menas.oozie.splineMongoURL=mongodb://localhost:27017 +#The URL address of Spline for the submitted jobs +menas.oozie.lineageWriteApiUrl=http://localhost:8080/spline-gw/producer + +#In case the spline.mode is to be configured from default (see Spline documentation for details) +#menas.oozie.spline.mode= #In some cases extra driver options need to be surrounded by double quotes #This seems to depend of the version of oozie diff --git a/rest-api/src/main/resources/scheduling/oozie/workflow_template.xml b/rest-api/src/main/resources/scheduling/oozie/workflow_template.xml index da44157a5..fb4cbd07a 100644 --- a/rest-api/src/main/resources/scheduling/oozie/workflow_template.xml +++ b/rest-api/src/main/resources/scheduling/oozie/workflow_template.xml @@ -32,7 +32,7 @@ --num-executors $stdNumExecutors --executor-memory $stdExecutorMemory --driver-cores $driverCores - --conf $sparkConfQuotesspark.driver.extraJavaOptions=-Dmenas.rest.uri='$menasRestURI' -Dspline.mongodb.url='$splineMongoURL' -Dlog4j.configuration='spark-log4j.properties'$sparkConfQuotes + --conf $sparkConfQuotesspark.driver.extraJavaOptions=-Dmenas.rest.uri='$menasRestURI' -Dspline.producer.url='$lineageWriteApiUrl' -Dlog4j.configuration='spark-log4j.properties'$sparkConfQuotes $splineMode $extraSparkConfString -D @@ -62,7 +62,7 @@ --num-executors $confNumExecutors --executor-memory $confExecutorMemory --driver-cores $driverCores - --conf $sparkConfQuotesspark.driver.extraJavaOptions=-Dmenas.rest.uri='$menasRestURI' -Dspline.mongodb.url='$splineMongoURL' -Dlog4j.configuration='spark-log4j.properties' -Dconformance.mappingtable.pattern='$mappingTablePattern'$sparkConfQuotes + --conf $sparkConfQuotesspark.driver.extraJavaOptions=-Dmenas.rest.uri='$menasRestURI' -Dspline.producer.url='$lineageWriteApiUrl' -Dlog4j.configuration='spark-log4j.properties' -Dconformance.mappingtable.pattern='$mappingTablePattern'$sparkConfQuotes $splineModeConf $extraSparkConfString -D diff --git a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala index 33eff405a..93fb98d71 100644 --- a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/HDFSConfig.scala @@ -28,7 +28,7 @@ import org.springframework.context.annotation.{Bean, Configuration} class HDFSConfig @Autowired() (spark: SparkSession) { private val logger = LoggerFactory.getLogger(this.getClass) - @Value("${menas.hadoop.auth.method}") + @Value("${menas.hadoop.auth.method:}") val authMethod: String = "" @Value("${menas.hadoop.auth.user:}") val authUser: String = "" diff --git a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala index f9ac1698f..472e6171c 100644 --- a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/RunController.scala @@ -100,20 +100,6 @@ class RunController @Autowired()(runService: RunService) extends BaseController runService.getLatestRun(datasetName, datasetVersion).map(SerializationUtils.asJson) } - @GetMapping(path = Array("/splineUrl/{datasetName}/{datasetVersion}/{runId}"), produces = Array("text/plain")) - @ResponseStatus(HttpStatus.OK) - def getSplineUrl(@PathVariable datasetName: String, - @PathVariable datasetVersion: Int, - @PathVariable runId: Int): CompletableFuture[String] = { - runService.getSplineUrl(datasetName, datasetVersion, runId) - } - - @GetMapping(path = Array("/splineUrlTemplate"), produces = Array("text/plain")) - @ResponseStatus(HttpStatus.OK) - def getSplineUrlTemplate(): CompletableFuture[String] = { - runService.getSplineUrlTemplate() - } - @PostMapping() @ResponseStatus(HttpStatus.CREATED) def create(@RequestBody run: Run, diff --git a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala index ed94e9c78..73b0619b1 100644 --- a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/repositories/OozieRepository.scala @@ -25,7 +25,6 @@ import java.util.Date import java.util.{Map => JavaMap} import java.util.Properties import java.util.concurrent.Callable - import scala.concurrent.Future import scala.util.Failure import scala.util.Success @@ -96,9 +95,6 @@ class OozieRepository @Autowired() (oozieClientRes: Either[OozieConfigurationExc @Value("${menas.oozie.menasApiURL:}") val menasApiURL: String = "" - @Value("${menas.oozie.splineMongoURL:}") - val splineMongoURL: String = "" - @Value("${menas.oozie.sparkConf.surroundingQuoteChar:}") val sparkConfQuotes: String = "" @@ -133,8 +129,7 @@ class OozieRepository @Autowired() (oozieClientRes: Either[OozieConfigurationExc (enceladusJarLocation, "menas.oozie.enceladusJarLocation"), (sparkJobsJarPath, "menas.oozie.mavenSparkJobsJarLocation"), (mavenRepoLocation, "menas.oozie.mavenRepoLocation"), - (menasApiURL, "menas.oozie.menasApiURL"), - (splineMongoURL, "menas.oozie.splineMongoURL")).map(p => validateProperty(p._1, p._2, logWarnings)).reduce(_ && _) + (menasApiURL, "menas.oozie.menasApiURL")).map(p => validateProperty(p._1, p._2, logWarnings)).reduce(_ && _) } private def validateProperty(prop: String, propName: String, logWarnings: Boolean = false): Boolean = { @@ -203,8 +198,10 @@ class OozieRepository @Autowired() (oozieClientRes: Either[OozieConfigurationExc /** * This is a helper function for impersonating oozie calls using the proper proxy user if configured * - * @param user User to impersonate - * @fn Oozie action to perform - Important to note that this should be Oozie action only (only wrap the call to oozieclient) + * @param user User to impersonate + * @param fn Oozie action to perform - Important to note that this should be Oozie action only (only wrap the call to oozieclient) + * @tparam T The action result type + * @return result of the provided action */ private def impersonateWrapper[T](user: String)(fn: () => T) = { if (oozieProxyUser.isEmpty || oozieProxyUserKeytab.isEmpty) { @@ -307,7 +304,7 @@ class OozieRepository @Autowired() (oozieClientRes: Either[OozieConfigurationExc */ private def getWorkflowFromTemplate(ds: Dataset): Array[Byte] = { //Here libpath takes precedence over sharelib - val shareLibConfig = if(oozieLibPath.nonEmpty) "" else + val shareLibConfig = if (oozieLibPath.isEmpty) { s""" | | @@ -316,23 +313,24 @@ class OozieRepository @Autowired() (oozieClientRes: Either[OozieConfigurationExc | | """.stripMargin + } else {""} import scala.collection.JavaConversions._ val extraSparkConfString = sparkExtraConfigs.map({case (k, v) => s"--conf $sparkConfQuotes$k=$v$sparkConfQuotes"}).mkString("\n") val schedule = ds.schedule.get val runtimeParams = schedule.runtimeParams + val mappingTablePattern = schedule.mappingTablePattern.map(_.trim).filter(_.nonEmpty).getOrElse("reportDate={0}-{1}-{2}") workflowTemplate.replaceAllLiterally("$stdAppName", s"Menas Schedule Standardization ${ds.name} (${ds.version})") .replaceAllLiterally("$confAppName", s"Menas Schedule Conformance ${ds.name} (${ds.version})") .replaceAllLiterally("$sparkJobsJarPath", s"$enceladusJarLocation$sparkJobsJarPath") .replaceAllLiterally("$datasetVersion", schedule.datasetVersion.toString) .replaceAllLiterally("$datasetName", ds.name) - .replaceAllLiterally("$mappingTablePattern", schedule.mappingTablePattern.map(_.trim).filter(_.nonEmpty).getOrElse("reportDate={0}-{1}-{2}").trim) + .replaceAllLiterally("$mappingTablePattern", mappingTablePattern) .replaceAllLiterally("$dataFormat", schedule.rawFormat.name) .replaceAllLiterally("$otherDFArguments", schedule.rawFormat.getArguments.map(arg => s"$arg").mkString("\n")) .replaceAllLiterally("$jobTracker", resourceManager) .replaceAllLiterally("$sharelibForSpark", shareLibConfig) .replaceAllLiterally("$nameNode", namenode) .replaceAllLiterally("$menasRestURI", menasApiURL) - .replaceAllLiterally("$splineMongoURL", splineMongoURL) .replaceAllLiterally("$stdNumExecutors", runtimeParams.stdNumExecutors.toString) .replaceAllLiterally("$stdExecutorMemory", s"${runtimeParams.stdExecutorMemory}g") .replaceAllLiterally("$confNumExecutors", runtimeParams.confNumExecutors.toString) diff --git a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala index fad9a1ca8..af83ae16a 100644 --- a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/RunService.scala @@ -45,9 +45,6 @@ class RunService @Autowired()(runMongoRepository: RunMongoRepository) import scala.concurrent.ExecutionContext.Implicits.global import za.co.absa.enceladus.model.Validation._ - @Value("${spline.urlTemplate}") - private val splineUrlTemplate: String = "" - def getAllLatest(): Future[Seq[Run]] = { runMongoRepository.getAllLatest() } @@ -106,17 +103,6 @@ class RunService @Autowired()(runMongoRepository: RunMongoRepository) } } - def getSplineUrl(datasetName: String, datasetVersion: Int, runId: Int): Future[String] = { - getRun(datasetName, datasetVersion, runId).map { run => - val splineRef = run.splineRef - String.format(splineUrlTemplate, splineRef.outputPath, splineRef.sparkApplicationId) - } - } - - def getSplineUrlTemplate(): Future[String] = { - Future.successful(splineUrlTemplate) - } - def create(newRun: Run, username: String, retriesLeft: Int = 3): Future[Run] = { for { latestOpt <- runMongoRepository.getLatestRun(newRun.dataset, newRun.datasetVersion) diff --git a/rest-api/src/test/resources/application.properties b/rest-api/src/test/resources/application.properties index 9fe59ac63..61a6ed036 100644 --- a/rest-api/src/test/resources/application.properties +++ b/rest-api/src/test/resources/application.properties @@ -71,9 +71,6 @@ menas.environment=localhost menas.spark.master=local[1] -# Avoiding the http(s) protocol will cause that the same protocol will be used as for Menas itself, avoiding issues -spline.urlTemplate=http://localhost:8080/spline/dataset/lineage/_search?path=%s&application_id=%s - #system-wide time zone timezone=UTC diff --git a/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala index ce4b0f245..51e383391 100644 --- a/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala +++ b/rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/controllers/RunApiIntegrationSuite.scala @@ -694,66 +694,6 @@ class RunApiIntegrationSuite extends BaseRestApiTest { } } - s"GET $apiUrl/splineUrl/{datasetName}/{datasetVersion}/{runId}" can { - val endpointBase = s"$apiUrl/splineUrl" - - "return 200" when { - "there is a Run of the specified Dataset with the specified runId" should { - "return the Spline URL for the Run" in { - val dataset1run1 = RunFactory.getDummyRun(dataset = "dataset", datasetVersion = 1, runId = 1) - val dataset1run2 = RunFactory.getDummyRun(dataset = "dataset", datasetVersion = 1, runId = 2) - val dataset2run2 = RunFactory.getDummyRun(dataset = "dataset", datasetVersion = 2, runId = 2) - runFixture.add(dataset1run1, dataset1run2, dataset2run2) - - val response = sendGet[String](s"$endpointBase/dataset/1/2") - - assertOk(response) - - val body = response.getBody - assert(body == "http://localhost:8080/spline/dataset/lineage/_search?path=dummyOutputPath&application_id=dummySparkApplicationId") - } - } - } - - "return 404" when { - "there is no Run with the specified datasetName" in { - setUpSimpleRun() - - val response = sendGet[String](s"$endpointBase/DATASET/1/1") - - assertNotFound(response) - } - "there is no Run with the specified datasetVersion" in { - setUpSimpleRun() - - val response = sendGet[String](s"$endpointBase/dataset/2/1") - - assertNotFound(response) - } - "there is no Run with the specified runId" in { - setUpSimpleRun() - - val response = sendGet[String](s"$endpointBase/dataset/1/2") - - assertNotFound(response) - } - "the datasetVersion is not a valid numeric type" in { - setUpSimpleRun() - - val response = sendGet[String](s"$endpointBase/datasetVersion/1") - - assertNotFound(response) - } - "the runId is not a valid numeric type" in { - setUpSimpleRun() - - val response = sendGet[String](s"$endpointBase/1/runId") - - assertNotFound(response) - } - } - } - s"POST $apiUrl" can { val endpointBase = s"$apiUrl" diff --git a/scripts/bash/enceladus_env.template.sh b/scripts/bash/enceladus_env.template.sh index e5d13adfc..db0781806 100644 --- a/scripts/bash/enceladus_env.template.sh +++ b/scripts/bash/enceladus_env.template.sh @@ -16,11 +16,6 @@ # Environment configuration STD_HDFS_PATH="/bigdata/std/std-{0}-{1}-{2}-{3}" -# MongoDB connection configuration for Spline -# Important! Special characters should be escaped using triple backslashes (\\\) -SPLINE_MONGODB_URL="mongodb://localhost:27017" -SPLINE_MONGODB_NAME="spline" - export SPARK_HOME="/opt/spark-2.4.4" SPARK_SUBMIT="$SPARK_HOME/bin/spark-submit" diff --git a/scripts/bash/run_enceladus.sh b/scripts/bash/run_enceladus.sh index ad1e7ab2c..0f8184362 100644 --- a/scripts/bash/run_enceladus.sh +++ b/scripts/bash/run_enceladus.sh @@ -447,8 +447,7 @@ else fi JVM_CONF="spark.driver.extraJavaOptions=-Dstandardized.hdfs.path=$STD_HDFS_PATH \ --Dspline.mongodb.url=$SPLINE_MONGODB_URL -Dspline.mongodb.name=$SPLINE_MONGODB_NAME -Dhdp.version=$HDP_VERSION \ -$MT_PATTERN" + -Dhdp.version=$HDP_VERSION $MT_PATTERN" if [ "$HELP_CALL" == "1" ]; then source ${SRC_DIR}/_print_help.sh diff --git a/spark-jobs/pom.xml b/spark-jobs/pom.xml index cd15e0c1b..667528e53 100644 --- a/spark-jobs/pom.xml +++ b/spark-jobs/pom.xml @@ -27,6 +27,7 @@ ${project.parent.basedir}/scalastyle-config.xml 4.0.0 + 0.0.24 2.4.5 @@ -197,25 +198,6 @@ spark-submit -(remove this)-packages org.apache.spark:spark-sql-kafka-0-10_2.11: - - org.apache.maven.plugins - maven-antrun-plugin - ${maven.ant.plugin.version} - - - copy - validate - - - - - - - run - - - - org.apache.maven.plugins maven-jar-plugin diff --git a/spark-jobs/src/main/resources/reference.conf b/spark-jobs/src/main/resources/reference.conf index d5259d72e..de2c8f012 100644 --- a/spark-jobs/src/main/resources/reference.conf +++ b/spark-jobs/src/main/resources/reference.conf @@ -63,6 +63,16 @@ control.info.dataset.properties.prefix="" # system-wide time zone timezone="UTC" +# Spline mode - the way how Spline is integrated. For details see Spline documentation +# possible values (default is BEST_EFFORT): +# DISABLED - no Spline integration (no lineage will be recorded) +# REQUIRED - Spline service has to be running on the spline.producer.url address; if not, job exits without execution +# BEST_EFFORT - job tries to connect to the provided Spline service (spline.producer.url address); but if that fails, job will still execute +spline.mode=BEST_EFFORT +# +# +spline.producer.url="http://localhost:8085/producer" + # Control plugins # Several plugins can be used. In this case the last element of the key needs to be incremented for each plugin. #standardization.plugin.control.metrics.1=za.co.absa.enceladus.KafkaPluginFactory diff --git a/spark-jobs/src/main/resources/spline.properties.template b/spark-jobs/src/main/resources/spline.properties.template deleted file mode 100644 index 2868706c9..000000000 --- a/spark-jobs/src/main/resources/spline.properties.template +++ /dev/null @@ -1,24 +0,0 @@ -# -# Copyright 2018 ABSA Group Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# -# Spline mode - the way how Spline is integrated. For details see Spline documentation -# possible values (default is BEST_EFFORT): -# DISABLED - no Spline integration (no lineage will be recorded) -# REQUIRED - Spline service has to be running on the spline.producer.url address; if not, job exits without execution -# BEST_EFFORT - job tries to connect to the provided Spline service (spline.producer.url address); but if that fails, job will still execute -spline.mode=BEST_EFFORT -# -# -spline.producer.url=http://localhost:8080/spline/producer diff --git a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/Constants.scala b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/Constants.scala index 303f470cc..3e1258683 100644 --- a/spark-jobs/src/main/scala/za/co/absa/enceladus/common/Constants.scala +++ b/spark-jobs/src/main/scala/za/co/absa/enceladus/common/Constants.scala @@ -29,7 +29,6 @@ object Constants { "javax.net.ssl.trustStorePassword", "spark.driver.extraJavaOptions", "spark.yarn.dist.files", - "spline.mongodb.url", "sun.boot.class.path", "sun.java.command", "s3.kmsKeyId" diff --git a/spark-jobs/src/test/resources/spline.properties b/spark-jobs/src/test/resources/spline.properties deleted file mode 100644 index a18c6a1b6..000000000 --- a/spark-jobs/src/test/resources/spline.properties +++ /dev/null @@ -1,30 +0,0 @@ -# -# Copyright 2018 ABSA Group Limited -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -# -# Spline properties template. -# Uncomment the following lines to override corresponding Hadoop environment configuration properties. -# -# Set of properties for setting up persistence to MongoDB. -# -spline.persistence.factory=za.co.absa.spline.persistence.api.composition.ParallelCompositeFactory -spline.persistence.composition.factories=za.co.absa.spline.persistence.mongo.MongoPersistenceFactory,za.co.absa.spline.persistence.hdfs.HdfsPersistenceFactory - -spline.mongodb.url=mongodb://localhost:27017 -spline.mongodb.name=spline - -# -# A property for setting up persistence to Apache Atlas. Additional properties defining connectivity to Atlas are required to be part of this configuration file. (see Atlas configuration file) -# spline.persistence.factory=za.co.absa.spline.persistence.atlas.AtlasPersistenceFactory From 1404bb36371527212fb09d1cbe6e5edc4809a20b Mon Sep 17 00:00:00 2001 From: Daniel Kavan Date: Mon, 7 Jun 2021 13:41:28 +0200 Subject: [PATCH 17/41] [merging develop->develop-ver-3.0] buildfix --- menas/pom.xml | 1 + 1 file changed, 1 insertion(+) diff --git a/menas/pom.xml b/menas/pom.xml index 0d1553fd1..5e9e3f7a4 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -160,6 +160,7 @@ **/node_modules/** ui/3rdParty/cRonstrue/cronstrue.min.js + ui/dist/** From 6eea153ae92ee34a844f1fb9980d9eb2234f3f50 Mon Sep 17 00:00:00 2001 From: Daniel Kavan Date: Mon, 7 Jun 2021 17:22:13 +0200 Subject: [PATCH 18/41] [merging develop->develop-ver-3.0] mergefix --- menas/pom.xml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/menas/pom.xml b/menas/pom.xml index 0e0c2851d..4b78ea542 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -152,18 +152,6 @@ - - org.apache.rat - apache-rat-plugin - ${maven.rat.plugin.version} - - - **/node_modules/** - ui/3rdParty/cRonstrue/cronstrue.min.js - ui/dist/** - - - From 5fa0909b7636952d123cd2529cd29c6dd7e28ea2 Mon Sep 17 00:00:00 2001 From: Daniel Kavan Date: Tue, 8 Jun 2021 12:53:10 +0200 Subject: [PATCH 19/41] [merging develop->develop-ver-3.0] mergefix2 (authorizeRequests now relate to rest_api, not menas: `/3rdParty/**` should not be added anymore as it is menas-related) --- .../scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala index 79cefde5c..43ab92128 100644 --- a/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala +++ b/rest-api/src/main/scala/za/co/absa/enceladus/rest_api/WebSecurityConfig.scala @@ -62,7 +62,7 @@ class WebSecurityConfig @Autowired()(beanFactory: BeanFactory, .authorizeRequests() .antMatchers("/admin/health", "/api/oozie/isEnabled", "/api/user/version", "/api/configuration/**", - "/swagger-ui.html", "/webjars/**", "/3rdParty/**", "/v2/api-docs", "/swagger-resources", + "/swagger-ui.html", "/webjars/**", "/v2/api-docs", "/swagger-resources", "/swagger-resources/configuration/ui", "/swagger-resources/configuration/security") .permitAll() .anyRequest() From d87e7c36ca38bb75ff6125dcc9df5621e81bdf32 Mon Sep 17 00:00:00 2001 From: David Benedeki Date: Sun, 19 Sep 2021 01:02:37 +0200 Subject: [PATCH 20/41] Merge branch 'master' into merge/release-2.23.-0-into-develop-ver-3 * Adding back Menas module, that somehow got omitted. --- menas/pom.xml | 4 +- pom.xml | 1139 ++++++++++++++++++++++++------------------------- 2 files changed, 566 insertions(+), 577 deletions(-) diff --git a/menas/pom.xml b/menas/pom.xml index 4b78ea542..c03691353 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -110,7 +110,7 @@ org.apache.maven.plugins maven-antrun-plugin - ${maven.ant.plugin.version} + ${maven.antrun.plugin.version} Clean up after generating component preload @@ -134,7 +134,7 @@ org.apache.maven.plugins maven-war-plugin - ${maven.war.version} + ${maven.war.plugin.version} false diff --git a/pom.xml b/pom.xml index 0bf3f6c9c..57d52570f 100644 --- a/pom.xml +++ b/pom.xml @@ -1,586 +1,575 @@ - - - - 4.0.0 - za.co.absa.enceladus - parent - 3.0.0-SNAPSHOT - pom - - Enceladus - Enceladus is a Dynamic Conformance Engine which allows data from different formats to be standardized to parquet and conformed to group-accepted common reference. - https://github.com/AbsaOSS/enceladus - 2018 - - - scm:git:git://github.com/AbsaOSS/enceladus.git - scm:git:ssh://github.com:AbsaOSS/enceladus.git - http://github.com/AbsaOSS/enceladus/tree/master - HEAD - - - - - Apache License, Version 2.0 - https://www.apache.org/licenses/LICENSE-2.0 - repo - - - - - ABSA Group Limited - https://www.absa.africa - - - - - lokm01 - Jan Scherbaum - Europe/Prague - https://github.com/lokm01 - - - GeorgiChochov - Georgi Chochov - Europe/Prague - https://github.com/GeorgiChochov - - - Zejnilovic - Saša Zejnilović - Europe/Prague - https://github.com/Zejnilovic - - - benedeki - David Benedeki - Europe/Prague - https://github.com/benedeki - - - DzMakatun - Dzmitry Makatun - Europe/Prague - https://github.com/DzMakatun - - - yruslan - Ruslan Iushchenko - Europe/Prague - https://github.com/yruslan - - - - - - ossrh - https://oss.sonatype.org/content/repositories/snapshots - - - ossrh - https://oss.sonatype.org/service/local/staging/deploy/maven2/ - - - - - - confluent - https://packages.confluent.io/maven/ - - never - - - - - - dao - data-model - examples - migrations - migrations-cli - plugins-api - plugins-builtin - rest-api - spark-jobs - utils - - - - UTF-8 - UTF-8 - - 1.4.13 - 1.16.0 - 1.8 - 1.6 - 3.2.0 - 0.12 - 3.2.1 - 3.0.1 - 2.18.1 - 2.2 - 4.4.0 - 1.3.0 - - 3.1.1 - 3.5.0 - 2.7.3 - 3.5.4 - 2.1.0 - 0.0.27 - 2.0.2 - 2.8.2 - 27.0.1-jre - 2.8.5 - 3.1.0-incubating - 4.4.1 - 2.10.4 - 2.10.4 - 2.9.8 - 0.10.7 - 3.5.3 - 4.11 - 0-10 - 4.17.10 - 3.5.2 - 1.15.0 - 2.22.2 - 3.6.4 - 2.7.0 - 4.3.0 - 1.67.1 - 1.10.0 - 0.1.6 - 2.11 - 0.9.0 - 2.11.12 - 2.0.0 - 3.2.2 - 4.0.0 - 2.4 - 0.2.2 - 0.4.0 - 2.4.4 - 0.5.0 - 2.4.16 - 0.6.0 - 1.3.5 - 1.0.1.RELEASE - 5.0.14.RELEASE - 2.0.0.RELEASE - 1.3.1 - 0.7.1 - 0.35 - 2.26.3 - - true - ${project.basedir}/scalastyle-config.xml - docker.io/absaoss/menas - docker.io/absaoss/menas-ui - ${project.version} - - docker - true - - WARN - ERROR - [%p] %d{yy/MM/dd HH:mm:ss} %c{4}: %m%n - false - - - - - org.scala-lang - scala-library - ${scala.version} - provided - - - org.apache.hadoop - hadoop-client - ${hadoop.version} - provided - - - commons-httpclient - commons-httpclient - - - org.apache.httpcomponents - httpclient - - - - - org.apache.hadoop - hadoop-aws - ${hadoop.version} - provided - - - - com.amazonaws - aws-java-sdk-s3 - - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.core - jackson-annotations - - - com.fasterxml.jackson.core - jackson-core - - - - - org.apache.spark - spark-core_${scala.compat.version} - ${spark.version} - provided - - - commons-httpclient - commons-httpclient - - - org.apache.httpcomponents - httpclient - - - - - org.apache.spark - spark-sql_${scala.compat.version} - ${spark.version} - provided - - - commons-httpclient - commons-httpclient - - - org.apache.httpcomponents - httpclient - - - - - org.apache.parquet - parquet-hadoop - ${parquet.version} - - - za.co.absa - spark-hofs_${scala.compat.version} - ${spark.hofs.version} - - - za.co.absa - spark-hats_${scala.compat.version} - ${spark.hats.version} - - - - org.specs2 - specs2-core_${scala.compat.version} - ${specs.version} - test - - - org.scalatest - scalatest_${scala.compat.version} - ${scalatest.version} - test - - - junit - junit - 4.13.1 - test - - - org.mockito - mockito-scala_${scala.compat.version} - ${mockito.scala.version} - test - - - org.mockito - mockito-scala-scalatest_${scala.compat.version} - ${mockito.scala.version} - test - - - org.mockito - mockito-core - ${mockito.core.version} - test - - - - - src/main/scala - src/test/scala - - - - org.scalastyle - scalastyle-maven-plugin - 1.0.0 - - ${quiet.scalastyle.check} - false - true - false - false - ${project.basedir}/src/main/scala - ${project.basedir}/src/test/scala - ${scalastyle.configLocation} - ${project.basedir}/target/scalastyle-output.xml - - - - - check - - - - - - - - - - maven-surefire-plugin - ${maven.surefire.plugin.version} - - true - - - - - org.scalatest - scalatest-maven-plugin - ${scalatest.maven.version} - - ${project.build.directory}/surefire-reports - . - WDF TestSuite.txt - + + 4.0.0 + za.co.absa.enceladus + parent + 3.0.0-SNAPSHOT + pom + Enceladus + Enceladus is a Dynamic Conformance Engine which allows data from different formats to be standardized to parquet and conformed to group-accepted common reference. + https://github.com/AbsaOSS/enceladus + 2018 + + scm:git:git://github.com/AbsaOSS/enceladus.git + scm:git:ssh://github.com:AbsaOSS/enceladus.git + http://github.com/AbsaOSS/enceladus/tree/master + HEAD + + + + Apache License, Version 2.0 + https://www.apache.org/licenses/LICENSE-2.0 + repo + + + + ABSA Group Limited + https://www.absa.africa + + + + lokm01 + Jan Scherbaum + Europe/Prague + https://github.com/lokm01 + + + GeorgiChochov + Georgi Chochov + Europe/Prague + https://github.com/GeorgiChochov + + + Zejnilovic + Saša Zejnilović + Europe/Prague + https://github.com/Zejnilovic + + + benedeki + David Benedeki + Europe/Prague + https://github.com/benedeki + + + DzMakatun + Dzmitry Makatun + Europe/Prague + https://github.com/DzMakatun + + + yruslan + Ruslan Iushchenko + Europe/Prague + https://github.com/yruslan + + + + + ossrh + https://oss.sonatype.org/content/repositories/snapshots + + + ossrh + https://oss.sonatype.org/service/local/staging/deploy/maven2/ + + + + + confluent + https://packages.confluent.io/maven/ + + never + + + + + dao + data-model + examples + menas + migrations + migrations-cli + plugins-api + plugins-builtin + rest-api + spark-jobs + utils + + + UTF-8 + UTF-8 + + 1.4.13 + 1.16.0 + 1.8 + 1.6 + 3.2.0 + 0.12 + 3.2.1 + 3.0.1 + 2.18.1 + 2.2 + 4.4.0 + 1.3.0 + + 3.1.1 + 3.5.0 + 2.7.3 + 3.5.4 + 2.1.0 + 0.0.27 + 2.0.2 + 2.8.2 + 27.0.1-jre + 2.8.5 + 3.1.0-incubating + 4.4.1 + 2.10.4 + 2.10.4 + 2.9.8 + 0.10.7 + 3.5.3 + 4.11 + 0-10 + 4.17.10 + 3.5.2 + 1.15.0 + 2.22.2 + 3.6.4 + 2.7.0 + 4.3.0 + 1.67.1 + 1.10.0 + 0.1.6 + 2.11 + 0.9.0 + 2.11.12 + 2.0.0 + 3.2.2 + 4.0.0 + 2.4 + 0.2.2 + 0.4.0 + 2.4.4 + 0.5.0 + 2.4.16 + 0.6.0 + 1.3.5 + 1.0.1.RELEASE + 5.0.14.RELEASE + 2.0.0.RELEASE + 1.3.1 + 0.7.1 + 0.35 + 2.26.3 + + true + ${project.basedir}/scalastyle-config.xml + docker.io/absaoss/menas + docker.io/absaoss/menas-ui + ${project.version} + + docker + true + + WARN + ERROR + [%p] %d{yy/MM/dd HH:mm:ss} %c{4}: %m%n + false + + + + org.scala-lang + scala-library + ${scala.version} + provided + + + org.apache.hadoop + hadoop-client + ${hadoop.version} + provided + + + commons-httpclient + commons-httpclient + + + org.apache.httpcomponents + httpclient + + + + + org.apache.hadoop + hadoop-aws + ${hadoop.version} + provided + + + + com.amazonaws + aws-java-sdk-s3 + + + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-annotations + + + com.fasterxml.jackson.core + jackson-core + + + + + org.apache.spark + spark-core_${scala.compat.version} + ${spark.version} + provided + + + commons-httpclient + commons-httpclient + + + org.apache.httpcomponents + httpclient + + + + + org.apache.spark + spark-sql_${scala.compat.version} + ${spark.version} + provided + + + commons-httpclient + commons-httpclient + + + org.apache.httpcomponents + httpclient + + + + + org.apache.parquet + parquet-hadoop + ${parquet.version} + + + za.co.absa + spark-hofs_${scala.compat.version} + ${spark.hofs.version} + + + za.co.absa + spark-hats_${scala.compat.version} + ${spark.hats.version} + + + + org.specs2 + specs2-core_${scala.compat.version} + ${specs.version} + test + + + org.scalatest + scalatest_${scala.compat.version} + ${scalatest.version} + test + + + junit + junit + 4.13.1 + test + + + org.mockito + mockito-scala_${scala.compat.version} + ${mockito.scala.version} + test + + + org.mockito + mockito-scala-scalatest_${scala.compat.version} + ${mockito.scala.version} + test + + + org.mockito + mockito-core + ${mockito.core.version} + test + + + + src/main/scala + src/test/scala + + + + org.scalastyle + scalastyle-maven-plugin + 1.0.0 + + ${quiet.scalastyle.check} + false + true + false + false + ${project.basedir}/src/main/scala + ${project.basedir}/src/test/scala + ${scalastyle.configLocation} + ${project.basedir}/target/scalastyle-output.xml + + + + + check + + + + + + + + + + maven-surefire-plugin + ${maven.surefire.plugin.version} + + true + + + + + org.scalatest + scalatest-maven-plugin + ${scalatest.maven.version} + + ${project.build.directory}/surefire-reports + . + WDF TestSuite.txt + - -Xmx4000m -Dfile.encoding=UTF-8 - - - - unit-tests - - test - - - (?<!IntegrationSuite) - - - - integration-tests - test - - test - - - (?<=IntegrationSuite) - ${skip.integration.tests} - - - - - - com.amashchenko.maven.plugin - gitflow-maven-plugin - ${gitflow.maven.plugin.version} - - true - true - - - master - develop - feature/ - release/v - hotfix/ - v - origin - - true - 1 - - - Update versions for hotfix v@{version} - Update for next development version @{version} - Update to hotfix version @{version} - - Update versions for release v@{version} - Update for next development version @{version} - Update for next development version @{version} - - - - - org.apache.maven.plugins - maven-resources-plugin - 3.1.0 - - - @ - - - - - org.scoverage - scoverage-maven-plugin - ${scoverage.maven.plugin.version} - - ${scala.version} - true - - - - - - src/main/resources - true - - - - - src/test/resources - true - - - - - - - integration - - false - - - - scalastyle - - false - - - - license-check - - - - org.apache.rat - apache-rat-plugin - ${maven.rat.plugin.version} - - - verify - - check - - - - - - **/*.json - **/*.csv - **/*.txt - **/*.md - **/*.MF - **/*.crc - **/*.parquet - **/*.avsc - **/example*.xml - **/_SUCCESS - **/_INFO - **/CODEOWNERS - **/user.keytab* - **/json_output - **/*.iml - .editorconfig - dependency-reduced-pom.xml - scripts/cmd/tee.bat - - - - - - - - public - - - - org.apache.maven.plugins - maven-source-plugin - ${maven.source.plugin.version} - - - attach-sources - - jar - - - - - - net.alchim31.maven - scala-maven-plugin - ${scala.maven.plugin.version} - - - attach-javadocs - - doc-jar - - - - - - org.apache.maven.plugins - maven-gpg-plugin - ${maven.gpg.plugin.version} - - - sign-artifacts - verify - - sign - - - - - - - - + --> + -Xmx4000m -Dfile.encoding=UTF-8 + + + + unit-tests + + test + + + (?<!IntegrationSuite) + + + + integration-tests + test + + test + + + (?<=IntegrationSuite) + ${skip.integration.tests} + + + + + + com.amashchenko.maven.plugin + gitflow-maven-plugin + ${gitflow.maven.plugin.version} + + true + true + + master + develop + feature/ + release/v + hotfix/ + v + origin + + true + 1 + + Update versions for hotfix v@{version} + Update for next development version @{version} + Update to hotfix version @{version} + Update versions for release v@{version} + Update for next development version @{version} + Update for next development version @{version} + + + + + org.apache.maven.plugins + maven-resources-plugin + 3.1.0 + + + @ + + + + + org.scoverage + scoverage-maven-plugin + ${scoverage.maven.plugin.version} + + ${scala.version} + true + + + + + + src/main/resources + true + + + + + src/test/resources + true + + + + + + integration + + false + + + + scalastyle + + false + + + + license-check + + + + org.apache.rat + apache-rat-plugin + ${maven.rat.plugin.version} + + + verify + + check + + + + + + **/*.json + **/*.csv + **/*.txt + **/*.md + **/*.MF + **/*.crc + **/*.parquet + **/*.avsc + **/example*.xml + **/_SUCCESS + **/_INFO + **/CODEOWNERS + **/user.keytab* + **/json_output + **/*.iml + .editorconfig + dependency-reduced-pom.xml + scripts/cmd/tee.bat + + + + + + + + public + + + + org.apache.maven.plugins + maven-source-plugin + ${maven.source.plugin.version} + + + attach-sources + + jar + + + + + + net.alchim31.maven + scala-maven-plugin + ${scala.maven.plugin.version} + + + attach-javadocs + + doc-jar + + + + + + org.apache.maven.plugins + maven-gpg-plugin + ${maven.gpg.plugin.version} + + + sign-artifacts + verify + + sign + + + + + + + + From facb46a1df9b02b5bff9de373d1d2dbb6e51d221 Mon Sep 17 00:00:00 2001 From: Adrian Olosutean Date: Thu, 21 Oct 2021 14:19:38 +0200 Subject: [PATCH 21/41] Merge/release 2.24 into develop ver 3 (#1928) * merge 2.24 into develop-ver-3 --- .github/CODEOWNERS | 2 +- .github/ISSUE_TEMPLATE/bug_report.md | 2 +- .github/ISSUE_TEMPLATE/feature_request.md | 2 +- .github/ISSUE_TEMPLATE/poc.md | 18 ++ .github/workflows/license_check.yml | 2 +- README.md | 11 +- .../dao/rest/JsonSerializerSuite.scala | 234 +++++++++++++++++- .../co/absa/enceladus/model/SchemaField.scala | 5 + .../properties/PropertyDefinitionStats.scala | 30 +++ .../test/factories/MappingTableFactory.scala | 8 +- .../enceladus/model/SchemaFieldTest.scala | 15 +- .../examples/CustomRuleSample4.scala | 2 +- menas/pom.xml | 4 +- menas/ui/components/Component.js | 12 +- menas/ui/components/app.controller.js | 5 + menas/ui/components/app.view.xml | 2 + .../conformanceRule/RuleColumnDialog.js | 4 +- .../components/home/landingPage.controller.js | 2 + menas/ui/components/home/landingPage.view.xml | 26 ++ .../datasetPropertyDetail.controller.js | 73 ++++++ .../property/datasetPropertyDetail.view.xml | 58 +++++ .../property/datasetPropertyInfo.fragment.xml | 45 ++++ .../datasetPropertyMaster.controller.js | 51 ++++ .../property/datasetPropertyMaster.view.xml | 33 +++ menas/ui/service/EntityService.js | 36 +++ menas/ui/service/MessageProvider.js | 8 + menas/ui/service/PropertiesService.js | 4 + menas/ui/service/RestDAO.js | 15 ++ pom.xml | 31 ++- rest-api/pom.xml | 4 +- .../controllers/DatasetController.scala | 10 + .../controllers/LandingPageController.scala | 37 ++- .../controllers/StatisticsController.scala | 36 +++ .../models/LandingPageInformation.scala | 3 + .../VersionedMongoRepository.scala | 25 +- .../rest_api/services/DatasetService.scala | 13 +- .../services/MappingTableService.scala | 8 +- .../services/PropertyDefinitionService.scala | 7 +- .../rest_api/services/StatisticsService.scala | 45 ++++ .../services/VersionedModelService.scala | 2 +- .../rest_api/utils/implicits/package.scala | 8 +- .../DatasetApiIntegrationSuite.scala | 41 ++- ...ropertyDefinitionApiIntegrationSuite.scala | 2 +- .../integration/controllers/package.scala | 1 - .../DatasetRepositoryIntegrationSuite.scala | 24 +- .../StatisticsIntegrationSuite.scala | 109 ++++++++ spark-jobs/pom.xml | 7 +- .../conformance/ConformanceExecution.scala | 2 +- .../conformance/HyperConformance.scala | 18 +- .../HyperConformanceAttributes.scala | 5 +- .../rules/NegationRuleInterpreter.scala | 2 +- .../streaming/InfoDateFactory.scala | 52 ++-- .../streaming/InfoVersionFactory.scala | 64 +++++ .../StandardizationExecution.scala | 14 +- .../standardization/StandardizationJob.scala | 4 +- .../StandardizationPropertiesProvider.scala | 8 +- .../StandardizationInterpreter.scala | 4 +- .../StandardizationAndConformanceJob.scala | 3 + .../interpreter/InterpreterSuite.scala | 4 +- .../fixtures/StreamingFixture.scala | 9 +- .../HyperConformanceIntegrationSuite.scala | 23 +- ...erConformanceMappingIntegrationSuite.scala | 8 +- .../streaming/InfoDateFactorySuite.scala | 72 ------ .../StandardizationExecutionSuite.scala | 23 +- .../StandardizationFixedWidthSuite.scala | 2 + .../StandardizationJsonSuite.scala | 3 +- .../StandardizationParquetSuite.scala | 22 +- .../StandardizationRerunSuite.scala | 5 +- .../StandardizationXmlSuite.scala | 2 + .../NullValueStandardizationCsvSuite.scala | 2 + .../WhiteSpaceStandardizationCsvSuite.scala | 3 +- .../interpreter/CounterPartySuite.scala | 3 + .../interpreter/DateTimeSuite.scala | 20 +- .../interpreter/SampleDataSuite.scala | 2 + .../StandardizationInterpreterSuite.scala | 2 + ...tandardizationInterpreter_ArraySuite.scala | 2 + ...andardizationInterpreter_BinarySuite.scala | 2 + ...StandardizationInterpreter_DateSuite.scala | 3 +- ...ndardizationInterpreter_DecimalSuite.scala | 3 +- ...rdizationInterpreter_FractionalSuite.scala | 2 + ...dardizationInterpreter_IntegralSuite.scala | 3 +- ...ardizationInterpreter_TimestampSuite.scala | 3 +- .../interpreter/StdInterpreterSuite.scala | 3 +- .../interpreter/stages/TypeParserSuite.scala | 42 ---- .../conformed_literal_info_col.json | 20 ++ .../absa/enceladus/utils/types/Defaults.scala | 17 +- .../utils/types/DefaultsByFormat.scala | 88 +++++++ utils/src/test/resources/application.conf | 3 + .../utils/types/DefaultsByFormatSuite.scala | 91 +++++++ .../enceladus/utils/types/DefaultsSuite.scala | 8 + 90 files changed, 1468 insertions(+), 325 deletions(-) create mode 100644 .github/ISSUE_TEMPLATE/poc.md create mode 100644 data-model/src/main/scala/za/co/absa/enceladus/model/properties/PropertyDefinitionStats.scala create mode 100644 menas/ui/components/property/datasetPropertyDetail.controller.js create mode 100644 menas/ui/components/property/datasetPropertyDetail.view.xml create mode 100644 menas/ui/components/property/datasetPropertyInfo.fragment.xml create mode 100644 menas/ui/components/property/datasetPropertyMaster.controller.js create mode 100644 menas/ui/components/property/datasetPropertyMaster.view.xml create mode 100644 rest-api/src/main/scala/za/co/absa/enceladus/rest_api/controllers/StatisticsController.scala create mode 100644 rest-api/src/main/scala/za/co/absa/enceladus/rest_api/services/StatisticsService.scala create mode 100644 rest-api/src/test/scala/za/co/absa/enceladus/rest_api/integration/repositories/StatisticsIntegrationSuite.scala create mode 100644 spark-jobs/src/main/scala/za/co/absa/enceladus/conformance/streaming/InfoVersionFactory.scala delete mode 100644 spark-jobs/src/test/scala/za/co/absa/enceladus/conformance/streaming/InfoDateFactorySuite.scala create mode 100644 spark-jobs/src/test/testData/nestedStructs/conformed_literal_info_col.json create mode 100644 utils/src/main/scala/za/co/absa/enceladus/utils/types/DefaultsByFormat.scala create mode 100644 utils/src/test/scala/za/co/absa/enceladus/utils/types/DefaultsByFormatSuite.scala diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index bc0344893..a2f1254c6 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @lokm01 @benedeki @DzMakatun @HuvarVer @dk1844 @AdrianOlosutean +* @benedeki @dk1844 @AdrianOlosutean diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md index e4884938c..51f2a7680 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ b/.github/ISSUE_TEMPLATE/bug_report.md @@ -15,7 +15,7 @@ Steps to reproduce the behavior OR commands run: 3. Enter value '...' 4. See error -## Expected behaviour +## Expected behavior A clear and concise description of what you expected to happen. ## Screenshots diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md index 64bed30d2..84b87ffa6 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ b/.github/ISSUE_TEMPLATE/feature_request.md @@ -15,7 +15,7 @@ A description of the requested feature. A simple example if applicable. ## Proposed Solution [Optional] -Solution Ideas +Solution Ideas: 1. 2. 3. diff --git a/.github/ISSUE_TEMPLATE/poc.md b/.github/ISSUE_TEMPLATE/poc.md new file mode 100644 index 000000000..cf9dfe4fc --- /dev/null +++ b/.github/ISSUE_TEMPLATE/poc.md @@ -0,0 +1,18 @@ +--- +name: POC +about: Proof of Concept, usually a middle-sized effort to test some idea +labels: 'poc, under discussion, priority: undecided' + +--- + +## Background +A clear and concise intro into the situation. + +## Goal +The goal that the _Proof of Concept_ wants to test + +## Proposed Approach [Optional] +Approach Ideas: +1. +2. +3. diff --git a/.github/workflows/license_check.yml b/.github/workflows/license_check.yml index f8c7697bb..916047963 100644 --- a/.github/workflows/license_check.yml +++ b/.github/workflows/license_check.yml @@ -28,4 +28,4 @@ jobs: - uses: actions/setup-java@v1 with: java-version: 1.8 - - run: mvn -Plicense-check apache-rat:check + - run: mvn --no-transfer-progress -Plicense-check apache-rat:check diff --git a/README.md b/README.md index a9f5a999a..81e8e756b 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,9 @@ # Enceladus +### Latest Release +[![Maven Central](https://maven-badges.herokuapp.com/maven-central/za.co.absa.enceladus/parent/badge.png)](https://maven-badges.herokuapp.com/maven-central/za.co.absa.enceladus/parent/) + ### Build Status | master | develop | | ------------- | ------------- | @@ -20,6 +23,10 @@ ### Code Quality Status [![Quality Gate Status](https://sonarcloud.io/api/project_badges/measure?project=AbsaOSS_enceladus&metric=alert_status)](https://sonarcloud.io/dashboard?id=AbsaOSS_enceladus) +### Documentation +[![Read the Docs](https://img.shields.io/badge/docs-latest-brightgreen.svg)](https://absaoss.github.io/enceladus/) +[![Read the Docs](https://img.shields.io/badge/docs-release%20notes-yellow.svg)](https://absaoss.github.io/enceladus/blog/) +[![Read the Docs](https://img.shields.io/badge/docs-release--1.x-red.svg)](https://absaoss.github.io/enceladus/docs/1.0.0/components) ___ @@ -33,7 +40,6 @@ ___ - [Plugins](#plugins) - [Built-in Plugins](#built-in-plugins) - [How to contribute](#how-to-contribute) -- [Documentation](#documentation) ## What is Enceladus? @@ -349,6 +355,3 @@ A module containing [examples](examples/README.md) of the project usage. ## How to contribute Please see our [**Contribution Guidelines**](CONTRIBUTING.md). - -## Documentation -Please see the [documentation pages](https://absaoss.github.io/enceladus/). diff --git a/dao/src/test/scala/za/co/absa/enceladus/dao/rest/JsonSerializerSuite.scala b/dao/src/test/scala/za/co/absa/enceladus/dao/rest/JsonSerializerSuite.scala index 443df246c..d4bb8d4fe 100644 --- a/dao/src/test/scala/za/co/absa/enceladus/dao/rest/JsonSerializerSuite.scala +++ b/dao/src/test/scala/za/co/absa/enceladus/dao/rest/JsonSerializerSuite.scala @@ -15,7 +15,12 @@ package za.co.absa.enceladus.dao.rest +import java.time.ZonedDateTime + import org.scalactic.{AbstractStringUniformity, Uniformity} +import za.co.absa.enceladus.model.conformanceRule.{CastingConformanceRule, LiteralConformanceRule, MappingConformanceRule} +import za.co.absa.enceladus.model.dataFrameFilter._ +import za.co.absa.enceladus.model.menas.MenasReference import za.co.absa.enceladus.model.test.VersionedModelMatchers import za.co.absa.enceladus.model.test.factories.{DatasetFactory, MappingTableFactory, RunFactory, SchemaFactory} import za.co.absa.enceladus.model.{Dataset, MappingTable, Run, Schema} @@ -82,7 +87,7 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { """{ | "name": "Test", | "version": 5, - | "description": "", + | "description": "some description here", | "hdfsPath": "/bigdata/test", | "hdfsPublishPath": "/bigdata/test2", | "schemaName": "Cobol1", @@ -114,11 +119,61 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { | }, | "targetAttribute": "CCC", | "outputColumn": "ConformedCCC", - | "isNullSafe": true + | "additionalColumns": null, + | "isNullSafe": true, + | "mappingTableFilter": { + | "_t": "AndJoinedFilters", + | "filterItems": [ + | { + | "_t": "OrJoinedFilters", + | "filterItems": [ + | { + | "_t": "EqualsFilter", + | "columnName": "column1", + | "value": "soughtAfterValue", + | "valueType": "string" + | }, + | { + | "_t": "EqualsFilter", + | "columnName": "column1", + | "value": "alternativeSoughtAfterValue", + | "valueType": "string" + | } + | ] + | }, + | { + | "_t": "DiffersFilter", + | "columnName": "column2", + | "value": "anotherValue", + | "valueType": "string" + | }, + | { + | "_t": "NotFilter", + | "inputFilter": { + | "_t": "IsNullFilter", + | "columnName": "col3" + | } + | } + | ] + | }, + | "overrideMappingTableOwnFilter": true + | }, + | { + | "_t": "MappingConformanceRule", + | "order": 2,"controlCheckpoint": true, + | "mappingTable": "CurrencyMappingTable2", + | "mappingTableVersion": 10, + | "attributeMappings": {}, + | "targetAttribute": "CCC", + | "outputColumn": "ConformedCCC", + | "additionalColumns": null, + | "isNullSafe": false, + | "mappingTableFilter": null, + | "overrideMappingTableOwnFilter": false | }, | { | "_t": "LiteralConformanceRule", - | "order": 2, + | "order": 3, | "outputColumn": "ConformedLiteral", | "controlCheckpoint": false, | "value": "AAA" @@ -130,6 +185,8 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { | "version": 4 | }, | "schedule": null, + | "properties": null, + | "propertiesValidation": null, | "createdMessage": { | "menasRef": { | "collection": null, @@ -143,14 +200,76 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { | "field": "", | "oldValue": null, | "newValue": null, - | "message": "Test" + | "message": "Dataset Test created." | } | ] | } |}""".stripMargin - "deserializing should not throw" in { - JsonSerializer.fromJson[Dataset](datasetJson) + val dataset: Dataset = DatasetFactory.getDummyDataset( + name = "Test", + version = 5, + description = Some("some description here"), + hdfsPath = "/bigdata/test", + hdfsPublishPath = "/bigdata/test2", + schemaName = "Cobol1", + schemaVersion = 3, + dateCreated = ZonedDateTime.parse("2019-07-22T08:05:57.47Z"), + userCreated = "system", + lastUpdated = ZonedDateTime.parse("2020-04-02T15:53:02.947Z"), + userUpdated = "system", + + conformance = List( + CastingConformanceRule(0, + outputColumn = "ConformedInt", + controlCheckpoint = false, + inputColumn = "STRING_VAL", + outputDataType = "integer" + ), + MappingConformanceRule(1, + controlCheckpoint = true, + mappingTable = "CurrencyMappingTable", + mappingTableVersion = 9, //scalastyle:ignore magic.number + attributeMappings = Map("InputValue" -> "STRING_VAL"), + targetAttribute = "CCC", + outputColumn = "ConformedCCC", + isNullSafe = true, + mappingTableFilter = Some( + AndJoinedFilters(Set( + OrJoinedFilters(Set( + EqualsFilter("column1", "soughtAfterValue"), + EqualsFilter("column1", "alternativeSoughtAfterValue") + )), + DiffersFilter("column2", "anotherValue"), + NotFilter(IsNullFilter("col3")) + )) + ), + overrideMappingTableOwnFilter = Some(true) + ), + MappingConformanceRule(2, + controlCheckpoint = true, + mappingTable = "CurrencyMappingTable2", + mappingTableVersion = 10, //scalastyle:ignore magic.number + attributeMappings = Map(), + targetAttribute = "CCC", + outputColumn = "ConformedCCC" + ), + LiteralConformanceRule(3, + outputColumn = "ConformedLiteral", + controlCheckpoint = false, + value = "AAA" + ) + ), + parent = Some(MenasReference(Some("dataset"),"Test", 4)) // scalastyle:off magic.number + ) + + "serializing" in { + val result = JsonSerializer.toJson(dataset) + result should equal(datasetJson)(after being whiteSpaceNormalised) + } + "deserializing" in { + val result = JsonSerializer.fromJson[Dataset](datasetJson) + result should matchTo(dataset) } } @@ -227,8 +346,7 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { "handle MappingTables" when { val mappingTableJson = - """ - |{ + """{ | "name": "dummyName", | "version": 1, | "description": null, @@ -277,6 +395,106 @@ class JsonSerializerSuite extends BaseTestSuite with VersionedModelMatchers { } } + "handle MappingTables with filters" when { + val mappingTableJson = + """ + |{ + | "name": "dummyName", + | "version": 1, + | "description": null, + | "hdfsPath": "/dummy/path", + | "schemaName": "dummySchema", + | "schemaVersion": 1, + | "defaultMappingValue": [], + | "dateCreated": "2017-12-04T16:19:17Z", + | "userCreated": "dummyUser", + | "lastUpdated": "2017-12-04T16:19:17Z", + | "userUpdated": "dummyUser", + | "disabled": false, + | "dateDisabled": null, + | "userDisabled": null, + | "parent": null, + | "filter": { + | "_t": "AndJoinedFilters", + | "filterItems": [ + | { + | "_t": "OrJoinedFilters", + | "filterItems": [ + | { + | "_t": "EqualsFilter", + | "columnName": "column1", + | "value": "soughtAfterValue", + | "valueType": "string" + | }, + | { + | "_t": "EqualsFilter", + | "columnName": "column1", + | "value": "alternativeSoughtAfterValue", + | "valueType": "string" + | } + | ] + | }, + | { + | "_t": "DiffersFilter", + | "columnName": "column2", + | "value": "anotherValue", + | "valueType": "string" + | }, + | { + | "_t": "NotFilter", + | "inputFilter": { + | "_t": "IsNullFilter", + | "columnName": "col3" + | } + | } + | ] + | }, + | "createdMessage": { + | "menasRef": { + | "collection": null, + | "name": "dummyName", + | "version": 1 + | }, + | "updatedBy": "dummyUser", + | "updated": "2017-12-04T16:19:17Z", + | "changes": [ + | { + | "field": "", + | "oldValue": null, + | "newValue": null, + | "message": "Mapping Table dummyName created." + | } + | ] + | }, + | "defaultMappingValues": {} + |} + |""".stripMargin + + val mappingTable = MappingTableFactory.getDummyMappingTable( + filter = Some( + AndJoinedFilters(Set( + OrJoinedFilters(Set( + EqualsFilter("column1", "soughtAfterValue"), + EqualsFilter("column1", "alternativeSoughtAfterValue") + )), + DiffersFilter("column2", "anotherValue"), + NotFilter( + IsNullFilter("col3") + ) + )) + ) + ) + + "serializing" in { + val result = JsonSerializer.toJson(mappingTable) + result should equal(mappingTableJson)(after being whiteSpaceNormalised) + } + "deserializing" in { + val result = JsonSerializer.fromJson[MappingTable](mappingTableJson) + result should matchTo(mappingTable) + } + } + "handle Schemas" when { val schemaJson = """ diff --git a/data-model/src/main/scala/za/co/absa/enceladus/model/SchemaField.scala b/data-model/src/main/scala/za/co/absa/enceladus/model/SchemaField.scala index 02c06063c..a878adae2 100644 --- a/data-model/src/main/scala/za/co/absa/enceladus/model/SchemaField.scala +++ b/data-model/src/main/scala/za/co/absa/enceladus/model/SchemaField.scala @@ -41,4 +41,9 @@ case class SchemaField def getAllChildren: Seq[String] = { children.flatMap(child => child.getAllChildren :+ child.getAbsolutePath) } + + @JsonIgnore + def getAllChildrenBasePath: Seq[String] = { + children.flatMap(child => child.getAllChildrenBasePath :+ child.path) + } } diff --git a/data-model/src/main/scala/za/co/absa/enceladus/model/properties/PropertyDefinitionStats.scala b/data-model/src/main/scala/za/co/absa/enceladus/model/properties/PropertyDefinitionStats.scala new file mode 100644 index 000000000..fa933a5de --- /dev/null +++ b/data-model/src/main/scala/za/co/absa/enceladus/model/properties/PropertyDefinitionStats.scala @@ -0,0 +1,30 @@ +/* + * Copyright 2018 ABSA Group Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package za.co.absa.enceladus.model.properties + +import za.co.absa.enceladus.model.properties.essentiality.Essentiality + +case class PropertyDefinitionStats(name: String, + version: Int = 1, + essentiality: Essentiality = Essentiality.Optional, + missingInDatasetsCount: Int = 0) + +object PropertyDefinitionStats { + def apply(propertyDefinition: PropertyDefinition, missingCounts: Int): PropertyDefinitionStats = { + PropertyDefinitionStats(propertyDefinition.name, propertyDefinition.version, + propertyDefinition.essentiality, missingCounts) + } +} diff --git a/data-model/src/main/scala/za/co/absa/enceladus/model/test/factories/MappingTableFactory.scala b/data-model/src/main/scala/za/co/absa/enceladus/model/test/factories/MappingTableFactory.scala index d36bc1b9d..984afd357 100644 --- a/data-model/src/main/scala/za/co/absa/enceladus/model/test/factories/MappingTableFactory.scala +++ b/data-model/src/main/scala/za/co/absa/enceladus/model/test/factories/MappingTableFactory.scala @@ -17,6 +17,7 @@ package za.co.absa.enceladus.model.test.factories import java.time.ZonedDateTime +import za.co.absa.enceladus.model.dataFrameFilter.DataFrameFilter import za.co.absa.enceladus.model.menas.MenasReference import za.co.absa.enceladus.model.{DefaultValue, MappingTable, Schema} @@ -38,7 +39,8 @@ object MappingTableFactory extends EntityFactory[Schema] { disabled: Boolean = false, dateDisabled: Option[ZonedDateTime] = None, userDisabled: Option[String] = None, - parent: Option[MenasReference] = None): MappingTable = { + parent: Option[MenasReference] = None, + filter: Option[DataFrameFilter] = None): MappingTable = { MappingTable(name, version, @@ -54,7 +56,9 @@ object MappingTableFactory extends EntityFactory[Schema] { disabled, dateDisabled, userDisabled, - parent) + parent, + filter + ) } def getDummyDefaultValue(columnName: String = "dummyColumnName", diff --git a/data-model/src/test/scala/za/co/absa/enceladus/model/SchemaFieldTest.scala b/data-model/src/test/scala/za/co/absa/enceladus/model/SchemaFieldTest.scala index 400df960b..d67263976 100644 --- a/data-model/src/test/scala/za/co/absa/enceladus/model/SchemaFieldTest.scala +++ b/data-model/src/test/scala/za/co/absa/enceladus/model/SchemaFieldTest.scala @@ -21,7 +21,7 @@ class SchemaFieldTest extends AnyFunSuite { private val schemaFieldChildSecondLevel = SchemaField( name = "String", `type` = "string", - path = "", + path = "AnyStruct.AnyStruct2.String", elementType = None, containsNull = None, nullable = false, @@ -32,7 +32,7 @@ class SchemaFieldTest extends AnyFunSuite { private val schemaFieldChildOne = SchemaField( name = "AnyStruct2", `type` = "struct", - path = "", + path = "AnyStruct.AnyStruct2", elementType = None, containsNull = None, nullable = true, @@ -43,7 +43,7 @@ class SchemaFieldTest extends AnyFunSuite { private val schemaFieldChildTwo = SchemaField( name = "Number", `type` = "ling", - path = "AnyStruct", + path = "AnyStruct.Number", elementType = None, containsNull = None, nullable = true, @@ -54,7 +54,7 @@ class SchemaFieldTest extends AnyFunSuite { private val schemaFieldRoot = SchemaField( name = "AnyStruct", `type` = "struct", - path = "", + path = "AnyStruct", elementType = None, containsNull = None, nullable = true, @@ -63,8 +63,13 @@ class SchemaFieldTest extends AnyFunSuite { ) test("testGetAllChildren") { - val expectedAllChildren = List("String", "AnyStruct2", "AnyStruct.Number") + val expectedAllChildren = List("AnyStruct.AnyStruct2.String.String", "AnyStruct.AnyStruct2.AnyStruct2", "AnyStruct.Number.Number") assert(schemaFieldRoot.getAllChildren == expectedAllChildren) } + test("testGetAllChildrenBasePath") { + val expectedAllChildren = List("AnyStruct.AnyStruct2.String", "AnyStruct.AnyStruct2", "AnyStruct.Number") + assert(schemaFieldRoot.getAllChildrenBasePath == expectedAllChildren) + } + } diff --git a/examples/src/main/scala/za/co/absa/enceladus/examples/CustomRuleSample4.scala b/examples/src/main/scala/za/co/absa/enceladus/examples/CustomRuleSample4.scala index 2dd99b3f9..99de25fdd 100644 --- a/examples/src/main/scala/za/co/absa/enceladus/examples/CustomRuleSample4.scala +++ b/examples/src/main/scala/za/co/absa/enceladus/examples/CustomRuleSample4.scala @@ -57,7 +57,7 @@ object CustomRuleSample4 extends CustomRuleSampleFs { opt[String]("row-tag").optional.action((value, config) => config.copy(rowTag = Some(value))).text("use the specific row tag instead of 'ROW' for XML format") .validate(_ => - if (inputFormat.isDefined && inputFormat.get.equalsIgnoreCase("xml")) { + if (inputFormat.isDefined && inputFormat.get =="xml") { success } else { failure("The --row-tag option is supported only for XML raw data format") diff --git a/menas/pom.xml b/menas/pom.xml index c03691353..a83472bfc 100644 --- a/menas/pom.xml +++ b/menas/pom.xml @@ -34,8 +34,8 @@ ${dockerfile.menas.repository} ${dockerfile.tag} - ${dockerfile.base.artifact} - ${dockerfile.base.tag} + ${dockerfile.menas.repository} + ${dockerfile.tag} diff --git a/menas/ui/components/Component.js b/menas/ui/components/Component.js index a6f3278f2..c5ea51927 100644 --- a/menas/ui/components/Component.js +++ b/menas/ui/components/Component.js @@ -70,7 +70,12 @@ sap.ui.define([ name: "mappingTables", pattern: "mapping/:id:/:version:", target: "mappingTable" - } + }, + { + name: "properties", + pattern: "properties/:id:", + target: "property" + }, ], targets: { login: { @@ -102,6 +107,11 @@ sap.ui.define([ viewName: "components.mappingTable.mappingTableDetail", viewLevel: 1, viewId: "mappingTableDetailView" + }, + property: { + viewName: "components.property.datasetPropertyDetail", + viewLevel: 1, + viewId: "datasetPropertyDetailView" } } } diff --git a/menas/ui/components/app.controller.js b/menas/ui/components/app.controller.js index 67c4f7ec9..4f7949ec4 100644 --- a/menas/ui/components/app.controller.js +++ b/menas/ui/components/app.controller.js @@ -129,6 +129,11 @@ sap.ui.define([ this._app.toMaster(this.createId("mappingTablesPage")); }, + onPropertiesPress: function (oEv) { + this._eventBus.publish("properties", "list"); + this._app.toMaster(this.createId("propertiesPage")); + }, + onEntityCreated: function (sTopic, sEvent, oData) { this._router.navTo(sTopic, { id: oData.name, diff --git a/menas/ui/components/app.view.xml b/menas/ui/components/app.view.xml index 46419866c..fc779d087 100644 --- a/menas/ui/components/app.view.xml +++ b/menas/ui/components/app.view.xml @@ -25,6 +25,7 @@ +