diff --git a/assembly/bin/executeSQL.sh b/assembly/bin/executeSQL.sh index 8b60d0f08c..eb4da70655 100644 --- a/assembly/bin/executeSQL.sh +++ b/assembly/bin/executeSQL.sh @@ -69,6 +69,10 @@ function executeSQL() { isSuccess "source dss_dataapi_ddl.sql" mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source $DB_CONF_PATH/apps/dss_guide_ddl.sql" isSuccess "source dss_guide_ddl.sql" + mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source $DB_CONF_PATH/apps/datamodel.sql" + isSuccess "source datamodel.sql" + mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source $DB_CONF_PATH/apps/datawarehouse.sql" + isSuccess "source datawarehouse.sql" mysql -h$MYSQL_HOST -P$MYSQL_PORT -u$MYSQL_USER -p$MYSQL_PASSWORD -D$MYSQL_DB --default-character-set=utf8 -e "source $DB_DML_PATH" isSuccess "source dss_dml_real.sql" echo "Rebuild the table" diff --git a/assembly/bin/install.sh b/assembly/bin/install.sh index d3b02f36cd..a6e3761760 100644 --- a/assembly/bin/install.sh +++ b/assembly/bin/install.sh @@ -121,11 +121,18 @@ function replaceCommonIp() { DSS_DATA_API_SERVER_PORT=9208 fi - if [ -z "$DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP" ]; then - DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP=$LOCAL_IP + if [ -z "$DSS_DATA_ASSETS_SERVER_INSTALL_IP" ]; then + DSS_DATA_ASSETS_SERVER_INSTALL_IP=$LOCAL_IP fi - if [ -z "$DSS_DATA_GOVERNANCE_SERVER_PORT" ]; then - DSS_DATA_GOVERNANCE_SERVER_PORT=9209 + if [ -z "$DSS_DATA_ASSETS_SERVER_INSTALL_IP" ]; then + DSS_DATA_ASSETS_SERVER_INSTALL_IP=9300 + fi + if [ -z "$DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP" ]; then + DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP=9400 + fi + + if [ -z "$DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP" ]; then + DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP=9500 fi if [ -z "$DSS_GUIDE_SERVER_INSTALL_IP" ]; then @@ -343,13 +350,38 @@ function installDssProject() { CONF_APPLICATION_YML=$SERVER_HOME/conf/application-dss.yml installPackage - ###install dss-data-governance-server - SERVER_NAME=dss-data-governance-server - SERVER_IP=$DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP - SERVER_PORT=$DSS_DATA_GOVERNANCE_SERVER_PORT - UPLOAD_LIB_FILES=$DSS_FILE_PATH/lib/dss-data-governance/$SERVER_NAME - LIB_PATH=$SERVER_HOME/lib/dss-data-governance - LOG_PATH=$SERVER_HOME/logs/dss-data-governance/$SERVER_NAME + ###install dss-data-assets-server + SERVER_NAME=dss-data-assets-server + SERVER_IP=$DSS_DATA_ASSETS_SERVER_INSTALL_IP + SERVER_PORT=$DSS_DATA_ASSETS_SERVER_PORT + UPLOAD_LIB_FILES=$DSS_FILE_PATH/lib/dss-data-assets-server/$SERVER_NAME + LIB_PATH=$SERVER_HOME/lib/dss-data-assets-server + LIB_PATH=$SERVER_HOME/lib/atlas-application.properties + LOG_PATH=$SERVER_HOME/logs/dss-data-assets-server/$SERVER_NAME + CONF_SERVER_PROPERTIES=$SERVER_HOME/conf/$SERVER_NAME.properties + CONF_DSS_PROPERTIES=$SERVER_HOME/conf/dss.properties + CONF_APPLICATION_YML=$SERVER_HOME/conf/application-dss.yml + installPackage + + ###install dss-data-warehouse-server + SERVER_NAME=dss-data-warehouse-server + SERVER_IP=$DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP + SERVER_PORT=$DSS_DATA_WAREHOUSE_SERVER_PORT + UPLOAD_LIB_FILES=$DSS_FILE_PATH/lib/dss-data-warehouse-server/$SERVER_NAME + LIB_PATH=$SERVER_HOME/lib/dss-data-warehouse-server + LOG_PATH=$SERVER_HOME/logs/dss-data-warehouse-server/$SERVER_NAME + CONF_SERVER_PROPERTIES=$SERVER_HOME/conf/$SERVER_NAME.properties + CONF_DSS_PROPERTIES=$SERVER_HOME/conf/dss.properties + CONF_APPLICATION_YML=$SERVER_HOME/conf/application-dss.yml + installPackage + + ###install dss-datamodel-center-server + SERVER_NAME=dss-datamodel-center-server + SERVER_IP=$DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP + SERVER_PORT=$DSS_DATAMODEL_CENTER_SERVER_PORT + UPLOAD_LIB_FILES=$DSS_FILE_PATH/lib/dss-datamodel-center-server/$SERVER_NAME + LIB_PATH=$SERVER_HOME/lib/dss-datamodel-center-server + LOG_PATH=$SERVER_HOME/logs/dss-datamodel-center-server/$SERVER_NAME CONF_SERVER_PROPERTIES=$SERVER_HOME/conf/$SERVER_NAME.properties CONF_DSS_PROPERTIES=$SERVER_HOME/conf/dss.properties CONF_APPLICATION_YML=$SERVER_HOME/conf/application-dss.yml diff --git a/assembly/config/config.sh b/assembly/config/config.sh index d36b2acb9a..4ff0737a7f 100644 --- a/assembly/config/config.sh +++ b/assembly/config/config.sh @@ -52,13 +52,19 @@ DSS_FLOW_EXECUTION_SERVER_PORT=9006 ###dss-scriptis-server DSS_SCRIPTIS_SERVER_INSTALL_IP=127.0.0.1 DSS_SCRIPTIS_SERVER_PORT=9008 +###dss-data-assets-server +DSS_DATA_ASSETS_SERVER_INSTALL_IP=127.0.0.1 +DSS_DATA_ASSETS_SERVER_PORT=9300 +###dss-datamodel-center-server +DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP=127.0.0.1 +DSS_DATAMODEL_CENTER_SERVER_PORT=9400 +###dss-data-warehouse-server +DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP=127.0.0.1 +DSS_DATA_WAREHOUSE_SERVER_PORT=9500 ###dss-data-api-server DSS_DATA_API_SERVER_INSTALL_IP=127.0.0.1 DSS_DATA_API_SERVER_PORT=9208 -###dss-data-governance-server -DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP=127.0.0.1 -DSS_DATA_GOVERNANCE_SERVER_PORT=9209 ###dss-guide-server DSS_GUIDE_SERVER_INSTALL_IP=127.0.0.1 DSS_GUIDE_SERVER_PORT=9210 @@ -83,5 +89,4 @@ EMAIL_PORT=25 EMAIL_USERNAME=xxx@163.com EMAIL_PASSWORD=xxxxx EMAIL_PROTOCOL=smtp -############## ############## dss_appconn_instance configuration end ############## ############## - +############## ############## dss_appconn_instance configuration end ############## ############## \ No newline at end of file diff --git a/assembly/dss-package/pom.xml b/assembly/dss-package/pom.xml index 1f66fc60b4..c919e12025 100644 --- a/assembly/dss-package/pom.xml +++ b/assembly/dss-package/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 dss-package diff --git a/assembly/dss-package/src/main/assembly/distribution.xml b/assembly/dss-package/src/main/assembly/distribution.xml index 09fce1e059..8ca7ac5237 100644 --- a/assembly/dss-package/src/main/assembly/distribution.xml +++ b/assembly/dss-package/src/main/assembly/distribution.xml @@ -287,20 +287,40 @@ - ${basedir}/../../dss-data-api/dss-data-api-server/target/out/dss-data-api-server/lib/ + ${basedir}/../../dss-apps/dss-data-api/dss-data-api-server/target/out/dss-data-api-server/lib/ - lib/dss-data-api/dss-data-api-server + lib/dss-apps/dss-data-api-server + + **/* + + + + + + + ${basedir}/../../dss-apps/dss-dataasset-management/dss-data-assets-server/target/out/dss-data-assets-server/lib/ + + lib/dss-apps/dss-data-assets-server + + **/* + + + + + + ${basedir}/../../dss-apps/dss-datamodel-center/dss-datamodel-center-server/target/out/dss-datamodel-center-server/lib/ + + lib/dss-apps/dss-datamodel-center-server **/* - - ${basedir}/../../dss-data-governance/dss-data-governance-server/target/out/dss-data-governance-server/lib/ + ${basedir}/../../dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/target/out/dss-data-warehouse-server/lib/ - lib/dss-data-governance/dss-data-governance-server + lib/dss-apps/dss-data-warehouse-server **/* diff --git a/assembly/pom.xml b/assembly/pom.xml index 35c0daa9dd..fcd3cb222c 100644 --- a/assembly/pom.xml +++ b/assembly/pom.xml @@ -22,7 +22,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 pom 4.0.0 diff --git a/conf/atlas-application.properties b/conf/atlas-application.properties index e69de29bb2..e37bc792d9 100644 --- a/conf/atlas-application.properties +++ b/conf/atlas-application.properties @@ -0,0 +1,67 @@ +# Generated by Apache Ambari. Sun Feb 27 10:44:18 2022 + +atlas.audit.hbase.tablename=ATLAS_ENTITY_AUDIT_EVENTS +atlas.audit.hbase.zookeeper.quorum=hdp +atlas.audit.zookeeper.session.timeout.ms=60000 +atlas.authentication.keytab=/etc/security/keytabs/atlas.service.keytab +atlas.authentication.method.file=true +atlas.authentication.method.file.filename=/home/hadoop/software/apache-atlas-2.0.0/conf/users-credentials.properties +atlas.authentication.method.kerberos=false +atlas.authentication.method.ldap=false +atlas.authentication.method.ldap.ad.base.dn= +atlas.authentication.method.ldap.ad.bind.dn= +atlas.authentication.method.ldap.ad.bind.password= +atlas.authentication.method.ldap.ad.default.role=ROLE_USER +atlas.authentication.method.ldap.ad.domain= +atlas.authentication.method.ldap.ad.referral=ignore +atlas.authentication.method.ldap.ad.url= +atlas.authentication.method.ldap.ad.user.searchfilter=(sAMAccountName={0}) +atlas.authentication.method.ldap.base.dn= +atlas.authentication.method.ldap.bind.dn= +atlas.authentication.method.ldap.bind.password= +atlas.authentication.method.ldap.default.role=ROLE_USER +atlas.authentication.method.ldap.groupRoleAttribute=cn +atlas.authentication.method.ldap.groupSearchBase= +atlas.authentication.method.ldap.groupSearchFilter= +atlas.authentication.method.ldap.referral=ignore +atlas.authentication.method.ldap.type=ldap +atlas.authentication.method.ldap.url= +atlas.authentication.method.ldap.user.searchfilter= +atlas.authentication.method.ldap.userDNpattern=uid= +atlas.authentication.principal=atlas +atlas.authorizer.impl=ranger +atlas.cluster.name=bigdata_all_in_one +atlas.enableTLS=false +atlas.graph.index.search.solr.mode=cloud +atlas.graph.index.search.solr.wait-searcher=true +atlas.graph.index.search.solr.zookeeper-url=hadoop:2181/infra-solr +atlas.graph.storage.hbase.table=atlas_janus +atlas.graph.storage.hostname=hdp +atlas.kafka.auto.commit.enable=false +atlas.kafka.bootstrap.servers=hadoop:6667 +atlas.kafka.hook.group.id=atlas +atlas.kafka.zookeeper.connect=hadoop:2181 +atlas.kafka.zookeeper.connection.timeout.ms=30000 +atlas.kafka.zookeeper.session.timeout.ms=60000 +atlas.kafka.zookeeper.sync.time.ms=20 +atlas.lineage.schema.query.hive_table=hive_table where __guid='%s'\, columns +atlas.lineage.schema.query.Table=Table where __guid='%s'\, columns +atlas.notification.create.topics=true +atlas.notification.embedded=false +atlas.notification.replicas=1 +atlas.notification.topics=ATLAS_HOOK,ATLAS_ENTITIES +atlas.proxyusers= +atlas.rest.address=http://hadoop:21000 +atlas.server.address.id1=hadoop:21000 +atlas.server.bind.address=0.0.0.0 +atlas.server.ha.enabled=false +atlas.server.http.port=21000 +atlas.server.https.port=21443 +atlas.server.ids=id1 +atlas.simple.authz.policy.file=/home/hadoop/software/apache-atlas-2.0.0/conf/atlas-simple-authz-policy.json +atlas.solr.kerberos.enable=false +atlas.ssl.exclude.protocols=TLSv1.2 +atlas.sso.knox.browser.useragent= +atlas.sso.knox.enabled=false +atlas.sso.knox.providerurl= +atlas.sso.knox.publicKey= diff --git a/conf/dss-data-assets-server.properties b/conf/dss-data-assets-server.properties new file mode 100644 index 0000000000..82eb1232b3 --- /dev/null +++ b/conf/dss-data-assets-server.properties @@ -0,0 +1,88 @@ +# +# /* +# * Copyright 2019 WeBank +# * +# * 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. +# */ +# +# Spring configurations +spring.server.port=9300 +spring.spring.application.name=dss-data-assets-server +wds.linkis.test.mode=true +wds.linkis.log.clear=true +wds.linkis.server.version=v1 + + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://localhost:3306/hive?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username=root + +***REMOVED***root + + + + + +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.data.governance.restful + +##mybatis +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/data/governance/dao/impl/*.xml + +wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.dss.data.governance.entity + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.data.governance.dao + + +# atlas config +atlas.rest.address=http://localhost:21000 +atlas.username=admin +atlas.password=admin123 +atlas.client.readTimeoutMSecs=60000 +atlas.client.connectTimeoutMSecs=60000 + +# create root classification +atlas.root.indicator=datamodel_indicator +atlas.root.measure=datamodel_measure +atlas.root.dimension=datamodel_dimension +atlas.root.layer=datamodel_layer +atlas.root.theme=datamodel_theme + +# create root glossary +atlas.root.label=datamodel_label +atlas.root.collection=datamodel_collection + + +# hive metadata config +metastore.datasource.driver=com.mysql.jdbc.Driver +metastore.datasource.url=jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8 +metastore.datasource.username=root +metastore.datasource.password=root + + +wds.workspace.client.serverurl=http://localhost:9001 + +wds.workspace.client.authtoken.key=hadoop + +wds.workspace.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.workspace.client.discovery.enabled=false + +wds.workspace.client.authtoken.value=hadoop + +spring.spring.mvc.servlet.path=/api/rest_j/v1 + +wds.workspace.client.dws.version=v1 + +wds.wedatasphere.data.assert.client.strategy=static + + diff --git a/conf/dss-data-governance-server.properties b/conf/dss-data-governance-server.properties deleted file mode 100644 index b3980c6ccc..0000000000 --- a/conf/dss-data-governance-server.properties +++ /dev/null @@ -1,53 +0,0 @@ -# -# /* -# * Copyright 2019 WeBank -# * -# * 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. -# */ -# - -# Spring configurations -spring.server.port=9209 -spring.spring.application.name=dss-data-governance-server - -wds.linkis.log.clear=true - -wds.linkis.server.version=v1 - -##restful -wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.data.asset.restful,com.webank.wedatasphere.dss.data.classification.restful - -##mybatis -wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/data/asset/dao/impl/*.xml -wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.dss.data.asset.entity -wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.data.asset.dao,com.webank.wedatasphere.dss.data.warehouse.dao,com.webank.wedatasphere.dss.data.warehouse.mapper - -#wds.linkis.gateway.ip=127.0.0.1 -#wds.linkis.gateway.port=9001 -#wds.linkis.gateway.url=http://127.0.0.1:9001/ - - -# atlas config -atlas.rest.address=http://xxxxxxx:21000 -atlas.username=xxxxxxxx -atlas.password=yyyyyyyyy -atlas.client.readTimeoutMSecs=60000 -atlas.client.connectTimeoutMSecs=60000 - -atlas.cluster.name=primary - -# hive metadata config -metastore.datasource.driver=com.mysql.jdbc.Driver -metastore.datasource.url=jdbc:mysql://xxxxxx:yyyy/metastore?characterEncoding=UTF-8 -metastore.datasource.username=xxxxxx -metastore.datasource.password=yyyyyy \ No newline at end of file diff --git a/conf/dss-data-warehouse-server.properties b/conf/dss-data-warehouse-server.properties new file mode 100644 index 0000000000..e70544cb9d --- /dev/null +++ b/conf/dss-data-warehouse-server.properties @@ -0,0 +1,51 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# +spring.server.port=9500 +spring.spring.application.name=dss-data-warehouse-server +wds.linkis.test.mode=true + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://localhost:3306/governance?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username=root + +***REMOVED***root + +wds.linkis.log.clear=true + +wds.linkis.server.version=v1 + + +## datasource client +wds.datawarehouse.datasource.client.serverurl=http://hdp:8085 +wds.datawarehouse.datasource.client.authtoken.key=hadoop +wds.datawarehouse.datasource.client.authtoken.value=hadoop +wds.datawarehouse.datasource.client.dws.version=v1 + +##restful +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.warehouse.restful + +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/warehouse/dao/mapper/impl/*.xml + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.warehouse.dao.mapper + +wds.entity.workspace.name.auto.transform=false + +spring.spring.mvc.servlet.path=/api/rest_j/v1 + + + + diff --git a/conf/dss-datamodel-center-server.properties b/conf/dss-datamodel-center-server.properties new file mode 100644 index 0000000000..10c37b1c8c --- /dev/null +++ b/conf/dss-datamodel-center-server.properties @@ -0,0 +1,107 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# +spring.server.port=9400 +spring.spring.application.name=dss-datamodel-center-server + +wds.linkis.test.mode=true + + + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://localhost:3306/datamodel?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username=root + +***REMOVED***root + + +wds.linkis.log.clear=true + +wds.linkis.server.version=v1 + + +wds.wedatasphere.linkis.serverurl=http://localhost:8085 + +wds.wedatasphere.linkis.authtoken.key=hadoop + +wds.wedatasphere.linkis.discovery.enabled=false + +wds.wedatasphere.linkis.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.linkis.authtoken.value=hadoop + +wds.wedatasphere.linkis.dws.version=v1 + + +##restful +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.datamodel.indicator.restful,\ + com.webank.wedatasphere.dss.datamodel.table.restful,\ + com.webank.wedatasphere.dss.datamodel.dimension.restful,\ + com.webank.wedatasphere.dss.datamodel.measure.restful + +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/datamodel/dimension/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/table/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/measure/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/*.xml + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.datamodel.dimension.dao,\ + com.webank.wedatasphere.dss.datamodel.table.dao,\ + com.webank.wedatasphere.dss.datamodel.measure.dao,\ + com.webank.wedatasphere.dss.datamodel.indicator.dao + +wds.wedatasphere.warehouse.client.serverurl=http://localhost:9001 + +wds.wedatasphere.warehouse.client.authtoken.key=hadoop + +wds.wedatasphere.warehouse.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.warehouse.client.authtoken.value=hadoop + +wds.wedatasphere.warehouse.client.discovery.enabled=false + +wds.wedatasphere.warehouse.client.dws.version=v1 + + +wds.wedatasphere.assets.client.serverurl=http://localhost:9001 + +wds.wedatasphere.assets.client.authtoken.key=hadoop + +wds.wedatasphere.assets.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.assets.client.discovery.enabled=false + +wds.wedatasphere.assets.client.authtoken.value=hadoop + +wds.wedatasphere.assets.client.dws.version=v1 + + + +wds.workspace.client.serverurl=http://localhost:9001 + +wds.workspace.client.authtoken.key=hadoop + +wds.workspace.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.workspace.client.discovery.enabled=false + +wds.workspace.client.authtoken.value=hadoop + +wds.workspace.client.dws.version=v1 +spring.spring.mvc.servlet.path=/api/rest_j/v1 + + + +wds.wedatasphere.data.model.client.strategy=static diff --git a/db/apps/datamodel.sql b/db/apps/datamodel.sql new file mode 100644 index 0000000000..ae5b1ad9df --- /dev/null +++ b/db/apps/datamodel.sql @@ -0,0 +1,352 @@ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + + +-- ---------------------------- +-- Table structure for dss_datamodel_dimension +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_dimension`; +CREATE TABLE `dss_datamodel_dimension` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator`; +CREATE TABLE `dss_datamodel_indicator` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `is_core_indicator` tinyint(1) NOT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `theme_area_en` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '英文名称', + `layer_area_en` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '英文名称', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator_content +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator_content`; +CREATE TABLE `dss_datamodel_indicator_content` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `indicator_id` int(11) NOT NULL, + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `indicator_type` int(4) NOT NULL COMMENT '0 原子 1 衍生 2 派生 3 复杂 4 自定义', + `measure_id` int(11) DEFAULT NULL, + `indicator_source_info` text COLLATE utf8_bin NOT NULL COMMENT '指标来源信息', + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `business` varchar(255) COLLATE utf8_bin NOT NULL, + `business_owner` varchar(255) COLLATE utf8_bin NOT NULL, + `calculation` varchar(255) COLLATE utf8_bin NOT NULL, + `calculation_owner` varchar(255) COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=158 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator_version +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator_version`; +CREATE TABLE `dss_datamodel_indicator_version` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `version_context` text COLLATE utf8_bin NOT NULL COMMENT '历史版本详细信息快照', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`,`version`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_label +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_label`; +CREATE TABLE `dss_datamodel_label` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `params` text COLLATE utf8_bin COMMENT '标签键值对 json', + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_measure +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_measure`; +CREATE TABLE `dss_datamodel_measure` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table`; +CREATE TABLE `dss_datamodel_table` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) COLLATE utf8_bin NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `creator` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_layer_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级', + `warehouse_layer_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级英文', + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `lifecycle` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期', + `is_partition_table` tinyint(1) NOT NULL, + `is_available` tinyint(1) NOT NULL, + `storage_type` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '存储类型:hive/mysql', + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `compress` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '压缩格式', + `file_type` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '文件格式', + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + `is_external` tinyint(1) NOT NULL COMMENT '是否外部表 0 内部表 1外部表', + `location` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '外部表时 location', + `label` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '标签', + `lifecycle_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `database` (`data_base`,`name`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_collcetion +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_collcetion`; +CREATE TABLE `dss_datamodel_table_collcetion` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_layer_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级', + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `lifecycle` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期', + `is_partition_table` tinyint(1) DEFAULT NULL, + `is_available` tinyint(1) DEFAULT NULL, + `storage_type` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '存储类型:hive/mysql', + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `compress` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '压缩格式', + `file_type` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '文件格式', + `user` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '收藏人', + `version` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '版本信息:默认1', + `is_external` tinyint(1) DEFAULT NULL COMMENT '是否外部表 0 内部表 1外部表', + `location` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '外部表时 location', + `label` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '标签', + `guid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT 'atlas标识', + `warehouse_layer_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级英文', + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `lifecycle_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期英文', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_columns +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_columns`; +CREATE TABLE `dss_datamodel_table_columns` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `table_id` int(11) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `type` varchar(64) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_partition_field` tinyint(1) NOT NULL, + `is_primary` tinyint(1) NOT NULL, + `length` int(11) DEFAULT NULL, + `rule` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `model_type` int(4) DEFAULT NULL COMMENT '0 维度,1 指标 2 度量', + `model_name_en` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '模型信息英文名称', + `model_id` int(11) DEFAULT NULL COMMENT '关联具体模型id信息(因为有版本数据表id不可靠,暂时不用)', + `model_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '模型信息名称', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=226 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_materialized_history +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_materialized_history`; +CREATE TABLE `dss_datamodel_table_materialized_history` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `materialized_code` mediumtext COLLATE utf8_bin COMMENT '物化sql', + `reason` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '物化原因', + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '物化者', + `status` int(4) NOT NULL COMMENT 'succeed,failed,in progess', + `create_time` datetime NOT NULL, + `last_update_time` datetime NOT NULL, + `task_id` varchar(512) COLLATE utf8_bin NOT NULL, + `error_msg` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `tableName` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '表名', + `data_base` varchar(255) COLLATE utf8_bin NOT NULL, + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_params +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_params`; +CREATE TABLE `dss_datamodel_table_params` ( + `tbl_id` int(11) NOT NULL, + `param_key` varchar(256) COLLATE utf8_bin NOT NULL COMMENT '创建表参数:压缩/orc等', + `param_value` mediumtext COLLATE utf8_bin, + PRIMARY KEY (`tbl_id`,`param_key`) USING BTREE, + KEY `table_params_n49` (`tbl_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_statics +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_statics`; +CREATE TABLE `dss_datamodel_table_statics` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `origin_tables` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `table_id` int(11) NOT NULL, + `access_count` int(11) NOT NULL, + `last_access_time` int(11) NOT NULL, + `sample_data_path` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT '存储10行用例数据', + `sample_update_time` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_stats +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_stats`; +CREATE TABLE `dss_datamodel_table_stats` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `column_count` int(11) NOT NULL COMMENT '字段数', + `storage_size` int(11) NOT NULL COMMENT '存储大小', + `file_count` int(11) NOT NULL COMMENT '文件数', + `partition_count` int(11) NOT NULL COMMENT '分区数', + `access_count` int(11) NOT NULL COMMENT '访问次数', + `collect_count` int(11) NOT NULL COMMENT '收藏次数', + `ref_count` int(11) NOT NULL COMMENT '引用次数', + `version` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_version +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_version`; +CREATE TABLE `dss_datamodel_table_version` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `tbl_id` int(11) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `is_materialized` tinyint(1) NOT NULL COMMENT '是否物化', + `table_code` mediumtext COLLATE utf8_bin COMMENT '创建table的sql', + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '版本注释', + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认version0002', + `table_params` mediumtext COLLATE utf8_bin, + `columns` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `source_type` varchar(128) COLLATE utf8_bin DEFAULT 'add' COMMENT 'rollback,update,add', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `table_version` (`version`,`name`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +DROP TABLE IF EXISTS `dss_datamodel_dictionary`; +CREATE TABLE `dss_datamodel_dictionary` ( + `id` int(50) NOT NULL COMMENT '主键id', + `code` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型code', + `type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典类型', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `created_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间', + `sort` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数模字典' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of dss_datamodel_dictionary +-- ---------------------------- +INSERT INTO `dss_datamodel_dictionary` VALUES (10000001, 'Snappy', 'COMPRESS', 'Snappy', '2021-10-09 15:41:23', '2021-10-09 15:55:44', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000002, 'None', 'COMPRESS', '无', '2021-10-09 15:42:17', '2021-10-20 14:48:59', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000003, 'ORC', 'FILE_STORAGE', 'orc', '2021-10-09 15:55:32', '2021-10-20 14:49:00', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000004, 'Parquet', 'FILE_STORAGE', 'Parquet', '2021-10-09 15:55:32', '2021-10-20 14:49:02', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000005, 'None', 'FILE_STORAGE', '无', '2021-10-09 15:55:32', '2021-10-20 14:49:04', 3); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000006, 'Once', 'LIFECYCLE', '一次', '2021-10-09 15:55:32', '2021-10-20 14:49:05', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000007, 'OneDay', 'LIFECYCLE', '一天', '2021-10-09 15:55:32', '2021-10-20 14:49:06', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000008, 'HalfMonth', 'LIFECYCLE', '半月', '2021-10-09 15:55:32', '2021-10-20 14:49:07', 3); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000009, 'OneMonth', 'LIFECYCLE', '一个月', '2021-10-09 15:55:32', '2021-10-20 14:49:08', 4); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000010, 'ThreeMonths', 'LIFECYCLE', '三个月', '2021-10-09 15:55:32', '2021-10-20 14:49:09', 5); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000011, 'SixMonths', 'LIFECYCLE', '六个月', '2021-10-09 15:55:32', '2021-10-20 14:49:10', 6); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000012, 'OneYear', 'LIFECYCLE', '一年', '2021-10-09 15:55:32', '2021-10-20 14:49:11', 7); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000013, 'ThreeYears', 'LIFECYCLE', '三年', '2021-10-09 15:55:32', '2021-10-20 14:49:12', 8); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000014, 'Hive', 'STORAGE_ENGINE', 'hive', '2021-10-09 15:55:32', '2021-10-20 14:49:19', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000015, 'Mysql', 'STORAGE_ENGINE', 'mysql', '2021-10-09 15:55:32', '2021-10-20 14:49:20', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000016, 'ES', 'STORAGE_ENGINE', 'es', '2021-10-09 15:55:32', '2021-10-20 14:49:25', 3); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/db/apps/datawarehouse.sql b/db/apps/datawarehouse.sql new file mode 100644 index 0000000000..6b5430ffc6 --- /dev/null +++ b/db/apps/datawarehouse.sql @@ -0,0 +1,227 @@ + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +SET NAMES utf8mb4; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + + +# 转储表 dss_datawarehouse_layer +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_layer`; + +CREATE TABLE `dss_datawarehouse_layer` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `preset` bit(1) NOT NULL DEFAULT b'0', + `sort` int(4) NOT NULL DEFAULT '1', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `dbs` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '如果为空代表所有的库', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +LOCK TABLES `dss_datawarehouse_layer` WRITE; +/*!40000 ALTER TABLE `dss_datawarehouse_layer` DISABLE KEYS */; + +INSERT INTO `dss_datawarehouse_layer` (`id`, `name`, `en_name`, `owner`, `principal_name`, `is_available`, `preset`, `sort`, `description`, `dbs`, `create_time`, `update_time`, `status`, `lock_version`) +VALUES + (1,'原数据层(ODS)','ods','admin','所有角色',b'1',b'1',10,'由业务系统同步到数据仓库的原始数据,一般不经过加工','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1), + (2,'明细层(DWD)','dwd','admin','所有角色',b'1',b'1',20,'从ods层经过ETL得到的明细数据,表示具体的事实','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1), + (3,'汇总层(DWS)','dws','admin','所有角色',b'1',b'1',30,'由明细数据经过汇总得到的数据,主要由统计维度和指标构成','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1); + +/*!40000 ALTER TABLE `dss_datawarehouse_layer` ENABLE KEYS */; +UNLOCK TABLES; + + +# 转储表 dss_datawarehouse_layer_generalize_rule +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_layer_generalize_rule`; + +CREATE TABLE `dss_datawarehouse_layer_generalize_rule` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `layer_id` bigint(20) NOT NULL, + `regex` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '自动归纳表达式', + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `en_identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_modifier +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_modifier`; + +CREATE TABLE `dss_datawarehouse_modifier` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_type` varchar(64) COLLATE utf8_bin NOT NULL, + `modifier_type_en` varchar(64) COLLATE utf8_bin DEFAULT NULL, + `theme_domain_id` bigint(20) DEFAULT NULL, + `layer_id` bigint(20) DEFAULT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `theme_area_en` varchar(1000) COLLATE utf8_bin DEFAULT NULL, + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `layer_area_en` varchar(1000) COLLATE utf8_bin DEFAULT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_modifier_list +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_modifier_list`; + +CREATE TABLE `dss_datawarehouse_modifier_list` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_statistical_period +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_statistical_period`; + +CREATE TABLE `dss_datawarehouse_statistical_period` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `layer_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `start_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `end_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_table_rule +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_table_rule`; + +CREATE TABLE `dss_datawarehouse_table_rule` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` bigint(20) NOT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `table_name_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `table_props_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `partation_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `column_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_theme +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_theme`; + +CREATE TABLE `dss_datawarehouse_theme` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `parent_theme_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '默认为空,如果不为空则指向父主题', + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_theme_domain +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_theme_domain`; + +CREATE TABLE `dss_datawarehouse_theme_domain` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +LOCK TABLES `dss_datawarehouse_theme_domain` WRITE; +/*!40000 ALTER TABLE `dss_datawarehouse_theme_domain` DISABLE KEYS */; + +INSERT INTO `dss_datawarehouse_theme_domain` (`id`, `name`, `en_name`, `owner`, `principal_name`, `is_available`, `sort`, `description`, `create_time`, `update_time`, `status`, `lock_version`) +VALUES + (1,'主题','英文名','负责人','New York',b'1',1,'描述','2021-09-28 13:18:48','2021-09-28 13:18:48',b'1',1); + +/*!40000 ALTER TABLE `dss_datawarehouse_theme_domain` ENABLE KEYS */; +UNLOCK TABLES; + + + +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/db/dss_ddl.sql b/db/dss_ddl.sql index 938961d097..6a22e25abf 100644 --- a/db/dss_ddl.sql +++ b/db/dss_ddl.sql @@ -25,11 +25,7 @@ CREATE TABLE `dss_appconn_instance` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='dss instance的实例表'; -/* ---------------------------------------------------------------------- -------------------- DSS Orchestrator Framework --------------------- ---------------------------------------------------------------------- -*/ + DROP TABLE IF EXISTS `dss_orchestrator_info`; CREATE TABLE `dss_orchestrator_info` ( @@ -82,11 +78,7 @@ CREATE TABLE `dss_orchestrator_ref_orchestration_relation` ( PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=326 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT; -/* ---------------------------------------------------------------------- -------------------- DSS Project Framework --------------------- ---------------------------------------------------------------------- -*/ + DROP TABLE IF EXISTS `dss_project`; CREATE TABLE `dss_project` ( @@ -141,11 +133,6 @@ CREATE TABLE `dss_appconn_project_relation` ( PRIMARY KEY (`id`) USING BTREE ) ENGINE=InnoDB AUTO_INCREMENT=90 DEFAULT CHARSET=utf8mb4 ROW_FORMAT=COMPACT; -/* ---------------------------------------------------------------------- ---------------------- DSS Workspace Framework ---------------------- ---------------------------------------------------------------------- -*/ DROP TABLE IF EXISTS `dss_workspace`; CREATE TABLE `dss_workspace` ( @@ -308,11 +295,7 @@ CREATE TABLE `dss_workspace_download_audit` ( PRIMARY KEY (`id`) ) ENGINE = INNODB DEFAULT CHARSET = utf8 COMMENT = '文件下载审计'; -/* ---------------------------------------------------------------------- ---------------------------- DSS Workflow --------------------------- ---------------------------------------------------------------------- -*/ + DROP TABLE IF EXISTS `dss_workflow`; CREATE TABLE `dss_workflow` ( @@ -589,4 +572,3 @@ CREATE TABLE `dss_proxy_user` ( `remark` varchar(500) DEFAULT NULL COMMENT '备注', PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=214 DEFAULT CHARSET=utf8; - diff --git a/db/dss_dml.sql b/db/dss_dml.sql index 7ae770c638..cfbab82387 100644 --- a/db/dss_dml.sql +++ b/db/dss_dml.sql @@ -3,16 +3,28 @@ INSERT INTO `dss_appconn` (`id`, `appconn_name`, `is_user_need_init`, `level`, ` VALUES (1,'sso',0,1,0,0,NULL,"com.webank.wedatasphere.dss.appconn.sso.SSOAppConn",NULL,NULL), (2,'scriptis',0,1,0,0,"sso",NULL,NULL,NULL), (3,'workflow',0,1,1,0,NULL,'com.webank.wedatasphere.dss.appconn.workflow.WorkflowAppConn','/appcom/Install/dss/dss-appconns/workflow',NULL), -(4,'apiservice',0,1,0,0,"sso",NULL,NULL,NULL); +(4,'apiservice',0,1,0,0,'sso',NULL,NULL,NULL), +(5,'datamodel',0,1,0,0,'sso',NULL,NULL,NULL), +(6,'warehouse',0,1,0,0,'sso',NULL,NULL,NULL), +(7,'dataasset',0,1,0,0,'sso',NULL,NULL,NULL), +(8,'dataservice',0,1,0,0,'sso',NULL,NULL,NULL); DELETE FROM dss_appconn_instance; select @scriptis_appconn_id:= id from dss_appconn where appconn_name="scriptis"; select @workflow_appconn_id:= id from dss_appconn where appconn_name="workflow"; select @apiservice_appconn_id:= id from dss_appconn where appconn_name="apiservice"; +select @datamodel_appconn_id:= id from dss_appconn where appconn_name="datamodel"; +select @warehouse_appconn_id:= id from dss_appconn where appconn_name="warehouse"; +select @dataasset_appconn_id:= id from dss_appconn where appconn_name="dataasset"; +select @dataservice_appconn_id:= id from dss_appconn where appconn_name="dataservice"; INSERT INTO `dss_appconn_instance` (`id`, `appconn_id`, `label`, `url`, `enhance_json`, `homepage_uri`) VALUES (2, @scriptis_appconn_id, 'DEV', '/home', '', ''), (3, @workflow_appconn_id,'DEV','/workspaceHome','',''), -(4, @apiservice_appconn_id, 'DEV', '/apiservices', '', ''); +(4, @apiservice_appconn_id, 'DEV', '/apiservices', '', ''), +(5,@datamodel_appconn_id,'DEV','/dataModelCenter',NULL,'tableManage/tableSearch'), +(6,@warehouse_appconn_id,'DEV','/dataWarehouseDesign',NULL,'themeDomains'), +(7,@dataasset_appconn_id,'DEV','/dataAssetManage',NULL,'overview'), +(8,@dataservice_appconn_id,'DEV','/dataService','',''); DELETE FROM dss_workspace; insert into `dss_workspace`(`id`, `name`,`label`,`description`,`create_by`,`create_time`,`department`,`product`,`source`,`last_update_time`,`last_update_user`,`workspace_type`) @@ -42,16 +54,10 @@ insert into `dss_workspace_dictionary`(`workspace_id`, `parent_key`, `dic_name`, DELETE FROM dss_sidebar; insert into `dss_sidebar`(`id`,`workspace_id`,`name`,`name_en`,`title`,`title_en`,`type`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (2,0,'菜单','Menu','菜单','Menu',1,1,NULL,'SYSTEM','2020-12-15 13:21:06',NULL,'2021-02-23 09:45:50'); --- insert into `dss_sidebar`(`id`,`workspace_id`,`name`,`name_en`,`title`,`title_en`,`type`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (3,0,'常见问题','Common problem','常见问题','Common problem',1,1,NULL,'SYSTEM','2020-12-15 13:21:06',NULL,'2021-02-23 09:46:18'); DELETE FROM dss_sidebar_content; insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (3,0,2,NULL,NULL,'工作空间管理','Workspace management','/workspaceManagement/productsettings',0,'menuIcon',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-02-23 09:47:49'); insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (4,0,2,NULL,NULL,'UDF管理','UDF management','dss/linkis/?noHeader=1&noFooter=1#/urm/udfManagement',1,'menuIcon',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-02-23 09:47:11'); --- insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (5,0,3,NULL,NULL,'资源配置说明',NULL,'http://127.0.0.1:8088/kn/d/38',1,'fi-warn',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-01-12 17:16:52'); --- insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (6,0,3,NULL,NULL,'Spark使用指南','[Discussion on error code 22223]','http://127.0.0.1:8088/kn/d/40',1,'fi-warn',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-02-23 09:48:28'); --- insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (7,0,3,NULL,NULL,'Hive语法介绍',NULL,'http://127.0.0.1:8088/kn/d/34',1,'fi-warn',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-01-12 17:17:00'); --- insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (8,0,3,NULL,NULL,'工作流使用介绍',NULL,'http://127.0.0.1:8088/kn/d/42',1,'fi-warn',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-01-12 17:17:01'); --- insert into `dss_sidebar_content`(`id`,`workspace_id`,`sidebar_id`,`name`,`name_en`,`title`,`title_en`,`url`,`url_type`,`icon`,`order_num`,`remark`,`create_user`,`create_time`,`update_user`,`update_time`) values (9,0,3,NULL,NULL,'数据服务使用介绍','Discussion on error code 22223','http://127.0.0.1:8088/kn/d/32',1,'fi-warn',1,NULL,'SYSTEM','2020-12-15 13:21:07',NULL,'2021-02-23 09:48:19'); DELETE FROM dss_workspace_menu; INSERT INTO `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `description`, `is_active`, `icon`, `order`, `create_by`, `create_time`, `last_update_time`, `last_update_user`) VALUES('1','数据交换','data exchange','数据交换','数据交换描述','1',NULL,NULL,NULL,NULL,NULL,NULL); @@ -61,6 +67,7 @@ INSERT INTO `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `descrip INSERT INTO `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `description`, `is_active`, `icon`, `order`, `create_by`, `create_time`, `last_update_time`, `last_update_user`) VALUES('5','管理员功能','administrator function','管理员功能','管理员功能描述','0',NULL,NULL,NULL,NULL,NULL,NULL); insert into `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `description`, `is_active`, `icon`, `order`, `create_by`, `create_time`, `last_update_time`, `last_update_user`) values('6','数据应用','data application','数据应用','数据应用描述','1',NULL,NULL,NULL,NULL,NULL,NULL); insert into `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `description`, `is_active`, `icon`, `order`, `create_by`, `create_time`, `last_update_time`, `last_update_user`) values('7','应用开发','application development','应用开发','应用开发描述','1',NULL,NULL,NULL,NULL,NULL,NULL); +insert into `dss_workspace_menu` (`id`, `name`, `title_en`, `title_cn`, `description`, `is_active`, `icon`, `order`, `create_by`, `create_time`, `last_update_time`, `last_update_user`) values('8','数据管理','data managee','数据管理','数据管理描述','1',NULL,NULL,NULL,NULL,NULL,NULL); DELETE FROM dss_workspace_menu_appconn; INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) @@ -68,8 +75,17 @@ VALUES (@scriptis_appconn_id, 2, 'Scriptis', 'Scriptis', 'Scriptis is a one-stop INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) VALUES (@workflow_appconn_id, 2, 'workflow', '工作流开发', '工作流开发', '工作流开发', null, null, 1, 'Enter workflow', '进入 工作流开发', null, null, null, null, null, null, null, null, null, null); INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) -VALUES (@apiservice_appconn_id, 7, 'dataService', '数据服务', '/dataService', '/dataService', null, null, 1, 'Enter dataService', '进入 数据服务', null, null, null, null, null, null, null, null, null, null); +VALUES (@apiservice_appconn_id, 7, 'SparkdataService', 'spark数据服务', '/dataService', '/dataService', null, null, 1, 'Enter dataService', '进入 spark数据服务', null, null, null, null, null, null, null, null, null, null); +INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) +VALUES (@dataservice_appconn_id, 7, 'dataService', '数据服务', '/dataService', '/dataService', null, null, 1, 'Enter dataService', '进入 数据服务', null, null, null, null, null, null, null, null, null, null); + +INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) +VALUES (@datamodel_appconn_id, 8, 'datamodel', '数据模型管理', 'datamodel', '数据模型管理', null, null, 1, 'Enter datamodel', '进入 数据模型管理', null, null, null, null, null, null, null, null, null, null); +INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) +VALUES (@warehouse_appconn_id, 8, 'warehouse', '数据仓库管理', 'warehouse', '数据仓库管理', null, null, 1, 'Enter warehouse', '进入 数据仓库管理', null, null, null, null, null, null, null, null, null, null); +INSERT INTO dss_workspace_menu_appconn (appconn_id, menu_id, title_en, title_cn, desc_en, desc_cn, labels_en, labels_cn, is_active, access_button_en, access_button_cn, manual_button_en, manual_button_cn, manual_button_url, icon, `order`, create_by, create_time, last_update_time, last_update_user, image) +VALUES (@dataasset_appconn_id, 8, 'dataasset', '数据总览', 'dataasset', '数据总览', null, null, 1, 'Enter dataasset', '进入 数据总览', null, null, null, null, null, null, null, null, null, null); DELETE FROM dss_workspace_role; INSERT INTO `dss_workspace_role` (`id`, `workspace_id`, `name`, `front_name`, `update_time`, `description`) VALUES('1','-1','admin','管理员','2020-07-13 02:43:35','通用角色管理员'); @@ -123,7 +139,6 @@ insert into `dss_workflow_node_to_group`(`node_id`,`group_id`) values (10, @fun insert into `dss_workflow_node_to_group`(`node_id`,`group_id`) values (12, @function_node_groupId); DELETE FROM dss_workflow_node_ui; --- todo msg.topic在receiver和sender使用了重复key insert into `dss_workflow_node_ui`(`id`,`key`,`description`,`description_en`,`lable_name`,`lable_name_en`,`ui_type`,`required`,`value`,`default_value`,`is_hidden`,`condition`,`is_advanced`,`order`,`node_menu_type`,`is_base_info`,`position`) values (1,'title','请填写节点名称','Please enter node name','节点名','Node name','Input',1,NULL,NULL,0,NULL,0,1,1,1,'node'); insert into `dss_workflow_node_ui`(`id`,`key`,`description`,`description_en`,`lable_name`,`lable_name_en`,`ui_type`,`required`,`value`,`default_value`,`is_hidden`,`condition`,`is_advanced`,`order`,`node_menu_type`,`is_base_info`,`position`) values (3,'desc','请填写节点描述','Please enter the node description','节点描述','Node description','Text',0,NULL,NULL,0,NULL,0,4,1,1,'node'); insert into `dss_workflow_node_ui`(`id`,`key`,`description`,`description_en`,`lable_name`,`lable_name_en`,`ui_type`,`required`,`value`,`default_value`,`is_hidden`,`condition`,`is_advanced`,`order`,`node_menu_type`,`is_base_info`,`position`) values (5,'businessTag',NULL,NULL,'业务标签','businessTag','Tag',0,NULL,NULL,0,NULL,0,2,1,1,'node'); @@ -309,7 +324,7 @@ insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_ra insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('58','Regex','(.+)@(.+)@(.+)','此格式错误,例如:ProjectName@WFName@jobName','Invalid format,example:ProjectName@WFName@jobName','blur'); INSERT INTO `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('59','OFT','["true","false"]','请填写是否复用引擎,false:不复用,true:复用','Please fill in whether or not to reuse engine, true: reuse, false: not reuse','blur'); insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('60', 'Regex', '^[0-9.]*g{0,1}$', 'Spark内存设置如2g', 'Drive memory size, default value: 2', 'blur'); -insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('61','Regex','^(.|\s){1,500}$','长度在1到5000个字符','The length is between 1 and 5000 characters','blur'); +insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('61','Regex','^.{1,5000}$','长度在1到5000个字符','The length is between 1 and 5000 characters','blur'); insert into `dss_workflow_node_ui_validate` (`id`, `validate_type`, `validate_range`, `error_msg`, `error_msg_en`, `trigger`) values('62','Regex','^.{1,150}$','长度在1到150个字符','The length is between 1 and 150 characters','blur'); DELETE FROM dss_workflow_node_ui_to_validate; @@ -408,9 +423,35 @@ INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@workflow_appconn_id,'6','1',now(),'system'); INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@workflow_appconn_id,'7','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'1','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'2','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'3','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'4','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'5','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'6','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@datamodel_appconn_id,'7','1',now(),'system'); + +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'1','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'2','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'3','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'4','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'5','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'6','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@warehouse_appconn_id,'7','1',now(),'system'); + +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'1','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'2','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'3','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'4','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'5','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'6','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('-1',@dataasset_appconn_id,'7','1',now(),'system'); + INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@scriptis_appconn_id,'1','1',now(),'system'); INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@workflow_appconn_id,'1','1',now(),'system'); INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@apiservice_appconn_id,'1','1',now(),'system'); - +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@datamodel_appconn_id,'1','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@warehouse_appconn_id,'1','1',now(),'system'); +INSERT INTO `dss_workspace_appconn_role` (`workspace_id`, `appconn_id`, `role_id`, `priv`, `update_time`, `updateby`) VALUES('224',@dataasset_appconn_id,'1','1',now(),'system'); INSERT INTO `dss_workspace_admin_dept` (`id`, `parent_id`, `ancestors`, `dept_name`, `order_num`, `leader`, `phone`, `email`, `status`, `del_flag`, `create_by`, `create_time`, `update_by`, `update_time`) VALUES('100','0','0','基础科技','0','leader01','1888888888','123@qq.com','0','0','admin',now(),'admin',now()); diff --git a/dss-appconn/appconns/dss-datachecker-appconn/pom.xml b/dss-appconn/appconns/dss-datachecker-appconn/pom.xml index 53ed9785f2..3a706fb086 100644 --- a/dss-appconn/appconns/dss-datachecker-appconn/pom.xml +++ b/dss-appconn/appconns/dss-datachecker-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-dolphinscheduler-appconn/pom.xml b/dss-appconn/appconns/dss-dolphinscheduler-appconn/pom.xml index 29c79358fa..076e0784db 100644 --- a/dss-appconn/appconns/dss-dolphinscheduler-appconn/pom.xml +++ b/dss-appconn/appconns/dss-dolphinscheduler-appconn/pom.xml @@ -6,7 +6,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-dolphinscheduler-appconn/src/main/java/com/webank/wedatasphere/dss/appconn/dolphinscheduler/conversion/WorkflowToDolphinSchedulerSynchronizer.java b/dss-appconn/appconns/dss-dolphinscheduler-appconn/src/main/java/com/webank/wedatasphere/dss/appconn/dolphinscheduler/conversion/WorkflowToDolphinSchedulerSynchronizer.java index 745f0c2363..353bcadd00 100644 --- a/dss-appconn/appconns/dss-dolphinscheduler-appconn/src/main/java/com/webank/wedatasphere/dss/appconn/dolphinscheduler/conversion/WorkflowToDolphinSchedulerSynchronizer.java +++ b/dss-appconn/appconns/dss-dolphinscheduler-appconn/src/main/java/com/webank/wedatasphere/dss/appconn/dolphinscheduler/conversion/WorkflowToDolphinSchedulerSynchronizer.java @@ -13,6 +13,7 @@ import com.webank.wedatasphere.dss.workflow.core.entity.Workflow; import com.webank.wedatasphere.dss.workflow.core.entity.WorkflowNode; import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.collections.MapUtils; import java.util.List; @@ -47,11 +48,12 @@ public void syncToRel(ConvertedRel convertedRel) { updateOperation.updateOrchestration(ref); } + private void checkSchedulerProject(Workflow flow) throws ExternalOperationFailedException { List nodes = flow.getWorkflowNodes(); for (WorkflowNode node : nodes) { DSSNode dssNode = node.getDSSNode(); - if (CollectionUtils.isEmpty(dssNode.getResources())) { + if (CollectionUtils.isEmpty(dssNode.getResources()) && MapUtils.isEmpty(dssNode.getJobContent())) { throw new ExternalOperationFailedException(90021, dssNode.getName() + "节点内容不能为空"); } } diff --git a/dss-appconn/appconns/dss-eventchecker-appconn/pom.xml b/dss-appconn/appconns/dss-eventchecker-appconn/pom.xml index 5cd39b200b..64a0a9b276 100644 --- a/dss-appconn/appconns/dss-eventchecker-appconn/pom.xml +++ b/dss-appconn/appconns/dss-eventchecker-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-schedulis-appconn/pom.xml b/dss-appconn/appconns/dss-schedulis-appconn/pom.xml index 1f95a9a6dd..5fef86822a 100644 --- a/dss-appconn/appconns/dss-schedulis-appconn/pom.xml +++ b/dss-appconn/appconns/dss-schedulis-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-scriptis-appconn/pom.xml b/dss-appconn/appconns/dss-scriptis-appconn/pom.xml index d4f7feac3e..75828cdaaa 100644 --- a/dss-appconn/appconns/dss-scriptis-appconn/pom.xml +++ b/dss-appconn/appconns/dss-scriptis-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-sendemail-appconn/pom.xml b/dss-appconn/appconns/dss-sendemail-appconn/pom.xml index 44db21489b..8d9f125bcc 100644 --- a/dss-appconn/appconns/dss-sendemail-appconn/pom.xml +++ b/dss-appconn/appconns/dss-sendemail-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-sendemail-appconn/sendemail-appconn-core/pom.xml b/dss-appconn/appconns/dss-sendemail-appconn/sendemail-appconn-core/pom.xml index 1633694949..7b784811f3 100644 --- a/dss-appconn/appconns/dss-sendemail-appconn/sendemail-appconn-core/pom.xml +++ b/dss-appconn/appconns/dss-sendemail-appconn/sendemail-appconn-core/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-sso-appconn/pom.xml b/dss-appconn/appconns/dss-sso-appconn/pom.xml index 74e1b099ed..b66c806c18 100644 --- a/dss-appconn/appconns/dss-sso-appconn/pom.xml +++ b/dss-appconn/appconns/dss-sso-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/appconns/dss-workflow-appconn/pom.xml b/dss-appconn/appconns/dss-workflow-appconn/pom.xml index d9c115b1d5..17dc4f401c 100644 --- a/dss-appconn/appconns/dss-workflow-appconn/pom.xml +++ b/dss-appconn/appconns/dss-workflow-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-appconn/dss-appconn-core/pom.xml b/dss-appconn/dss-appconn-core/pom.xml index 365d9b910b..9d91fe1779 100644 --- a/dss-appconn/dss-appconn-core/pom.xml +++ b/dss-appconn/dss-appconn-core/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/dss-appconn-loader/pom.xml b/dss-appconn/dss-appconn-loader/pom.xml index 88f859a160..b5c20a167f 100644 --- a/dss-appconn/dss-appconn-loader/pom.xml +++ b/dss-appconn/dss-appconn-loader/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/dss-appconn-manager/dss-appconn-manager-client/pom.xml b/dss-appconn/dss-appconn-manager/dss-appconn-manager-client/pom.xml index af145c11ea..40aac210e5 100644 --- a/dss-appconn/dss-appconn-manager/dss-appconn-manager-client/pom.xml +++ b/dss-appconn/dss-appconn-manager/dss-appconn-manager-client/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/dss-appconn-manager/dss-appconn-manager-core/pom.xml b/dss-appconn/dss-appconn-manager/dss-appconn-manager-core/pom.xml index 976c3a1b03..64be244aad 100644 --- a/dss-appconn/dss-appconn-manager/dss-appconn-manager-core/pom.xml +++ b/dss-appconn/dss-appconn-manager/dss-appconn-manager-core/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/dss-appconn-manager/pom.xml b/dss-appconn/dss-appconn-manager/pom.xml index e720464f3c..96e66b69b3 100644 --- a/dss-appconn/dss-appconn-manager/pom.xml +++ b/dss-appconn/dss-appconn-manager/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/dss-scheduler-appconn/pom.xml b/dss-appconn/dss-scheduler-appconn/pom.xml index 465c6d46e8..295310559c 100644 --- a/dss-appconn/dss-scheduler-appconn/pom.xml +++ b/dss-appconn/dss-scheduler-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/linkis-appconn-engineplugin/pom.xml b/dss-appconn/linkis-appconn-engineplugin/pom.xml index 1696b4e240..ed86fad5a3 100644 --- a/dss-appconn/linkis-appconn-engineplugin/pom.xml +++ b/dss-appconn/linkis-appconn-engineplugin/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-appconn/pom.xml b/dss-appconn/pom.xml index 0d6cd24cb2..a89bbcff01 100644 --- a/dss-appconn/pom.xml +++ b/dss-appconn/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../pom.xml 4.0.0 diff --git a/dss-apps/dss-apiservice-server/pom.xml b/dss-apps/dss-apiservice-server/pom.xml index 33c561f337..dae047bc7a 100644 --- a/dss-apps/dss-apiservice-server/pom.xml +++ b/dss-apps/dss-apiservice-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../pom.xml 4.0.0 diff --git a/dss-apps/dss-data-api/dss-api-sql-template/pom.xml b/dss-apps/dss-data-api/dss-api-sql-template/pom.xml index 6c9dde2535..1364fdb663 100644 --- a/dss-apps/dss-data-api/dss-api-sql-template/pom.xml +++ b/dss-apps/dss-data-api/dss-api-sql-template/pom.xml @@ -5,7 +5,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-apps/dss-data-api/dss-data-api-server/pom.xml b/dss-apps/dss-data-api/dss-data-api-server/pom.xml index 25f716e927..9037dfa6cf 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/pom.xml +++ b/dss-apps/dss-data-api/dss-data-api-server/pom.xml @@ -5,7 +5,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 @@ -133,7 +133,7 @@ com.webank.wedatasphere.dss dss-sso-integration-standard - 1.1.0 + 1.2.0 provided diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/entity/ApiConfig.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/entity/ApiConfig.java index 8e4ea5a166..afa8675d18 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/entity/ApiConfig.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/entity/ApiConfig.java @@ -31,7 +31,7 @@ public class ApiConfig { private String method; @TableField("`describe`") private String describe; - @NotBlank(message = "datasource_id不能为空") + @NotNull(message = "datasource_id不能为空") @TableField(value = "datasource_id") private Integer datasourceId; private String tblName; diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiAuthRestful.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiAuthRestful.java index eb1e5ca16c..125c75abb8 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiAuthRestful.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiAuthRestful.java @@ -88,7 +88,7 @@ public Message getApiAuthList(HttpServletRequest httpServletRequest, @RequestPar } Workspace workspace = SSOHelper.getWorkspace(httpServletRequest); List totals = new ArrayList<>(); - List apiAuths = apiAuthService.getApiAuthList(Long.valueOf(workspace.getWorkspaceName()), + List apiAuths = apiAuthService.getApiAuthList(workspaceId, caller, totals, pageNow, pageSize); return Message.ok().data("list", apiAuths).data("total", totals.get(0)); } @@ -108,7 +108,7 @@ public Message getApiGroup(HttpServletRequest httpServletRequest, @RequestParam( Workspace workspace = SSOHelper.getWorkspace(httpServletRequest); log.info("workspace is {}", workspace.getWorkspaceName()); - List apiGroupInfoList = apiAuthService.getApiGroupList(Long.valueOf(workspace.getWorkspaceName())); + List apiGroupInfoList = apiAuthService.getApiGroupList(workspaceId); Message message = Message.ok().data("list", apiGroupInfoList); return message; diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiConfigRestful.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiConfigRestful.java index e144cbee29..6ed7457a2b 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiConfigRestful.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiConfigRestful.java @@ -95,7 +95,7 @@ public Message getApiList(HttpServletRequest httpServletRequest, @RequestParam(value = "workspaceId", required = false) String workspaceId) { Workspace workspace = SSOHelper.getWorkspace(httpServletRequest); - List list = apiConfigService.getGroupList(workspace.getWorkspaceName()); + List list = apiConfigService.getGroupList(workspaceId); Message message = Message.ok().data("list", list); return message; } diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiDataSourceRestful.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiDataSourceRestful.java index 2da04f30ab..19457549bd 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiDataSourceRestful.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiDataSourceRestful.java @@ -34,7 +34,7 @@ public class DSSDbApiDataSourceRestful { public Message connect(HttpServletRequest httpServletRequest, @RequestParam(value = "workspaceId", required = false) Integer workspaceId, @RequestParam("type") String type) { Workspace workspace = SSOHelper.getWorkspace(httpServletRequest); - List allConnections = dssDbApiDataSourceService.getAllConnections(Integer.valueOf(workspace.getWorkspaceName()), type); + List allConnections = dssDbApiDataSourceService.getAllConnections(workspaceId, type); return Message.ok().data("availableConns", allConnections); } @@ -75,7 +75,7 @@ public Message getAllDs(HttpServletRequest httpServletRequest, @RequestParam("type") String type, @RequestParam("name") String name) { Workspace workspace = SSOHelper.getWorkspace(httpServletRequest); DataSource dataSource = new DataSource(); - dataSource.setWorkspaceId(Integer.valueOf(workspace.getWorkspaceName())); + dataSource.setWorkspaceId(workspaceId); dataSource.setType(type); dataSource.setName(name); List allDatasource = dssDbApiDataSourceService.listAllDatasources(dataSource); diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiManagerRestful.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiManagerRestful.java index 0c25c3432f..05a39e1ada 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiManagerRestful.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiManagerRestful.java @@ -33,7 +33,7 @@ public Message getApiList(HttpServletRequest request, } Workspace workspace = SSOHelper.getWorkspace(request); List totals = new ArrayList<>(); - List apiInfoList = apiManagerService.getApiInfoList(Long.valueOf(workspace.getWorkspaceName()) + List apiInfoList = apiManagerService.getApiInfoList(workspaceId , apiName, totals, pageNow, pageSize); return Message.ok().data("list", apiInfoList).data("total", totals.get(0)); } diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiMonitorRestful.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiMonitorRestful.java index ee1d9cd8da..9b514450cf 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiMonitorRestful.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/restful/DSSDbApiMonitorRestful.java @@ -45,7 +45,7 @@ public Message getApiList(HttpServletRequest request, Workspace workspace = SSOHelper.getWorkspace(request); LOGGER.info("workspace is: {}", workspace.getWorkspaceName()); List totals = new ArrayList<>(); - List apiInfoList = apiManagerService.getOnlineApiInfoList(Long.valueOf(workspace.getWorkspaceName()), + List apiInfoList = apiManagerService.getOnlineApiInfoList(workspaceId, apiName, totals, pageNow, pageSize); return Message.ok().data("list", apiInfoList).data("total", totals.get(0)); } @@ -55,7 +55,7 @@ public Message getApiList(HttpServletRequest request, public Message getOnlineApiCnt(HttpServletRequest request, @RequestParam(value = "workspaceId", required = false) Long workspaceId) { Workspace workspace = SSOHelper.getWorkspace(request); LOGGER.info("workspace is: {}", workspace.getWorkspaceName()); - return Message.ok().data("onlineApiCnt", apiMonitorService.getOnlineApiCnt(Long.valueOf(workspace.getWorkspaceName()))); + return Message.ok().data("onlineApiCnt", apiMonitorService.getOnlineApiCnt(workspaceId)); } @@ -63,7 +63,7 @@ public Message getOnlineApiCnt(HttpServletRequest request, @RequestParam(value = public Message getOfflineApiCnt(HttpServletRequest request, @RequestParam(value = "workspaceId", required = false) Long workspaceId) { Workspace workspace = SSOHelper.getWorkspace(request); LOGGER.info("workspace is: {}", workspace.getWorkspaceName()); - return Message.ok().data("offlineApiCnt", apiMonitorService.getOfflineApiCnt(Long.valueOf(workspace.getWorkspaceName()))); + return Message.ok().data("offlineApiCnt", apiMonitorService.getOfflineApiCnt(workspaceId)); } @@ -99,7 +99,7 @@ public Message getCallCntForPast24H(HttpServletRequest request, @RequestParam(va throws Exception { Workspace workspace = SSOHelper.getWorkspace(request); LOGGER.info("workspace is: {}", workspace.getWorkspaceName()); - return Message.ok().data("list", apiMonitorService.getCallCntForPast24H(Long.valueOf(workspace.getWorkspaceName()))); + return Message.ok().data("list", apiMonitorService.getCallCntForPast24H(workspaceId)); } /** diff --git a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/util/CryptoUtils.java b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/util/CryptoUtils.java index 0dc82b1c67..f795d53f0a 100644 --- a/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/util/CryptoUtils.java +++ b/dss-apps/dss-data-api/dss-data-api-server/src/main/java/com/webank/wedatasphere/dss/data/api/server/util/CryptoUtils.java @@ -8,7 +8,7 @@ import java.io.Serializable; import java.security.MessageDigest; import org.apache.commons.codec.binary.Base64; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; public class CryptoUtils { private CryptoUtils() { diff --git a/dss-apps/dss-data-api/pom.xml b/dss-apps/dss-data-api/pom.xml index 957a6ca8f0..05088d6f26 100644 --- a/dss-apps/dss-data-api/pom.xml +++ b/dss-apps/dss-data-api/pom.xml @@ -6,7 +6,7 @@ dss com.webank.wedatasphere.dss ../../pom.xml - 1.1.0 + 1.2.0 4.0.0 dss-data-api diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/pom.xml b/dss-apps/dss-data-governance/dss-data-asset-server/pom.xml deleted file mode 100644 index 88f0ec3fb1..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/pom.xml +++ /dev/null @@ -1,223 +0,0 @@ - - - - dss - com.webank.wedatasphere.dss - 1.1.0 - ../../../pom.xml - - 4.0.0 - - dss-data-asset-server - - - 2.1.0 - - - - com.webank.wedatasphere.dss - dss-data-governance-common - ${dss.version} - - - - org.apache.linkis - linkis-module - ${linkis.version} - provided - - - org.springframework.cloud - spring-cloud-netflix - - - spring-cloud-starter-netflix-eureka-client - org.springframework.cloud - - - javax.ws.rs - javax.ws.rs-api - - - - - org.apache.commons - commons-math3 - provided - - - xstream - com.thoughtworks.xstream - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - ${spring.cloud.version} - provided - - - logback-classic - ch.qos.logback - - - log4j-to-slf4j - org.apache.logging.log4j - - - gson - com.google.code.gson - - - jsr311-api - javax.ws.rs - - - xstream - com.thoughtworks.xstream - - - commons-math - org.apache.commons - - - jackson-core - com.fasterxml.jackson.core - - - spring-boot-autoconfigure - org.springframework.boot - - - spring-boot-starter-aop - org.springframework.boot - - - spring-boot-starter - org.springframework.boot - - - spring-boot-starter-cache - org.springframework.boot - - - - - org.apache.linkis - linkis-mybatis - ${linkis.version} - - - com.webank.wedatasphere.dss - dss-common - ${dss.version} - provided - - - - org.apache.atlas - atlas-client-v2 - ${atlas.version} - - - com.google.guava - guava - - - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.core - jackson-core - - - - - org.projectlombok - lombok - 1.18.16 - compile - - - - com.alibaba - druid - 1.1.9 - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - - - - net.alchim31.maven - scala-maven-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - org.apache.maven.plugins - maven-assembly-plugin - 2.3 - false - - - make-assembly - package - - single - - - - src/main/assembly/distribution.xml - - - - - - false - out - false - false - - src/main/assembly/distribution.xml - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - - - - - src/main/java - - **/*.xml - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/MetaInfoMapper.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/MetaInfoMapper.java deleted file mode 100644 index bb2b0ff5a1..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/MetaInfoMapper.java +++ /dev/null @@ -1,20 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.dao; - -import com.webank.wedatasphere.dss.data.asset.entity.HivePartInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveStorageInfo; -import org.apache.ibatis.annotations.*; - -import java.sql.SQLException; -import java.util.List; - -@Mapper -public interface MetaInfoMapper { - Long getTableStorage() throws SQLException; - List getTop10Table() throws SQLException; - int getTableInfo(@Param("dbName") String dbName,@Param("tableName") String tableName,@Param("isPartTable") Boolean isPartTable) throws SQLException; - - List getPartInfo(@Param("dbName") String dbName, @Param("tableName") String tableName) throws SQLException; - - - -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/MetaInfoMapperImpl.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/MetaInfoMapperImpl.java deleted file mode 100644 index 72989801d2..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/MetaInfoMapperImpl.java +++ /dev/null @@ -1,174 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.dao.impl; - -import com.webank.wedatasphere.dss.data.asset.dao.MetaInfoMapper; -import com.webank.wedatasphere.dss.data.asset.entity.HivePartInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveStorageInfo; -import com.webank.wedatasphere.dss.data.common.exception.DAOException; -import com.webank.wedatasphere.dss.data.common.utils.DataSourceUtil; -import com.webank.wedatasphere.dss.data.common.utils.DateUtil; - -import javax.sql.DataSource; -import java.sql.Connection; -import java.sql.PreparedStatement; -import java.sql.ResultSet; -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Comparator; -import java.util.List; - -public class MetaInfoMapperImpl implements MetaInfoMapper { - @Override - public Long getTableStorage() throws SQLException { - DataSource dataSource = DataSourceUtil.getDataSource(); - - Connection con =dataSource.getConnection(); - long num=0; - PreparedStatement ps=null; - ResultSet rs=null; - try { - String sql="select SUM(PARAM_VALUE) from TABLE_PARAMS WHERE PARAM_KEY='totalSize'"; - ps=con.prepareStatement(sql); - rs=ps.executeQuery(); - while (rs.next()){ - num =rs.getLong(1); - } - String sql2 ="select SUM(PARAM_VALUE) from PARTITION_PARAMS WHERE PARAM_KEY='totalSize'"; - ps=con.prepareStatement(sql2); - rs=ps.executeQuery(); - while (rs.next()){ - num= num + rs.getLong(1); - } - - } catch (DAOException | SQLException e){ - throw new DAOException(e.getMessage(),e); - } - finally { - con.close(); - } - - return num; - } - - @Override - public List getTop10Table() throws SQLException{ - DataSource dataSource = DataSourceUtil.getDataSource(); - Connection con =dataSource.getConnection(); - PreparedStatement ps=null; - ResultSet rs=null; - List hiveStorageInfos = new ArrayList<>(); - try { - String sql="SELECT DBS.NAME ,TBLS.TBL_NAME,CAST(TABLE_PARAMS.PARAM_VALUE AS UNSIGNED) AS totalSize from DBS, TBLS,TABLE_PARAMS where TBLS.TBL_ID=TABLE_PARAMS.TBL_ID AND TBLS.DB_ID=DBS.DB_ID AND TABLE_PARAMS.PARAM_KEY='totalSize' order by totalSize DESC limit 10"; - ps=con.prepareStatement(sql); - rs=ps.executeQuery(); - while (rs.next()){ - HiveStorageInfo tableinfo=new HiveStorageInfo(); - tableinfo.setTableName(rs.getString(1)+"."+rs.getString(2)); - tableinfo.setStorage(rs.getLong(3)); - hiveStorageInfos.add(tableinfo); - } - String sql2="SELECT DBS.NAME ,TBLS.TBL_NAME,SUM(CAST(PARTITION_PARAMS.PARAM_VALUE AS UNSIGNED)) AS totalSize from DBS,TBLS,PARTITIONS ,PARTITION_PARAMS where DBS.DB_ID=TBLS.DB_ID AND TBLS.TBL_ID=PARTITIONS.TBL_ID AND PARTITIONS.PART_ID =PARTITION_PARAMS.PART_ID AND PARTITION_PARAMS.PARAM_KEY='totalSize' group by TBLS.TBL_NAME order by totalSize desc limit 10"; - ps=con.prepareStatement(sql2); - rs=ps.executeQuery(); - while (rs.next()){ - HiveStorageInfo tableinfo=new HiveStorageInfo(); - tableinfo.setTableName(rs.getString(1)+"."+rs.getString(2)); - tableinfo.setStorage(rs.getLong(3)); - hiveStorageInfos.add(tableinfo); - } - /** - * 特别注意LONG类型相减超出INT范围 - * System.out.println((int) (4401131805L -1796673800L)) - * System.out.println(Long.parseLong("4401131805")-Long.parseLong("1796673800")) - */ - Collections.sort(hiveStorageInfos, new Comparator() { - @Override - public int compare(HiveStorageInfo o1, HiveStorageInfo o2) { - //return (int) (Long.valueOf(o2.getStorage())-Long.valueOf(o1.getStorage())) - if(o2.getStorage() > o1.getStorage()){ - return 1; - } - else if(o2.getStorage() < o1.getStorage()){ - return -1; - } - else{ - return 0; - } - } - }); - } catch (DAOException | SQLException e){ - throw new DAOException(e.getMessage(),e); - } - finally { - con.close(); - } - return hiveStorageInfos.subList(0,10); - } - - @Override - public int getTableInfo(String dbName, String tableName, Boolean isPartTable) throws SQLException { - DataSource dataSource = DataSourceUtil.getDataSource(); - Connection con =dataSource.getConnection(); - PreparedStatement ps=null; - ResultSet rs=null; - int res = 0; - try { - String sql=null; - if(isPartTable==false){ - sql="select TABLE_PARAMS.PARAM_VALUE as totalSize from DBS, TBLS,TABLE_PARAMS where TBLS.TBL_ID=TABLE_PARAMS.TBL_ID AND TBLS.DB_ID=DBS.DB_ID AND TABLE_PARAMS.PARAM_KEY='totalSize' AND DBS.NAME="+"'"+dbName+"' AND TBLS.TBL_NAME="+"'"+tableName+"'"; - } - else { - - sql="select SUM(PARTITION_PARAMS.PARAM_VALUE) as totalSize from DBS,TBLS,PARTITIONS ,PARTITION_PARAMS where DBS.DB_ID=TBLS.DB_ID AND TBLS.TBL_ID=PARTITIONS.TBL_ID AND PARTITIONS.PART_ID =PARTITION_PARAMS.PART_ID AND PARTITION_PARAMS.PARAM_KEY='totalSize' AND DBS.NAME="+"'"+dbName +"' AND TBLS.TBL_NAME="+"'"+tableName+"' group by TBLS.TBL_NAME"; - } - ps=con.prepareStatement(sql); - rs=ps.executeQuery(); - while (rs.next()){ - res=rs.getInt(1); - } - - } catch (DAOException | SQLException e){ - throw new DAOException(e.getMessage(),e); - } - finally { - con.close(); - } - return res; - } - - @Override - public List getPartInfo(String dbName, String tableName)throws SQLException { - DataSource dataSource = DataSourceUtil.getDataSource(); - Connection con =dataSource.getConnection(); - PreparedStatement ps=null; - ResultSet rs=null; - List hivePartInfos = new ArrayList<>(); - try { - String sql="select b.PART_NAME,b.CREATE_TIME,MAX(CASE c.PARAM_KEY WHEN 'transient_lastDdlTime' THEN c.PARAM_VALUE ELSE null END) transient_lastDdlTime ,MAX(CASE c.PARAM_KEY WHEN 'numRows' THEN c.PARAM_VALUE ELSE null END) numRows,MAX(CASE c.PARAM_KEY WHEN 'totalSize' THEN c.PARAM_VALUE ELSE null END) totalSize from TBLS a,PARTITIONS b,PARTITION_PARAMS c,DBS d where a.TBL_NAME="+"'"+tableName+"'"+"AND d.NAME="+"'"+dbName+"'" +"AND a.TBL_ID=b.TBL_ID AND a.DB_ID=d.DB_ID AND b.PART_ID=c.PART_ID GROUP BY c.PART_ID"; - ps=con.prepareStatement(sql); - rs=ps.executeQuery(); - while (rs.next()){ - HivePartInfo part =new HivePartInfo(); - part.setPartName(rs.getString(1)); - Long lastAccessTime = Long.valueOf(rs.getInt(3)); - if(lastAccessTime !=null && lastAccessTime !=0L) { - part.setLastAccessTime(DateUtil.unixToTimeStr(lastAccessTime * 1000)); - } - Long createTime = Long.valueOf(rs.getInt(2)); - if(createTime !=null && createTime !=0L) { - part.setCreateTime(DateUtil.unixToTimeStr(createTime * 1000)); - } - part.setReordCnt(rs.getInt(4)); - part.setStore(rs.getInt(5)); - hivePartInfos.add(part); - } - - } catch (DAOException | SQLException e){ - throw new DAOException(e.getMessage(),e); - } - finally { - con.close(); - } - return hivePartInfos; - } -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/WorkspaceInfoMapper.xml b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/WorkspaceInfoMapper.xml deleted file mode 100644 index 8dcfde4e33..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/impl/WorkspaceInfoMapper.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveStorageInfo.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveStorageInfo.java deleted file mode 100644 index 75d60bbb5f..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveStorageInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.entity; - -import lombok.Data; - -@Data -public class HiveStorageInfo { - private String tableName; - private Long storage; - private String guid; -} \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblClassificationInfo.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblClassificationInfo.java deleted file mode 100644 index 7977271e83..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblClassificationInfo.java +++ /dev/null @@ -1,11 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.entity; - -import lombok.Data; - -import java.util.List; - -@Data -public class HiveTblClassificationInfo { - private List oldClassifications; - private List newClassifications; -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblDetailInfo.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblDetailInfo.java deleted file mode 100644 index 1204e2e9b0..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblDetailInfo.java +++ /dev/null @@ -1,39 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.entity; -import lombok.AllArgsConstructor; -import lombok.Data; - -import java.io.Serializable; -import java.util.List; -import java.util.Set; - -@Data -public class HiveTblDetailInfo implements Serializable { - private HiveTblBasicInfo basic; - private List columns; - private List partitionKeys; - private List classifications; - - @Data - public static class HiveTblBasicInfo extends HiveTblSimpleInfo { - private String store; //存储量 - private Boolean isParTbl; //是否分区表 - private String tableType; //Hive表类型 tableType: EXTERNAL_TABLE, MANAGED_TABLE - private String location; //Hive表存储路径 - } - - @Data - public static class HiveColumnInfo { - private String name; - private String type; - private String guid; - private String comment; - } - - @Data - @AllArgsConstructor - public static class HiveClassificationInfo { - private String typeName; - private Set superTypeNames; - private Set subTypeNames; - } -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblLabelInfo.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblLabelInfo.java deleted file mode 100644 index 5a4be4a35f..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblLabelInfo.java +++ /dev/null @@ -1,10 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.entity; - -import lombok.Data; - -import java.util.Set; - -@Data -public class HiveTblLabelInfo { - private Set labels; -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetRestful.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetRestful.java deleted file mode 100644 index 44c7dbebaa..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetRestful.java +++ /dev/null @@ -1,91 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.restful; - -import com.webank.wedatasphere.dss.data.asset.entity.HiveTblLabelInfo; -import com.webank.wedatasphere.dss.data.asset.service.AssetService; -import com.webank.wedatasphere.dss.data.asset.service.WorkspaceInfoService; -import org.apache.linkis.server.Message; -import lombok.AllArgsConstructor; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.Map; - -@RestController -@RequestMapping(path = "/dss/data/governance/asset", produces = {"application/json"}) -@AllArgsConstructor -public class AssetRestful { - private static final Logger logger = LoggerFactory.getLogger(AssetRestful.class); - - private AssetService assetService; - private WorkspaceInfoService workspaceInfoService; - - /** - * 获取数据资产概要:hivedb数、hivetable数据、总存储量 - */ - @RequestMapping(method = RequestMethod.GET, path ="/hiveSummary") - public Message getHiveSummary() throws Exception { - return Message.ok().data("result", assetService.getHiveSummary()); - } - - /** - * 修改单个表或单个列注释 - */ - @RequestMapping(method = RequestMethod.PUT, path ="/comment/{guid}") - public Message modifyComment(@PathVariable String guid, @RequestParam String comment) throws Exception { - comment="\""+comment+"\""; - assetService.modifyComment(guid,comment); - return Message.ok().data("result","修改成功"); - } - - /** - * 批量修改多个个表或列注释 - */ - @RequestMapping(method = RequestMethod.PUT, path ="/comment/bulk") - public Message modifyComment(@RequestBody Map commentMap) throws Exception { - for (Map.Entry stringStringEntry : commentMap.entrySet()) { - stringStringEntry.setValue("\""+stringStringEntry.getValue()+"\""); - } - assetService.bulkModifyComment(commentMap); - - return Message.ok().data("result","修改成功"); - } - - - /** - * 设置单个表或单个列的标签 - */ - @RequestMapping(method = RequestMethod.POST, path ="/label/{guid}") - public Message setLabels(@PathVariable String guid, @RequestBody HiveTblLabelInfo hiveTblLabelInfo) throws Exception { - assetService.setLabels(guid,hiveTblLabelInfo.getLabels()); - - return Message.ok().data("result","设置成功"); - } - - /** - * 删除单个表或单个列的标签,linkis-gateway不支持DELETE方法 - */ - @RequestMapping(method = RequestMethod.PUT, path ="/label/{guid}") - public Message removeLabels(@PathVariable String guid, @RequestBody HiveTblLabelInfo hiveTblLabelInfo) throws Exception { - assetService.removeLabels(guid,hiveTblLabelInfo.getLabels()); - - return Message.ok().data("result","删除成功"); - } - - /** - * 获取工作空间下所有用户名 - */ - @RequestMapping(method = RequestMethod.GET, path ="getWorkspaceUsers/{workspaceId}/{search}") - public Message getWorkspaceUsers(@PathVariable int workspaceId,@PathVariable String search) throws Exception{ - String searchs="%"+search+"%"; - List workspaceUsers = workspaceInfoService.getWorkspaceUsers(workspaceId,searchs); - return Message.ok().data("result",workspaceUsers); - - } -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetTblRestful.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetTblRestful.java deleted file mode 100644 index e740397533..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/restful/AssetTblRestful.java +++ /dev/null @@ -1,187 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.restful; - -import com.webank.wedatasphere.dss.data.asset.entity.HivePartInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveStorageInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveTblClassificationInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveTblSimpleInfo; -import com.webank.wedatasphere.dss.data.asset.service.AssetService; -import com.webank.wedatasphere.dss.data.asset.service.WorkspaceInfoService; -import org.apache.linkis.server.Message; -import lombok.AllArgsConstructor; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.lineage.AtlasLineageInfo; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.ArrayList; -import java.util.List; -import java.util.Objects; -import java.util.Optional; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -@RestController -@RequestMapping(path = "/dss/data/governance/asset/hiveTbl", produces = {"application/json"}) -@AllArgsConstructor -public class AssetTblRestful { - private static final Logger logger = LoggerFactory.getLogger(AssetTblRestful.class); - - private static final String DEFAULT_DIRECTION = "BOTH"; - private static final String DEFAULT_DEPTH = "3"; - private static final String DEFAULT_LIMIT = "10"; - private static final String DEFAULT_OFFSET = "0"; - - private AssetService assetService; - private WorkspaceInfoService workspaceInfoService; - - /** - * 获取存储量前10的表信息 - */ - @RequestMapping(method = RequestMethod.GET, path ="/topStorage") - public Message getTop10Storage() throws Exception{ - List top10Table = assetService.getTop10Table(); - for (HiveStorageInfo hiveStorageInfo : top10Table) { - String qualifiedName=hiveStorageInfo.getTableName(); - String hiveTblGuid = assetService.getHiveTblGuid(qualifiedName); - hiveStorageInfo.setGuid(hiveTblGuid); - } - return Message.ok().data("result",top10Table); - } - - /** - * 搜索hive表 - */ - @RequestMapping(method = RequestMethod.GET, path ="/search") - public Message searchHiveTbl(@RequestParam(required = false) String classification, - @RequestParam(defaultValue = "") String query, - @RequestParam(defaultValue = "") String keyword, - @RequestParam(defaultValue = DEFAULT_LIMIT) int limit, - @RequestParam(defaultValue = DEFAULT_OFFSET) int offset) throws Exception { - List hiveTblSimpleInfoList = assetService.searchHiveTable(classification,query.trim(),limit,offset); - if(hiveTblSimpleInfoList ==null || keyword ==null || keyword.trim().equals("")) { - return Message.ok().data("result",hiveTblSimpleInfoList); - } - else { - Pattern regex = Pattern.compile(keyword); - return Message.ok().data("result",hiveTblSimpleInfoList.stream().filter(ele -> regex.matcher(ele.getOwner()).find()).collect(Collectors.toList())); - } - } - - /** - * 获取单个表的详细信息,包括:基本信息、字段信息 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/basic") - public Message getHiveTblBasic(@PathVariable String guid) throws Exception { - return Message.ok().data("result",assetService.getHiveTblDetail(guid)); - } - - /** - * 获取表分区信息 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/partition") - public Message getHiveTblPartition(@PathVariable String guid) throws Exception { - List hiveTblPartition = assetService.getHiveTblPartition(guid); - if (hiveTblPartition.size()>0){ - return Message.ok().data("result",hiveTblPartition); - } - else { - return Message.ok().data("result",null); - } - } - - /** - * 获取表的血缘信息 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/lineage") - public Message getHiveTblLineage(@PathVariable String guid, - @RequestParam(defaultValue = DEFAULT_DIRECTION) AtlasLineageInfo.LineageDirection direction, - @RequestParam(defaultValue = DEFAULT_DEPTH) int depth) throws Exception { - return Message.ok().data("result",assetService.getHiveTblLineage(guid,direction,depth)); - } - - /** - * 获取表的select语句 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/select") - public Message getHiveTblSelect(@PathVariable String guid) throws Exception { - return Message.ok().data("result",assetService.getTbSelect(guid)); - } - - /** - * 获取表的create语句 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/create") - public Message getHiveTblCreate(@PathVariable String guid) throws Exception { - return Message.ok().data("result",assetService.getTbCreate(guid)); - - } - - /** - * 获取分类 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{guid}/classifications") - public Message getClassifications(@PathVariable String guid) throws Exception { - return Message.ok().data("result",assetService.getClassifications(guid)); - } - - /** - * 添加分类 - */ - @Deprecated - @RequestMapping(method = RequestMethod.POST, path ="/{guid}/classifications") - public Message addClassifications(@PathVariable String guid, @RequestBody List classifications) throws Exception { - assetService.addClassifications(guid, classifications); - return Message.ok().data("result","添加成功"); - } - -// /** -// * 删除已有全部旧分类,并添加新分类 -// * linkis-gateway无法正常转换json为list -// * [{"typeName": "test"},{"typeName": "DWD"}] ---> List classifications -// * ["test","DWD"] ---> List typeNames -// */ -// @RequestMapping(method = RequestMethod.PUT, path ="/{guid}/classifications") -// public Message removeAndAddNewClassifications(@PathVariable String guid, @RequestBody List classifications) throws Exception { -// assetService.removeAndAddClassifications(guid, classifications); -// -// return Message.ok().data("result","更新成功"); -// } - - /** - * 删除已有全部旧分类,并添加新分类 - * 支持 {"newClassifications":["test","DWD"]} 非顶层的List数组转换 - */ - @RequestMapping(method = RequestMethod.PUT, path ="/{guid}/classifications") - public Message removeAndAddClassifications(@PathVariable String guid, @RequestBody HiveTblClassificationInfo hiveTblClassificationInfo) throws Exception { - List newClassifications = new ArrayList<>(); - Optional.ofNullable(hiveTblClassificationInfo.getNewClassifications()).orElseGet(()-> { - logger.warn("hive table uid is %s, newClassifications is null",guid); - return new ArrayList<>(); - }).stream().filter(Objects::nonNull).forEach(typeName -> { - AtlasClassification atlasClassification =new AtlasClassification(typeName); - atlasClassification.setPropagate(false); - atlasClassification.setRemovePropagationsOnEntityDelete(true); - newClassifications.add(atlasClassification); - }); - assetService.removeAndAddClassifications(guid, newClassifications); - - return Message.ok().data("result","更新成功"); - } - - /** - * 删除分类 - * @DELETE linkis-gateway 不支持DELETE方式 - */ - @RequestMapping(method = RequestMethod.POST, path ="/{guid}/classification/{classificationName}") - public Message deleteClassification(@PathVariable String guid, @PathVariable final String classificationName) throws Exception { - assetService.deleteClassification(guid, classificationName); - - return Message.ok().data("result","删除成功"); - } -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/AssetService.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/AssetService.java deleted file mode 100644 index d42190e277..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/AssetService.java +++ /dev/null @@ -1,59 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.service; - -import com.webank.wedatasphere.dss.data.asset.entity.*; -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; -import com.webank.wedatasphere.dss.data.common.atlas.AtlasClassificationV2.AtlasClassificationsV2; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.lineage.AtlasLineageInfo; - -import java.sql.SQLException; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public interface AssetService { - public Map getHiveSummary() throws DataGovernanceException; - - public List searchHiveTable(String classification, String query, - int limit, int offset) throws DataGovernanceException; - - public HiveTblDetailInfo getHiveTblDetail(String guid) throws DataGovernanceException; - - public List getHiveTblPartition(String guid) throws DataGovernanceException; - - public String getHiveTblGuid(String qualifiedName) throws DataGovernanceException; - - public String getTbSelect(String guid) throws DataGovernanceException; - - public String getTbCreate(String guid) throws DataGovernanceException; - - public void modifyComment(String guid, String commentStr) throws DataGovernanceException; - - public void bulkModifyComment(Map commentMap) throws DataGovernanceException; - - public void setLabels(String guid, Set labels) throws DataGovernanceException; - - public void removeLabels(String guid, Set labels) throws DataGovernanceException; - - /** - * 获取表实体的血缘信息 - */ - public AtlasLineageInfo getHiveTblLineage(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws DataGovernanceException; - - public List getTop10Table() throws DataGovernanceException, SQLException; - - public void addClassifications(String guid, List classifications) throws DataGovernanceException; - - public void deleteClassification(String guid, String classificationName) throws DataGovernanceException; - - public void deleteClassifications(String guid, List classifications) throws DataGovernanceException; - - public void updateClassifications(String guid, List classifications) throws DataGovernanceException; - - /** - * 为实体删除已有的分类,添加新的分类 - */ - public void removeAndAddClassifications(String guid, List newClassifications) throws DataGovernanceException; - - public AtlasClassificationsV2 getClassifications(String guid) throws DataGovernanceException; -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/WorkspaceInfoService.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/WorkspaceInfoService.java deleted file mode 100644 index b218280262..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/WorkspaceInfoService.java +++ /dev/null @@ -1,13 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.service; - - -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; - - -import java.util.List; - -public interface WorkspaceInfoService { - - public List getWorkspaceUsers(int workspaceId,String search) throws DataGovernanceException; - -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/AssetServiceImpl.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/AssetServiceImpl.java deleted file mode 100644 index 31bf580ffc..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/AssetServiceImpl.java +++ /dev/null @@ -1,518 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.service.impl; - -import com.google.gson.internal.LinkedTreeMap; -import com.webank.wedatasphere.dss.data.asset.dao.MetaInfoMapper; -import com.webank.wedatasphere.dss.data.asset.dao.impl.MetaInfoMapperImpl; -import com.webank.wedatasphere.dss.data.asset.entity.HivePartInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveStorageInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveTblDetailInfo; -import com.webank.wedatasphere.dss.data.asset.entity.HiveTblSimpleInfo; -import com.webank.wedatasphere.dss.data.asset.service.AssetService; -import com.webank.wedatasphere.dss.data.common.atlas.AtlasClassificationV2; -import com.webank.wedatasphere.dss.data.common.atlas.AtlasService; -import com.webank.wedatasphere.dss.data.common.conf.AtlasConf; -import com.webank.wedatasphere.dss.data.common.exception.DAOException; -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; -import com.webank.wedatasphere.dss.data.common.utils.DateUtil; -import org.apache.atlas.AtlasServiceException; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.instance.AtlasEntity; -import org.apache.atlas.model.instance.AtlasEntityHeader; -import org.apache.atlas.model.instance.AtlasRelatedObjectId; -import org.apache.atlas.model.lineage.AtlasLineageInfo; -import org.apache.atlas.model.typedef.AtlasClassificationDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import java.sql.SQLException; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Objects; -import java.util.Set; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -@Service -public class AssetServiceImpl implements AssetService { - private static final Logger logger = LoggerFactory.getLogger(AssetServiceImpl.class); - - private AtlasService atlasService; - private MetaInfoMapper metaInfoMapper; - - public AssetServiceImpl(AtlasService atlasService) { - this.atlasService = atlasService; - this.metaInfoMapper = new MetaInfoMapperImpl(); - } - - @Override - public Map getHiveSummary() throws DataGovernanceException { - try { - Map result = new HashMap<>(); - - result.put("hiveDb", atlasService.getHiveDbCnt()); - result.put("hiveTable", atlasService.getHiveTableCnt()); - result.put("hiveStore", metaInfoMapper.getTableStorage()); - - return result; - } catch (AtlasServiceException | DAOException | SQLException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public List searchHiveTable(String classification, String query, - int limit, int offset) throws DataGovernanceException { - List atlasEntityHeaders = null; - try { - atlasEntityHeaders = atlasService.searchHiveTable(classification, "*" + query + "*", true, limit, offset); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - - if (atlasEntityHeaders != null) { - //columns 根据keyword来正则匹配过滤 - Pattern regex = Pattern.compile(query); - return atlasEntityHeaders.parallelStream().filter(Objects::nonNull).map(atlasEntityHeader -> { - HiveTblSimpleInfo hiveTblSimpleInfo = new HiveTblSimpleInfo(); - hiveTblSimpleInfo.setGuid(atlasEntityHeader.getGuid()); - hiveTblSimpleInfo.setName(stringValueOfObject(atlasEntityHeader.getAttribute("name"))); - String qualifiedName =stringValueOfObject(atlasEntityHeader.getAttribute("qualifiedName")); - hiveTblSimpleInfo.setQualifiedName(qualifiedName); - hiveTblSimpleInfo.setOwner(stringValueOfObject(atlasEntityHeader.getAttribute("owner"))); - Object createTime = atlasEntityHeader.getAttribute("createTime"); - if (createTime != null) { - hiveTblSimpleInfo.setCreateTime(DateUtil.unixToTimeStr((Double) createTime)); - } - if(null != qualifiedName && qualifiedName.split("\\.").length >0){ - String dbName = qualifiedName.split("\\.")[0]; - hiveTblSimpleInfo.setDbName(dbName); - } - hiveTblSimpleInfo.setLabels(atlasEntityHeader.getLabels()); - - try { - AtlasEntity atlasEntity = atlasService.getHiveTblByGuid(atlasEntityHeader.getGuid()); - - //comment - hiveTblSimpleInfo.setComment(stringValueOfObject(atlasEntity.getAttribute("comment"))); - List> atlasRelatedObjectIdListForColumns = (List>)atlasEntity.getRelationshipAttribute("columns"); - if(null != query && !query.trim().equalsIgnoreCase("")) { - hiveTblSimpleInfo.setColumns(atlasRelatedObjectIdListForColumns.stream().map(columnMap -> columnMap.getOrDefault("displayText","").toString()) - .filter(columnName -> regex.matcher(columnName).find()).collect(Collectors.toList())); - } - //classifications - List classificationInfoList = getClassificationInfoList(atlasEntity); - hiveTblSimpleInfo.setClassifications(classificationInfoList); - } catch (AtlasServiceException ex) { - logger.error(ex.getMessage()); - } - - return hiveTblSimpleInfo; - }).collect(Collectors.toList()); - } - return null; - } - - private String stringValueOfObject(Object obj){ - if(null !=obj) { - return obj.toString(); - } - else { - return null; - } - } - - @Override - public String getHiveTblGuid(String qualifiedName) throws DataGovernanceException{ - qualifiedName = qualifiedName + "@" + AtlasConf.ATLAS_CLUSTER_NAME.getValue(); - Map uniqAttributes =new HashMap<>(); - uniqAttributes.put("qualifiedName",qualifiedName); - try{ - AtlasEntity atlasEntity = atlasService.getHiveTblByAttribute(uniqAttributes,true,true); - if(atlasEntity == null){ - logger.warn(String.format("%s not exist in atlas", qualifiedName)); - return null; - } - else { - return atlasEntity.getGuid(); - } - } catch (AtlasServiceException ex) { - logger.warn(String.format("%s not exist in atlas", qualifiedName)); - return null; - } - } - - @Override - public HiveTblDetailInfo getHiveTblDetail(String guid) throws DataGovernanceException { - try { - AtlasEntity atlasEntity = atlasService.getHiveTblByGuid(guid); - - HiveTblDetailInfo hiveTblDetailInfo = new HiveTblDetailInfo(); - hiveTblDetailInfo.setBasic(getBasicInfo(guid, atlasEntity)); - hiveTblDetailInfo.setColumns(getBasicColumnInfoList(atlasEntity)); - hiveTblDetailInfo.setPartitionKeys(getPartitionColumnInfoList(atlasEntity)); - hiveTblDetailInfo.setClassifications(getClassificationInfoList(atlasEntity)); - - return hiveTblDetailInfo; - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - private HiveTblDetailInfo.HiveTblBasicInfo getBasicInfo(String guid, AtlasEntity atlasEntity) throws AtlasServiceException { - Map hiveTblAttributesMap = atlasService.getHiveTblAttributesByGuid(guid); - Boolean isPartTable = (Boolean) hiveTblAttributesMap.get("isPartition"); - int storage = 0; - String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; - String tableName = db_name.split("\\.")[1]; - String dbName = db_name.split("\\.")[0]; - try { - storage = metaInfoMapper.getTableInfo(dbName, tableName, isPartTable); - } catch (SQLException e) { - e.printStackTrace(); - } - - HiveTblDetailInfo.HiveTblBasicInfo basic = new HiveTblDetailInfo.HiveTblBasicInfo(); - basic.setName(tableName); - basic.setOwner(String.valueOf(atlasEntity.getAttributes().getOrDefault("owner","NULL"))); - basic.setCreateTime(new java.text.SimpleDateFormat("yyyy MM-dd HH:mm:ss").format(atlasEntity.getCreateTime())); - basic.setStore(String.valueOf(storage)); - basic.setComment(String.valueOf(atlasEntity.getAttributes().getOrDefault("comment","NULL"))); - Set labels = atlasEntity.getLabels(); - basic.setLabels(labels); - basic.setIsParTbl(isPartTable); - basic.setGuid(guid); - basic.setTableType(hiveTblAttributesMap.getOrDefault("tableType","NULL").toString()); - basic.setLocation(hiveTblAttributesMap.getOrDefault("location","NULL").toString()); - - return basic; - } - - private List getBasicColumnInfoList(AtlasEntity atlasEntity) throws AtlasServiceException { - List guids = new ArrayList<>(); - List> columns = (List>) atlasEntity.getAttributes().get("columns"); - for (LinkedTreeMap column : columns) { - guids.add(column.get("guid")); - } - - List hiveColumnInfos = new ArrayList<>(); - if (guids.size() > 0) { - List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); - for (AtlasEntity hiveColumnsByGuid : hiveColumnsByGuids) { - HiveTblDetailInfo.HiveColumnInfo hiveColumnInfo = new HiveTblDetailInfo.HiveColumnInfo(); - hiveColumnInfo.setName(String.valueOf(hiveColumnsByGuid.getAttributes().get("name"))); - hiveColumnInfo.setType(String.valueOf(hiveColumnsByGuid.getAttributes().get("type"))); - hiveColumnInfo.setComment(String.valueOf(hiveColumnsByGuid.getAttributes().get("comment"))); - hiveColumnInfo.setGuid(hiveColumnsByGuid.getGuid()); - hiveColumnInfos.add(hiveColumnInfo); - } - } - return hiveColumnInfos; - } - - private List getPartitionColumnInfoList(AtlasEntity atlasEntity) throws AtlasServiceException { - List partguids = new ArrayList<>(); - List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); - for (LinkedTreeMap column : partitionKeys) { - partguids.add(column.get("guid")); - } - List partitionColumns = new ArrayList<>(); - if (partguids.size() > 0) { - List hivePartColumnsByGuids = atlasService.getHiveColumnsByGuids(partguids); - for (AtlasEntity hiveColumnsByGuid : hivePartColumnsByGuids) { - HiveTblDetailInfo.HiveColumnInfo hiveColumnInfo = new HiveTblDetailInfo.HiveColumnInfo(); - hiveColumnInfo.setName(String.valueOf(hiveColumnsByGuid.getAttributes().get("name"))); - hiveColumnInfo.setType(String.valueOf(hiveColumnsByGuid.getAttributes().get("type"))); - hiveColumnInfo.setComment(String.valueOf(hiveColumnsByGuid.getAttributes().get("comment"))); - hiveColumnInfo.setGuid(hiveColumnsByGuid.getGuid()); - partitionColumns.add(hiveColumnInfo); - } - } - return partitionColumns; - } - - private List getClassificationInfoList(AtlasEntity atlasEntity) throws AtlasServiceException { - if(atlasEntity.getClassifications() ==null) { - return null; - } - else { - List hiveClassificationInfoList =new ArrayList<>(); - String typeName =null; - AtlasClassificationDef atlasClassificationDef =null; - - List atlasClassificationList = atlasEntity.getClassifications(); - for (AtlasClassification atlasClassification : atlasClassificationList) { - typeName = atlasClassification.getTypeName(); - atlasClassificationDef = getClassificationDefByName(typeName); - hiveClassificationInfoList.add( - new HiveTblDetailInfo.HiveClassificationInfo(typeName,atlasClassificationDef.getSuperTypes(),atlasClassificationDef.getSubTypes())); - } - return hiveClassificationInfoList; - } - } - - private AtlasClassificationDef getClassificationDefByName(String name) throws DataGovernanceException { - try { - return atlasService.getClassificationDefByName(name); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public List getHiveTblPartition(String guid) throws DataGovernanceException { - try { - AtlasEntity atlasEntity = atlasService.getHiveTblByGuid(guid); - String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; - String tableName = db_name.split("\\.")[1]; - String dbName = db_name.split("\\.")[0]; - List hivePartInfo = new ArrayList<>(); - try { - hivePartInfo = metaInfoMapper.getPartInfo(dbName, tableName); - } catch (SQLException e) { - e.printStackTrace(); - } - return hivePartInfo; - - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public String getTbSelect(String guid) throws DataGovernanceException { - try { - AtlasEntity atlasEntity = atlasService.getHiveTblByGuid(guid); - String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; - String tableName = db_name.split("\\.")[1]; - List guids = new ArrayList<>(); - List> columns = (List>) atlasEntity.getAttributes().get("columns"); - for (LinkedTreeMap column : columns) { - guids.add(column.get("guid")); - } - List fields = new ArrayList<>(); - List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); - for (AtlasEntity hiveColumnsByGuid : hiveColumnsByGuids) { - fields.add((String) hiveColumnsByGuid.getAttributes().get("name")); - } - Map hiveTblAttributesMap = atlasService.getHiveTblAttributesByGuid(guid); - Boolean isPartTable = (Boolean) hiveTblAttributesMap.get("isPartition"); - if (isPartTable == true) { - List partguids = new ArrayList<>(); - List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); - for (LinkedTreeMap column : partitionKeys) { - partguids.add(column.get("guid")); - } - List hiveColumnsByGuids1 = atlasService.getHiveColumnsByGuids(partguids); - for (AtlasEntity entity : hiveColumnsByGuids1) { - fields.add((String) entity.getAttributes().get("name")); - } - } - StringBuilder sql = new StringBuilder(); - sql.append("SELECT @$ "); - for (int i = 0; i < fields.size() - 1; i++) { - sql.append(fields.get(i)).append(", @$ "); - } - sql.append(fields.get(fields.size() - 1)).append(" @$ from ").append(tableName); - return sql.toString(); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public String getTbCreate(String guid) throws DataGovernanceException { - try { - StringBuilder sql = new StringBuilder(); - AtlasEntity atlasEntity = atlasService.getHiveTblByGuid(guid); - String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; - String tableName = db_name.split("\\.")[1]; - List guids = new ArrayList<>(); - List> columns = (List>) atlasEntity.getAttributes().get("columns"); - for (LinkedTreeMap column : columns) { - guids.add(column.get("guid")); - } - sql.append("CREATE TABLE IF NOT EXISTS ").append(tableName).append(" @$ ( @$ "); - List fields = new ArrayList<>(); - List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); - for (int i = 0; i < hiveColumnsByGuids.size(); i++) { - if (i < hiveColumnsByGuids.size() - 1) { - AtlasEntity hiveColumnsByGuid = hiveColumnsByGuids.get(i); - StringBuilder sb = new StringBuilder(); - sb.append((String) hiveColumnsByGuid.getAttributes().get("name")).append(" ").append((String) hiveColumnsByGuid.getAttributes().get("type")); - if (hiveColumnsByGuid.getAttributes().get("comment") == null) { - sb.append(", "); - } else { - sb.append(" COMMENT '").append(hiveColumnsByGuid.getAttributes().get("comment")).append("',"); - } - fields.add(sb.append(" @$ ").toString()); - } else { - AtlasEntity hiveColumnsByGuid = hiveColumnsByGuids.get(i); - StringBuilder sb = new StringBuilder(); - sb.append((String) hiveColumnsByGuid.getAttributes().get("name")).append(" ").append((String) hiveColumnsByGuid.getAttributes().get("type")); - if (hiveColumnsByGuid.getAttributes().get("comment") == null) { - sb.append(" "); - } else { - sb.append(" COMMENT '").append(hiveColumnsByGuid.getAttributes().get("comment")).append("' "); - } - fields.add(sb.append(" @$ ").toString()); - } - } - for (String field : fields) { - sql.append(field); - } - sql.append(") @$ "); - Map hiveTblAttributesMap = atlasService.getHiveTblAttributesByGuid(guid); - Boolean isPartTable = (Boolean) hiveTblAttributesMap.get("isPartition"); - if (isPartTable == true) { - sql.append("PARTITIONED BY @$ ( @$ "); - List partguids = new ArrayList<>(); - List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); - for (LinkedTreeMap column : partitionKeys) { - partguids.add(column.get("guid")); - } - List keyFields = new ArrayList<>(); - List hiveColumnsByGuids1 = atlasService.getHiveColumnsByGuids(partguids); - for (int i = 0; i < hiveColumnsByGuids1.size(); i++) { - if (i < hiveColumnsByGuids1.size() - 1) { - AtlasEntity entity = hiveColumnsByGuids1.get(i); - StringBuilder sb = new StringBuilder(); - sb.append((String) entity.getAttributes().get("name")).append(" ").append((String) entity.getAttributes().get("type")); - if (entity.getAttributes().get("comment") == null) { - sb.append(", "); - } else { - sb.append(" COMMENT '").append(entity.getAttributes().get("comment")).append("', "); - } - keyFields.add(sb.append(" @$ ").toString()); - } else { - AtlasEntity entity = hiveColumnsByGuids1.get(i); - StringBuilder sb = new StringBuilder(); - sb.append((String) entity.getAttributes().get("name")).append(" ").append((String) entity.getAttributes().get("type")); - if (entity.getAttributes().get("comment") == null) { - sb.append(" "); - } else { - sb.append(" COMMENT '").append(entity.getAttributes().get("comment")).append("' "); - } - keyFields.add(sb.append(" @$ ").toString()); - } - } - for (int i = 0; i < keyFields.size(); i++) { - sql.append(keyFields.get(i)); - } - sql.append(")"); - } - return sql.toString(); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public void modifyComment(String guid, String commentStr) throws DataGovernanceException { - try { - atlasService.modifyComment(guid, commentStr); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public void bulkModifyComment(Map commentMap) throws DataGovernanceException { - commentMap.keySet().forEach(key -> { - try { - atlasService.modifyComment(key, commentMap.get(key)); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - }); - - } - - @Override - public void setLabels(String guid, Set labels) throws DataGovernanceException { - try { - atlasService.setLabels(guid, labels); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public void removeLabels(String guid, Set labels) throws DataGovernanceException { - try { - atlasService.removeLabels(guid, labels); - } catch (AtlasServiceException ex) { - throw new DataGovernanceException(ex.getMessage()); - } - } - - @Override - public AtlasLineageInfo getHiveTblLineage(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws DataGovernanceException { - try { - return atlasService.getLineageInfo(guid, direction, depth); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public List getTop10Table() throws DataGovernanceException, SQLException { - return metaInfoMapper.getTop10Table(); - } - - @Override - public void addClassifications(String guid, List classifications) throws DataGovernanceException { - try { - atlasService.addClassifications(guid,classifications); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void deleteClassification(String guid, String classificationName) throws DataGovernanceException{ - try { - atlasService.deleteClassification(guid, classificationName); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void deleteClassifications(String guid, List classifications) throws DataGovernanceException { - try { - atlasService.deleteClassifications(guid, classifications); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void updateClassifications(String guid, List classifications) throws DataGovernanceException { - try { - atlasService.updateClassifications(guid, classifications); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void removeAndAddClassifications(String guid, List newClassifications) throws DataGovernanceException { - try { - atlasService.removeAndAddClassifications(guid, newClassifications); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public AtlasClassificationV2.AtlasClassificationsV2 getClassifications(String guid) throws DataGovernanceException { - try { - return atlasService.getClassifications(guid); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } -} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/WorkspaceInfoServiceImpl.java b/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/WorkspaceInfoServiceImpl.java deleted file mode 100644 index 243ffe900b..0000000000 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/service/impl/WorkspaceInfoServiceImpl.java +++ /dev/null @@ -1,24 +0,0 @@ -package com.webank.wedatasphere.dss.data.asset.service.impl; - -import com.webank.wedatasphere.dss.data.asset.dao.WorkspaceInfoMapper; -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; -import com.webank.wedatasphere.dss.data.asset.service.WorkspaceInfoService; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.stereotype.Service; - -import java.util.*; - -@Service -public class WorkspaceInfoServiceImpl implements WorkspaceInfoService { - - @Autowired - private WorkspaceInfoMapper workspaceInfoMapper; - - - @Override - public List getWorkspaceUsers(int workspaceId,String search) throws DataGovernanceException { - - List workspaceUsers = workspaceInfoMapper.getWorkspaceUsersName(workspaceId,search); - return workspaceUsers; - } -} diff --git a/dss-apps/dss-data-governance/dss-data-classification-server/pom.xml b/dss-apps/dss-data-governance/dss-data-classification-server/pom.xml deleted file mode 100644 index d8c99a87a9..0000000000 --- a/dss-apps/dss-data-governance/dss-data-classification-server/pom.xml +++ /dev/null @@ -1,191 +0,0 @@ - - - - dss - com.webank.wedatasphere.dss - 1.1.0 - ../../../pom.xml - - 4.0.0 - - dss-data-classification-server - - - 2.1.0 - - - - com.webank.wedatasphere.dss - dss-data-governance-common - ${dss.version} - compile - - - org.apache.linkis - linkis-module - ${linkis.version} - provided - - - org.springframework.cloud - spring-cloud-netflix - - - spring-cloud-starter-netflix-eureka-client - org.springframework.cloud - - - javax.ws.rs - javax.ws.rs-api - - - - - org.apache.commons - commons-math3 - provided - - - xstream - com.thoughtworks.xstream - - - org.springframework.cloud - spring-cloud-starter-netflix-eureka-client - ${spring.cloud.version} - provided - - - logback-classic - ch.qos.logback - - - log4j-to-slf4j - org.apache.logging.log4j - - - gson - com.google.code.gson - - - jsr311-api - javax.ws.rs - - - xstream - com.thoughtworks.xstream - - - commons-math - org.apache.commons - - - jackson-core - com.fasterxml.jackson.core - - - spring-boot-autoconfigure - org.springframework.boot - - - spring-boot-starter-aop - org.springframework.boot - - - spring-boot-starter - org.springframework.boot - - - spring-boot-starter-cache - org.springframework.boot - - - - - org.apache.linkis - linkis-mybatis - ${linkis.version} - - - com.webank.wedatasphere.dss - dss-common - ${dss.version} - provided - - - - - - - org.apache.maven.plugins - maven-deploy-plugin - - - - net.alchim31.maven - scala-maven-plugin - - - org.apache.maven.plugins - maven-jar-plugin - - - org.apache.maven.plugins - maven-assembly-plugin - 2.3 - false - - - make-assembly - package - - single - - - - src/main/assembly/distribution.xml - - - - - - false - out - false - false - - src/main/assembly/distribution.xml - - - - - org.apache.maven.plugins - maven-compiler-plugin - - 8 - 8 - - - - - - src/main/java - - **/*.xml - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/restful/ClassificationRestful.java b/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/restful/ClassificationRestful.java deleted file mode 100644 index 926995ea25..0000000000 --- a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/restful/ClassificationRestful.java +++ /dev/null @@ -1,98 +0,0 @@ -package com.webank.wedatasphere.dss.data.classification.restful; - -import com.webank.wedatasphere.dss.data.classification.service.ClassificationService; -import lombok.AllArgsConstructor; -import lombok.extern.slf4j.Slf4j; -import org.apache.atlas.model.typedef.AtlasClassificationDef; -import org.apache.atlas.model.typedef.AtlasTypesDef; -import org.apache.linkis.server.Message; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RequestMethod; -import org.springframework.web.bind.annotation.RequestParam; -import org.springframework.web.bind.annotation.RestController; - -import java.util.List; -import java.util.regex.Pattern; -import java.util.stream.Collectors; - -@RestController -@RequestMapping(path = "/dss/data/governance/classification", produces = {"application/json"}) -@Slf4j -@AllArgsConstructor -public class ClassificationRestful { - private static final Logger logger = LoggerFactory.getLogger(ClassificationRestful.class); - - private ClassificationService classificationService; - - /** - * 获取所有分类 - */ - @RequestMapping(method = RequestMethod.GET, path ="/all") - public Message getClassificationDef() throws Exception { - return Message.ok().data("result", classificationService.getClassificationDef()); - } - - /** - * 根据名称获取分类,不包括包括子分类 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{name}") - public Message getClassificationDef(@PathVariable String name) throws Exception { - return Message.ok().data("result",classificationService.getClassificationDefByName(name)); - } - - /** - * 根据名称获取分类,包括一级子分类 - * keyword 按照分类名称模糊搜索 - */ - @RequestMapping(method = RequestMethod.GET, path ="/{name}/subtypes") - public Message getClassificationDefList(@PathVariable String name, - @RequestParam(defaultValue = "") String keyword) throws Exception { - List atlasClassificationDefList = classificationService.getClassificationDefListByName(name); - if(atlasClassificationDefList ==null || keyword ==null || keyword.trim().equalsIgnoreCase("")) { - return Message.ok().data("result", atlasClassificationDefList); - } - else{ - Pattern regex = Pattern.compile(keyword); - return Message.ok().data("result",atlasClassificationDefList.stream().filter(ele -> regex.matcher(ele.getName()).find()).collect(Collectors.toList())); - } - } - - /** - * 获取所有分层的一级子类型,包括系统预置分层和用户自定义分层 - */ - @RequestMapping(method = RequestMethod.GET, path ="/layers/all") - public Message getClassificationDefListForLayer() throws Exception { - return Message.ok().data("result",classificationService.getClassificationDefListForLayer()); - } - - /** - * 创建新的分类 - */ - @RequestMapping(method = RequestMethod.POST, path ="/batch") - public Message createClassificationDef(@RequestBody AtlasTypesDef typesDef) throws Exception { - return Message.ok().data("result", classificationService.createAtlasTypeDefs(typesDef)); - } - - /** - * 更新的分类 - */ - @RequestMapping(method = RequestMethod.PUT, path ="/batch") - public Message updateClassificationDef(@RequestBody AtlasTypesDef typesDef) throws Exception { - classificationService.updateAtlasTypeDefs(typesDef); - return Message.ok().data("result","更新成功" ); - } - - /** - * 删除分类 - * @DELETE linkis-gateway 不支持DELETE方式 - */ - @RequestMapping(method = RequestMethod.POST, path ="/{name}/delete") - public Message deleteClassificationDef(@PathVariable String name) throws Exception { - classificationService.deleteClassificationDefByName(name); - return Message.ok().data("result","删除成功"); - } -} diff --git a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/ClassificationService.java b/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/ClassificationService.java deleted file mode 100644 index 1fabe8b2dc..0000000000 --- a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/ClassificationService.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.webank.wedatasphere.dss.data.classification.service; - -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; -import org.apache.atlas.AtlasServiceException; -import org.apache.atlas.model.typedef.AtlasClassificationDef; -import org.apache.atlas.model.typedef.AtlasTypesDef; - -import java.util.List; - -public interface ClassificationService { - public AtlasTypesDef getClassificationDef( ) throws DataGovernanceException; - - public AtlasClassificationDef getClassificationDefByName(String name) throws DataGovernanceException; - - public List getClassificationDefListByName(String name) throws DataGovernanceException; - - public List getClassificationDefListForLayer() throws DataGovernanceException; - - public AtlasTypesDef createAtlasTypeDefs(final AtlasTypesDef typesDef) throws DataGovernanceException; - - public void updateAtlasTypeDefs(final AtlasTypesDef typesDef) throws DataGovernanceException; - - public void deleteClassificationDefByName(String name) throws DataGovernanceException; - - -} diff --git a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/impl/ClassificationServiceImpl.java b/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/impl/ClassificationServiceImpl.java deleted file mode 100644 index 24753e7697..0000000000 --- a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/java/com/webank/wedatasphere/dss/data/classification/service/impl/ClassificationServiceImpl.java +++ /dev/null @@ -1,134 +0,0 @@ -package com.webank.wedatasphere.dss.data.classification.service.impl; - -import com.sun.jersey.api.client.ClientResponse; -import com.webank.wedatasphere.dss.data.classification.service.ClassificationService; -import com.webank.wedatasphere.dss.data.common.atlas.AtlasService; -import com.webank.wedatasphere.dss.data.common.conf.AtlasConf; -import com.webank.wedatasphere.dss.data.common.exception.DataGovernanceException; -import lombok.AllArgsConstructor; -import org.apache.atlas.AtlasServiceException; -import org.apache.atlas.model.typedef.AtlasClassificationDef; -import org.apache.atlas.model.typedef.AtlasTypesDef; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import org.springframework.stereotype.Service; - -import javax.annotation.PostConstruct; -import java.util.List; - -@Service -@AllArgsConstructor -public class ClassificationServiceImpl implements ClassificationService { - private static final Logger logger = LoggerFactory.getLogger(ClassificationServiceImpl.class); - private static final String ATLAS_ERROR_CODE ="errorCode"; - - private AtlasService atlasService; - - /** - * 判断系统预定义最顶层分类是否已存在,如果不存在,则需要进行初始化 - */ - @PostConstruct - private void initializeSystemClassificationList(){ - logger.info("@@@@@@@@@@@@@@ ==> initializeSystemClassificationList"); - - initializeClassification(AtlasConf.ATLAS_CLASSIFICATION_SUBJECT.getValue(),"数仓主题域"); - initializeClassification(AtlasConf.ATLAS_CLASSIFICATION_LAYER_SYSTEM.getValue(),"系统预定义分层"); - initializeClassification(AtlasConf.ATLAS_CLASSIFICATION_LAYER_USER.getValue(),"用户自定义分层"); - - logger.info("@@@@@@@@@@@@@@ <== initializeSystemClassificationList"); - } - - private void initializeClassification(String name, String description){ - AtlasClassificationDef atlasClassificationDef =null; - AtlasTypesDef atlasTypesDef =null; - - try { - atlasClassificationDef = atlasService.getClassificationDefByName(name); - if(atlasClassificationDef !=null) { - logger.info(String.format("@@@@@@@@@@@@@@ === this classification [name=%s] exists, ignore it", name)); - } - }catch (AtlasServiceException ex) { - logger.info("@@@@@@@@@@ error:" + ex.getMessage()); - // 404 - if (ClientResponse.Status.NOT_FOUND ==ex.getStatus()) { - logger.info(String.format("@@@@@@@@@@@@@@ === this classification [name=%s] don't exist, create it...", name)); - logger.info(String.format("@@@@@@@@@@@@@@ ==> initializeClassification, name=%s", name)); - atlasTypesDef = new AtlasTypesDef(); - atlasClassificationDef = new AtlasClassificationDef(name, description); - atlasTypesDef.getClassificationDefs().add(atlasClassificationDef); - this.createAtlasTypeDefs(atlasTypesDef); - logger.info(String.format("@@@@@@@@@@@@@@ <== initializeClassification, name=%s", name)); - } - else { - throw new DataGovernanceException(ex.getMessage()); - } - } - } - - - @Override - public AtlasTypesDef getClassificationDef() throws DataGovernanceException { - try { - return atlasService.getClassificationDef(); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public AtlasClassificationDef getClassificationDefByName(String name) throws DataGovernanceException { - try { - return atlasService.getClassificationDefByName(name); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public List getClassificationDefListByName(String name) throws DataGovernanceException { - try { - return atlasService.getClassificationDefListByName(name); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public List getClassificationDefListForLayer() throws DataGovernanceException { - try { - return atlasService.getClassificationDefListForLayer(); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public AtlasTypesDef createAtlasTypeDefs(final AtlasTypesDef typesDef) throws DataGovernanceException { - try { - return atlasService.createAtlasTypeDefs(typesDef); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void updateAtlasTypeDefs(AtlasTypesDef typesDef) throws DataGovernanceException { - try { - atlasService.updateAtlasTypeDefs(typesDef); - } catch (AtlasServiceException exception) { - throw new DataGovernanceException(exception.getMessage()); - } - } - - @Override - public void deleteClassificationDefByName(String name) throws DataGovernanceException { - try { - atlasService.deleteTypedefByName(name); - } catch (AtlasServiceException exception) { - if(ClientResponse.Status.CONFLICT ==exception.getStatus()){ - throw new DataGovernanceException("该分类(主题域/分层)已经与表关联,无法删除"); - } - throw new DataGovernanceException(exception.getMessage()); - } - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClassificationV2.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClassificationV2.java deleted file mode 100644 index 561fb757d4..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClassificationV2.java +++ /dev/null @@ -1,54 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.atlas; - -import com.fasterxml.jackson.annotation.JsonAutoDetect; -import com.fasterxml.jackson.annotation.JsonIgnore; -import com.fasterxml.jackson.annotation.JsonIgnoreProperties; -import com.fasterxml.jackson.databind.annotation.JsonSerialize; -import org.apache.atlas.model.PList; -import org.apache.atlas.model.SearchFilter; -import org.apache.atlas.model.instance.AtlasClassification; - -import javax.xml.bind.annotation.XmlAccessType; -import javax.xml.bind.annotation.XmlAccessorType; -import javax.xml.bind.annotation.XmlRootElement; -import javax.xml.bind.annotation.XmlSeeAlso; -import java.util.List; - -import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.NONE; -import static com.fasterxml.jackson.annotation.JsonAutoDetect.Visibility.PUBLIC_ONLY; - -public class AtlasClassificationV2 extends AtlasClassification { - // org.codehaus.jackson.map.JsonMappingException: Conflicting getter definitions for property "propagate" - // https://stackoverflow.com/questions/20624891/stuck-on-org-codehaus-jackson-map-jsonmappingexception-conflicting-getter-defi - @Override - @JsonIgnore - public Boolean isPropagate() { - return super.getPropagate(); - } - - /** - * REST serialization friendly list. - */ - @JsonAutoDetect(getterVisibility=PUBLIC_ONLY, setterVisibility=PUBLIC_ONLY, fieldVisibility=NONE) - @JsonSerialize(include=JsonSerialize.Inclusion.NON_NULL) - @JsonIgnoreProperties(ignoreUnknown=true) - @XmlRootElement - @XmlAccessorType(XmlAccessType.PROPERTY) - @XmlSeeAlso(AtlasClassification.class) - public static class AtlasClassificationsV2 extends PList { - private static final long serialVersionUID = 1L; - - public AtlasClassificationsV2() { - super(); - } - - public AtlasClassificationsV2(List list) { - super(list); - } - - public AtlasClassificationsV2(List list, long startIndex, int pageSize, long totalCount, - SearchFilter.SortType sortType, String sortBy) { - super(list, startIndex, pageSize, totalCount, sortType, sortBy); - } - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClient.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClient.java deleted file mode 100644 index ce7c57dd2c..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasClient.java +++ /dev/null @@ -1,274 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.atlas; - -import com.sun.jersey.core.util.MultivaluedMapImpl; -import org.apache.atlas.AtlasClientV2; -import org.apache.atlas.AtlasServiceException; -import org.apache.atlas.SortOrder; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.instance.AtlasEntity; -import org.apache.atlas.model.lineage.AtlasLineageInfo; -import org.apache.atlas.model.typedef.AtlasTypesDef; -import org.apache.atlas.type.AtlasType; -import org.apache.commons.collections.MapUtils; - -import javax.ws.rs.HttpMethod; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.Response; -import java.util.List; -import java.util.Map; -import java.util.Set; - -public class AtlasClient extends AtlasClientV2 { - private static final String PREFIX_ATTR = "attr:"; - - private static final String ENTITIES_API = BASE_URI + "entities/"; - private static final String UPDATE_ENTITY_ATTR_API = ENTITY_API + "guid/"; - private static final String SET_ENTITY_LABELS_BY_GUID_TEMPLATE = ENTITY_API + "/guid/%s/labels"; - private static final String DELETE_ENTITY_LABELS_BY_GUID_TEMPLATE = ENTITY_API + "/guid/%s/labels"; - private static final String GET_ENTITY_HEADER_BY_GUID_TEMPLATE = ENTITY_API + "/guid/{guid}/header"; - - private static final String TYPEDEF_BY_NAME = TYPES_API + "typedef/name/"; - private static final String TYPEDEFS_API = TYPES_API + "typedefs/"; - private static final String GET_CLASSIFICATION_BY_NAME_TEMPLATE = TYPES_API + "classificationdef/name/%s"; - - public AtlasClient(String[] baseUrl, String[] basicAuthUserNamePassword) { - super(baseUrl, basicAuthUserNamePassword); - } - - /** - * 获取所有的hive db实体 - */ - public String getHiveDbs() throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("type", "hive_db"); - queryParams.add("property", AtlasEntity.KEY_STATUS); - queryParams.add("value", AtlasEntity.Status.ACTIVE.name()); - return callAPI(API_V3.GET_ENTITIES, String.class, queryParams); - } - - /** - * 获取所有的hive table实体 - */ - public String getHiveTables() throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("type", "hive_table"); - queryParams.add("property", AtlasEntity.KEY_STATUS); - queryParams.add("value", AtlasEntity.Status.ACTIVE.name()); - return callAPI(API_V3.GET_ENTITIES, String.class, queryParams); - } - - /** - * 获取表实体的血缘信息 - */ - public String getLineageInfoForString(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("direction", direction.toString()); - queryParams.add("depth", String.valueOf(depth)); - - return callAPI(API_V2.LINEAGE_INFO, String.class, queryParams, guid); - } - - /** - * 获取实体信息 - */ - public String getEntityByGuidForString(String guid) throws AtlasServiceException { - return getEntityByGuidForString(guid, false, false); - } - - /** - * 获取实体信息 - */ - public String getEntityByGuidForString(String guid, boolean minExtInfo, boolean ignoreRelationships) throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - - queryParams.add("minExtInfo", String.valueOf(minExtInfo)); - queryParams.add("ignoreRelationships", String.valueOf(ignoreRelationships)); - - return callAPI(API_V2.GET_ENTITY_BY_GUID, String.class, queryParams, guid); - } - - /** - * 通过type 和 属性查一个entity - */ - public String getEntityByAttributeForString(String type, Map uniqAttributes, boolean minExtInfo, boolean ignoreRelationship) throws AtlasServiceException { - MultivaluedMap queryParams = attributesToQueryParams(uniqAttributes); - - queryParams.add("minExtInfo", String.valueOf(minExtInfo)); - queryParams.add("ignoreRelationships", String.valueOf(ignoreRelationship)); - - return callAPI(API_V2.GET_ENTITY_BY_ATTRIBUTE, String.class, queryParams, type); - } - - - public String getEntitiesByGuidsForString(List guids) throws AtlasServiceException { - return getEntitiesByGuidsForString(guids, false, false); - } - - public String getEntitiesByGuidsForString(List guids, boolean minExtInfo, boolean ignoreRelationships) throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - - queryParams.put("guid", guids); - queryParams.add("minExtInfo", String.valueOf(minExtInfo)); - queryParams.add("ignoreRelationships", String.valueOf(ignoreRelationships)); - - return callAPI(API_V2.GET_ENTITIES_BY_GUIDS, String.class, queryParams); - } - - /** - * 获取实体基本信息 - */ - public String getHeaderByIdForString(String guid) throws AtlasServiceException { - API api = new API(String.format(GET_ENTITY_HEADER_BY_GUID_TEMPLATE, guid), HttpMethod.GET, Response.Status.OK); - return callAPI(api, String.class,null); - } - - /** - * 根据关键字检索实体 - */ - public String basicSearchForString(final String typeName, final String classification, final String query, - final boolean excludeDeletedEntities, final int limit, final int offset) throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("typeName", typeName); - queryParams.add("classification", classification); - queryParams.add(QUERY, query); - queryParams.add("excludeDeletedEntities", String.valueOf(excludeDeletedEntities)); - queryParams.add(LIMIT, String.valueOf(limit)); - queryParams.add(OFFSET, String.valueOf(offset)); - queryParams.add("sortBy", "name"); - queryParams.add("sortOrder", String.valueOf(SortOrder.ASCENDING)); - - return callAPI(API_V2.BASIC_SEARCH, String.class, queryParams); - } - - /** - * 修改实体的注释 - */ - public String modifyComment(String guid,String commentStr) throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("name", "comment"); - - return callAPI(API_V3.UPDATE_ENTITY_ATTR,String.class,commentStr,queryParams,guid); - } - - /** - * 设置实体的标签 - */ - public void setLabels(String guid, Set labels) throws AtlasServiceException { - API api = new API(String.format(SET_ENTITY_LABELS_BY_GUID_TEMPLATE, guid), HttpMethod.POST, Response.Status.NO_CONTENT); - callAPI(api, (Class)null, labels); - } - - /** - * 删除实体的标签 - */ - public void removeLabels(String guid, Set labels) throws AtlasServiceException { - API api = new API(String.format(DELETE_ENTITY_LABELS_BY_GUID_TEMPLATE, guid), HttpMethod.DELETE, Response.Status.NO_CONTENT); - callAPI(api, (Class)null, labels); - } - - /** - * 获取所有的类别 - */ - public String getClassificationDefForString() throws AtlasServiceException { - MultivaluedMap queryParams = new MultivaluedMapImpl(); - queryParams.add("type", "classification"); - return callAPI(API_V2.GET_ALL_TYPE_DEFS, String.class, queryParams); - } - - /** - * 根据名称获取分类 - */ - public String getClassificationDefByNameForString(String name) throws AtlasServiceException { - API api = new API(String.format(GET_CLASSIFICATION_BY_NAME_TEMPLATE, name), HttpMethod.GET, Response.Status.OK); - return callAPI(api, String.class, null); - } - - /** - * 根据名称删除类型 - */ - public void deleteTypedefByName(String name) throws AtlasServiceException { - callAPI(API_V3.DELETE_TYPEDEF_BY_NAME, (Class)null, null, name); - } - - /** - * 创建类型 - */ - public String createAtlasTypeDefsForString(final AtlasTypesDef typesDef) throws AtlasServiceException { - return callAPI(API_V2.CREATE_ALL_TYPE_DEFS, String.class, AtlasType.toJson(typesDef)); - } - - /** - * 更新类型 - */ - public void updateAtlasTypeDefsV2(final AtlasTypesDef typesDef) throws AtlasServiceException { - callAPI(API_V2.UPDATE_ALL_TYPE_DEFS, (Class)null, AtlasType.toJson(typesDef)); - } - - /** - * 为实体添加分类 - */ - @Override - public void addClassifications(String guid, List classifications) throws AtlasServiceException { - callAPI(formatPathParameters(API_V2.ADD_CLASSIFICATIONS, guid), (Class)null, AtlasType.toJson(classifications), (String[]) null); - } - - /** - * 为实体更新分类 - */ - @Override - public void updateClassifications(String guid, List classifications) throws AtlasServiceException { - callAPI(formatPathParameters(API_V2.UPDATE_CLASSIFICATIONS, guid), (Class)null, AtlasType.toJson(classifications)); - } - - /** - * 为实体删除分类 - */ - @Override - public void deleteClassifications(String guid, List classifications) throws AtlasServiceException { - if(classifications !=null && classifications.size() > 0) { - for (AtlasClassification c : classifications) { - this.deleteClassification(guid, c.getTypeName()); - } - } - } - - /** - * 查询实体的分类 - */ - public String getClassificationsForString(String guid) throws AtlasServiceException { - return callAPI(formatPathParameters(API_V2.GET_CLASSIFICATIONS, guid), String.class, null); - } - - - - - public static class API_V3 extends API { - public static final API_V3 GET_ENTITIES = new API_V3(ENTITIES_API, HttpMethod.GET, Response.Status.OK); - public static final API_V3 UPDATE_ENTITY_ATTR = new API_V3(UPDATE_ENTITY_ATTR_API,HttpMethod.PUT,Response.Status.OK); - public static final API_V3 DELETE_TYPEDEF_BY_NAME = new API_V3(TYPEDEF_BY_NAME, HttpMethod.DELETE, Response.Status.NO_CONTENT); - - private API_V3(String path, String method, Response.Status status) { - super(path, method, status); - } - } - - - private MultivaluedMap attributesToQueryParams(Map attributes) { - return attributesToQueryParams(attributes, null); - } - - private MultivaluedMap attributesToQueryParams(Map attributes, - MultivaluedMap queryParams) { - if (queryParams == null) { - queryParams = new MultivaluedMapImpl(); - } - - if (MapUtils.isNotEmpty(attributes)) { - for (Map.Entry e : attributes.entrySet()) { - queryParams.putSingle(PREFIX_ATTR + e.getKey(), e.getValue()); - } - } - - return queryParams; - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasService.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasService.java deleted file mode 100644 index 2eef11ce3b..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/atlas/AtlasService.java +++ /dev/null @@ -1,343 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.atlas; - -import com.google.gson.Gson; -import com.google.gson.GsonBuilder; -import com.google.gson.JsonDeserializationContext; -import com.google.gson.JsonDeserializer; -import com.google.gson.JsonElement; -import com.google.gson.JsonObject; -import com.google.gson.JsonParseException; -import com.google.gson.internal.LinkedTreeMap; -import com.webank.wedatasphere.dss.data.common.conf.AtlasConf; -import org.apache.atlas.AtlasServiceException; -import org.apache.atlas.model.discovery.AtlasSearchResult; -import org.apache.atlas.model.instance.AtlasClassification; -import org.apache.atlas.model.instance.AtlasEntity; -import org.apache.atlas.model.instance.AtlasEntityHeader; -import org.apache.atlas.model.instance.AtlasRelatedObjectId; -import org.apache.atlas.model.lineage.AtlasLineageInfo; -import org.apache.atlas.model.typedef.AtlasClassificationDef; -import org.apache.atlas.model.typedef.AtlasTypesDef; -import org.apache.commons.lang.StringUtils; -import org.springframework.stereotype.Service; - -import java.lang.reflect.Type; -import java.util.ArrayList; -import java.util.Date; -import java.util.HashMap; -import java.util.List; -import java.util.Map; -import java.util.Set; - -@Service("atlasService") -public class AtlasService { - private AtlasClient atlasClient; - private final Gson gson; - - public AtlasService() { - String[] urls = new String[]{AtlasConf.ATLAS_REST_ADDRESS.getValue()}; - String[] basicAuthUsernamePassword = new String[]{AtlasConf.ATLAS_USERNAME.getValue(), AtlasConf.ATLAS_PASSWORD.getValue()}; - atlasClient = new AtlasClient(urls, basicAuthUsernamePassword); - - GsonBuilder builder = new GsonBuilder(); - // Register an adapter to manage the date types as long values - builder.registerTypeAdapter(Date.class, new JsonDeserializer() { - @Override - public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { - return new Date(json.getAsJsonPrimitive().getAsLong()); - } - }); - - gson = builder.create(); - } - - /** - * hive db数量 - */ - public long getHiveDbCnt() throws AtlasServiceException { - String jsonStr = atlasClient.getHiveDbs(); - if (StringUtils.isNotEmpty(jsonStr)) { - JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class); - if (jsonObject != null) { - return jsonObject.get("count").getAsLong(); - } else { - return 0; - } - } else { - return 0; - } - } - - /** - * hive table数量 - */ - public long getHiveTableCnt() throws AtlasServiceException { - String jsonStr = atlasClient.getHiveTables(); - if (StringUtils.isNotEmpty(jsonStr)) { - JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class); - if (jsonObject != null) { - return jsonObject.get("count").getAsLong(); - } else { - return 0; - } - } else { - return 0; - } - } - - - /** - * 根据关键字搜索hive table - */ - public List searchHiveTable(String classification, String query, - boolean excludeDeletedEntities, int limit, int offset) throws AtlasServiceException { - String jsonStr = atlasClient.basicSearchForString("hive_table", classification, query, excludeDeletedEntities, limit, offset); - AtlasSearchResult atlasSearchResult = gson.fromJson(jsonStr, AtlasSearchResult.class); - - return atlasSearchResult.getEntities(); - } - - /** - * 获取hive table对象 - */ - public AtlasEntity getHiveTblByGuid(String guid) throws AtlasServiceException { - String jsonStr = atlasClient.getEntityByGuidForString(guid, false, false); - - AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); - - return atlasEntityWithExtInfo.getEntity(); - } - - /** - * 获取hive table对象 - */ - public AtlasEntity getHiveTblByAttribute(Map uniqAttributes, boolean minExtInfo, boolean ignoreRelationship) throws AtlasServiceException { - String jsonStr = atlasClient.getEntityByAttributeForString("hive_table", uniqAttributes, minExtInfo, ignoreRelationship); - - AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); - - return atlasEntityWithExtInfo.getEntity(); - } - - /** - * 获取hive column对象 - */ - public AtlasEntity getHiveColumn(String guid) throws AtlasServiceException { - String jsonStr = atlasClient.getEntityByGuidForString(guid, true, true); - - AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); - - return atlasEntityWithExtInfo.getEntity(); - } - - /** - * 获取多个hive column对象 - */ - public List getHiveColumnsByGuids(List guids) throws AtlasServiceException { - String jsonStr = atlasClient.getEntitiesByGuidsForString(guids, true, true); - AtlasEntity.AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntitiesWithExtInfo.class); - - return atlasEntitiesWithExtInfo.getEntities(); - } - - - /** - * 修改实体的注释 - */ - public void modifyComment(String guid, String commentStr) throws AtlasServiceException { - atlasClient.modifyComment(guid, commentStr); - } - - /** - * 设置实体的标签 - */ - public void setLabels(String guid, Set labels) throws AtlasServiceException { - atlasClient.setLabels(guid, labels); - } - - /** - * 删除实体的标签 - */ - public void removeLabels(String guid, Set labels) throws AtlasServiceException { - atlasClient.removeLabels(guid, labels); - } - - /** - * 血缘信息 - */ - public AtlasLineageInfo getLineageInfo(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws AtlasServiceException { - String jsonStr = atlasClient.getLineageInfoForString(guid, direction, depth); - - AtlasLineageInfo atlasLineageInfo = gson.fromJson(jsonStr, AtlasLineageInfo.class); - - return atlasLineageInfo; - } - - /** - * 根据guid来获取hive tbl名称: db.table - */ - public String getHiveTblNameById(String guid) throws AtlasServiceException { - String jsonStr = atlasClient.getHeaderByIdForString(guid); - AtlasEntityHeader atlasEntityHeader = gson.fromJson(jsonStr, AtlasEntityHeader.class); - - return atlasEntityHeader.getAttribute("qualifiedName").toString().split("@")[0]; - } - - /** - * 根据guid来获取hive tbl名称 和 是否分区表、是否外部表、外部表路径 - */ - public Map getHiveTblAttributesByGuid(String guid) throws AtlasServiceException { - Map result = new HashMap<>(4); - - String jsonStr = atlasClient.getEntityByGuidForString(guid, false, false); - AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); - - result.put("tblName", atlasEntityWithExtInfo.getEntity().getAttribute("qualifiedName").toString().split("@")[0]); - result.put("isPartition", ((List) atlasEntityWithExtInfo.getEntity().getAttribute("partitionKeys")).size() > 0); - result.put("tableType",atlasEntityWithExtInfo.getEntity().getAttribute("tableType")); - Map sdMap = (LinkedTreeMap)atlasEntityWithExtInfo.getEntity().getRelationshipAttribute("sd"); - if(null != sdMap) { - result.put("location",atlasEntityWithExtInfo.getReferredEntities().get(sdMap.get("guid")).getAttribute("location")); - } - return result; - } - - /** - * 获取所有的分类 - */ - public AtlasTypesDef getClassificationDef() throws AtlasServiceException { - String jsonStr = atlasClient.getClassificationDefForString(); - AtlasTypesDef atlasTypesDef = gson.fromJson(jsonStr, AtlasTypesDef.class); - - return atlasTypesDef; - } - - /** - * 根据名称获取分类 - */ - public AtlasClassificationDef getClassificationDefByName(String name) throws AtlasServiceException { - String jsonStr = atlasClient.getClassificationDefByNameForString(name); - AtlasClassificationDef atlasClassificationDef = gson.fromJson(jsonStr, AtlasClassificationDef.class); - - return atlasClassificationDef; - } - - /** - * 根据名称获取分类的一级子类型 - */ - public List getClassificationDefListByName(String name) throws AtlasServiceException { - List atlasClassificationDefList = new ArrayList(); - - AtlasClassificationDef atlasClassificationDef = this.getClassificationDefByName(name); - //atlasClassificationDefList.add(atlasClassificationDef); - - Set subTypes = atlasClassificationDef.getSubTypes(); - subTypes.forEach(item -> { - try { - atlasClassificationDefList.add(this.getClassificationDefByName(item)); - } catch (AtlasServiceException exception) { - exception.printStackTrace(); - } - - }); - - return atlasClassificationDefList; - } - - /** - * 获取所有分层的一级子类型,包括系统预置分层和用户自定义分层 - */ - public List getClassificationDefListForLayer() throws AtlasServiceException { - List atlasClassificationDefList = new ArrayList(); - // 系统预置分层的一级子分类 - atlasClassificationDefList.addAll(this.getClassificationDefListByName(AtlasConf.ATLAS_CLASSIFICATION_LAYER_SYSTEM.getValue())); - - // 用户自定义分层的一级子分类 - atlasClassificationDefList.addAll(this.getClassificationDefListByName(AtlasConf.ATLAS_CLASSIFICATION_LAYER_USER.getValue())); - - return atlasClassificationDefList; - } - - /** - * 创建新的类型定义 - */ - public AtlasTypesDef createAtlasTypeDefs(final AtlasTypesDef typesDef) throws AtlasServiceException { - String jsonStr = atlasClient.createAtlasTypeDefsForString(typesDef); - AtlasTypesDef atlasTypesDef = gson.fromJson(jsonStr, AtlasTypesDef.class); - - return atlasTypesDef; - } - - /** - * 更新的类型定义 - */ - public void updateAtlasTypeDefs(final AtlasTypesDef typesDef) throws AtlasServiceException { - atlasClient.updateAtlasTypeDefsV2(typesDef); - } - - /** - * 根据名称删除类型(几种类型:Enum-Struct-Classification-Entity-Relationship-BusinessMetadata) - */ - public void deleteTypedefByName(String name) throws AtlasServiceException { - atlasClient.deleteTypedefByName(name); - } - - /** - * 为实体添加分类 - */ - public void addClassifications(String guid, List classifications) throws AtlasServiceException { - atlasClient.addClassifications(guid, classifications); - } - - /** - * 为实体删除分类 - */ - public void deleteClassification(String guid, String classificationName) throws AtlasServiceException { - atlasClient.deleteClassification(guid, classificationName); - } - - /** - * 为实体删除分类 - */ - public void deleteClassifications(String guid, List classifications) throws AtlasServiceException { - atlasClient.deleteClassifications(guid, classifications); - } - - /** - * 为实体更新分类 - */ - public void updateClassifications(String guid, List classifications) throws AtlasServiceException { - atlasClient.updateClassifications(guid, classifications); - } - - /** - * 为实体删除已有的分类,添加新的分类 - */ - public void removeAndAddClassifications(String guid, List newClassifications) throws AtlasServiceException { - AtlasClassificationV2.AtlasClassificationsV2 oldAtlasClassifications = this.getClassifications(guid); - if (oldAtlasClassifications != null && oldAtlasClassifications.getList() != null) { - oldAtlasClassifications.getList().stream().forEach(ele -> { - try { - this.deleteClassification(guid, ele.getTypeName()); - } catch (AtlasServiceException exception) { - exception.printStackTrace(); - } - }); - } - if (newClassifications != null && newClassifications.size() > 0) { - atlasClient.addClassifications(guid, newClassifications); - } - } - - - /** - * 查询实体的分类 - */ - public AtlasClassificationV2.AtlasClassificationsV2 getClassifications(String guid) throws AtlasServiceException { - String jsonStr = atlasClient.getClassificationsForString(guid); - // org.codehaus.jackson.map.JsonMappingException: Conflicting getter definitions for property "propagate" - AtlasClassificationV2.AtlasClassificationsV2 atlasClassifications = gson.fromJson(jsonStr, AtlasClassificationV2.AtlasClassificationsV2.class); - - return atlasClassifications; - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/conf/AtlasConf.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/conf/AtlasConf.java deleted file mode 100644 index 7bfb0d0bd2..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/conf/AtlasConf.java +++ /dev/null @@ -1,32 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.conf; - -import org.apache.linkis.common.conf.CommonVars; - -public interface AtlasConf { - /** - * atlas server info - */ - CommonVars ATLAS_APPLICATION_PROPERTIES = CommonVars.apply("atlas-application.properties"); - CommonVars ATLAS_REST_ADDRESS = CommonVars.apply("atlas.rest.address"); - CommonVars ATLAS_USERNAME = CommonVars.apply("atlas.username"); - CommonVars ATLAS_PASSWORD = CommonVars.apply("atlas.password"); - CommonVars ATLAS_CLUSTER_NAME = CommonVars.apply("atlas.cluster.name","primary"); - - /** - * 系统初始化分类信息: 主题域、系统分层、自定义分层 - */ - CommonVars ATLAS_CLASSIFICATION_SUBJECT = CommonVars.apply("atlas.classification.subject", "subject"); - CommonVars ATLAS_CLASSIFICATION_LAYER_SYSTEM = CommonVars.apply("atlas.classification.layer_system", "layer_system"); - CommonVars ATLAS_CLASSIFICATION_LAYER_USER = CommonVars.apply("atlas.classification.layer", "layer"); - - - /** - * hive metastore db - */ - CommonVars METASTORE_DATASOURCE_DRIVER = CommonVars.apply("metastore.datasource.driver", "com.mysql.jdbc.Driver"); - CommonVars METASTORE_DATASOURCE_URL = CommonVars.apply("metastore.datasource.url"); - CommonVars METASTORE_DATASOURCE_USERNAME = CommonVars.apply("metastore.datasource.username"); - CommonVars METASTORE_DATASOURCE_PASSWORD = CommonVars.apply("metastore.datasource.password"); - - -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DAOException.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DAOException.java deleted file mode 100644 index 529edafe36..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DAOException.java +++ /dev/null @@ -1,17 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.exception; - - -public class DAOException extends RuntimeException { - public DAOException(){ - super(); - } - public DAOException (String message,Throwable cause){ - super(message,cause); - } - public DAOException(String message){ - super(message); - } - public DAOException(Throwable cause){ - super(cause); - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DataGovernanceException.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DataGovernanceException.java deleted file mode 100644 index 095c18196a..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/exception/DataGovernanceException.java +++ /dev/null @@ -1,8 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.exception; - -public class DataGovernanceException extends RuntimeException { - - public DataGovernanceException(final String message) { - super(message); - } -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DataSourceUtil.java b/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DataSourceUtil.java deleted file mode 100644 index 5794f74f93..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DataSourceUtil.java +++ /dev/null @@ -1,26 +0,0 @@ -package com.webank.wedatasphere.dss.data.common.utils; - -import com.alibaba.druid.pool.DruidDataSource; -import com.webank.wedatasphere.dss.data.common.conf.AtlasConf; - -public class DataSourceUtil { - private static DruidDataSource druidDataSource =null; - - private DataSourceUtil(){} - - public static DruidDataSource getDataSource(){ - if(druidDataSource ==null) { - synchronized (DataSourceUtil.class){ - if(druidDataSource ==null){ - druidDataSource = new DruidDataSource(); - druidDataSource.setDriverClassName(AtlasConf.METASTORE_DATASOURCE_DRIVER.getValue()); - druidDataSource.setUrl(AtlasConf.METASTORE_DATASOURCE_URL.getValue()); - druidDataSource.setUsername(AtlasConf.METASTORE_DATASOURCE_USERNAME.getValue()); - druidDataSource.setPassword(AtlasConf.METASTORE_DATASOURCE_PASSWORD.getValue()); - } - } - } - return druidDataSource; - } - -} diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/assembly/distribution.xml b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/assembly/distribution.xml deleted file mode 100644 index 486f363218..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/assembly/distribution.xml +++ /dev/null @@ -1,46 +0,0 @@ - - - - dss-data-governance-server - - dir - - true - dss-data-governance-server - - - - - - lib - true - true - false - true - true - - - - - - - diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/atlas-application.properties b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/atlas-application.properties deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss-data-governance-server.properties b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss-data-governance-server.properties deleted file mode 100644 index b3980c6ccc..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss-data-governance-server.properties +++ /dev/null @@ -1,53 +0,0 @@ -# -# /* -# * Copyright 2019 WeBank -# * -# * 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. -# */ -# - -# Spring configurations -spring.server.port=9209 -spring.spring.application.name=dss-data-governance-server - -wds.linkis.log.clear=true - -wds.linkis.server.version=v1 - -##restful -wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.data.asset.restful,com.webank.wedatasphere.dss.data.classification.restful - -##mybatis -wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/data/asset/dao/impl/*.xml -wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.dss.data.asset.entity -wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.data.asset.dao,com.webank.wedatasphere.dss.data.warehouse.dao,com.webank.wedatasphere.dss.data.warehouse.mapper - -#wds.linkis.gateway.ip=127.0.0.1 -#wds.linkis.gateway.port=9001 -#wds.linkis.gateway.url=http://127.0.0.1:9001/ - - -# atlas config -atlas.rest.address=http://xxxxxxx:21000 -atlas.username=xxxxxxxx -atlas.password=yyyyyyyyy -atlas.client.readTimeoutMSecs=60000 -atlas.client.connectTimeoutMSecs=60000 - -atlas.cluster.name=primary - -# hive metadata config -metastore.datasource.driver=com.mysql.jdbc.Driver -metastore.datasource.url=jdbc:mysql://xxxxxx:yyyy/metastore?characterEncoding=UTF-8 -metastore.datasource.username=xxxxxx -metastore.datasource.password=yyyyyy \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss.properties b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss.properties deleted file mode 100644 index 379830e551..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/dss.properties +++ /dev/null @@ -1,25 +0,0 @@ -# -# /* -# * Copyright 2019 WeBank -# * -# * 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. -# */ -# - -wds.linkis.gateway.ip=127.0.0.1 -wds.linkis.gateway.port=9001 -wds.linkis.gateway.url=http://127.0.0.1:9001/ - -wds.linkis.server.mybatis.datasource.url=jdbc:mysql://xxxxxxx:3306/dss_test?characterEncoding=UTF-8 -wds.linkis.server.mybatis.datasource.username=xxxxx -***REMOVED***xxxxxx diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j2.xml b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j2.xml deleted file mode 100644 index c00e1eaa79..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j2.xml +++ /dev/null @@ -1,51 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/token.properties b/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/token.properties deleted file mode 100644 index a52a8983d3..0000000000 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/token.properties +++ /dev/null @@ -1,19 +0,0 @@ -# -# /* -# * Copyright 2019 WeBank -# * -# * 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. -# */ -# - -${userName}=${password} \ No newline at end of file diff --git a/dss-apps/dss-data-governance/pom.xml b/dss-apps/dss-data-governance/pom.xml deleted file mode 100644 index 8c57ef5644..0000000000 --- a/dss-apps/dss-data-governance/pom.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - dss - com.webank.wedatasphere.dss - 1.1.0 - ../../pom.xml - - 4.0.0 - - dss-data-governance - pom - - dss-data-governance-server - dss-data-governance-common - dss-data-classification-server - dss-data-asset-server - - - \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/pom.xml b/dss-apps/dss-dataasset-management/dss-data-assets-client/pom.xml new file mode 100644 index 0000000000..575aa4c612 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/pom.xml @@ -0,0 +1,59 @@ + + + + dss-dataasset-management + com.webank.wedatasphere.dss + 1.2.0 + + 4.0.0 + + dss-data-assets-client + + + 8 + 8 + 1.1.2 + + + + + org.apache.linkis + linkis-gateway-httpclient-support + ${linkis.version} + + + org.projectlombok + lombok + 1.18.16 + compile + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + src/main/resources + + + ${project.artifactId}-${project.version} + + + \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java new file mode 100644 index 0000000000..7ac811dde7 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java @@ -0,0 +1,77 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; + +public enum ClassificationConstant { + /** + * 指标 + */ + INDICATOR(1, "indicator"), + /** + * 度量 + */ + MEASURE(2,"measure"), + /** + * 维度 + */ + DIMENSION(0, "dimension"), + /** + * 主题 + */ + THEME(3, "theme"), + /** + * 分层 + */ + LAYER(4, "layer"); + + private int type; + + public static final String SEPARATOR = "_"; + + private String typeCode; + + ClassificationConstant(int type, String typeCode) { + this.type = type; + + this.typeCode = typeCode; + } + + public static boolean isTypeScope(int type) { + return type >= 0 && type < values().length; + } + + public static boolean isTypeScope(String type) { + return getClassificationConstantByTypeCode(type).isPresent(); + } + + public static Optional getClassificationConstantByTypeCode(String typeCode) { + for (ClassificationConstant c : values()) { + if (StringUtils.equals(c.typeCode,typeCode)) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + public static Optional getClassificationConstantByType(int type) { + for (ClassificationConstant c : values()) { + if (c.type == type) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + + + public int getType() { + return type; + } + + public String getTypeCode() { + return typeCode; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java new file mode 100644 index 0000000000..9bf1a6139d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +@Data +public class CreateLabelInfo { + private String name; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java new file mode 100644 index 0000000000..cf1fa62bb4 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class CreateModelTypeInfo { + private String name; + + private String guid; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveSimpleInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveSimpleInfo.java new file mode 100644 index 0000000000..2aeaedfbbb --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveSimpleInfo.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class HiveSimpleInfo implements Serializable { + private String guid; + private String name; + private String qualifiedName; + private String createTime; + private String owner; + private String aliases; + private String lastAccessTime; + private String comment; + private List classifications; + private String totalSize; + private String external; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblStatsDTO.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblStatsDTO.java new file mode 100644 index 0000000000..82f916c2ef --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblStatsDTO.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class HiveTblStatsDTO { + + private Integer columnCount = 0; + + private Long totalSize = 0L; + + private Integer numFiles = 0; + + private Integer partitionCount = 0; + + private Integer accessCount = 0; +} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HivePartInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java similarity index 61% rename from dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HivePartInfo.java rename to dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java index 79ee1dafca..1a5d85685a 100644 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HivePartInfo.java +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java @@ -1,13 +1,14 @@ -package com.webank.wedatasphere.dss.data.asset.entity; +package com.webank.wedatasphere.dss.data.governance.entity; import lombok.Data; + @Data -public class HivePartInfo { +public class PartInfo { private String partName; private int reordCnt; private int store; private String createTime; private String lastAccessTime; - + private int fileCount; } \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java new file mode 100644 index 0000000000..f54a0e6cd5 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +public enum QueryType { + PRECISE(1), + FUZZY(0); + private int code; + + QueryType(int code) { + this.code = code; + } + + public int getCode() { + return code; + } + + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/SearchLabelInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/SearchLabelInfo.java new file mode 100644 index 0000000000..c33b928d19 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/SearchLabelInfo.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +@Data +public class SearchLabelInfo { + private String name; + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java new file mode 100644 index 0000000000..c04b5c79c4 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +@Data +public class UpdateLabelInfo { + private String name; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java new file mode 100644 index 0000000000..33cee5d07b --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class UpdateModelTypeInfo { + private String name; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/AbstractRemoteClient.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/AbstractRemoteClient.scala new file mode 100644 index 0000000000..87b84d4a21 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/AbstractRemoteClient.scala @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.data.governance + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result + +abstract class AbstractRemoteClient extends RemoteClient { + protected val dwsHttpClient:DWSHttpClient + + override def execute(action: Action): Result = action match { + case action: Action => dwsHttpClient.execute(action) + } + + override def close(): Unit = dwsHttpClient.close() +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsRemoteClient.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsRemoteClient.scala new file mode 100644 index 0000000000..17144448bf --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsRemoteClient.scala @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.dss.data.governance + + +import com.webank.wedatasphere.dss.data.governance.request._ +import com.webank.wedatasphere.dss.data.governance.response._ + + +trait DataAssetsRemoteClient extends RemoteClient { + def searchHiveTbl(action: SearchHiveTblAction): SearchHiveTblResult + + def searchHiveDb(action: SearchHiveDbAction): SearchHiveDbResult + + def getHiveTblPartition(action: GetHiveTblPartitionAction): GetHiveTblPartitionResult + + def getHiveTblBasic(action: GetHiveTblBasicAction): GetHiveTblBasicResult + + def getHiveTblCreate(action: GetHiveTblCreateAction): GetHiveTblCreateResult + + def createModelType(action: CreateModelTypeAction): CreateModelTypeResult + + def bindModelType(action: BindModelTypeAction): BindModelTypeResult + + def updateModelType(action: UpdateModelTypeAction): UpdateModelTypeResult + + def unBindModelType(action: UnBindModelTypeAction): UnBindModelTypeResult + + def createLabel(action: CreateLabelAction): CreateLabelResult + + def updateLabel(action: UpdateLabelAction): UpdateLabelResult + + def deleteLabel(action: DeleteLabelAction): DeleteLabelResult + + def bindLabel(action: BindLabelAction): BindLabelResult + + def unBindLabel(action: UnBindLabelAction): UnBindLabelResult + + def searchLabel(action: SearchLabelAction): SearchLabelResult + + def deleteModelType(action: DeleteModelTypeAction): DeleteModelTypeResult + + def searchHiveTblSize(action: HiveTblSizeAction): HiveTblSizeResult + + def searchHiveTblStats(action: HiveTblStatsAction): HiveTblStatsResult + + def getHiveTblPartInfoByNameResult(action: GetTblPartInfoByNameAction): GetHiveTblPartInfoByNameResult + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/RemoteClient.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/RemoteClient.scala new file mode 100644 index 0000000000..9d1e5028d7 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/RemoteClient.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance + +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result +import java.io.Closeable + +trait RemoteClient extends Closeable{ + protected def execute(action: Action): Result + + override def close(): Unit +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/exception/DataAssetsClientBuilderException.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/exception/DataAssetsClientBuilderException.scala new file mode 100644 index 0000000000..5c9b205855 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/exception/DataAssetsClientBuilderException.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.data.governance.exception + +import org.apache.linkis.common.exception.ErrorException + +class DataAssetsClientBuilderException (errorDesc: String) extends ErrorException(23000, errorDesc) diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/impl/LinkisDataAssetsRemoteClient.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/impl/LinkisDataAssetsRemoteClient.scala new file mode 100644 index 0000000000..136216f2cb --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/impl/LinkisDataAssetsRemoteClient.scala @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.dss.data.governance.impl + + +import com.webank.wedatasphere.dss.data.governance.request._ +import com.webank.wedatasphere.dss.data.governance.response._ +import com.webank.wedatasphere.dss.data.governance.{AbstractRemoteClient, DataAssetsRemoteClient} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.config.DWSClientConfig + +class LinkisDataAssetsRemoteClient(clientConfig: DWSClientConfig) extends AbstractRemoteClient with DataAssetsRemoteClient { + override protected val dwsHttpClient: DWSHttpClient = new DWSHttpClient(clientConfig, "DataAssets-Client") + + override def searchHiveTbl(action: SearchHiveTblAction): SearchHiveTblResult = execute(action).asInstanceOf[SearchHiveTblResult] + + override def getHiveTblPartition(action: GetHiveTblPartitionAction): GetHiveTblPartitionResult = execute(action).asInstanceOf[GetHiveTblPartitionResult] + + override def getHiveTblBasic(action: GetHiveTblBasicAction): GetHiveTblBasicResult = execute(action).asInstanceOf[GetHiveTblBasicResult] + + override def getHiveTblCreate(action: GetHiveTblCreateAction): GetHiveTblCreateResult = execute(action).asInstanceOf[GetHiveTblCreateResult] + + override def searchHiveDb(action: SearchHiveDbAction): SearchHiveDbResult = execute(action).asInstanceOf[SearchHiveDbResult] + + override def createModelType(action: CreateModelTypeAction): CreateModelTypeResult = execute(action).asInstanceOf[CreateModelTypeResult] + + override def bindModelType(action: BindModelTypeAction): BindModelTypeResult = execute(action).asInstanceOf[BindModelTypeResult] + + override def updateModelType(action: UpdateModelTypeAction): UpdateModelTypeResult = execute(action).asInstanceOf[UpdateModelTypeResult] + + override def unBindModelType(action: UnBindModelTypeAction): UnBindModelTypeResult = execute(action).asInstanceOf[UnBindModelTypeResult] + + override def deleteModelType(action: DeleteModelTypeAction): DeleteModelTypeResult = execute(action).asInstanceOf[DeleteModelTypeResult] + + override def searchHiveTblSize(action: HiveTblSizeAction): HiveTblSizeResult = execute(action).asInstanceOf[HiveTblSizeResult] + + override def searchHiveTblStats(action: HiveTblStatsAction): HiveTblStatsResult = execute(action).asInstanceOf[HiveTblStatsResult] + + override def createLabel(action: CreateLabelAction): CreateLabelResult = execute(action).asInstanceOf[CreateLabelResult] + + override def updateLabel(action: UpdateLabelAction): UpdateLabelResult = execute(action).asInstanceOf[UpdateLabelResult] + + override def deleteLabel(action: DeleteLabelAction): DeleteLabelResult = execute(action).asInstanceOf[DeleteLabelResult] + + override def bindLabel(action: BindLabelAction): BindLabelResult = execute(action).asInstanceOf[BindLabelResult] + + override def unBindLabel(action: UnBindLabelAction): UnBindLabelResult = execute(action).asInstanceOf[UnBindLabelResult] + + override def searchLabel(action: SearchLabelAction): SearchLabelResult = execute(action).asInstanceOf[SearchLabelResult] + + override def getHiveTblPartInfoByNameResult(action: GetTblPartInfoByNameAction): GetHiveTblPartInfoByNameResult = execute(action).asInstanceOf[GetHiveTblPartInfoByNameResult] + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindLabelAction.scala new file mode 100644 index 0000000000..c163338f7d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindLabelAction.scala @@ -0,0 +1,77 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class BindLabelAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels", "bind") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} + +object BindLabelAction { + def builder(): Builder = new Builder + + class Builder private[BindLabelAction] { + private var user: String = _ + + private var label: String = _ + + private var labelGuid: String = _ + + private var tableName: String = _ + + private var tableGuid: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName; + this + } + + def setLabel(label : String) :Builder={ + this.label = label + this + } + + def setTableGuid(tableGuid : String) : Builder = { + this.tableGuid = tableGuid + this + } + + def setLabelGuid(labelGuid : String) : Builder = { + this.labelGuid = labelGuid + this + } + + def build(): BindLabelAction = { + var action = new BindLabelAction; + if ((tableName == null || label == null) && (labelGuid == null || tableGuid == null)) + throw new DataAssetsClientBuilderException("tableName and label ,or tableGuid and labelGuid are needed!") + + action.setUser(user) + action.addRequestPayload("label", label) + action.addRequestPayload("tableName", tableName) + action.addRequestPayload("tableGuid", tableGuid) + action.addRequestPayload("labelGuid", labelGuid) + action + } + } +} + + + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindModelTypeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindModelTypeAction.scala new file mode 100644 index 0000000000..f99cab178b --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/BindModelTypeAction.scala @@ -0,0 +1,84 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class BindModelTypeAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + private var modelName: String = _ + + private var modelType: String = _ + + private var tableName: String = _ + + private var guid: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "model", "bind") +} + +object BindModelTypeAction { + def builder(): Builder = new Builder + + class Builder private[BindModelTypeAction] { + private var user: String = _ + + private var modelName: String = _ + + private var modelType: ClassificationConstant = _ + + private var tableName: String = _ + + private var guid: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setModelName(modelName: String): Builder = { + this.modelName = modelName; + this + } + + def setModelType(modelType: ClassificationConstant): Builder = { + this.modelType = modelType; + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName; + this + } + + def setGuid(guid: String): Builder = { + this.guid = guid; + this + } + + def build(): BindModelTypeAction = { + var action = new BindModelTypeAction; + if (tableName == null && guid == null) throw new DataAssetsClientBuilderException("tableName or guid is needed!") + if (modelType == null || modelName == null) throw new DataAssetsClientBuilderException("modelType and modelName is needed!") + action.setUser(user) + action.guid = guid + action.modelName = modelName + action.modelType = modelType.getTypeCode + action.tableName = tableName + action.addRequestPayload("guid", action.guid) + action.addRequestPayload("modelName", action.modelName) + action.addRequestPayload("modelType", action.modelType) + action.addRequestPayload("tableName", action.tableName) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateLabelAction.scala new file mode 100644 index 0000000000..5c10666625 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateLabelAction.scala @@ -0,0 +1,50 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class CreateLabelAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} + +object CreateLabelAction { + def builder(): Builder = new Builder + + class Builder private[CreateLabelAction]() { + private var user: String = _ + private var name: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setName(name: String): Builder = { + this.name = name + this + } + + + def build(): CreateLabelAction = { + val action = new CreateLabelAction + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + action.setUser(user) + action.addRequestPayload("name", this.name) + action + + } + } +} + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateModelTypeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateModelTypeAction.scala new file mode 100644 index 0000000000..4ac84dedd2 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/CreateModelTypeAction.scala @@ -0,0 +1,61 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class CreateModelTypeAction extends POSTAction with DataAssetsAction { + + private var name:String= _ + + private var `type`:String= _ + + private var user:String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "model","type") +} + +object CreateModelTypeAction{ + def builder(): Builder = new Builder + + class Builder private[CreateModelTypeAction]() { + private var user: String = _ + private var name:String= _ + private var `type`:ClassificationConstant= _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setName(name:String):Builder = { + this.name = name + this + } + + def setType(`type`:ClassificationConstant):Builder = { + this.`type` = `type`; + this; + } + + def build(): CreateModelTypeAction = { + val action = new CreateModelTypeAction + if(`type` == null) throw new DataAssetsClientBuilderException("type is needed!") + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + action.name = name + action.`type` = `type`.getTypeCode + action.setUser(user) + action.addRequestPayload("name",action.name) + action.addRequestPayload("type",action.`type`) + action + + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DataAssetsAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DataAssetsAction.scala new file mode 100644 index 0000000000..2f4a5a90bb --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DataAssetsAction.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import org.apache.linkis.httpclient.dws.request.DWSHttpAction + +trait DataAssetsAction extends DWSHttpAction with org.apache.linkis.httpclient.request.UserAction diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteLabelAction.scala new file mode 100644 index 0000000000..d70c551e1d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteLabelAction.scala @@ -0,0 +1,49 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class DeleteLabelAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels","delete") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} +object DeleteLabelAction { + def builder(): Builder = new Builder + + class Builder private[DeleteLabelAction]() { + private var user: String = _ + private var name: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setName(name: String): Builder = { + this.name = name + this + } + + + def build(): DeleteLabelAction = { + val action = new DeleteLabelAction + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + action.setUser(user) + action.addRequestPayload("name", this.name) + action + } + } +} + + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteModelTypeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteModelTypeAction.scala new file mode 100644 index 0000000000..4d4254385f --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/DeleteModelTypeAction.scala @@ -0,0 +1,62 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class DeleteModelTypeAction extends POSTAction with DataAssetsAction{ + + + private var name:String= _ + + private var `type`:String= _ + + private var user:String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "model","type","delete") +} + +object DeleteModelTypeAction{ + def builder(): Builder = new Builder + + class Builder private[DeleteModelTypeAction]() { + private var user: String = _ + private var name:String= _ + private var `type`:ClassificationConstant= _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setName(name:String):Builder = { + this.name = name + this + } + + def setType(`type`:ClassificationConstant):Builder = { + this.`type` = `type`; + this; + } + + def build(): DeleteModelTypeAction = { + val action = new DeleteModelTypeAction + if(`type` == null) throw new DataAssetsClientBuilderException("type is needed!") + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + action.name = name + action.`type` = `type`.getTypeCode + action.setUser(user) + action.addRequestPayload("name",action.name) + action.addRequestPayload("type",action.`type`) + action + + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblBasicAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblBasicAction.scala new file mode 100644 index 0000000000..994cf0981a --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblBasicAction.scala @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetHiveTblBasicAction extends GetAction with DataAssetsAction{ + + private var guid:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl",guid,"basic") +} +object GetHiveTblBasicAction{ + def builder(): Builder = new Builder + + class Builder private[GetHiveTblBasicAction]() { + private var guid:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setGuid(guid:String): Builder = { + this.guid = guid + this + } + + def build(): GetHiveTblBasicAction = { + val action = new GetHiveTblBasicAction + if(guid == null) throw new DataAssetsClientBuilderException("guid is needed!") + action.guid = guid + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblCreateAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblCreateAction.scala new file mode 100644 index 0000000000..b3003e13f3 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblCreateAction.scala @@ -0,0 +1,41 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetHiveTblCreateAction extends GetAction with DataAssetsAction{ + private var guid:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl",guid,"create") +} +object GetHiveTblCreateAction{ + def builder(): Builder = new Builder + class Builder private[GetHiveTblCreateAction]() { + private var guid:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setGuid(guid:String): Builder = { + this.guid = guid + this + } + + def build(): GetHiveTblCreateAction = { + val action = new GetHiveTblCreateAction + if(guid == null) throw new DataAssetsClientBuilderException("guid is needed!") + action.guid = guid + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblPartitionAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblPartitionAction.scala new file mode 100644 index 0000000000..9517512e88 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetHiveTblPartitionAction.scala @@ -0,0 +1,43 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetHiveTblPartitionAction extends GetAction with DataAssetsAction{ + + private var guid:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl",guid,"partition") +} +object GetHiveTblPartitionAction{ + def builder(): Builder = new Builder + + class Builder private[GetHiveTblPartitionAction]() { + private var guid:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setGuid(guid:String): Builder = { + this.guid = guid + this + } + + def build(): GetHiveTblPartitionAction = { + val action = new GetHiveTblPartitionAction + if(guid == null) throw new DataAssetsClientBuilderException("guid is needed!") + action.guid = guid + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetTblPartInfoByNameAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetTblPartInfoByNameAction.scala new file mode 100644 index 0000000000..b29b8b3160 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/GetTblPartInfoByNameAction.scala @@ -0,0 +1,53 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetTblPartInfoByNameAction extends GetAction with DataAssetsAction { + + + private var user: String = _ + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl", "partition", "name") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user +} + +object GetTblPartInfoByNameAction { + def builder(): Builder = new Builder + + class Builder private[GetTblPartInfoByNameAction]() { + private var user: String = _ + private var dbName: String = _ + private var tableName: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setDbName(dbName: String): Builder = { + this.dbName = dbName + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName + this + } + + + def build(): GetTblPartInfoByNameAction = { + val action = new GetTblPartInfoByNameAction + if (tableName == null || dbName == null) + throw new DataAssetsClientBuilderException("tableName or dbName can not be null") + + action.setParameter("tableName", tableName) + action.setParameter("dbName", dbName) + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblSizeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblSizeAction.scala new file mode 100644 index 0000000000..e8b0fb9ef5 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblSizeAction.scala @@ -0,0 +1,62 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class HiveTblSizeAction extends GetAction with DataAssetsAction { + + + private var user: String = _ + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl", "size") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user +} + +object HiveTblSizeAction { + def builder(): Builder = new Builder + + class Builder private[HiveTblSizeAction]() { + private var guid: String = _ + private var user: String = _ + private var dbName: String = _ + private var tableName: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setDbName(dbName: String): Builder = { + this.dbName = dbName + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName + this + } + + def setGuid(guid: String): Builder = { + this.guid = guid + this + } + + def build(): HiveTblSizeAction = { + val action = new HiveTblSizeAction + if (guid == null && (tableName == null || dbName == null)) + throw new DataAssetsClientBuilderException("That tableName or dbName being null and guid being null could not happen in the same time!") + if (guid != null) { + action.setParameter("guid", guid) + } + if (tableName != null && dbName != null) { + action.setParameter("tableName", tableName) + action.setParameter("dbName", dbName) + } + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblStatsAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblStatsAction.scala new file mode 100644 index 0000000000..cedbdc8473 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/HiveTblStatsAction.scala @@ -0,0 +1,68 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class HiveTblStatsAction extends GetAction with DataAssetsAction { + + private var dbName: String = _ + + private var tableName: String = _ + + private var guid: String = _ + + private var user: String = _ + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl", "stats") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user +} + +object HiveTblStatsAction { + def builder(): Builder = new Builder + + class Builder private[HiveTblStatsAction]() { + private var guid: String = _ + private var user: String = _ + private var dbName: String = _ + private var tableName: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setDbName(dbName: String): Builder = { + this.dbName = dbName + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName + this + } + + def setGuid(guid: String): Builder = { + this.guid = guid + this + } + + def build(): HiveTblStatsAction = { + val action = new HiveTblStatsAction + if (guid == null && (tableName == null || dbName == null)) + throw new DataAssetsClientBuilderException("That tableName or dbName being null and guid being null could not happen in the same time!") + if (guid != null) { + action.setParameter("guid", guid) + } + if (tableName != null && dbName != null) { + action.setParameter("tableName", tableName) + action.setParameter("dbName", dbName) + } + action.setUser(user) + action + } + } +} + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveDbAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveDbAction.scala new file mode 100644 index 0000000000..b3e57864fc --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveDbAction.scala @@ -0,0 +1,72 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import org.apache.linkis.httpclient.request.GetAction + +class SearchHiveDbAction extends GetAction with DataAssetsAction{ + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveDb","search") + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} +object SearchHiveDbAction{ + def builder(): Builder = new Builder + + class Builder private[SearchHiveDbAction]() { + private var classification:String=_ + private var query:String=_ + private var owner:String=_ + private var limit:Int=10 + private var offset:Int=0 + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setClassification(classification:String): Builder ={ + this.classification = classification + this + } + + def setQuery(query:String): Builder ={ + this.query = query + this + } + + def setOwner(owner:String):Builder={ + this.owner=owner + this + } + + def setLimit(limit:Int):Builder={ + this.limit=limit + this + } + + def setOffset(offset:Int):Builder={ + this.offset=offset + this + } + + def build(): SearchHiveDbAction = { + val action = new SearchHiveDbAction + + if(classification != null) action.setParameter("classification",classification) + if(query!=null) action.setParameter("query",query) + if(owner == null) action.setParameter("owner","") + else action.setParameter("owner",owner) + + action.setParameter("limit",limit) + action.setParameter("offset",offset) + + action.setUser(user) + action + } + } +} + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveTblAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveTblAction.scala new file mode 100644 index 0000000000..1a96c1d44d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchHiveTblAction.scala @@ -0,0 +1,79 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.QueryType +import org.apache.linkis.httpclient.request.GetAction + +class SearchHiveTblAction extends GetAction with DataAssetsAction{ + override def suffixURLs: Array[String] = Array("data-assets", "asset", "hiveTbl","search") + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} +object SearchHiveTblAction{ + def builder(): Builder = new Builder + + class Builder private[SearchHiveTblAction]() { + private var classification:String=_ + private var query:String=_ + private var owner:String=_ + private var limit:Int=10 + private var offset:Int=0 + private var precise: QueryType = QueryType.FUZZY + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setClassification(classification:String): Builder ={ + this.classification = classification + this + } + + def setQuery(query:String): Builder ={ + this.query = query + this + } + + def setOwner(owner:String):Builder={ + this.owner=owner + this + } + + def setPrecise(precise : QueryType):Builder={ + this.precise = precise + this + } + + def setLimit(limit:Int):Builder={ + this.limit=limit + this + } + + def setOffset(offset:Int):Builder={ + this.offset=offset + this + } + + def build(): SearchHiveTblAction = { + val action = new SearchHiveTblAction + + if(classification != null) action.setParameter("classification",classification) + if(query!=null) action.setParameter("query",query) + if(owner == null) action.setParameter("owner","") + else action.setParameter("owner",owner) + + action.setParameter("limit",limit) + action.setParameter("offset",offset) + action.setParameter("precise",precise.getCode) + + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchLabelAction.scala new file mode 100644 index 0000000000..031dc1ce32 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/SearchLabelAction.scala @@ -0,0 +1,59 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import org.apache.linkis.httpclient.request.GetAction + +class SearchLabelAction extends GetAction with DataAssetsAction{ + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels","search") + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} +object SearchLabelAction{ + def builder(): Builder = new Builder + + class Builder private[SearchLabelAction]() { + + private var query:String=_ + + private var limit:Int=10 + private var offset:Int=0 + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + + + def setQuery(query:String): Builder ={ + this.query = query + this + } + + + + def setLimit(limit:Int):Builder={ + this.limit=limit + this + } + + def setOffset(offset:Int):Builder={ + this.offset=offset + this + } + + def build(): SearchLabelAction = { + val action = new SearchLabelAction + if(query!=null) action.setParameter("query",query) + action.setParameter("limit",limit) + action.setParameter("offset",offset) + action.setUser(user) + action + } + } +} + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindLabelAction.scala new file mode 100644 index 0000000000..1118c4bba2 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindLabelAction.scala @@ -0,0 +1,86 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class UnBindLabelAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels", "unbind") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} + +object UnBindLabelAction { + def builder(): Builder = new Builder + + class Builder private[UnBindLabelAction] { + private var user: String = _ + + private var label: String = _ + + private var labelGuid: String = _ + + private var tableName: String = _ + + private var tableGuid: String = _ + + private var relationGuid: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName; + this + } + + def setLabel(label : String) :Builder={ + this.label = label + this + } + + def setTableGuid(tableGuid : String) : Builder = { + this.tableGuid = tableGuid + this + } + + def setLabelGuid(labelGuid : String) : Builder = { + this.labelGuid = labelGuid + this + } + + def setRelationGuid(relationGuid : String) : Builder = { + this.relationGuid = relationGuid + this + } + + def build(): UnBindLabelAction = { + var action = new UnBindLabelAction; + if ((tableName == null || label == null) && (labelGuid == null || tableGuid == null || relationGuid == null)) throw new DataAssetsClientBuilderException("tableName and label ,or tableGuid and labelGuid and relationGuid are needed!") + + action.setUser(user) + action.addRequestPayload("label", label) + action.addRequestPayload("tableName", tableName) + action.addRequestPayload("tableGuid", tableGuid) + action.addRequestPayload("labelGuid", labelGuid) + action.addRequestPayload("relationGuid", relationGuid) + action + } + } +} + + + + + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindModelTypeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindModelTypeAction.scala new file mode 100644 index 0000000000..ab123b4c73 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UnBindModelTypeAction.scala @@ -0,0 +1,87 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class UnBindModelTypeAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + private var modelName: String = _ + + private var modelType: String = _ + + private var tableName: String = _ + + private var guid: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "model", "unbind") +} + +object UnBindModelTypeAction { + + def builder() = new Builder + + class Builder private[UnBindModelTypeAction] { + private var user: String = _ + + private var modelName: String = _ + + private var modelType: ClassificationConstant = _ + + private var tableName: String = _ + + private var guid: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setModelName(modelName: String): Builder = { + this.modelName = modelName; + this + } + + def setModelType(modelType: ClassificationConstant): Builder = { + this.modelType = modelType; + this + } + + def setTableName(tableName: String): Builder = { + this.tableName = tableName; + this + } + + def setGuid(guid: String): Builder = { + this.guid = guid; + this + } + + def build(): UnBindModelTypeAction = { + var action = new UnBindModelTypeAction; + if (tableName == null && guid == null) throw new DataAssetsClientBuilderException("tableName or guid is needed!") + if (modelType == null || modelName == null) throw new DataAssetsClientBuilderException("modelType and modelName is needed!") + action.setUser(user) + action.guid = guid + action.modelName = modelName + action.modelType = modelType.getTypeCode + action.tableName = tableName + action.addRequestPayload("guid", action.guid) + action.addRequestPayload("modelName", action.modelName) + action.addRequestPayload("modelType", action.modelType) + action.addRequestPayload("tableName", action.tableName) + action + } + } +} + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateLabelAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateLabelAction.scala new file mode 100644 index 0000000000..e40e246ece --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateLabelAction.scala @@ -0,0 +1,57 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class UpdateLabelAction extends POSTAction with DataAssetsAction { + + private var user: String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "labels","modify") + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + +} +object UpdateLabelAction { + def builder(): Builder = new Builder + + class Builder private[UpdateLabelAction]() { + private var user: String = _ + private var name: String = _ + private var orgName: String = _ + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setName(name: String): Builder = { + this.name = name + this + } + + def setOrgName(orgName: String) : Builder = { + this.orgName = orgName + this + } + + def build(): UpdateLabelAction = { + val action = new UpdateLabelAction + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + if (orgName == null) throw new DataAssetsClientBuilderException("orgName is needed!") + action.setUser(user) + action.addRequestPayload("name", this.name) + action.addRequestPayload("orgName", this.orgName) + action + + } + } +} + + + diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateModelTypeAction.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateModelTypeAction.scala new file mode 100644 index 0000000000..66819ad6d7 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/request/UpdateModelTypeAction.scala @@ -0,0 +1,72 @@ +package com.webank.wedatasphere.dss.data.governance.request + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant +import com.webank.wedatasphere.dss.data.governance.exception.DataAssetsClientBuilderException +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.POSTAction + +class UpdateModelTypeAction extends POSTAction with DataAssetsAction{ + + + private var name:String= _ + + private var `type`:String= _ + + private var user:String = _ + + private var orgName:String = _ + + override def getRequestPayload: String = DWSHttpClient.jacksonJson.writeValueAsString(getRequestPayloads) + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = user + + override def suffixURLs: Array[String] = Array("data-assets", "asset", "model","type","modify") +} + +object UpdateModelTypeAction{ + def builder(): Builder = new Builder + + class Builder private[UpdateModelTypeAction]() { + private var user: String = _ + private var name:String= _ + private var `type`:ClassificationConstant= _ + private var orgName:String = _ + def setUser(user: String): Builder ={ + this.user = user + this + } + + def setName(name:String):Builder = { + this.name = name + this + } + + def setOrgName(orgName:String):Builder = { + this.orgName = orgName + this + } + + def setType(`type`:ClassificationConstant):Builder = { + this.`type` = `type`; + this; + } + + def build(): UpdateModelTypeAction = { + val action = new UpdateModelTypeAction + if(`type` == null) throw new DataAssetsClientBuilderException("type is needed!") + if (name == null) throw new DataAssetsClientBuilderException("name is needed!") + if (orgName == null) throw new DataAssetsClientBuilderException("orgName is needed!") + action.name = name + action.`type` = `type`.getTypeCode + action.orgName = orgName + action.setUser(user) + action.addRequestPayload("name",action.name) + action.addRequestPayload("type",action.`type`) + action.addRequestPayload("orgName",action.orgName) + action + } + } + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindLabelResult.scala new file mode 100644 index 0000000000..750148ceb3 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindLabelResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels/bind") +class BindLabelResult extends DWSResult{ + @BeanProperty var result: Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindModelTypeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindModelTypeResult.scala new file mode 100644 index 0000000000..c933afaf16 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/BindModelTypeResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/model/bind") +class BindModelTypeResult extends DWSResult{ + @BeanProperty var result: Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateLabelResult.scala new file mode 100644 index 0000000000..0184edda51 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateLabelResult.scala @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.CreateLabelInfo +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels") +class CreateLabelResult extends DWSResult{ + @BeanProperty var result: java.util.Map[String, Any] = _ + + + def getInfo : CreateLabelInfo ={ + val str = DWSHttpClient.jacksonJson.writeValueAsString(result) + DWSHttpClient.jacksonJson.readValue(str, classOf[CreateLabelInfo]) + } +} \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateModelTypeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateModelTypeResult.scala new file mode 100644 index 0000000000..b7de74ce42 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/CreateModelTypeResult.scala @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.{CreateModelTypeInfo, HiveSimpleInfo} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/model/type") +class CreateModelTypeResult extends DWSResult{ + @BeanProperty var result: java.util.Map[String, Any] = _ + + + def getInfo : CreateModelTypeInfo ={ + val str = DWSHttpClient.jacksonJson.writeValueAsString(result) + DWSHttpClient.jacksonJson.readValue(str, classOf[CreateModelTypeInfo]) + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteLabelResult.scala new file mode 100644 index 0000000000..6190890933 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteLabelResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels/delete") +class DeleteLabelResult extends DWSResult{ + @BeanProperty var result:Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteModelTypeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteModelTypeResult.scala new file mode 100644 index 0000000000..381538aa17 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/DeleteModelTypeResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/model/type/delete") +class DeleteModelTypeResult extends DWSResult{ + @BeanProperty var result:Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblBasicResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblBasicResult.scala new file mode 100644 index 0000000000..7eb1dc6d94 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblBasicResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + + +import scala.beans.BeanProperty +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/(\\S+)/basic") +class GetHiveTblBasicResult extends DWSResult{ + @BeanProperty var result:Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblCreateResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblCreateResult.scala new file mode 100644 index 0000000000..4089d43511 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblCreateResult.scala @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/(\\S+)/create") +class GetHiveTblCreateResult extends DWSResult{ + @BeanProperty var result:String = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartInfoByNameResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartInfoByNameResult.scala new file mode 100644 index 0000000000..7f5db0c3f0 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartInfoByNameResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.{HiveSimpleInfo, PartInfo} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/partition/name") +class GetHiveTblPartInfoByNameResult extends DWSResult{ + @BeanProperty var result:util.List[java.util.Map[String, Any]] = _ + + def getInfo: util.List[PartInfo] ={ + import scala.collection.JavaConverters._ + result.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[PartInfo]) + }).asJava + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartitionResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartitionResult.scala new file mode 100644 index 0000000000..ec7280f139 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/GetHiveTblPartitionResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/(\\S+)/partition") +class GetHiveTblPartitionResult extends DWSResult{ + @BeanProperty var result:util.List[java.util.Map[String, Any]] = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblSizeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblSizeResult.scala new file mode 100644 index 0000000000..fcd7a0edc1 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblSizeResult.scala @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/size") +class HiveTblSizeResult extends DWSResult{ + @BeanProperty var result: Long = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblStatsResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblStatsResult.scala new file mode 100644 index 0000000000..07ec55fcfa --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/HiveTblStatsResult.scala @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.{CreateModelTypeInfo, HiveTblStatsDTO} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/stats") +class HiveTblStatsResult extends DWSResult{ + @BeanProperty var result: java.util.Map[String, Any] = _ + + + def getInfo : HiveTblStatsDTO ={ + val str = DWSHttpClient.jacksonJson.writeValueAsString(result) + DWSHttpClient.jacksonJson.readValue(str, classOf[HiveTblStatsDTO]) + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveDbResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveDbResult.scala new file mode 100644 index 0000000000..b3760fc36c --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveDbResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.HiveSimpleInfo +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveDb/search") +class SearchHiveDbResult extends DWSResult{ + @BeanProperty var result:util.List[java.util.Map[String, Any]] = _ + + def getHiveList: util.List[HiveSimpleInfo] ={ + import scala.collection.JavaConverters._ + result.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[HiveSimpleInfo]) + }).asJava + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveTblResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveTblResult.scala new file mode 100644 index 0000000000..d79db99515 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchHiveTblResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.HiveSimpleInfo +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/hiveTbl/search") +class SearchHiveTblResult extends DWSResult{ + @BeanProperty var result:util.List[java.util.Map[String, Any]] = _ + + def getHiveList: util.List[HiveSimpleInfo] ={ + import scala.collection.JavaConverters._ + result.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[HiveSimpleInfo]) + }).asJava + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchLabelResult.scala new file mode 100644 index 0000000000..51f17913c1 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/SearchLabelResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.{HiveSimpleInfo, SearchLabelInfo} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels/search") +class SearchLabelResult extends DWSResult{ + @BeanProperty var result:util.List[java.util.Map[String, Any]] = _ + + def getLabelList: util.List[SearchLabelInfo] ={ + import scala.collection.JavaConverters._ + result.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[SearchLabelInfo]) + }).asJava + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindLabelResult.scala new file mode 100644 index 0000000000..a0b1fb7121 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindLabelResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels/unbind") +class UnBindLabelResult extends DWSResult{ + @BeanProperty var result: Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindModelTypeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindModelTypeResult.scala new file mode 100644 index 0000000000..a0be9615c2 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UnBindModelTypeResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/model/unbind") +class UnBindModelTypeResult extends DWSResult{ + @BeanProperty var result: Object = _ +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateLabelResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateLabelResult.scala new file mode 100644 index 0000000000..913ee3adb3 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateLabelResult.scala @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.UpdateLabelInfo +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/labels/modify") +class UpdateLabelResult extends DWSResult{ + @BeanProperty var result: java.util.Map[String, Any] = _ + + + def getInfo : UpdateLabelInfo ={ + val str = DWSHttpClient.jacksonJson.writeValueAsString(result) + DWSHttpClient.jacksonJson.readValue(str, classOf[UpdateLabelInfo]) + } +} \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateModelTypeResult.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateModelTypeResult.scala new file mode 100644 index 0000000000..2d9359e5c8 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/main/scala/com/webank/wedatasphere/dss/data/governance/response/UpdateModelTypeResult.scala @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.data.governance.response + +import com.webank.wedatasphere.dss.data.governance.entity.{CreateModelTypeInfo, UpdateModelTypeInfo} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/data-assets/asset/model/type/modify") +class UpdateModelTypeResult extends DWSResult{ + @BeanProperty var result: java.util.Map[String, Any] = _ + + + def getInfo : UpdateModelTypeInfo ={ + val str = DWSHttpClient.jacksonJson.writeValueAsString(result) + DWSHttpClient.jacksonJson.readValue(str, classOf[UpdateModelTypeInfo]) + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-client/src/test/scala/com/webank/wedatasphere/dss/data/governance/TestDataAssetsRemoteClient.scala b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/test/scala/com/webank/wedatasphere/dss/data/governance/TestDataAssetsRemoteClient.scala new file mode 100644 index 0000000000..67a61673f4 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-client/src/test/scala/com/webank/wedatasphere/dss/data/governance/TestDataAssetsRemoteClient.scala @@ -0,0 +1,108 @@ +package com.webank.wedatasphere.dss.data.governance + +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient +import com.webank.wedatasphere.dss.data.governance.request.{GetHiveTblPartitionAction, GetTblPartInfoByNameAction} +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder + +import java.util.concurrent.TimeUnit +import scala.Console.println + + +object TestDataAssetsRemoteClient { + def main(args: Array[String]): Unit = { + val clientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl("http://localhost:20082") + .connectionTimeout(30000) + .discoveryEnabled(false) + .discoveryFrequency(1,TimeUnit.MINUTES) + .loadbalancerEnabled(true) + .maxConnectionSize(5) + .retryEnabled(false) + .readTimeout(30000) + .setAuthenticationStrategy(null) + .setAuthTokenKey("hdfs") + .setAuthTokenValue("hdfs") + .setDWSVersion("v1") + .build() + + val dataAssetsClient = new LinkisDataAssetsRemoteClient(clientConfig) +// +// val searchHiveTblResult = dataAssetsClient.searchHiveTbl(SearchHiveTblAction.builder().setUser("hdfs").setQuery("").setLimit(10).setOffset(0).setOwner("undefined").build()).getHiveList +// println(searchHiveTblResult) +// +// val searchHiveDbResult = dataAssetsClient.searchHiveDb(SearchHiveDbAction.builder().setUser("hdfs").setQuery("").setLimit(10).setOffset(0).setOwner("undefined").build()).getHiveList +// println(searchHiveDbResult) +// +// val hiveTblBasicResult = dataAssetsClient +// .getHiveTblBasic(GetHiveTblBasicAction.builder().setUser("hdfs").setGuid("27920dc8-1eef-4d7d-9423-b5967d9e2d33").build()) +// .result +// println(hiveTblBasicResult) +// + val hiveTblPartitionResult = dataAssetsClient.getHiveTblPartition(GetHiveTblPartitionAction.builder().setUser("hdfs").setGuid("a3be4a97-6465-4c3d-adee-76dfa662e531").build()).result + println(hiveTblPartitionResult) +// +// val hiveTblCreateResult = dataAssetsClient.getHiveTblCreate(GetHiveTblCreateAction.builder().setUser("hdfs").setGuid("a3be4a97-6465-4c3d-adee-76dfa662e531").build()).result +// println(hiveTblCreateResult) +// +// val deleteModelTypeResult = dataAssetsClient.deleteModelType(DeleteModelTypeAction.builder().setUser("hdfs").setType(ClassificationConstant.INDICATOR).setName("test004").build()) +// println(deleteModelTypeResult.getResult) +// +// val createModelTypeResult = dataAssetsClient.createModelType(CreateModelTypeAction.builder().setUser("hdfs").setType(ClassificationConstant.INDICATOR).setName("test004").build()).getInfo +// println(createModelTypeResult) +// +// val updateModelTypeResult =dataAssetsClient.updateModelType(UpdateModelTypeAction.builder().setUser("hdfs").setType(ClassificationConstant.INDICATOR).setName("test000NEW").setOrgName("test000").build()) +// println(updateModelTypeResult.getInfo.getGuid) +// println(updateModelTypeResult.getInfo.getName) +// +// val bindResult = dataAssetsClient.bindModelType(BindModelTypeAction.builder() +// .setUser("hdfs") +// .setTableName("default.test02") +// .setModelName("test001") +// .setModelType(ClassificationConstant.INDICATOR).build()) +// println(bindResult.getResult) + +// val unBindResult = dataAssetsClient.unBindModelType(UnBindModelTypeAction.builder() +// .setUser("hdfs") +// .setTableName("default.test02") +// .setModelName("test001") +// .setModelType(ClassificationConstant.INDICATOR).build()) +// println(unBindResult.getResult) + +// val hiveTableSizeResult = dataAssetsClient.searchHiveTblSize(HiveTblSizeAction.builder() +// .setUser("hdfs") +// .setTableName("test04") +// .setDbName("default").build()) +// println(hiveTableSizeResult.getResult) +// val hiveTableStatsResult = dataAssetsClient.searchHiveTblStats(HiveTblStatsAction.builder() +// .setUser("hdfs") +// .setTableName("test04") +// .setDbName("default").build()) +// println(hiveTableStatsResult.getResult) + +// val searchLabelResult = dataAssetsClient.searchLabel(SearchLabelAction.builder().setUser("hdfs").setQuery("t").build()); +// println(searchLabelResult.getLabelList) +// +// val createLabelResult = dataAssetsClient.createLabel(CreateLabelAction.builder().setUser("hdfs").setName("label007").build()) +// println(createLabelResult.getInfo) +// +// TimeUnit.SECONDS.sleep(5) +// +// val bindLabelResult = dataAssetsClient.bindLabel(BindLabelAction.builder().setUser("hdfs").setLabel("term1").setTableName("linkis_db.linkis_test01").build()) +// println(bindLabelResult.getResult) +//// +// val unbindLabelResult = dataAssetsClient.unBindLabel(UnBindLabelAction.builder().setUser("hdfs").setLabel("term1").setTableName("linkis_db.linkis_test01").build()) +// println(unbindLabelResult.getResult) +// +// val updateLabelResult = dataAssetsClient.updateLabel(UpdateLabelAction.builder().setUser("hdfs").setName("label008").setOrgName("label007").build()) +// println(updateLabelResult.getInfo) +// +// val deleteLabelResult = dataAssetsClient.deleteLabel(DeleteLabelAction.builder().setUser("hdfs").setName("label008").build()) +// println(deleteLabelResult.getResult) + +// +// println(hiveTableStatsResult.getResult) + + val partInfo = dataAssetsClient.getHiveTblPartInfoByNameResult(GetTblPartInfoByNameAction.builder().setUser("hdfs").setDbName("linkis_db").setTableName("linkis_partitions").build()) + println(partInfo.getInfo) + } +} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/pom.xml b/dss-apps/dss-dataasset-management/dss-data-assets-server/pom.xml similarity index 69% rename from dss-apps/dss-data-governance/dss-data-governance-common/pom.xml rename to dss-apps/dss-dataasset-management/dss-data-assets-server/pom.xml index e67ec05f41..efbe274873 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-common/pom.xml +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/pom.xml @@ -3,18 +3,22 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> - dss + dss-dataasset-management com.webank.wedatasphere.dss - 1.1.0 - ../../../pom.xml + 1.2.0 4.0.0 - dss-data-governance-common + dss-data-assets-server - 2.1.0 + 2.2.0 + 8 + 8 + 2.7.2 + 1.2.0 + org.apache.linkis @@ -30,8 +34,36 @@ spring-cloud-starter-netflix-eureka-client org.springframework.cloud + + com.fasterxml.jackson.core + jackson-databind + + + com.fasterxml.jackson.core + jackson-core + + + com.sun.jersey + jersey-server + + + org.apache.commons + commons-math3 + + + xstream + com.thoughtworks.xstream + + + + org.apache.linkis + linkis-mybatis + ${linkis.version} + + + org.apache.atlas atlas-client-v2 @@ -42,26 +74,37 @@ guava - com.fasterxml.jackson.core - jackson-databind - - - com.fasterxml.jackson.core - jackson-core + com.sun.jersey + jersey-server + org.projectlombok lombok 1.18.16 compile + com.alibaba druid 1.1.9 + + + com.webank.wedatasphere.dss + dss-framework-workspace-client + ${dss.version} + + + + mysql + mysql-connector-java + 5.1.49 + + @@ -124,16 +167,15 @@ **/*.xml - - - - - - - - + + + + + + + + - \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/assembly/distribution.xml b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/assembly/distribution.xml similarity index 94% rename from dss-apps/dss-data-governance/dss-data-governance-common/src/main/assembly/distribution.xml rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/assembly/distribution.xml index 46d83d32f8..de98a179bb 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/assembly/distribution.xml +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/assembly/distribution.xml @@ -20,12 +20,12 @@ xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/2.3 http://maven.apache.org/xsd/assembly-1.1.2.xsd"> - dss-data-asset-server + dss-data-assets-server dir true - dss-data-asset-server + dss-data-assets-server @@ -40,7 +40,5 @@ - - diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasClient.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasClient.java new file mode 100644 index 0000000000..a9f5f1f469 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasClient.java @@ -0,0 +1,287 @@ +package com.webank.wedatasphere.dss.data.governance.atlas; + +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.sun.jersey.core.util.MultivaluedMapImpl; +import com.webank.wedatasphere.dss.data.governance.entity.GlossaryConstant; +import org.apache.atlas.AtlasClientV2; +import org.apache.atlas.AtlasServiceException; +import org.apache.atlas.model.discovery.SearchParameters; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; +import org.apache.atlas.model.glossary.relations.AtlasGlossaryHeader; +import org.apache.atlas.model.instance.AtlasRelatedObjectId; +import org.apache.atlas.model.lineage.AtlasLineageInfo; +import org.apache.atlas.model.typedef.AtlasClassificationDef; +import org.apache.atlas.model.typedef.AtlasTypesDef; +import org.apache.commons.configuration.Configuration; + +import javax.ws.rs.HttpMethod; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.Response; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; + + +public class AtlasClient extends AtlasClientV2 { + // Entities APIs + public static final String ENTITIES_API = BASE_URI + "entities/"; + public static final String UPDATE_ENTITY_ATTR_API = ENTITY_API + "guid/"; + public static final String SET_ENTITY_LABELS_BY_GUID_TEMPLATE = ENTITY_API + "/guid/%s/labels"; + public static final String GET_ENTITY_HEADER_BY_GUID_TEMPLATE = ENTITY_API + "/guid/{guid}/header"; + private final Gson gson = new Gson(); + + public AtlasClient(Configuration configuration,String[] baseUrl, String[] basicAuthUserNamePassword) { + super(configuration,baseUrl, basicAuthUserNamePassword); + } + + /** + * 获取所有的hive db实体 + */ + public String getHiveDbs() throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add("type", "hive_db"); + return callAPI(API_V3.GET_ENTITIES, String.class, queryParams); + } + + + public String getHiveDbsName(Integer limit, Integer offset) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add(QUERY, "hive_db"); + queryParams.add(LIMIT, limit+""); + queryParams.add(OFFSET, offset+""); + return callAPI(API_V2.DSL_SEARCH, String.class, queryParams); + } + + + /** + * 获取所有的hive table实体 + */ + public String getHiveTables() throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add("type", "hive_table"); + return callAPI(API_V3.GET_ENTITIES, String.class, queryParams); + } + + /** + * 获取表实体的血缘信息 + */ + public String getLineageInfoForString(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add("direction", direction.toString()); + queryParams.add("depth", String.valueOf(depth)); + + return callAPI(API_V2.LINEAGE_INFO, String.class, queryParams, guid); + } + + /** + * 获取实体信息 + */ + public String getEntityByGuidForString(String guid) throws AtlasServiceException { + return getEntityByGuidForString(guid, false, false); + } + + /** + * 获取实体信息 + */ + public String getEntityByGuidForString(String guid, boolean minExtInfo, boolean ignoreRelationships) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + + queryParams.add("minExtInfo", String.valueOf(minExtInfo)); + queryParams.add("ignoreRelationships", String.valueOf(ignoreRelationships)); + + return callAPI(API_V2.GET_ENTITY_BY_GUID, String.class, queryParams, guid); + } + + public String getEntitiesByGuidsForString(List guids) throws AtlasServiceException { + return getEntitiesByGuidsForString(guids, false, false); + } + + public String getEntitiesByGuidsForString(List guids, boolean minExtInfo, boolean ignoreRelationships) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + + queryParams.put("guid", guids); + queryParams.add("minExtInfo", String.valueOf(minExtInfo)); + queryParams.add("ignoreRelationships", String.valueOf(ignoreRelationships)); + + return callAPI(API_V2.GET_ENTITIES_BY_GUIDS, String.class, queryParams); + } + + /** + * 获取实体基本信息 + */ + public String getHeaderByIdForString(String guid) throws AtlasServiceException { + API api = new API(String.format(GET_ENTITY_HEADER_BY_GUID_TEMPLATE, guid), HttpMethod.GET, Response.Status.OK); + return callAPI(api, String.class,null); + } + + /** + * 根据关键字检索实体 + */ + public String basicSearchForString(final String typeName, final String classification, final String query, + final boolean excludeDeletedEntities, final int limit, final int offset) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add("typeName", typeName); + queryParams.add("classification", classification); + queryParams.add(QUERY, query); + queryParams.add("excludeDeletedEntities", String.valueOf(excludeDeletedEntities)); + queryParams.add(LIMIT, String.valueOf(limit)); + queryParams.add(OFFSET, String.valueOf(offset)); + + return callAPI(API_V2.BASIC_SEARCH, String.class, queryParams); + } + + + /** + * 创建子类型 + * @param name + * @param superType + * @return + * @throws AtlasServiceException + */ + public String createSubClassification(String name, String superType) throws AtlasServiceException { + AtlasClassificationDef atlasClassificationDef = new AtlasClassificationDef(); + atlasClassificationDef.setName(name); + atlasClassificationDef.setSuperTypes(Sets.newHashSet(superType)); + AtlasTypesDef atlasTypesDef = new AtlasTypesDef(); + atlasTypesDef.setClassificationDefs(Lists.newArrayList(atlasClassificationDef)); + MultivaluedMap params = new MultivaluedMapImpl(); + params.add("type","classification"); + return callAPI(AtlasClientV2.API_V2.CREATE_TYPE_DEFS, String.class, gson.toJson(atlasTypesDef),params); + } + + // Glossary APIs + public String getAllGlossaries() throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + + queryParams.add(LIMIT, "99999"); + queryParams.add(OFFSET, "0"); + + return callAPI(API_V2.GET_ALL_GLOSSARIES, String.class, queryParams); + } + + /** + * 新建分词 + * @param name + * @param rootGuid + * @return + * @throws AtlasServiceException + */ + public String createGlossaryTerm(String name,String rootGuid) throws AtlasServiceException { + AtlasGlossaryTerm glossaryTerm = new AtlasGlossaryTerm(); + glossaryTerm.setName(name); + AtlasGlossaryHeader anchor = new AtlasGlossaryHeader(); + anchor.setGlossaryGuid(rootGuid); + glossaryTerm.setAnchor(anchor); + return callAPI(API_V2.CREATE_GLOSSARY_TERM, String.class, gson.toJson(glossaryTerm)); + } + + /** + * 根据名称 查询分词详情 + * @param glossaryConstant + * @param name + * @return + * @throws AtlasServiceException + */ + public String attributeSearchByName(GlossaryConstant glossaryConstant, String name) throws AtlasServiceException { + return attributeSearch0(glossaryConstant.getAtlasType(),glossaryConstant.formatQuery(name), GlossaryConstant.ARR,1,0); + } + + public String attributeSearch0(String typeName, String name, String attrName, Integer limit, Integer offset) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + + queryParams.add("attrName", attrName); + queryParams.add("attrValuePrefix",name); + queryParams.add("typeName", typeName); + queryParams.add(LIMIT, limit+""); + queryParams.add(OFFSET, offset+""); + + return callAPI(API_V2.ATTRIBUTE_SEARCH, String.class, queryParams); + } + + + /** + * 实体绑定分词 + * @param termGuid + * @param entityGuids + * @throws AtlasServiceException + */ + public void assignTermToEntities0(String termGuid, List entityGuids) throws AtlasServiceException { + List relatedObjectIds = entityGuids.stream().map(entityGuid->{AtlasRelatedObjectId atlasRelatedObjectId = new AtlasRelatedObjectId(); + atlasRelatedObjectId.setGuid(entityGuid); + return atlasRelatedObjectId; + }).collect(Collectors.toList()); + callAPI(formatPathParameters(API_V2.ASSIGN_TERM_TO_ENTITIES, termGuid), (Class) null, gson.toJson(relatedObjectIds)); + } + + /** + * 解绑实体 + * @param termGuid + * @param + * @throws AtlasServiceException + */ + public void disassociateTermFromEntities0(String termGuid, List relatedObjectIds) throws AtlasServiceException { + callAPI(formatPathParameters(API_V2.DISASSOCIATE_TERM_FROM_ENTITIES, termGuid), (Class) null, gson.toJson(relatedObjectIds)); + } + + /** + * 根据关键字检索实体 + */ + public String basicSearchPostForString(final String typeName, final String classification, final String query,final String termName, + final boolean excludeDeletedEntities, final int limit, final int offset) throws AtlasServiceException { + SearchParameters searchParameters = new SearchParameters(); + Set returnColumnsParams = Sets.newHashSet("aliases", "parameters", "lastAccessTime","comment"); + searchParameters.setTypeName(typeName); + searchParameters.setClassification(classification); + searchParameters.setQuery(query); + searchParameters.setLimit(limit); + searchParameters.setTermName(termName); + searchParameters.setOffset(offset); + searchParameters.setIncludeSubClassifications(true); + searchParameters.setIncludeSubTypes(true); + searchParameters.setIncludeClassificationAttributes(true); + searchParameters.setExcludeDeletedEntities(excludeDeletedEntities); + searchParameters.setAttributes(returnColumnsParams); + return callAPI(AtlasClientV2.API_V2.FACETED_SEARCH, String.class, gson.toJson(searchParameters),new MultivaluedMapImpl()); + } + + /** + * 修改实体的注释 + */ + public String modifyComment(String guid,String commentStr) throws AtlasServiceException { + MultivaluedMap queryParams = new MultivaluedMapImpl(); + queryParams.add("name", "comment"); + + return callAPI(API_V3.UPDATE_ENTITY_ATTR,String.class,commentStr,queryParams,guid); + } + + /** + * 获取分词详情 + * @param termGuid + * @return + * @throws AtlasServiceException + */ + public String getGlossaryTerm0(String termGuid) throws AtlasServiceException { + + return callAPI(API_V2.GET_GLOSSARY_TERM, String.class, null, termGuid); + } + + /** + * 设置实体的标签 + */ + public void setLabels(String guid, Set labels) throws AtlasServiceException { + API api = new API(String.format(SET_ENTITY_LABELS_BY_GUID_TEMPLATE, guid), HttpMethod.POST, Response.Status.NO_CONTENT); + callAPI(api, (Class)null, labels); + } + + public static class API_V3 extends API { + public static final API_V3 GET_ENTITIES = new API_V3(ENTITIES_API, HttpMethod.GET, Response.Status.OK); + public static final API_V3 UPDATE_ENTITY_ATTR = new API_V3(UPDATE_ENTITY_ATTR_API,HttpMethod.PUT,Response.Status.OK); + + private API_V3(String path, String method, Response.Status status) { + super(path, method, status); + } + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasService.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasService.java new file mode 100644 index 0000000000..210465fa26 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/atlas/AtlasService.java @@ -0,0 +1,365 @@ +package com.webank.wedatasphere.dss.data.governance.atlas; + +import com.google.common.collect.Lists; +import com.google.gson.*; +import com.google.gson.reflect.TypeToken; +import com.sun.jersey.core.util.MultivaluedMapImpl; +import com.webank.wedatasphere.dss.data.governance.conf.GovernanceConf; +import com.webank.wedatasphere.dss.data.governance.entity.GlossaryConstant; +import com.webank.wedatasphere.dss.data.governance.entity.RelatedObjectId; +import com.webank.wedatasphere.dss.data.governance.exception.DataGovernanceException; +import org.apache.atlas.ApplicationProperties; +import org.apache.atlas.AtlasClientV2; +import org.apache.atlas.AtlasException; +import org.apache.atlas.AtlasServiceException; +import org.apache.atlas.model.AtlasBaseModelObject; +import org.apache.atlas.model.discovery.AtlasSearchResult; +import org.apache.atlas.model.glossary.AtlasGlossary; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; +import org.apache.atlas.model.instance.*; +import org.apache.atlas.model.lineage.AtlasLineageInfo; +import org.apache.atlas.model.typedef.AtlasClassificationDef; +import org.apache.atlas.model.typedef.AtlasTypesDef; +import org.apache.commons.configuration.Configuration; +import org.apache.commons.lang3.StringUtils; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import java.lang.reflect.Type; +import java.util.*; +import java.util.stream.Collectors; + + +@Service("atlasService") +public class AtlasService { + private final AtlasClient atlasClient; + private final Gson gson; + + public AtlasService() throws AtlasException { + Configuration configuration = ApplicationProperties.get("atlas-application.properties"); + String[] urls = new String[]{GovernanceConf.ATLAS_REST_ADDRESS.getValue()}; + String[] basicAuthUsernamePassword = new String[]{GovernanceConf.ATLAS_USERNAME.getValue(), GovernanceConf.ATLAS_PASSWORD.getValue()}; + + atlasClient = new AtlasClient(configuration, urls, basicAuthUsernamePassword); + + + GsonBuilder builder = new GsonBuilder(); + // Register an adapter to manage the date types as long values + builder.registerTypeAdapter(Date.class, new JsonDeserializer() { + @Override + public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException { + return new Date(json.getAsJsonPrimitive().getAsLong()); + } + }); + + gson = builder.create(); + } + + /** + * hive db数量 + */ + public Long getHiveDbCnt() throws AtlasServiceException { + String jsonStr = atlasClient.getHiveDbs(); + if (jsonStr != null && jsonStr.trim() != "") { + JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class); + if (jsonObject != null) { + return jsonObject.get("count").getAsLong(); + } else { + return 0l; + } + } else { + return 0l; + } + } + + /** + * hive db + */ + public String getHiveDbsName(Integer limit, Integer offset) throws AtlasServiceException { + return atlasClient.getHiveDbsName(limit,offset); + } + + /** + * hive table数量 + */ + public long getHiveTableCnt() throws AtlasServiceException { + String jsonStr = atlasClient.getHiveTables(); + if (jsonStr != null && jsonStr.trim() != "") { + JsonObject jsonObject = gson.fromJson(jsonStr, JsonObject.class); + if (jsonObject != null) { + return jsonObject.get("count").getAsLong(); + } else { + return 0l; + } + } else { + return 0l; + } + } + + + /** + * 根据关键字搜索hive table + */ + public List searchHiveTable(String classification, String query, + boolean excludeDeletedEntities, int limit, int offset) throws AtlasServiceException { + String jsonStr = atlasClient.basicSearchForString("hive_table", classification, query, excludeDeletedEntities, limit, offset); + AtlasSearchResult atlasSearchResult = gson.fromJson(jsonStr, AtlasSearchResult.class); + + return atlasSearchResult.getEntities(); + } + + /** + * 根据关键字搜索hive table + */ + public List searchHiveTable0(String classification, String query, String termName, + boolean excludeDeletedEntities, int limit, int offset) throws AtlasServiceException { + + String jsonStr = atlasClient.basicSearchPostForString("hive_table", classification, query, termName , excludeDeletedEntities, limit, offset); + AtlasSearchResult atlasSearchResult = gson.fromJson(jsonStr, AtlasSearchResult.class);//atlasClient.facetedSearch(searchParameters); + + //实体绑定类型 + //atlasClient.addClassification(); + //创建子类型 + //atlasClient.createAtlasTypeDefs() + return atlasSearchResult.getEntities(); + } + + /** + * 创建子类型 + * + * @param name + * @param superType + * @return + * @throws AtlasServiceException + */ + public AtlasClassificationDef createSubClassification(String name, String superType) throws AtlasServiceException { + String jsonStr = atlasClient.createSubClassification(name, superType); + AtlasTypesDef atlasTypesDef = gson.fromJson(jsonStr, AtlasTypesDef.class); + return atlasTypesDef.getClassificationDefs().get(0); + } + + /** + * 删除指定模型类型 + * + * @param name + * @throws AtlasServiceException + */ + public void deleteClassification(String name) throws AtlasServiceException { + atlasClient.deleteTypeByName(name); + } + + + /** + * 绑定类型 + * + * @param typeName + * @param guid + * @throws AtlasServiceException + */ + public void addClassification(String typeName, String guid, boolean propagate) throws AtlasServiceException { + AtlasClassification atlasClassification = new AtlasClassification(); + atlasClassification.setTypeName(typeName); + atlasClassification.setPropagate(propagate); + atlasClassification.setRemovePropagationsOnEntityDelete(false); + + ClassificationAssociateRequest request = new ClassificationAssociateRequest(Lists.newArrayList(guid), atlasClassification); + atlasClient.callAPI(AtlasClientV2.API_V2.ADD_CLASSIFICATION, (Class) null, gson.toJson(request), new MultivaluedMapImpl()); + } + + /** + * 解绑类型 + * + * @param guid + * @param typeName + * @throws AtlasServiceException + */ + public void deleteClassification(String guid, String typeName) throws AtlasServiceException { + atlasClient.deleteClassification(guid, typeName); + } + + /** + * 获取hive table对象 + */ + public AtlasEntity getHiveTbl(String guid) throws AtlasServiceException { + String jsonStr = atlasClient.getEntityByGuidForString(guid, false, false); + + AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); + + return atlasEntityWithExtInfo.getEntity(); + } + + /** + * 获取hive column对象 + */ + public AtlasEntity getHiveColumn(String guid) throws AtlasServiceException { + String jsonStr = atlasClient.getEntityByGuidForString(guid, true, true); + + AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); + + return atlasEntityWithExtInfo.getEntity(); + } + + /** + * 获取多个hive column对象 + */ + public List getHiveColumnsByGuids(List guids) throws AtlasServiceException { + String jsonStr = atlasClient.getEntitiesByGuidsForString(guids, true, true); + AtlasEntity.AtlasEntitiesWithExtInfo atlasEntitiesWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntitiesWithExtInfo.class); + + return atlasEntitiesWithExtInfo.getEntities(); + } + + + /** + * 修改实体的注释 + */ + public void modifyComment(String guid, String commentStr) throws AtlasServiceException { + atlasClient.modifyComment(guid, commentStr); + } + + /** + * 设置实体的标签 + */ + public void setLabels(String guid, Set labels) throws AtlasServiceException { + atlasClient.setLabels(guid, labels); + } + + /** + * 获取根glossary guid + * + * @return + * @throws AtlasServiceException + */ + public Optional getRootGlossaryGuid(GlossaryConstant glossaryConstant) throws AtlasServiceException { + String result = atlasClient.getAllGlossaries(); + List glossaries = gson.fromJson(result, new TypeToken>() { + }.getType()); + Optional root = glossaries.stream().filter(atlasGlossary -> StringUtils.equals(atlasGlossary.getName(), glossaryConstant.getRoot())).findFirst(); + return root.map(AtlasBaseModelObject::getGuid); + } + + /** + * 新建标签 + * + * @param labelName + * @return + * @throws AtlasServiceException + */ + public AtlasGlossaryTerm createLabel(String labelName) throws AtlasServiceException { + String result = atlasClient.createGlossaryTerm(labelName, getRootGlossaryGuid(GlossaryConstant.LABEL).get()); + return gson.fromJson(result, AtlasGlossaryTerm.class); + } + + /** + * 绑定标签 + * @param termGuid + * @param entityGuids + * @throws AtlasServiceException + */ + public void assignTermToEntities(String termGuid,List entityGuids) throws AtlasServiceException{ + atlasClient.assignTermToEntities0(termGuid,entityGuids); + } + + /** + * 解绑实体 + * @param termGuid + * @param + * @throws AtlasServiceException + */ + public void disassociateTermFromEntities(String termGuid, List relatedObjectIds) throws AtlasServiceException { + atlasClient.disassociateTermFromEntities0(termGuid,relatedObjectIds.stream().map( + relatedObjectId -> { + AtlasRelatedObjectId atlasRelatedObjectId = new AtlasRelatedObjectId(); + atlasRelatedObjectId.setGuid(relatedObjectId.getGuid()); + atlasRelatedObjectId.setRelationshipGuid(relatedObjectId.getRelationshipGuid()); + return atlasRelatedObjectId; + } + ).collect(Collectors.toList())); + } + + + + /** + * 删除标签 + * @param labelName + * @throws AtlasServiceException + */ + public void deleteLabel(String labelName) throws Exception{ + Optional optional = getTermGuid(GlossaryConstant.LABEL,labelName); + if (!optional.isPresent()){ + throw new DataGovernanceException(23000, labelName + "标签不存在"); + } + atlasClient.deleteGlossaryTermByGuid(optional.get()); + } + + /** + * 获取分词guid + * @param glossaryConstant + * @param name + * @return + * @throws AtlasServiceException + */ + public Optional getTermGuid(GlossaryConstant glossaryConstant, String name) throws AtlasServiceException { + String result = atlasClient.attributeSearchByName(glossaryConstant, name); + AtlasSearchResult atlasSearchResult = gson.fromJson(result, AtlasSearchResult.class); + return !CollectionUtils.isEmpty(atlasSearchResult.getEntities()) ? + Optional.ofNullable(atlasSearchResult.getEntities().get(0).getGuid()) : Optional.empty(); + } + + public List listLabels(String query,Integer limit,Integer offset) throws AtlasServiceException{ + String result = atlasClient.attributeSearch0(GlossaryConstant.LABEL.getAtlasType(),query,GlossaryConstant.ARR,limit,offset); + AtlasSearchResult atlasSearchResult = gson.fromJson(result, AtlasSearchResult.class); + return !CollectionUtils.isEmpty(atlasSearchResult.getEntities())?atlasSearchResult.getEntities():Lists.newArrayList(); + } + + + /** + * 血缘信息 + */ + public AtlasLineageInfo getLineageInfo(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws AtlasServiceException { + String jsonStr = atlasClient.getLineageInfoForString(guid, direction, depth); + AtlasLineageInfo atlasLineageInfo = gson.fromJson(jsonStr, AtlasLineageInfo.class); + return atlasLineageInfo; + } + + /** + * 根据guid来获取hive tbl名称: db.table + */ + public String getHiveTblNameById(String guid) throws AtlasServiceException { + String jsonStr = atlasClient.getHeaderByIdForString(guid); + AtlasEntityHeader atlasEntityHeader = gson.fromJson(jsonStr, AtlasEntityHeader.class); + + return atlasEntityHeader.getAttribute("qualifiedName").toString().split("@")[0]; + } + + /** + * 根据guid来获取hive tbl名称 和 是否分区表 + */ + public Map getHiveTblNameAndIsPartById(String guid) throws AtlasServiceException { + Map result = new HashMap<>(2); + + String jsonStr = atlasClient.getEntityByGuidForString(guid, true, false); + AtlasEntity.AtlasEntityWithExtInfo atlasEntityWithExtInfo = gson.fromJson(jsonStr, AtlasEntity.AtlasEntityWithExtInfo.class); + + result.put("tblName", atlasEntityWithExtInfo.getEntity().getAttribute("qualifiedName").toString().split("@")[0]); + result.put("isPartition", ((List) atlasEntityWithExtInfo.getEntity().getAttribute("partitionKeys")).size() > 0); + + return result; + } + + /** + * 获取hive db对象 + */ + public List searchHiveDb(String classification, String query, + boolean excludeDeletedEntities, int limit, int offset) throws AtlasServiceException { + String jsonStr = atlasClient.basicSearchPostForString("hive_db", classification, query,null, excludeDeletedEntities, limit, offset); + AtlasSearchResult atlasSearchResult = gson.fromJson(jsonStr, AtlasSearchResult.class); + + return atlasSearchResult.getEntities(); + } + + public AtlasGlossaryTerm getGlossaryTermDetail(String termGuid) throws AtlasServiceException { + String detail = atlasClient.getGlossaryTerm0(termGuid); + return gson.fromJson(detail,AtlasGlossaryTerm.class); + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientCommonConfig.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientCommonConfig.java new file mode 100644 index 0000000000..2a91c38828 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientCommonConfig.java @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.dss.data.governance.conf; + +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient; +import org.apache.linkis.httpclient.authentication.AuthenticationStrategy; +import org.apache.linkis.httpclient.dws.config.DWSClientConfig; +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import java.util.concurrent.TimeUnit; + +@Configuration +public class ClientCommonConfig { + + @Bean + public LinkisWorkSpaceRemoteClient linkisWorkSpaceRemoteClient() throws Exception { + AuthenticationStrategy authenticationStrategy = (AuthenticationStrategy) Class.forName(DataWorkspaceRemoteConfig.AUTHENTICATION_STRATEGY.getValue()).newInstance(); + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) DWSClientConfigBuilder.newBuilder() + .addServerUrl(DataWorkspaceRemoteConfig.SERVER_URL.getValue()) + .connectionTimeout(DataWorkspaceRemoteConfig.CONNECTION_TIMEOUT.getValue()) + .discoveryEnabled(DataWorkspaceRemoteConfig.DISCOVERY_ENABLED.getValue()) + .discoveryFrequency(DataWorkspaceRemoteConfig.DISCOVERY_FREQUENCY_PERIOD.getValue(), TimeUnit.MINUTES) + .loadbalancerEnabled(DataWorkspaceRemoteConfig.LOAD_BALANCER_ENABLED.getValue()) + .maxConnectionSize(DataWorkspaceRemoteConfig.MAX_CONNECTION_SIZE.getValue()) + .retryEnabled(DataWorkspaceRemoteConfig.RETRY_ENABLED.getValue()) + .readTimeout(DataWorkspaceRemoteConfig.READ_TIMEOUT.getValue()) + .setAuthenticationStrategy(authenticationStrategy) + .setAuthTokenKey(DataWorkspaceRemoteConfig.AUTHTOKEN_KEY.getValue()) + .setAuthTokenValue(DataWorkspaceRemoteConfig.AUTHTOKEN_VALUE.getValue()) + ).setDWSVersion(DataWorkspaceRemoteConfig.DWS_VERSION.getValue()) + .build(); + return new LinkisWorkSpaceRemoteClient(clientConfig); + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientStrategy.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientStrategy.java new file mode 100644 index 0000000000..6f1ab65d61 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/ClientStrategy.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.data.governance.conf; + + +public enum ClientStrategy { + TOKEN("token"), + STATIC("static"); + + private final String code; + + ClientStrategy(String code) { + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/DataWorkspaceRemoteConfig.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/DataWorkspaceRemoteConfig.java new file mode 100644 index 0000000000..9eba05e76e --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/DataWorkspaceRemoteConfig.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.data.governance.conf; + + +import org.apache.linkis.common.conf.CommonVars; + +public class DataWorkspaceRemoteConfig { + public static final CommonVars SERVER_URL = CommonVars.apply("wds.workspace.client.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.workspace.client.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.workspace.client.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.workspace.client.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.workspace.client.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.workspace.client.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.workspace.client.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.workspace.client.readtimeout", 30000L); + public static final CommonVars AUTHENTICATION_STRATEGY = CommonVars.apply("wds.workspace.client.authenticationStrategy", ""); + + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.workspace.client.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.workspace.client.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.workspace.client.dws.version", ""); + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/GovernanceConf.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/GovernanceConf.java new file mode 100644 index 0000000000..9769d05482 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/conf/GovernanceConf.java @@ -0,0 +1,44 @@ +/* + * + * * Copyright 2019 WeBank + * * + * * 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 com.webank.wedatasphere.dss.data.governance.conf; + +import org.apache.linkis.common.conf.CommonVars; + + +public interface GovernanceConf { + CommonVars ATLAS_REST_ADDRESS = CommonVars.apply("atlas.rest.address"); + CommonVars ATLAS_USERNAME = CommonVars.apply("atlas.username"); + CommonVars ATLAS_PASSWORD = CommonVars.apply("atlas.password"); + //CommonVars METASTORE_DATASOURCE_PASSWORD = CommonVars.apply("atlas.client.readTimeoutMSecs"); + //CommonVars METASTORE_DATASOURCE_PASSWORD = CommonVars.apply("atlas.client.connectTimeoutMSecs"); + CommonVarsATLAS_ROOT_INDICATOR = CommonVars.apply("atlas.root.indicator"); + CommonVarsATLAS_ROOT_MEASURE = CommonVars.apply("atlas.root.measure"); + CommonVarsATLAS_ROOT_DIMENSION = CommonVars.apply("atlas.root.dimension"); + CommonVarsATLAS_ROOT_LAYER = CommonVars.apply("atlas.root.layer"); + CommonVarsATLAS_ROOT_THEME = CommonVars.apply("atlas.root.theme"); + + CommonVarsATLAS_ROOT_LABEL = CommonVars.apply("atlas.root.label"); + CommonVarsATLAS_ROOT_COLLECTION = CommonVars.apply("atlas.root.collection"); + + + CommonVars METASTORE_DATASOURCE_DRIVER = CommonVars.apply("metastore.datasource.driver", "com.mysql.jdbc.Driver"); + CommonVars METASTORE_DATASOURCE_URL = CommonVars.apply("metastore.datasource.url"); + CommonVars METASTORE_DATASOURCE_USERNAME = CommonVars.apply("metastore.datasource.username"); + CommonVars METASTORE_DATASOURCE_PASSWORD = CommonVars.apply("metastore.datasource.password"); +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/MetaInfoMapper.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/MetaInfoMapper.java new file mode 100644 index 0000000000..9641cef8eb --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/MetaInfoMapper.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.data.governance.dao; + +import com.webank.wedatasphere.dss.data.governance.entity.PartInfo; +import com.webank.wedatasphere.dss.data.governance.entity.TableInfo; +import com.webank.wedatasphere.dss.data.governance.exception.DAOException; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.sql.SQLException; +import java.util.List; + + +@Mapper +public interface MetaInfoMapper { + Long getTableStorage() throws DAOException; + List getTop10Table() throws DAOException; + int getTableInfo(@Param("dbName") String dbName,@Param("tableName") String tableName,@Param("isPartTable") Boolean isPartTable) throws DAOException; + List getPartInfo(@Param("dbName") String dbName, @Param("tableName") String tableName) throws DAOException; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableColumnCountQueryMapper.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableColumnCountQueryMapper.java new file mode 100644 index 0000000000..c96bad9a6a --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableColumnCountQueryMapper.java @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.dss.data.governance.dao; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.webank.wedatasphere.dss.data.governance.entity.TableColumnCount; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface TableColumnCountQueryMapper extends BaseMapper { + + String querySql = "select tbl_db.db_name as db_name,tbl_db.tbl_name as tbl_name,tbl_db.tbl_id as tbl_id , count(*) as column_count \n" + + "from COLUMNS_V2 as col\n" + + " left join CDS C on C.CD_ID = col.CD_ID\n" + + " right join (select t.TBL_NAME as tbl_name,t.TBL_ID as tbl_id, s.CD_ID as cd_id ,d.DB_ID as db_id ,d.NAME as db_name from TBLS as t left join SDS as s on t.SD_ID = s.SD_ID left join DBS d on t.DB_ID = d.DB_ID) as tbl_db\n" + + " on tbl_db.cd_id = col.CD_ID\n" + + " ${ew.customSqlSegment} " + + " group by tbl_db.tbl_id "; + + String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}"; + + + @Select(querySql) + List query(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizeInfoMapper.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizeInfoMapper.java new file mode 100644 index 0000000000..2d0d526059 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizeInfoMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.dao; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.webank.wedatasphere.dss.data.governance.entity.TableSizeInfo; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface TableSizeInfoMapper extends BaseMapper { + String querySql = "select tbls.TBL_ID as id,d.NAME as db_name,tbls.TBL_NAME as tbl_name, tp.PARAM_KEY as param_key, tp.PARAM_VALUE as param_value\n" + + "from TBLS as tbls left join TABLE_PARAMS as tp on tbls.TBL_ID = tp.TBL_ID left join DBS d on tbls.DB_ID = d.DB_ID \n";; + + String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}"; + + + @Select(wrapperSql) + List query(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizePartitionInfoMapper.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizePartitionInfoMapper.java new file mode 100644 index 0000000000..8c00d70765 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/TableSizePartitionInfoMapper.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.data.governance.dao; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.webank.wedatasphere.dss.data.governance.entity.TablePartitionSizeInfo; +import com.webank.wedatasphere.dss.data.governance.entity.TableSizeInfo; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface TableSizePartitionInfoMapper extends BaseMapper { + + String querySql = "select tbl_db.TBL_ID as id, tbl_db.tbl_name as tbl_name, tbl_db.db_name as db_name, p.PART_ID as part_id,p.LAST_ACCESS_TIME as last_access_time,p.SD_ID as sd_id,pp.PARAM_KEY as param_key,pp.PARAM_VALUE as param_value from PARTITIONS AS p left join PARTITION_PARAMS pp on pp.PART_ID = p.PART_ID left join\n" + + "(select tbls.TBL_ID as tbl_id, tbls.TBL_NAME as tbl_name, db.NAME as db_name from TBLS as tbls, DBS as db where tbls.DB_ID = db.DB_ID ) as tbl_db on tbl_db.tbl_id = p.TBL_ID\n"; + + String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}"; + + + @Select(wrapperSql) + List query(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/WorkspaceInfoMapper.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/WorkspaceInfoMapper.java similarity index 63% rename from dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/WorkspaceInfoMapper.java rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/WorkspaceInfoMapper.java index 69091da499..33c9c97ff5 100644 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/dao/WorkspaceInfoMapper.java +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/WorkspaceInfoMapper.java @@ -1,16 +1,18 @@ -package com.webank.wedatasphere.dss.data.asset.dao; +package com.webank.wedatasphere.dss.data.governance.dao; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Param; import org.apache.ibatis.annotations.Select; - import java.util.List; + @Mapper public interface WorkspaceInfoMapper { - @Select("select distinct username from dss_workspace_user_role where workspace_id= #{workspaceId} and username like #{search} ") + @Select("select username from dss_workspace_user where workspace_id= #{workspaceId} and username like #{search} ") List getWorkspaceUsersName (@Param("workspaceId") int workspaceId,@Param("search") String search); + + } diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/impl/MetaInfoMapperImpl.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/impl/MetaInfoMapperImpl.java new file mode 100644 index 0000000000..6ec20f2b07 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dao/impl/MetaInfoMapperImpl.java @@ -0,0 +1,140 @@ +package com.webank.wedatasphere.dss.data.governance.dao.impl; + +import com.webank.wedatasphere.dss.data.governance.dao.MetaInfoMapper; +import com.webank.wedatasphere.dss.data.governance.entity.PartInfo; +import com.webank.wedatasphere.dss.data.governance.entity.TableInfo; +import com.webank.wedatasphere.dss.data.governance.exception.DAOException; +import com.webank.wedatasphere.dss.data.governance.utils.DataSourceUtil; +import com.webank.wedatasphere.dss.data.governance.utils.DateUtil; + +import javax.sql.DataSource; +import java.sql.Connection; +import java.sql.PreparedStatement; +import java.sql.ResultSet; +import java.sql.SQLException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.List; +import java.util.stream.Collectors; + + +public class MetaInfoMapperImpl implements MetaInfoMapper { + @Override + public Long getTableStorage() throws DAOException { + DataSource dataSource = DataSourceUtil.getDataSource(); + + long num = 0; + PreparedStatement ps = null; + ResultSet rs = null; + try (Connection con = dataSource.getConnection()) { + String sql = "select SUM(PARAM_VALUE) from TABLE_PARAMS WHERE PARAM_KEY='totalSize'"; + ps = con.prepareStatement(sql); + rs = ps.executeQuery(); + while (rs.next()) { + num = rs.getLong(1); + } + String sql2 = "select SUM(PARAM_VALUE) from PARTITION_PARAMS WHERE PARAM_KEY='totalSize'"; + ps = con.prepareStatement(sql2); + rs = ps.executeQuery(); + while (rs.next()) { + num = num + rs.getLong(1); + } + } catch (SQLException e) { + throw new DAOException(23001, e.getMessage()); + } + return num; + } + + @Override + public List getTop10Table() throws DAOException { + DataSource dataSource = DataSourceUtil.getDataSource(); + + PreparedStatement ps = null; + ResultSet rs = null; + List tableInfos = new ArrayList<>(); + try (Connection con = dataSource.getConnection();) { + String sql = "select DBS.NAME ,TBLS.TBL_NAME,TABLE_PARAMS.PARAM_VALUE as totalSize from DBS, TBLS,TABLE_PARAMS where TBLS.TBL_ID=TABLE_PARAMS.TBL_ID AND TBLS.DB_ID=DBS.DB_ID AND TABLE_PARAMS.PARAM_KEY='totalSize' order by totalSize DESC limit 10"; + ps = con.prepareStatement(sql); + rs = ps.executeQuery(); + while (rs.next()) { + TableInfo tableinfo = new TableInfo(); + tableinfo.setTableName(rs.getString(1) + "." + rs.getString(2)); + tableinfo.setStorage(rs.getString(3)); + tableInfos.add(tableinfo); + } + String sql2 = "select DBS.NAME ,TBLS.TBL_NAME,SUM(PARTITION_PARAMS.PARAM_VALUE) as totalSize from DBS,TBLS,PARTITIONS ,PARTITION_PARAMS where DBS.DB_ID=TBLS.DB_ID AND TBLS.TBL_ID=PARTITIONS.TBL_ID AND PARTITIONS.PART_ID =PARTITION_PARAMS.PART_ID AND PARTITION_PARAMS.PARAM_KEY='totalSize' group by TBLS.TBL_NAME order by totalSize desc limit 10"; + ps = con.prepareStatement(sql2); + rs = ps.executeQuery(); + while (rs.next()) { + TableInfo tableinfo = new TableInfo(); + tableinfo.setTableName(rs.getString(1) + "." + rs.getString(2)); + tableinfo.setStorage(rs.getString(3)); + tableInfos.add(tableinfo); + } + + tableInfos.sort((o1, o2) -> { + long result = Long.parseLong(o2.getStorage()) - Long.parseLong(o1.getStorage()); + return Long.compare(result, 0L); + }); + } catch (SQLException e) { + throw new DAOException(23001, e.getMessage()); + } + + return tableInfos.stream().limit(10).collect(Collectors.toList()); + } + + @Override + public int getTableInfo(String dbName, String tableName, Boolean isPartTable) throws DAOException { + DataSource dataSource = DataSourceUtil.getDataSource(); + PreparedStatement ps = null; + ResultSet rs = null; + int res = 0; + try (Connection con = dataSource.getConnection()) { + String sql = null; + if (isPartTable == false) { + sql = "select TABLE_PARAMS.PARAM_VALUE as totalSize from DBS, TBLS,TABLE_PARAMS where TBLS.TBL_ID=TABLE_PARAMS.TBL_ID AND TBLS.DB_ID=DBS.DB_ID AND TABLE_PARAMS.PARAM_KEY='totalSize' AND DBS.NAME=" + "'" + dbName + "' AND TBLS.TBL_NAME=" + "'" + tableName + "'"; + } else { + + sql = "select SUM(PARTITION_PARAMS.PARAM_VALUE) as totalSize from DBS,TBLS,PARTITIONS ,PARTITION_PARAMS where DBS.DB_ID=TBLS.DB_ID AND TBLS.TBL_ID=PARTITIONS.TBL_ID AND PARTITIONS.PART_ID =PARTITION_PARAMS.PART_ID AND PARTITION_PARAMS.PARAM_KEY='totalSize' AND DBS.NAME=" + "'" + dbName + "' AND TBLS.TBL_NAME=" + "'" + tableName + "' group by TBLS.TBL_NAME"; + } + ps = con.prepareStatement(sql); + rs = ps.executeQuery(); + while (rs.next()) { + res = rs.getInt(1); + } + } catch (SQLException e) { + throw new DAOException(23001, e.getMessage()); + } + return res; + } + + @Override + public List getPartInfo(String dbName, String tableName) throws DAOException { + DataSource dataSource = DataSourceUtil.getDataSource(); + + PreparedStatement ps = null; + ResultSet rs = null; + List PartInfos = new ArrayList<>(); + try (Connection con = dataSource.getConnection()) { + String sql = "select b.PART_NAME,b.CREATE_TIME,MAX(CASE c.PARAM_KEY WHEN 'transient_lastDdlTime' THEN c.PARAM_VALUE ELSE null END) transient_lastDdlTime ,MAX(CASE c.PARAM_KEY WHEN 'numRows' THEN c.PARAM_VALUE ELSE null END) numRows,MAX(CASE c.PARAM_KEY WHEN 'totalSize' THEN c.PARAM_VALUE ELSE null END) totalSize, MAX(CASE c.PARAM_KEY WHEN 'numFiles' THEN c.PARAM_VALUE ELSE null END) numFiles from TBLS a,PARTITIONS b,PARTITION_PARAMS c,DBS d where a.TBL_NAME=" + "'" + tableName + "'" + "AND d.NAME=" + "'" + dbName + "'" + "AND a.TBL_ID=b.TBL_ID AND a.DB_ID=d.DB_ID AND b.PART_ID=c.PART_ID GROUP BY c.PART_ID"; + ps = con.prepareStatement(sql); + rs = ps.executeQuery(); + while (rs.next()) { + PartInfo part = new PartInfo(); + part.setPartName(rs.getString(1)); + part.setCreateTime(DateUtil.unixToTimeStr(Long.valueOf(rs.getInt(2)) * 1000)); + part.setLastAccessTime(DateUtil.unixToTimeStr(Long.valueOf(rs.getInt(3)) * 1000)); + part.setReordCnt(rs.getInt(4)); + part.setStore(rs.getInt(5)); + part.setFileCount(rs.getInt(6)); + PartInfos.add(part); + } + + } catch (SQLException e) { + throw new DAOException(23001, e.getMessage()); + } + + return PartInfos; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/HiveTblStatsDTO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/HiveTblStatsDTO.java new file mode 100644 index 0000000000..56f4a2abe8 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/HiveTblStatsDTO.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.dto; + + +import lombok.Data; + +@Data +public class HiveTblStatsDTO { + + private Integer columnCount = 0; + + private Long totalSize = 0L; + + private Integer numFiles = 0; + + private Integer partitionCount = 0; + + private Integer accessCount = 0; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/SearchLabelDTO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/SearchLabelDTO.java new file mode 100644 index 0000000000..e7cfdc6cf4 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/dto/SearchLabelDTO.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.dto; + + +import lombok.Data; +import org.apache.atlas.model.instance.AtlasEntityHeader; + +@Data +public class SearchLabelDTO { + private String name; + private String guid; + + public static SearchLabelDTO from(AtlasEntityHeader atlasEntityHeader){ + SearchLabelDTO dto = new SearchLabelDTO(); + dto.setGuid(atlasEntityHeader.getGuid()); + dto.setName(atlasEntityHeader.getAttribute("name").toString()); + return dto; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java new file mode 100644 index 0000000000..a3ab803484 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/ClassificationConstant.java @@ -0,0 +1,116 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import com.webank.wedatasphere.dss.data.governance.conf.GovernanceConf; +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; + +public enum ClassificationConstant { + /** + * 指标 + */ + INDICATOR(1, "indicator_", GovernanceConf.ATLAS_ROOT_INDICATOR.getValue(),"indicator"), + /** + * 度量 + */ + MEASURE(2, "measure_", GovernanceConf.ATLAS_ROOT_MEASURE.getValue(),"measure"), + /** + * 维度 + */ + DIMENSION(0, "dimension_", GovernanceConf.ATLAS_ROOT_DIMENSION.getValue(),"dimension"), + /** + * 主题 + */ + THEME(3, "theme_", GovernanceConf.ATLAS_ROOT_THEME.getValue(),"theme"), + /** + * 分层 + */ + LAYER(4, "layer_", GovernanceConf.ATLAS_ROOT_LAYER.getValue(),"layer"); + + private int type; + + private String prefix; + + private String root; + + private String typeCode; + + ClassificationConstant(int type, String prefix, String root,String typeCode) { + this.type = type; + this.prefix = prefix; + this.root = root; + this.typeCode = typeCode; + } + + public static boolean isTypeScope(int type) { + return type >= 0 && type < values().length; + } + + public static boolean isTypeScope(String type) { + return getClassificationConstantByTypeCode(type).isPresent(); + } + + public static Optional getClassificationConstantByTypeCode(String typeCode) { + for (ClassificationConstant c : values()) { + if (StringUtils.equals(c.typeCode,typeCode)) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + public static Optional getClassificationConstantByType(int type) { + for (ClassificationConstant c : values()) { + if (c.type == type) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + public static Optional formatName(int type, String name){ + return Optional.of(getPrefix(type).get() + name); + } + + public static Optional formatName(String typeCode, String name){ + return Optional.of(getPrefix(typeCode).get() + name); + } + + public static Optional getRoot(int type) { + Optional optional = getClassificationConstantByType(type); + return optional.map(ClassificationConstant::getRoot); + } + + public static Optional getRoot(String typeCode) { + Optional optional = getClassificationConstantByTypeCode(typeCode); + return optional.map(ClassificationConstant::getRoot); + } + + public static Optional getPrefix(int type) { + Optional optional = getClassificationConstantByType(type); + return optional.map(ClassificationConstant::getPrefix); + } + + public static Optional getPrefix(String typeCode) { + Optional optional = getClassificationConstantByTypeCode(typeCode); + return optional.map(ClassificationConstant::getPrefix); + } + + + public int getType() { + return type; + } + + public String getPrefix() { + return prefix; + } + + public String getRoot() { + return root; + } + + public String getTypeCode() { + return typeCode; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java new file mode 100644 index 0000000000..e8aaca5adc --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateLabelInfo.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; + +@Data +public class CreateLabelInfo { + private String name; + + private String guid; + + public static CreateLabelInfo from(AtlasGlossaryTerm term) { + CreateLabelInfo info = new CreateLabelInfo(); + info.setName(term.getName()); + info.setGuid(term.getGuid()); + return info; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java new file mode 100644 index 0000000000..da26e0000c --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/CreateModelTypeInfo.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; + +@Data +public class CreateModelTypeInfo { + + private String name; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/GlossaryConstant.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/GlossaryConstant.java new file mode 100644 index 0000000000..280e744fd9 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/GlossaryConstant.java @@ -0,0 +1,55 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import com.webank.wedatasphere.dss.data.governance.conf.GovernanceConf; + +public enum GlossaryConstant { + LABEL(0,"label","AtlasGlossaryTerm", GovernanceConf.ATLAS_ROOT_LABEL.getValue()), + COLLECTION(1,"collection","AtlasGlossaryTerm",GovernanceConf.ATLAS_ROOT_COLLECTION.getValue()); + + private int type; + + + private String typeCode; + + private String atlasType; + + private String root; + + public static final String SEPARATOR = "@"; + + + + public static final String ARR = "qualifiedName"; + + GlossaryConstant(int type, String typeCode,String atlasType, String root) { + this.type = type; + this.atlasType = atlasType; + this.typeCode = typeCode; + this.root = root; + } + + public int getType() { + return type; + } + + public String getTypeCode() { + return typeCode; + } + + public String getAtlasType() { + return atlasType; + } + + public String getRoot() { + return root; + } + + public String formatQuery(String query){ + return query+SEPARATOR+this.getRoot(); + } + + public String endWith(){ + return SEPARATOR+this.getRoot(); + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblDetailInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblDetailInfo.java new file mode 100644 index 0000000000..97cae23c02 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblDetailInfo.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Set; + + +@Data +public class HiveTblDetailInfo implements Serializable { + private HiveTblBasicInfo basic; + private List columns; + private List partitionKeys; + + + @Data + public static class HiveTblBasicInfo extends HiveTblSimpleInfo { + private String store; + private String comment; + private Set labels; + private Boolean isParTbl; + } + + @Data + public static class HiveColumnInfo { + private String name; + private String type; + private String guid; + private String comment; + } + +} diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblSimpleInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblSimpleInfo.java similarity index 50% rename from dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblSimpleInfo.java rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblSimpleInfo.java index 9ae3f3373a..0a6d7afd62 100644 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/java/com/webank/wedatasphere/dss/data/asset/entity/HiveTblSimpleInfo.java +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/HiveTblSimpleInfo.java @@ -1,20 +1,21 @@ -package com.webank.wedatasphere.dss.data.asset.entity; +package com.webank.wedatasphere.dss.data.governance.entity; import lombok.Data; import java.util.List; -import java.util.Set; + @Data public class HiveTblSimpleInfo { private String guid; private String name; - private String dbName; private String qualifiedName; - private List columns; private String createTime; private String owner; + private String aliases; + private String lastAccessTime; private String comment; - private Set labels; - private List classifications; + private List classifications; + private String totalSize; + private String external; } diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java new file mode 100644 index 0000000000..1a5d85685a --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/PartInfo.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + + +@Data +public class PartInfo { + private String partName; + private int reordCnt; + private int store; + private String createTime; + private String lastAccessTime; + private int fileCount; +} \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java new file mode 100644 index 0000000000..f54a0e6cd5 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/QueryType.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +public enum QueryType { + PRECISE(1), + FUZZY(0); + private int code; + + QueryType(int code) { + this.code = code; + } + + public int getCode() { + return code; + } + + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/RelatedObjectId.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/RelatedObjectId.java new file mode 100644 index 0000000000..53437b59d8 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/RelatedObjectId.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class RelatedObjectId { + private String guid; + public String relationshipGuid; + + public static RelatedObjectId from(String guid,String relationshipGuid){ + RelatedObjectId relatedObjectId = new RelatedObjectId(); + relatedObjectId.setGuid(guid); + relatedObjectId.setRelationshipGuid(relationshipGuid); + return relatedObjectId; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableColumnCount.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableColumnCount.java new file mode 100644 index 0000000000..e5b20bf934 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableColumnCount.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class TableColumnCount { + private String dbName; + private String tblName; + private Long tblId; + private Integer columnCount; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableInfo.java new file mode 100644 index 0000000000..8c971dc158 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableInfo.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + + +@Data +public class TableInfo { + private String tableName; + private String storage; +} \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TablePartitionSizeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TablePartitionSizeInfo.java new file mode 100644 index 0000000000..fb5cb34414 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TablePartitionSizeInfo.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; + +@Data +public class TablePartitionSizeInfo { + private Long id; + private Long parId; + private Long lastAccessTime; + private Long sdId; + private String dbName; + private String tblName; + private String paramKey; + private String paramValue; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableSizeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableSizeInfo.java new file mode 100644 index 0000000000..8355cdc54d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/TableSizeInfo.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class TableSizeInfo { + private Long id; + private String dbName; + private String tblName; + private String paramKey; + private String paramValue; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java new file mode 100644 index 0000000000..8c302549de --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateLabelInfo.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + +import lombok.Data; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; + +@Data +public class UpdateLabelInfo { + private String name; + + private String guid; + + public static UpdateLabelInfo from(AtlasGlossaryTerm term) { + UpdateLabelInfo info = new UpdateLabelInfo(); + info.setName(term.getName()); + info.setGuid(term.getGuid()); + return info; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java new file mode 100644 index 0000000000..8fc0ec1a0c --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/entity/UpdateModelTypeInfo.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.entity; + + +import lombok.Data; + +@Data +public class UpdateModelTypeInfo { + private String name; + + private String guid; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DAOException.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DAOException.java new file mode 100644 index 0000000000..9a5e54fe07 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DAOException.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.data.governance.exception; + + +import org.apache.linkis.common.exception.ErrorException; + +public class DAOException extends ErrorException { + + public DAOException(int errCode, String desc) { + super(errCode, desc); + } + + public DAOException(int errCode, String desc, String ip, int port, String serviceKind) { + super(errCode, desc, ip, port, serviceKind); + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DataGovernanceException.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DataGovernanceException.java new file mode 100644 index 0000000000..b36fddd91d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/exception/DataGovernanceException.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.data.governance.exception; + + +import org.apache.linkis.common.exception.ErrorException; + +public class DataGovernanceException extends ErrorException { + + public DataGovernanceException(int errCode, String desc) { + super(errCode, desc); + } + + public DataGovernanceException(int errCode, String desc, String ip, int port, String serviceKind) { + super(errCode, desc, ip, port, serviceKind); + } + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/restful/DSSDataGovernanceAssetRestful.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/restful/DSSDataGovernanceAssetRestful.java new file mode 100644 index 0000000000..364c367b91 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/restful/DSSDataGovernanceAssetRestful.java @@ -0,0 +1,467 @@ +package com.webank.wedatasphere.dss.data.governance.restful; + +import com.webank.wedatasphere.dss.data.governance.entity.*; +import com.webank.wedatasphere.dss.data.governance.service.AssetService; +import com.webank.wedatasphere.dss.data.governance.service.AuthenticationClientStrategy; +import com.webank.wedatasphere.dss.data.governance.service.WorkspaceInfoService; +import com.webank.wedatasphere.dss.data.governance.vo.*; +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient; +import com.webank.wedatasphere.dss.framework.workspace.client.request.GetWorkspaceUsersAction; +import com.webank.wedatasphere.dss.framework.workspace.client.response.GetWorkspaceUsersResult; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.atlas.model.lineage.AtlasLineageInfo; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.util.CollectionUtils; +import org.springframework.web.bind.annotation.*; +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +@RequestMapping(path = "/data-assets/asset", produces = {"application/json"}) +@RestController +public class DSSDataGovernanceAssetRestful implements AuthenticationClientStrategy { + private static final Logger logger = LoggerFactory.getLogger(DSSDataGovernanceAssetRestful.class); + + private static final String DEFAULT_DIRECTION = "BOTH"; + private static final String DEFAULT_DEPTH = "3"; + private static final String DEFAULT_LIMIT = "25"; + private static final String DEFAULT_OFFSET = "0"; + + @Autowired + private AssetService assetService; + @Autowired + private WorkspaceInfoService workspaceInfoService; + + @Resource + private LinkisWorkSpaceRemoteClient linkisWorkSpaceRemoteClient; + + /** + * 获取数据资产概要:hivedb数、hivetable数据、总存储量 + */ + @RequestMapping(value = "/hiveSummary",method = RequestMethod.GET) + public Message getHiveSummary(HttpServletRequest req) throws Exception { + + return Message.ok().data("result", assetService.getHiveSummary()); + } + + @RequestMapping(value = "/getHiveDbsName",method = RequestMethod.GET) + public Message getHiveDbsName(HttpServletRequest req, + @RequestParam(value="limit",defaultValue = DEFAULT_LIMIT) int limit, + @RequestParam(value="offset",defaultValue = DEFAULT_OFFSET) int offset) throws Exception { + return Message.ok().data("result", assetService.getHiveDbsName(limit,offset)); + } + /** + * 搜索hive表 + */ + + @RequestMapping(value = "/hiveTbl/search",method = RequestMethod.GET) + public Message searchHiveTbl(@RequestParam(value = "classification",required = false) String classification, + @RequestParam(value="query",required = false) String query, + @RequestParam(value="label",required = false) String label, + @RequestParam(value="type",required = false) String type, + @RequestParam(value="precise",defaultValue = "0") int precise, + @RequestParam(value="owner",defaultValue = "") String owner, + @RequestParam(value="limit",defaultValue = DEFAULT_LIMIT) int limit, + @RequestParam(value="offset",defaultValue = DEFAULT_OFFSET) int offset) throws Exception { + + //适配模型 + if (ClassificationConstant.isTypeScope(type)) { + if (StringUtils.isNotBlank(classification)) { + classification = ClassificationConstant.getPrefix(type).orElse(null) + classification; + } else { + classification = ClassificationConstant.getRoot(type).orElse(null); + } + } + //适配标签 + if (!StringUtils.isBlank(label)){ + label = GlossaryConstant.LABEL.formatQuery(label); + } + //判断是否精确查询 + if (QueryType.PRECISE.getCode()!=precise){ + query = "*" + query + "*"; + } + List hiveTblBasicList = assetService.searchHiveTable(classification, query,label,limit, offset); + if (StringUtils.isBlank(owner) || owner.equals("undefined")|| CollectionUtils.isEmpty(hiveTblBasicList)) { + return Message.ok().data("result", hiveTblBasicList); + } else { + List res = new ArrayList<>(); + for (HiveTblSimpleInfo hiveTblSimpleInfo : hiveTblBasicList) { + if (hiveTblSimpleInfo.getOwner().equals(owner)) { + res.add(hiveTblSimpleInfo); + } + } + return Message.ok().data("result", res); + } + } + + /** + * 搜索hive表统计信息 + */ + @RequestMapping(value = "/hiveTbl/stats",method = RequestMethod.GET) + public Message searchHiveTblStats(@RequestParam(value="dbName",required = false) String dbName, + @RequestParam(value="tableName",required = false) String tableName, + @RequestParam(value="guid",required = false) String guid) throws Exception { + logger.info("searchHiveTblStats dbName : {}, tableName : {}, guid : {}", dbName, tableName, guid); + return Message.ok().data("result", assetService.hiveTblStats(dbName, tableName, guid)); + + } + + /** + * 搜索hive表容量 + */ + @RequestMapping(value = "/hiveTbl/size",method = RequestMethod.GET) + public Message searchHiveTblSize(@RequestParam(value="dbName",required = false) String dbName, + @RequestParam(value="tableName",required = false) String tableName, + @RequestParam(value="guid",required = false) String guid) throws Exception { + logger.info("searchHiveTblSize dbName : {}, tableName : {}, guid : {}", dbName, tableName, guid); + return Message.ok().data("result", assetService.hiveTblSize(dbName, tableName, guid)); + + } + + + /** + * 搜索hive库 + */ + @RequestMapping(value = "/hiveDb/search",method = RequestMethod.GET) + public Message searchHiveDb(@RequestParam(value="classification",required = false) String classification, + @RequestParam(value="query",required = false) String query, + @RequestParam(value="owner",defaultValue="")String owner, + @RequestParam(value="limit",defaultValue=DEFAULT_LIMIT) int limit, + @RequestParam(value="offset",defaultValue=DEFAULT_OFFSET) int offset) throws Exception { + + List hiveTblBasicList = assetService.searchHiveDb(classification, '*' + query + '*', limit, offset); + if (StringUtils.isBlank(owner) || owner.equals("undefined")) { + return Message.ok().data("result", hiveTblBasicList); + } else { + List res = new ArrayList<>(); + for (HiveTblSimpleInfo hiveTblSimpleInfo : hiveTblBasicList) { + if (hiveTblSimpleInfo.getOwner().equals(owner)) { + res.add(hiveTblSimpleInfo); + } + } + return Message.ok().data("result", res); + } + } + + /** + * 获取单个表的详细信息,包括:基本信息、字段信息 + */ + @RequestMapping(value = "/hiveTbl/{guid}/basic",method = RequestMethod.GET) + public Message getHiveTblBasic(@PathVariable("guid") String guid) throws Exception { + return Message.ok().data("result", assetService.getHiveTblDetail(guid)); + } + + /** + * 获取表分区信息 + */ + @RequestMapping(value = "/hiveTbl/{guid}/partition",method = RequestMethod.GET) + public Message getHiveTblPartition(@PathVariable("guid") String guid) throws Exception { + List hiveTblPartition = assetService.getHiveTblPartition(guid); + if (hiveTblPartition.size() > 0) { + return Message.ok().data("result", hiveTblPartition); + } else { + return Message.ok().data("result", null); + } + } + + /** + * 根据表名获取表分区信息 + */ + @RequestMapping(value = "/hiveTbl/partition/name",method = RequestMethod.GET) + public Message getHiveTblPartitionByName(@RequestParam("dbName") String dbName,@RequestParam("tableName") String tableName) throws Exception { + logger.info("getHiveTblPartitionByName dbName : {}, tableName : {}", dbName, tableName); + List hiveTblPartition = assetService.getHiveTblPartitionByName(dbName,tableName); + return Message.ok().data("result", hiveTblPartition); + } + + /** + * 获取表的血缘信息 + */ + @RequestMapping(value = "/hiveTbl/{guid}/lineage",method = RequestMethod.GET) + public Message getHiveTblLineage(@PathVariable("guid") String guid, + @RequestParam(value="direction",defaultValue =DEFAULT_DIRECTION ) AtlasLineageInfo.LineageDirection direction, + @RequestParam(value="depth",defaultValue = DEFAULT_DEPTH) int depth) throws Exception { + return Message.ok().data("result", assetService.getHiveTblLineage(guid, direction, depth)); + } + + /** + * 获取表的select语句 + */ + @RequestMapping(value = "/hiveTbl/{guid}/select",method = RequestMethod.GET) + public Message getHiveTblSelect(@PathVariable("guid") String guid) throws Exception { + + + return Message.ok().data("result", assetService.getTbSelect(guid)); + + } + + /** + * 获取表的create语句 + */ + @RequestMapping(value = "/hiveTbl/{guid}/create",method = RequestMethod.GET) + public Message getHiveTblCreate(@PathVariable("guid") String guid) throws Exception { + return Message.ok().data("result", assetService.getTbCreate(guid)); + + } + + /** + * 获取存储量前10的表信息 + */ + @RequestMapping(value = "/hiveTbl/topStorage",method = RequestMethod.GET) + public Message getTop10Storage(HttpServletRequest req) throws Exception { + List top10Table = assetService.getTop10Table(); + return Message.ok().data("result", top10Table); + } + + /** + * 修改单个表或单个列注释 + */ + + @RequestMapping(value = "/comment/{guid}",method = RequestMethod.PUT) + public Message modifyComment(@PathVariable("guid") String guid,@RequestParam("comment") String comment) throws Exception { + comment = "\"" + comment + "\""; + assetService.modifyComment(guid, comment); + return Message.ok().data("result", "修改成功"); + } + + /** + * 批量修改多个个表或列注释 + */ + @RequestMapping(value = "/comment/bulk",method = RequestMethod.PUT) + public Message modifyComment(@RequestBody Map commentMap) throws Exception { + for (Map.Entry stringStringEntry : commentMap.entrySet()) { + stringStringEntry.setValue("\"" + stringStringEntry.getValue() + "\""); + } + assetService.bulkModifyComment(commentMap); + return Message.ok().data("result", "修改成功"); + } + + /** + * 创建模型 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/model/type",method = RequestMethod.POST) + public Message createModelType(HttpServletRequest req, @RequestBody CreateModelTypeVO vo) throws Exception { + logger.info("createModelType : {}", vo); + return Message.ok().data("result", assetService.createModelType(vo)); + } + + /** + * 删除模型 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/model/type/delete",method = RequestMethod.POST) + public Message deleteModelType(HttpServletRequest req, @RequestBody DeleteModelTypeVO vo) throws Exception { + logger.info("deleteModelTypeVO : {}", vo); + assetService.deleteModelType(vo); + return Message.ok().data("result", "删除成功"); + } + + + /** + * 绑定模型 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/model/bind",method = RequestMethod.POST) + public Message bindModelType(HttpServletRequest req, @RequestBody BindModelVO vo) throws Exception { + logger.info("bindModelVO : {}", vo); + assetService.bindModelType(vo); + return Message.ok().data("result", "绑定成功"); + } + + /** + * 解绑模型 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/model/unbind",method = RequestMethod.POST) + public Message unBindModelType(HttpServletRequest req, @RequestBody UnBindModelVO vo) throws Exception { + logger.info("unBindModelVO : {}", vo); + assetService.unBindModel(vo); + return Message.ok().data("result", "解绑成功"); + } + + + /** + * 更新模型 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/model/type/modify",method = RequestMethod.POST) + public Message updateModelType(HttpServletRequest req, @RequestBody UpdateModelTypeVO vo) throws Exception { + logger.info("updateModelTypeVO : {}", vo); + return Message.ok().data("result", assetService.updateModelType(vo)); + } + + /** + * 创建标签 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels",method = RequestMethod.POST) + public Message createLabel(HttpServletRequest req, @RequestBody CreateLabelVO vo) throws Exception { + logger.info("createLabel vo : {}", vo); + return Message.ok().data("result", assetService.createLabel(vo)); + } + + /** + * 更新标签 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels/modify",method = RequestMethod.POST) + public Message updateLabel(HttpServletRequest req, @RequestBody UpdateLabelVO vo) throws Exception { + logger.info("updateLabel vo : {}", vo); + return Message.ok().data("result", assetService.updateLabel(vo)); + } + + /** + * 删除标签 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels/delete",method = RequestMethod.POST) + public Message deleteLabel(HttpServletRequest req, @RequestBody DeleteLabelVO vo) throws Exception { + logger.info("deleteLabel vo : {}", vo); + assetService.deleteLabel(vo); + return Message.ok().data("result", "删除成功"); + } + + /** + * 实体绑定标签 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels/bind",method = RequestMethod.POST) + public Message bindLabel(HttpServletRequest req, @RequestBody BindLabelVO vo) throws Exception { + logger.info("bindLabel vo : {}", vo); + assetService.bindLabel(vo); + return Message.ok().data("result", "绑定成功"); + } + + + /** + * 实体解绑标签 + * + * @param req + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels/unbind",method = RequestMethod.POST) + public Message unBindLabel(HttpServletRequest req, @RequestBody UnBindLabelVO vo) throws Exception { + logger.info("unBindLabel vo : {}", vo); + assetService.unBindLabel(vo); + return Message.ok().data("result", "解绑成功"); + } + + + /** + * 搜索标签 + * + * @param req + * @param query + * @return + * @throws Exception + */ + @RequestMapping(value = "/labels/search",method = RequestMethod.GET) + public Message searchLabel(HttpServletRequest req + ,@RequestParam(value="query",required = false) String query + ,@RequestParam(value="limit",defaultValue = DEFAULT_LIMIT) int limit + ,@RequestParam(value = "offset",defaultValue =DEFAULT_OFFSET ) int offset) throws Exception { + logger.info("searchLabel query : {}", query); + return Message.ok().data("result",assetService.listLabels(query,limit,offset)); + } + + /** + * 设置单个表或单个列的标签 + */ + @RequestMapping(value = "/label/{guid}",method = RequestMethod.POST) + public Message setLabels(@PathVariable("guid") String guid, @RequestBody Set labels) throws Exception { + logger.info("setLabels guid : {}, labels : {}", guid, labels); + assetService.setLabels(guid, labels); + + return Message.ok().data("result", "设置成功"); + } + + /** + * 获取工作空间下所有用户名 + */ + + @RequestMapping(value = "/getWorkspaceUsers/{workspaceId}/{search}",method = RequestMethod.GET) + public Message getWorkspaceUsers(@PathVariable("workspaceId") int workspaceId, @PathVariable("search") String search) throws Exception { + String searchs = "%" + search + "%"; + List workspaceUsers = workspaceInfoService.getWorkspaceUsers(workspaceId, searchs); + return Message.ok().data("result", workspaceUsers); + + } + + /** + * 查询用户 + * + * @param req + * @param workspaceId + * @return + */ + @RequestMapping(value = "/users/{workspaceId}",method = RequestMethod.GET) + public Message users(HttpServletRequest req, @PathVariable("workspaceId") String workspaceId) throws ErrorException { + logger.info("users workspaceId : {}", workspaceId); + GetWorkspaceUsersResult result = linkisWorkSpaceRemoteClient.getWorkspaceUsers(GetWorkspaceUsersAction.builder().setUser(getStrategyUser(req)).setWorkspaceId(workspaceId).build()); + return Message.ok().data("users", result.getWorkspaceUserList()); + } + + + /** + * 查询角色 + * + * @param req + * @param workspaceId + * @return + */ + @RequestMapping(value = "/roles/{workspaceId}",method = RequestMethod.GET) + public Message roles(HttpServletRequest req, @PathVariable("workspaceId") String workspaceId) throws ErrorException { + logger.info("roles workspaceId : {}", workspaceId); + GetWorkspaceUsersResult result = linkisWorkSpaceRemoteClient.getWorkspaceUsers(GetWorkspaceUsersAction.builder().setUser(getStrategyUser(req)).setWorkspaceId(workspaceId).build()); + return Message.ok().data("users", result.getWorkspaceRoleList()); + } + + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AssetService.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AssetService.java new file mode 100644 index 0000000000..7ccdb26927 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AssetService.java @@ -0,0 +1,173 @@ +package com.webank.wedatasphere.dss.data.governance.service; + + +import com.google.gson.JsonObject; +import com.webank.wedatasphere.dss.data.governance.dto.HiveTblStatsDTO; +import com.webank.wedatasphere.dss.data.governance.dto.SearchLabelDTO; +import com.webank.wedatasphere.dss.data.governance.entity.*; +import com.webank.wedatasphere.dss.data.governance.exception.DAOException; +import com.webank.wedatasphere.dss.data.governance.exception.DataGovernanceException; +import com.webank.wedatasphere.dss.data.governance.vo.*; +import org.apache.atlas.AtlasServiceException; +import org.apache.atlas.model.lineage.AtlasLineageInfo; + +import java.sql.SQLException; +import java.util.List; +import java.util.Map; +import java.util.Set; + + +public interface AssetService { + public Map getHiveSummary() throws DataGovernanceException; + + public String getHiveDbsName(Integer limit, Integer offset) throws AtlasServiceException; + + public List searchHiveTable(String classification, String query,String termName, + int limit, int offset) throws DataGovernanceException; + + public List searchHiveDb(String classification, String query, + int limit, int offset) throws DataGovernanceException; + + public HiveTblDetailInfo getHiveTblDetail(String guid) throws DataGovernanceException ; + + public List getHiveTblPartition(String guid) throws DataGovernanceException; + + public String getTbSelect(String guid) throws DataGovernanceException; + + public String getTbCreate(String guid) throws DataGovernanceException; + + public void modifyComment(String guid, String commentStr) throws DataGovernanceException ; + + public void bulkModifyComment(Map commentMap) throws DataGovernanceException ; + + public void setLabels(String guid, Set labels) throws DataGovernanceException; + + /** + * 获取表实体的血缘信息 + */ + public AtlasLineageInfo getHiveTblLineage(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws DataGovernanceException; + + public List getTop10Table () throws DataGovernanceException, SQLException, DAOException; + + + /** + * 创建模型 + * @param vo + * @return + */ + CreateModelTypeInfo createModelType(CreateModelTypeVO vo) throws DataGovernanceException, AtlasServiceException; + + + /** + * 删除模型 + * @param vo + * @throws Exception + */ + void deleteModelType(DeleteModelTypeVO vo) throws Exception; + + + + /** + * 更新模型 + * @param vo + * @return + */ + UpdateModelTypeInfo updateModelType(UpdateModelTypeVO vo) throws Exception; + + + /** + * 绑定模型 + * @param vo + * @throws Exception + */ + void bindModelType(BindModelVO vo) throws Exception; + + + /** + * 解绑模型 + * @param vo + * @throws Exception + */ + void unBindModel(UnBindModelVO vo) throws Exception; + + + + /** + * 表统计信息 + * @param dbName + * @param tableName + * @param guid + * @return + */ + HiveTblStatsDTO hiveTblStats(String dbName, String tableName, String guid) throws AtlasServiceException, Exception; + + + /** + * 表统计信息 + * @param dbName + * @param tableName + * @param guid + * @return + */ + Long hiveTblSize(String dbName, String tableName, String guid) throws Exception; + + + /** + * 新建标签 + * @param vo + * @return + * @throws Exception + */ + CreateLabelInfo createLabel(CreateLabelVO vo) throws Exception; + + + /** + * 删除标签 + * @param vo + * @return + * @throws Exception + */ + void deleteLabel(DeleteLabelVO vo) throws Exception; + + + /** + * 删除标签 + * @param vo + * @return + * @throws Exception + */ + UpdateLabelInfo updateLabel(UpdateLabelVO vo) throws Exception; + + + /** + * 绑定标签 + * @param vo + * @throws Exception + */ + void bindLabel(BindLabelVO vo) throws Exception; + + + /** + * 解绑实体 + * @param vo + * @throws Exception + */ + void unBindLabel(UnBindLabelVO vo) throws Exception; + + /** + * 标签搜索列表 + * @param query + * @param limit + * @param offset + * @return + */ + List listLabels(String query, Integer limit, Integer offset) throws AtlasServiceException, Exception; + /* + * 根据名称查询分区 + * @param name + * @return + * @throws Exception + */ + List getHiveTblPartitionByName(String dbName, String tableName) throws Exception; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AuthenticationClientStrategy.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AuthenticationClientStrategy.java new file mode 100644 index 0000000000..4e478e6a26 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/AuthenticationClientStrategy.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.data.governance.service; + + + +import com.webank.wedatasphere.dss.data.governance.conf.ClientStrategy; +import org.apache.linkis.common.conf.CommonVars; +import org.apache.linkis.server.security.SecurityFilter; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +public interface AuthenticationClientStrategy { + + CommonVars CLIENT_STRATEGY = CommonVars.apply("wds.wedatasphere.data.assert.client.strategy", ""); + + default String getStrategyUser(HttpServletRequest req){ + if (StringUtils.equals(ClientStrategy.TOKEN.getCode(),CLIENT_STRATEGY.getValue())){ + return SecurityFilter.getLoginUsername(req); + } + return "hadoop"; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/WorkspaceInfoService.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/WorkspaceInfoService.java new file mode 100644 index 0000000000..2cd9e43441 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/WorkspaceInfoService.java @@ -0,0 +1,31 @@ +/* + * + * * Copyright 2019 WeBank + * * + * * 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 com.webank.wedatasphere.dss.data.governance.service; + + +import com.webank.wedatasphere.dss.data.governance.exception.DataGovernanceException; + +import java.util.List; + + +public interface WorkspaceInfoService { + + public List getWorkspaceUsers(int workspaceId,String search) throws DataGovernanceException; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/AssetServiceImpl.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/AssetServiceImpl.java new file mode 100644 index 0000000000..0b57e7aa10 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/AssetServiceImpl.java @@ -0,0 +1,847 @@ +package com.webank.wedatasphere.dss.data.governance.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gson.JsonObject; +import com.google.gson.internal.LinkedTreeMap; +import com.webank.wedatasphere.dss.data.governance.atlas.AtlasService; +import com.webank.wedatasphere.dss.data.governance.dao.*; +import com.webank.wedatasphere.dss.data.governance.dao.impl.MetaInfoMapperImpl; +import com.webank.wedatasphere.dss.data.governance.dto.HiveTblStatsDTO; +import com.webank.wedatasphere.dss.data.governance.dto.SearchLabelDTO; +import com.webank.wedatasphere.dss.data.governance.entity.*; +import com.webank.wedatasphere.dss.data.governance.exception.DAOException; +import com.webank.wedatasphere.dss.data.governance.exception.DataGovernanceException; +import com.webank.wedatasphere.dss.data.governance.service.AssetService; +import com.webank.wedatasphere.dss.data.governance.utils.DateUtil; +import com.webank.wedatasphere.dss.data.governance.vo.*; +import org.apache.atlas.AtlasServiceException; +import org.apache.atlas.model.glossary.AtlasGlossaryTerm; +import org.apache.atlas.model.glossary.relations.AtlasTermAssignmentHeader; +import org.apache.atlas.model.instance.AtlasEntity; +import org.apache.atlas.model.instance.AtlasEntityHeader; +import org.apache.atlas.model.instance.AtlasStruct; +import org.apache.atlas.model.lineage.AtlasLineageInfo; +import org.apache.atlas.model.typedef.AtlasClassificationDef; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.*; +import java.util.concurrent.TimeUnit; +import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; + + +@Service +public class AssetServiceImpl implements AssetService { + private static final Logger logger = LoggerFactory.getLogger(AssetServiceImpl.class); + private AtlasService atlasService; + private MetaInfoMapper metaInfoMapper; + private WorkspaceInfoMapper workspaceInfoMapper; + + @Resource + private TableColumnCountQueryMapper tableColumnCountQueryMapper; + + @Resource + private TableSizeInfoMapper tableSizeInfoMapper; + + @Resource + private TableSizePartitionInfoMapper tableSizePartitionInfoMapper; + + public AssetServiceImpl(AtlasService atlasService) { + this.atlasService = atlasService; + this.metaInfoMapper = new MetaInfoMapperImpl(); + } + + @Override + public Map getHiveSummary() throws DataGovernanceException { + try { + Map result = new HashMap<>(); + + result.put("hiveDb", atlasService.getHiveDbCnt()); + result.put("hiveTable", atlasService.getHiveTableCnt()); + result.put("hiveStore", metaInfoMapper.getTableStorage()); + + return result; + } catch (AtlasServiceException | DAOException exception) { + throw new DataGovernanceException(23000, exception.getMessage()); + } + } + + @Override + public String getHiveDbsName(Integer limit, Integer offset) throws AtlasServiceException { + return atlasService.getHiveDbsName(limit,offset); + } + @Override + public CreateModelTypeInfo createModelType(CreateModelTypeVO vo) throws DataGovernanceException { + if (!ClassificationConstant.isTypeScope(vo.getType())) { + throw new DataGovernanceException(23000, "不支持此类型" + vo.getType()); + } + try { + AtlasClassificationDef atlasClassificationDef = atlasService.createSubClassification(ClassificationConstant.formatName(vo.getType(), vo.getName()).get(), ClassificationConstant.getRoot(vo.getType()).get()); + CreateModelTypeInfo dto = new CreateModelTypeInfo(); + dto.setGuid(atlasClassificationDef.getGuid()); + dto.setName(atlasClassificationDef.getName()); + return dto; + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + + @Override + public void deleteModelType(DeleteModelTypeVO vo) throws Exception { + if (!ClassificationConstant.isTypeScope(vo.getType())) { + throw new DataGovernanceException(23000, "不支持此类型" + vo.getType()); + } + try { + atlasService.deleteClassification(ClassificationConstant.formatName(vo.getType(), vo.getName()).get()); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public UpdateModelTypeInfo updateModelType(UpdateModelTypeVO vo) throws Exception { + if (!ClassificationConstant.isTypeScope(vo.getType())) { + throw new DataGovernanceException(23000, "不支持此类型" + vo.getType()); + } + String newName = ClassificationConstant.formatName(vo.getType(), vo.getName()).get(); + String root = ClassificationConstant.getRoot(vo.getType()).get(); + String orgName = ClassificationConstant.formatName(vo.getType(), vo.getOrgName()).get(); + AtlasClassificationDef atlasClassificationDef = null; + //首先尝试创建 + try { + atlasClassificationDef = atlasService.createSubClassification(newName, root); + } catch (AtlasServiceException ex) { + //创建失败直接回退 + throw new DataGovernanceException(23000, ex.getMessage()); + } + + //尝试原类型 + try { + atlasService.deleteClassification(orgName); + } catch (AtlasServiceException ex) { + //回滚删除创建的新类型 + try { + atlasService.deleteClassification(newName); + } catch (AtlasServiceException ex1) { + throw new DataGovernanceException(23000, ex1.getMessage()); + } + throw new DataGovernanceException(23000, ex.getMessage()); + } + UpdateModelTypeInfo info = new UpdateModelTypeInfo(); + info.setGuid(atlasClassificationDef.getGuid()); + info.setName(atlasClassificationDef.getName()); + return info; + } + + + @Override + public void bindModelType(BindModelVO vo) throws Exception { + if (!ClassificationConstant.isTypeScope(vo.getModelType())) { + throw new DataGovernanceException(23000, "不支持此类型" + vo.getModelType()); + } + String tableGuid = vo.getGuid(); + + if (StringUtils.isBlank(tableGuid)) { + tableGuid = getGuid(vo.getTableName()); + } + + try { + atlasService.addClassification(ClassificationConstant.formatName(vo.getModelType(), vo.getModelName()).get(), tableGuid, false); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + + } + + @Override + public void unBindModel(UnBindModelVO vo) throws Exception { + if (!ClassificationConstant.isTypeScope(vo.getModelType())) { + throw new DataGovernanceException(23000, "不支持此类型" + vo.getModelType()); + } + String tableGuid = vo.getGuid(); + + if (StringUtils.isBlank(tableGuid)) { + tableGuid = getGuid(vo.getTableName()); + } + + try { + atlasService.deleteClassification(tableGuid, ClassificationConstant.formatName(vo.getModelType(), vo.getModelName()).get()); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + + } + + private String getGuid(String tableName) throws DataGovernanceException { + + //首先搜索指定表,查找guid + List atlasEntityHeaders = null; + try { + atlasEntityHeaders = atlasService.searchHiveTable0(null, tableName, null,true, 1, 0); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + if (CollectionUtils.isEmpty(atlasEntityHeaders)) { + throw new DataGovernanceException(23000, "table " + tableName + " not find"); + } + + if (atlasEntityHeaders.size() > 1) { + throw new DataGovernanceException(23000, "table " + tableName + " duplicate " + atlasEntityHeaders); + } + return atlasEntityHeaders.get(0).getGuid(); + } + + @Override + public List searchHiveTable(String classification, String query, String termName, + int limit, int offset) throws DataGovernanceException { + List atlasEntityHeaders = null; + try { + atlasEntityHeaders = atlasService.searchHiveTable0(classification, query, termName,true, limit, offset); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + + if (atlasEntityHeaders != null) { + return atlasEntityHeaders.parallelStream().map(atlasEntityHeader -> { + HiveTblSimpleInfo hiveTblBasic = new HiveTblSimpleInfo(); + hiveTblBasic.setGuid(atlasEntityHeader.getGuid()); + hiveTblBasic.setName(atlasEntityHeader.getAttribute("name").toString()); + hiveTblBasic.setQualifiedName(atlasEntityHeader.getAttribute("qualifiedName").toString()); + hiveTblBasic.setOwner(atlasEntityHeader.getAttribute("owner").toString()); + Object createTime = atlasEntityHeader.getAttribute("createTime"); + if (createTime != null) { + hiveTblBasic.setCreateTime(DateUtil.unixToTimeStr((Double) createTime)); + } + hiveTblBasic.setClassifications(atlasEntityHeader.getClassificationNames()); + + Object comment = atlasEntityHeader.getAttribute("comment"); + if (comment != null) { + hiveTblBasic.setComment(comment.toString()); + } + + Object aliases = atlasEntityHeader.getAttribute("aliases"); + if (aliases != null) { + hiveTblBasic.setAliases(aliases.toString()); + } + + Object lastAccessTime = atlasEntityHeader.getAttribute("lastAccessTime"); + if (lastAccessTime != null) { + hiveTblBasic.setLastAccessTime(DateUtil.unixToTimeStr((Double) lastAccessTime)); + } + + Object parameters = atlasEntityHeader.getAttribute("parameters"); + if (parameters != null) { + Map mapParameters = (Map) parameters; + Object totalSize = mapParameters.get("totalSize"); + if (totalSize != null) { + hiveTblBasic.setTotalSize(totalSize.toString()); + } + } + + return hiveTblBasic; + }).collect(Collectors.toList()); + } + return null; + } + + @Override + public List searchHiveDb(String classification, String query, int limit, int offset) throws DataGovernanceException { + List atlasEntityHeaders = null; + try { + atlasEntityHeaders = atlasService.searchHiveDb(classification, query, true, limit, offset); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + + if (atlasEntityHeaders != null) { + return atlasEntityHeaders.parallelStream().map(atlasEntityHeader -> { + HiveTblSimpleInfo hiveTblBasic = new HiveTblSimpleInfo(); + hiveTblBasic.setGuid(atlasEntityHeader.getGuid()); + hiveTblBasic.setName(atlasEntityHeader.getAttribute("name").toString()); + hiveTblBasic.setQualifiedName(atlasEntityHeader.getAttribute("qualifiedName").toString()); + hiveTblBasic.setOwner(atlasEntityHeader.getAttribute("owner").toString()); + + + Object createTime = atlasEntityHeader.getAttribute("createTime"); + if (createTime != null) { + hiveTblBasic.setCreateTime(DateUtil.unixToTimeStr((Double) createTime)); + } + + + return hiveTblBasic; + }).collect(Collectors.toList()); + } + return null; + } + + @Override + public HiveTblDetailInfo getHiveTblDetail(String guid) throws DataGovernanceException { + try { + HiveTblDetailInfo hiveTblDetailInfo = new HiveTblDetailInfo(); + + AtlasEntity atlasEntity = atlasService.getHiveTbl(guid); + Map hiveTblNameAndIsPartById = atlasService.getHiveTblNameAndIsPartById(guid); + Boolean isPartTable = (Boolean) hiveTblNameAndIsPartById.get("isPartition"); + int storage = 0; + String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; + String tableName = db_name.split("\\.")[1]; + String dbName = db_name.split("\\.")[0]; + try { + storage = metaInfoMapper.getTableInfo(dbName, tableName, isPartTable); + } catch (DAOException e) { + e.printStackTrace(); + } + List guids = new ArrayList<>(); + List> columns = (List>) atlasEntity.getAttributes().get("columns"); + for (LinkedTreeMap column : columns) { + guids.add(column.get("guid")); + } + List hiveColumnInfos = new ArrayList<>(); + if (guids.size() > 0) { + List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); + for (AtlasEntity hiveColumnsByGuid : hiveColumnsByGuids) { + HiveTblDetailInfo.HiveColumnInfo hiveColumnInfo = new HiveTblDetailInfo.HiveColumnInfo(); + hiveColumnInfo.setName(String.valueOf(hiveColumnsByGuid.getAttributes().get("name"))); + hiveColumnInfo.setType(String.valueOf(hiveColumnsByGuid.getAttributes().get("type"))); + hiveColumnInfo.setComment(String.valueOf(hiveColumnsByGuid.getAttributes().get("comment"))); + hiveColumnInfo.setGuid(hiveColumnsByGuid.getGuid()); + hiveColumnInfos.add(hiveColumnInfo); + } + } + List partguids = new ArrayList<>(); + List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); + for (LinkedTreeMap column : partitionKeys) { + partguids.add(column.get("guid")); + } + List partitionColumns = new ArrayList<>(); + if (partguids.size() > 0) { + List hivePartColumnsByGuids = atlasService.getHiveColumnsByGuids(partguids); + for (AtlasEntity hiveColumnsByGuid : hivePartColumnsByGuids) { + HiveTblDetailInfo.HiveColumnInfo hiveColumnInfo = new HiveTblDetailInfo.HiveColumnInfo(); + hiveColumnInfo.setName(String.valueOf(hiveColumnsByGuid.getAttributes().get("name"))); + hiveColumnInfo.setType(String.valueOf(hiveColumnsByGuid.getAttributes().get("type"))); + hiveColumnInfo.setComment(String.valueOf(hiveColumnsByGuid.getAttributes().get("comment"))); + hiveColumnInfo.setGuid(hiveColumnsByGuid.getGuid()); + partitionColumns.add(hiveColumnInfo); + } + } + HiveTblDetailInfo.HiveTblBasicInfo basic = new HiveTblDetailInfo.HiveTblBasicInfo(); + basic.setName(tableName); + basic.setQualifiedName(atlasEntity.getAttribute("qualifiedName").toString()); + basic.setOwner(String.valueOf(atlasEntity.getAttributes().get("owner"))); + basic.setCreateTime(new java.text.SimpleDateFormat("yyyy MM-dd HH:mm:ss").format(atlasEntity.getCreateTime())); + basic.setStore(String.valueOf(storage)); + //设置标签 + Set labels = Sets.newHashSet(); + List> meanings =(List>) atlasEntity.getRelationshipAttributes().get("meanings"); + if (!CollectionUtils.isEmpty(meanings)) { + labels = meanings.stream() + .filter(label->isLabel(label.get("guid"))) + .map(label->(label.get("displayText"))) + .collect(Collectors.toSet()); + } + basic.setLabels(labels); + basic.setIsParTbl(isPartTable); + basic.setGuid(guid); + + if (!CollectionUtils.isEmpty(atlasEntity.getClassifications())) { + basic.setClassifications(atlasEntity.getClassifications().stream().map(AtlasStruct::getTypeName).collect(Collectors.toList())); + } + Object comment = atlasEntity.getAttribute("comment"); + if (comment != null) { + basic.setComment(comment.toString()); + } + + Object aliases = atlasEntity.getAttribute("aliases"); + if (aliases != null) { + basic.setAliases(aliases.toString()); + } + + Object lastAccessTime = atlasEntity.getAttribute("lastAccessTime"); + if (lastAccessTime != null) { + basic.setLastAccessTime(DateUtil.unixToTimeStr((Double) lastAccessTime)); + } + + Object parameters = atlasEntity.getAttribute("parameters"); + if (parameters != null) { + Map mapParameters = (Map) parameters; + Object totalSize = mapParameters.get("totalSize"); + if (totalSize != null) { + basic.setTotalSize(totalSize.toString()); + } + + } + + Object external = atlasEntity.getAttribute("tableType"); + if (external != null) { + basic.setExternal(external.toString()); + } + + + hiveTblDetailInfo.setColumns(hiveColumnInfos); + hiveTblDetailInfo.setBasic(basic); + hiveTblDetailInfo.setPartitionKeys(partitionColumns); + + + return hiveTblDetailInfo; + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public List getHiveTblPartition(String guid) throws DataGovernanceException { + try { + AtlasEntity atlasEntity = atlasService.getHiveTbl(guid); + String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; + return getPartInfos(db_name); + + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + private List getPartInfos(String db_name) { + String tableName = db_name.split("\\.")[1]; + String dbName = db_name.split("\\.")[0]; + List partInfo = new ArrayList<>(); + try { + partInfo = metaInfoMapper.getPartInfo(dbName, tableName); + } catch (DAOException e) { + e.printStackTrace(); + } + return partInfo; + } + + @Override + public String getTbSelect(String guid) throws DataGovernanceException { + try { + AtlasEntity atlasEntity = atlasService.getHiveTbl(guid); + String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; + String tableName = db_name.split("\\.")[1]; + List guids = new ArrayList<>(); + List> columns = (List>) atlasEntity.getAttributes().get("columns"); + for (LinkedTreeMap column : columns) { + guids.add(column.get("guid")); + } + List fields = new ArrayList<>(); + List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); + for (AtlasEntity hiveColumnsByGuid : hiveColumnsByGuids) { + fields.add((String) hiveColumnsByGuid.getAttributes().get("name")); + } + Map hiveTblNameAndIsPartById = atlasService.getHiveTblNameAndIsPartById(guid); + Boolean isPartTable = (Boolean) hiveTblNameAndIsPartById.get("isPartition"); + if (isPartTable == true) { + List partguids = new ArrayList<>(); + List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); + for (LinkedTreeMap column : partitionKeys) { + partguids.add(column.get("guid")); + } + List hiveColumnsByGuids1 = atlasService.getHiveColumnsByGuids(partguids); + for (AtlasEntity entity : hiveColumnsByGuids1) { + fields.add((String) entity.getAttributes().get("name")); + } + } + StringBuilder sql = new StringBuilder(); + sql.append("SELECT @$ "); + for (int i = 0; i < fields.size() - 1; i++) { + sql.append(fields.get(i)).append(", @$ "); + } + sql.append(fields.get(fields.size() - 1)).append(" @$ from ").append(tableName); + return sql.toString(); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public String getTbCreate(String guid) throws DataGovernanceException { + try { + StringBuilder sql = new StringBuilder(); + AtlasEntity atlasEntity = atlasService.getHiveTbl(guid); + String db_name = String.valueOf(atlasEntity.getAttributes().get("qualifiedName")).split("@")[0]; + String tableName = db_name.split("\\.")[1]; + List guids = new ArrayList<>(); + List> columns = (List>) atlasEntity.getAttributes().get("columns"); + for (LinkedTreeMap column : columns) { + guids.add(column.get("guid")); + } + sql.append("CREATE TABLE IF NOT EXISTS ").append(tableName).append(" @$ ( @$ "); + List fields = new ArrayList<>(); + List hiveColumnsByGuids = atlasService.getHiveColumnsByGuids(guids); + for (int i = 0; i < hiveColumnsByGuids.size(); i++) { + if (i < hiveColumnsByGuids.size() - 1) { + AtlasEntity hiveColumnsByGuid = hiveColumnsByGuids.get(i); + StringBuilder sb = new StringBuilder(); + sb.append((String) hiveColumnsByGuid.getAttributes().get("name")).append(" ").append((String) hiveColumnsByGuid.getAttributes().get("type")); + if (hiveColumnsByGuid.getAttributes().get("comment") == null) { + sb.append(", "); + } else { + sb.append(" COMMENT '").append(hiveColumnsByGuid.getAttributes().get("comment")).append("',"); + } + fields.add(sb.append(" @$ ").toString()); + } else { + AtlasEntity hiveColumnsByGuid = hiveColumnsByGuids.get(i); + StringBuilder sb = new StringBuilder(); + sb.append((String) hiveColumnsByGuid.getAttributes().get("name")).append(" ").append((String) hiveColumnsByGuid.getAttributes().get("type")); + if (hiveColumnsByGuid.getAttributes().get("comment") == null) { + sb.append(" "); + } else { + sb.append(" COMMENT '").append(hiveColumnsByGuid.getAttributes().get("comment")).append("' "); + } + fields.add(sb.append(" @$ ").toString()); + } + } + for (String field : fields) { + sql.append(field); + } + sql.append(") @$ "); + Map hiveTblNameAndIsPartById = atlasService.getHiveTblNameAndIsPartById(guid); + Boolean isPartTable = (Boolean) hiveTblNameAndIsPartById.get("isPartition"); + if (isPartTable == true) { + sql.append("PARTITIONED BY @$ ( @$ "); + List partguids = new ArrayList<>(); + List> partitionKeys = (List>) atlasEntity.getAttributes().get("partitionKeys"); + for (LinkedTreeMap column : partitionKeys) { + partguids.add(column.get("guid")); + } + List keyFields = new ArrayList<>(); + List hiveColumnsByGuids1 = atlasService.getHiveColumnsByGuids(partguids); + for (int i = 0; i < hiveColumnsByGuids1.size(); i++) { + if (i < hiveColumnsByGuids1.size() - 1) { + AtlasEntity entity = hiveColumnsByGuids1.get(i); + StringBuilder sb = new StringBuilder(); + sb.append((String) entity.getAttributes().get("name")).append(" ").append((String) entity.getAttributes().get("type")); + if (entity.getAttributes().get("comment") == null) { + sb.append(", "); + } else { + sb.append(" COMMENT '").append(entity.getAttributes().get("comment")).append("', "); + } + keyFields.add(sb.append(" @$ ").toString()); + } else { + AtlasEntity entity = hiveColumnsByGuids1.get(i); + StringBuilder sb = new StringBuilder(); + sb.append((String) entity.getAttributes().get("name")).append(" ").append((String) entity.getAttributes().get("type")); + if (entity.getAttributes().get("comment") == null) { + sb.append(" "); + } else { + sb.append(" COMMENT '").append(entity.getAttributes().get("comment")).append("' "); + } + keyFields.add(sb.append(" @$ ").toString()); + } + } + for (int i = 0; i < keyFields.size(); i++) { + sql.append(keyFields.get(i)); + } + sql.append(")"); + } + sql.append(")"); + return sql.toString(); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public void modifyComment(String guid, String commentStr) throws DataGovernanceException { + try { + atlasService.modifyComment(guid, commentStr); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public void bulkModifyComment(Map commentMap) throws DataGovernanceException { + commentMap.keySet().forEach(key -> { + try { + atlasService.modifyComment(key, commentMap.get(key)); + } catch (AtlasServiceException ex) { + + } + }); + } + + @Override + public void setLabels(String guid, Set labels) throws DataGovernanceException { + try { + atlasService.setLabels(guid, labels); + } catch (AtlasServiceException ex) { + throw new DataGovernanceException(23000, ex.getMessage()); + } + } + + @Override + public AtlasLineageInfo getHiveTblLineage(final String guid, final AtlasLineageInfo.LineageDirection direction, final int depth) throws DataGovernanceException { + try { + return atlasService.getLineageInfo(guid, direction, depth); + } catch (AtlasServiceException exception) { + throw new DataGovernanceException(23000, exception.getMessage()); + } + } + + @Override + public List getTop10Table() throws DAOException { + return metaInfoMapper.getTop10Table(); + } + + + @Override + public HiveTblStatsDTO hiveTblStats(String dbName, String tableName, String guid) throws Exception { + //如果有guid则使用guid + if (StringUtils.isNotBlank(guid)) { + String qualifiedName = getQualifiedName(guid); + dbName = StringUtils.substringBefore(qualifiedName, "."); + tableName = StringUtils.substringAfter(qualifiedName, "."); + } + + + HiveTblStatsDTO dto = new HiveTblStatsDTO(); + + //字段数量 + List columnCounts = tableColumnCountQueryMapper.query(Wrappers.lambdaQuery().eq(TableColumnCount::getDbName, dbName).eq(TableColumnCount::getTblName, tableName)); + if (!CollectionUtils.isEmpty(columnCounts)) { + dto.setColumnCount(columnCounts.get(0).getColumnCount()); + } + + //表容量 + List tableSizeInfos = tableSizeInfoMapper.query(Wrappers.lambdaQuery().eq(TableSizeInfo::getDbName, dbName).eq(TableSizeInfo::getTblName, tableName)); + if (!CollectionUtils.isEmpty(tableSizeInfos)) { + tableSizeInfos.forEach(tableSizeInfo -> { + if (StringUtils.equals("totalSize", tableSizeInfo.getParamKey())) { + dto.setTotalSize(Long.parseLong(tableSizeInfo.getParamValue())); + } + if (StringUtils.equals("numFiles", tableSizeInfo.getParamKey())) { + dto.setNumFiles(Integer.parseInt(tableSizeInfo.getParamValue())); + } + }); + } + //分区信息 + List tablePartitionSizeInfos = tableSizePartitionInfoMapper.query(Wrappers.lambdaQuery().eq(TablePartitionSizeInfo::getDbName, dbName).eq(TablePartitionSizeInfo::getTblName, tableName)); + if (!CollectionUtils.isEmpty(tablePartitionSizeInfos)) { + Set partIds = Sets.newHashSet(); + tablePartitionSizeInfos.forEach(tablePartitionSizeInfo -> { + partIds.add(tablePartitionSizeInfo.getParId()); + if (StringUtils.equals("totalSize", tablePartitionSizeInfo.getParamKey())) { + dto.setTotalSize(dto.getTotalSize() + Long.parseLong(tablePartitionSizeInfo.getParamValue())); + } + if (StringUtils.equals("numFiles", tablePartitionSizeInfo.getParamKey())) { + dto.setNumFiles(dto.getNumFiles() + Integer.parseInt(tablePartitionSizeInfo.getParamValue())); + } + }); + dto.setPartitionCount(partIds.size()); + } + return dto; + } + + private String getQualifiedName(String guid) throws AtlasServiceException { + AtlasEntity atlasEntity = atlasService.getHiveTbl(guid); + return StringUtils.substringBefore(String.valueOf(atlasEntity.getAttributes().get("qualifiedName")), "@"); + } + + @Override + public Long hiveTblSize(String dbName, String tableName, String guid) throws Exception { + //如果有guid则使用guid + if (StringUtils.isNotBlank(guid)) { + String qualifiedName = getQualifiedName(guid); + dbName = StringUtils.substringBefore(qualifiedName, "."); + tableName = StringUtils.substringAfter(qualifiedName, "."); + } + + AtomicReference size = new AtomicReference<>(0L); + //表容量 + List tableSizeInfos = tableSizeInfoMapper.query(Wrappers.lambdaQuery().eq(TableSizeInfo::getDbName, dbName).eq(TableSizeInfo::getTblName, tableName)); + if (!CollectionUtils.isEmpty(tableSizeInfos)) { + tableSizeInfos.forEach(tableSizeInfo -> { + if (StringUtils.equals("totalSize", tableSizeInfo.getParamKey())) { + size.set(Long.parseLong(tableSizeInfo.getParamValue())); + } + }); + } + //分区信息 + List tablePartitionSizeInfos = tableSizePartitionInfoMapper.query(Wrappers.lambdaQuery().eq(TablePartitionSizeInfo::getDbName, dbName).eq(TablePartitionSizeInfo::getTblName, tableName)); + if (!CollectionUtils.isEmpty(tablePartitionSizeInfos)) { + Set partIds = Sets.newHashSet(); + tablePartitionSizeInfos.forEach(tablePartitionSizeInfo -> { + partIds.add(tablePartitionSizeInfo.getParId()); + if (StringUtils.equals("totalSize", tablePartitionSizeInfo.getParamKey())) { + size.set(size.get() + Long.parseLong(tablePartitionSizeInfo.getParamValue())); + } + + }); + + } + return size.get(); + } + + + @Override + public CreateLabelInfo createLabel(CreateLabelVO vo) throws Exception { + try { + return CreateLabelInfo.from(atlasService.createLabel(vo.getName())); + } catch (AtlasServiceException exception) { + throw new DataGovernanceException(23000, exception.getMessage()); + } + + } + + + @Override + public void deleteLabel(DeleteLabelVO vo) throws Exception { + try { + atlasService.deleteLabel(vo.getName()); + } catch (Exception exception) { + throw new DataGovernanceException(23000, exception.getMessage()); + } + } + + + @Override + public UpdateLabelInfo updateLabel(UpdateLabelVO vo) throws Exception { + + if (StringUtils.equals(vo.getName(),vo.getOrgName())){ + throw new DataGovernanceException(23000, "修改标签名称前后相同"); + } + + Optional termGuidOptional = getTermGuidOptional(vo.getOrgName()); + if (!termGuidOptional.isPresent()){ + throw new DataGovernanceException(23000, "标签"+vo.getOrgName()+ "不存在"); + } + + AtlasGlossaryTerm atlasGlossaryTerm = null; + //首先新建标签 + try { + atlasGlossaryTerm = atlasService.createLabel(vo.getName()); + } catch (Exception exception) { + throw new DataGovernanceException(23000, exception.getMessage()); + } + //尝试删除原标签 + try { + atlasService.deleteLabel(vo.getOrgName()); + } catch (Exception exception) { + //休眠五秒,atlas新建分词有延迟 + logger.error("wait for 5 seconds to roll back term " + vo.getName()); + TimeUnit.SECONDS.sleep(5); + //回滚删除新建标签 + try { + atlasService.deleteLabel(vo.getName()); + } catch (Exception exception1) { + throw new DataGovernanceException(23000, exception1.getMessage()); + } + throw new DataGovernanceException(23000, exception.getMessage()); + } + + return UpdateLabelInfo.from(atlasGlossaryTerm); + } + + + @Override + public void bindLabel(BindLabelVO vo) throws Exception { + + if (StringUtils.isNotBlank(vo.getLabelGuid()) && StringUtils.isNotBlank(vo.getTableGuid())) { + try { + + atlasService.assignTermToEntities(vo.getLabelGuid(), Lists.newArrayList(vo.getTableGuid())); + } catch (AtlasServiceException exception1) { + throw new DataGovernanceException(23000, exception1.getMessage()); + } + } + + Optional termGuidOptional = getTermGuidOptional(vo.getLabel()); + List entityHeaders = getAtlasEntityHeaders(vo.getTableName()); + + try { + + atlasService.assignTermToEntities(termGuidOptional.get(), Lists.newArrayList(entityHeaders.get(0).getGuid())); + } catch (AtlasServiceException exception1) { + throw new DataGovernanceException(23000, exception1.getMessage()); + } + + } + + private Optional getTermGuidOptional(String label) throws AtlasServiceException, DataGovernanceException { + Optional termGuidOptional = atlasService.getTermGuid(GlossaryConstant.LABEL, label); + if (!termGuidOptional.isPresent()) { + throw new DataGovernanceException(23000, label + "标签不存在"); + } + return termGuidOptional; + } + + @Override + public void unBindLabel(UnBindLabelVO vo) throws Exception { + if (StringUtils.isNotBlank(vo.getLabelGuid()) && StringUtils.isNotBlank(vo.getTableGuid()) && StringUtils.isNotBlank(vo.getRelationGuid())) { + try { + atlasService.disassociateTermFromEntities(vo.getLabelGuid(), Lists.newArrayList(RelatedObjectId.from(vo.getTableGuid(), vo.getRelationGuid()))); + } catch (AtlasServiceException exception1) { + throw new DataGovernanceException(23000, exception1.getMessage()); + } + } + + Optional termGuidOptional = getTermGuidOptional(vo.getLabel()); + List entityHeaders = getAtlasEntityHeaders(vo.getTableName()); + + String termGuid = termGuidOptional.get(); + AtlasEntityHeader atlasEntityHeader = entityHeaders.get(0); + String tableGuid = atlasEntityHeader.getGuid(); + Optional termAssignmentHeaderOptional = atlasEntityHeader.getMeanings().stream().filter(atlasTermAssignmentHeader -> StringUtils.equals(termGuid, atlasTermAssignmentHeader.getTermGuid())).findFirst(); + if (!termAssignmentHeaderOptional.isPresent()){ + throw new DataGovernanceException(23000, vo.getTableName() + "表与标签" + vo.getLabel() +"未绑定"); + } + try { + atlasService.disassociateTermFromEntities(termGuidOptional.get(), Lists.newArrayList(RelatedObjectId.from(tableGuid, termAssignmentHeaderOptional.get().getRelationGuid()))); + } catch (AtlasServiceException exception1) { + throw new DataGovernanceException(23000, exception1.getMessage()); + } + } + + private List getAtlasEntityHeaders(String tableName) throws AtlasServiceException, DataGovernanceException { + List entityHeaders = atlasService.searchHiveTable0(null, tableName, null,true, 1, 0); + if (CollectionUtils.isEmpty(entityHeaders)) { + throw new DataGovernanceException(23000, tableName + "表不存在"); + } + return entityHeaders; + } + + @Override + public List listLabels(String query, Integer limit, Integer offset) throws Exception { + List atlasEntityHeaders = atlasService.listLabels(query, limit, offset); + Optional labelOptional = atlasService.getRootGlossaryGuid(GlossaryConstant.LABEL); + if (!labelOptional.isPresent()) { + throw new DataGovernanceException(23000, "需要创建 " + GlossaryConstant.LABEL.getRoot() + " glossary "); + } + return atlasEntityHeaders.stream() + .filter(atlasEntityHeader -> + StringUtils.endsWith(atlasEntityHeader.getAttribute("qualifiedName").toString(), GlossaryConstant.LABEL.endWith())) + .map(SearchLabelDTO::from).collect(Collectors.toList()); + } + + public List getHiveTblPartitionByName(String dbName,String tableName) throws Exception { + return metaInfoMapper.getPartInfo(dbName,tableName); + + } + + + private boolean isLabel(String termGuid) { + + AtlasGlossaryTerm term; + try { + term = atlasService.getGlossaryTermDetail(termGuid); + }catch (AtlasServiceException e){ + logger.error(e.getMessage(),e); + return false; + } + + if (term == null){ + return false; + } + return term.getQualifiedName().endsWith(GlossaryConstant.LABEL.endWith()); + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/WorkspaceInfoServiceImpl.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/WorkspaceInfoServiceImpl.java new file mode 100644 index 0000000000..ce78735b79 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/service/impl/WorkspaceInfoServiceImpl.java @@ -0,0 +1,43 @@ +/* + * + * * Copyright 2019 WeBank + * * + * * 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 com.webank.wedatasphere.dss.data.governance.service.impl; + +import com.webank.wedatasphere.dss.data.governance.dao.WorkspaceInfoMapper; +import com.webank.wedatasphere.dss.data.governance.exception.DataGovernanceException; +import com.webank.wedatasphere.dss.data.governance.service.WorkspaceInfoService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +import java.util.List; + + +@Service +public class WorkspaceInfoServiceImpl implements WorkspaceInfoService { + + @Autowired + private WorkspaceInfoMapper workspaceInfoMapper; + + + @Override + public List getWorkspaceUsers(int workspaceId,String search) throws DataGovernanceException { + + List workspaceUsers = workspaceInfoMapper.getWorkspaceUsersName(workspaceId,search); + return workspaceUsers; + } +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DataSourceUtil.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DataSourceUtil.java new file mode 100644 index 0000000000..92a4a2316d --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DataSourceUtil.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.dss.data.governance.utils; + +import com.alibaba.druid.pool.DruidDataSource; +import com.webank.wedatasphere.dss.data.governance.conf.GovernanceConf; + + +public class DataSourceUtil { + private static DruidDataSource druidDataSource =null; + + private DataSourceUtil(){} + + public static DruidDataSource getDataSource(){ + if(druidDataSource ==null) { + synchronized (DataSourceUtil.class){ + if(druidDataSource ==null){ + druidDataSource = new DruidDataSource(); + druidDataSource.setDriverClassName(GovernanceConf.METASTORE_DATASOURCE_DRIVER.getValue()); + druidDataSource.setUrl(GovernanceConf.METASTORE_DATASOURCE_URL.getValue()); + druidDataSource.setUsername(GovernanceConf.METASTORE_DATASOURCE_USERNAME.getValue()); + druidDataSource.setPassword(GovernanceConf.METASTORE_DATASOURCE_PASSWORD.getValue()); + } + } + } + return druidDataSource; + } + +} diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DateUtil.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DateUtil.java similarity index 93% rename from dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DateUtil.java rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DateUtil.java index c57c5b9478..31a0cd07d0 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/DateUtil.java +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/DateUtil.java @@ -1,6 +1,21 @@ -package com.webank.wedatasphere.dss.data.common.utils; - -import org.apache.atlas.SortOrder; +/* + * + * * Copyright 2019 WeBank + * * + * * 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 com.webank.wedatasphere.dss.data.governance.utils; import java.sql.Timestamp; import java.text.DecimalFormat; @@ -9,6 +24,7 @@ import java.util.Calendar; import java.util.Date; + public class DateUtil { /** @@ -352,7 +368,7 @@ public static Long strToTimeStamp(String date,String format) throws ParseExcepti } public static String unixToTimeStr(Long unixtime) { - return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date (unixtime)); + return new SimpleDateFormat("yyyy MM-dd HH:mm:ss").format(new Date (unixtime)); } public static String unixToTimeStr(Double unixtime){ diff --git a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/HttpClientUtil.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/HttpClientUtil.java similarity index 93% rename from dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/HttpClientUtil.java rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/HttpClientUtil.java index e14fbe073f..762a402eea 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-common/src/main/java/com/webank/wedatasphere/dss/data/common/utils/HttpClientUtil.java +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/utils/HttpClientUtil.java @@ -1,4 +1,22 @@ -package com.webank.wedatasphere.dss.data.common.utils; +/* + * + * * Copyright 2019 WeBank + * * + * * 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 com.webank.wedatasphere.dss.data.governance.utils; import org.apache.http.Consts; import org.apache.http.HttpEntity; @@ -28,14 +46,11 @@ import java.net.URLEncoder; import java.security.cert.CertificateException; import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Date; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.Map.Entry; -import java.util.Random; +@SuppressWarnings("all") public final class HttpClientUtil { private final static Logger logger = LoggerFactory.getLogger(HttpClientUtil.class); public final static int connectTimeout = 5000; @@ -118,6 +133,11 @@ public static String postForm(String url, int timeout, Map heade return ""; } + /** + * 调用saltapi时 + * + * @author: XIEJIAN948@pingan.com.cn + */ public static String postJsonBody(String url, int timeout, Map headerMap, String paraData, String encoding) { @@ -329,6 +349,11 @@ public static String getNowDate() { return sdf.format(date); } + /** + * 调用saltapi时 + * + * @author: XIEJIAN948@pingan.com.cn + */ public static String postJsonBody2(String url, int timeout, Map headerMap, List paramsList, String encoding) { logger.info("successfully start post Json Body url{} ", url); @@ -377,6 +402,11 @@ public static String postJsonBody2(String url, int timeout, Map return ""; } + /** + * 调用saltapi时 + * + * @author: XIEJIAN948@pingan.com.cn + */ public static String postJsonBody3(String url, int timeout, Map headerMap, Map paramsList, String encoding) { HttpPost post = new HttpPost(url); diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindLabelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindLabelVO.java new file mode 100644 index 0000000000..dd2d23095a --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindLabelVO.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class BindLabelVO { + + private String label; + + private String tableName; + + private String labelGuid; + + private String tableGuid; + +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindModelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindModelVO.java new file mode 100644 index 0000000000..572f15ca9f --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/BindModelVO.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class BindModelVO { + + private String modelName; + + private String modelType; + + private String tableName; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateLabelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateLabelVO.java new file mode 100644 index 0000000000..f25c96328e --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateLabelVO.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class CreateLabelVO { + private String name; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateModelTypeVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateModelTypeVO.java new file mode 100644 index 0000000000..53b33ed390 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/CreateModelTypeVO.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class CreateModelTypeVO { + + private String name; + + private String type; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteLabelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteLabelVO.java new file mode 100644 index 0000000000..9488c26e5f --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteLabelVO.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class DeleteLabelVO { + private String name; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteModelTypeVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteModelTypeVO.java new file mode 100644 index 0000000000..0079ae6cb2 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/DeleteModelTypeVO.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class DeleteModelTypeVO { + private String name; + + private String type; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindLabelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindLabelVO.java new file mode 100644 index 0000000000..2f50ddcaaa --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindLabelVO.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class UnBindLabelVO { + private String label; + + private String tableName; + + private String labelGuid; + + private String tableGuid; + + private String relationGuid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindModelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindModelVO.java new file mode 100644 index 0000000000..d507df30f9 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UnBindModelVO.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + +import lombok.Data; + +@Data +public class UnBindModelVO { + private String modelName; + + private String modelType; + + private String tableName; + + private String guid; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateLabelVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateLabelVO.java new file mode 100644 index 0000000000..835ee3f843 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateLabelVO.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + +import lombok.Data; + +@Data +public class UpdateLabelVO { + private String name; + + private String orgName; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateModelTypeVO.java b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateModelTypeVO.java new file mode 100644 index 0000000000..07840d41ea --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/java/com/webank/wedatasphere/dss/data/governance/vo/UpdateModelTypeVO.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.data.governance.vo; + + +import lombok.Data; + +@Data +public class UpdateModelTypeVO { + private String name; + + private String orgName; + + private String type; +} diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/application.yml b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/application.yml new file mode 100644 index 0000000000..764e27994e --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/application.yml @@ -0,0 +1,22 @@ +server: + port: 20082 +spring: + application: + name: data-assets-server + mvc: + servlet: + path: +eureka: + client: + serviceUrl: + defaultZone: http://hdp:20303/eureka/ +management: + endpoints: + web: + exposure: + include: refresh,info +logging: + config: classpath:log4j2.xml +#mybatis-plus: +# configuration: +# log-impl: org.apache.ibatis.logging.stdout.StdOutImpl \ No newline at end of file diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/atlas-application.properties b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/atlas-application.properties new file mode 100644 index 0000000000..3f5a357b8f --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/atlas-application.properties @@ -0,0 +1,67 @@ +# Generated by Apache Ambari. Sun Feb 27 10:44:18 2022 + +atlas.audit.hbase.tablename=ATLAS_ENTITY_AUDIT_EVENTS +atlas.audit.hbase.zookeeper.quorum=hadoop +atlas.audit.zookeeper.session.timeout.ms=60000 +atlas.authentication.keytab=/etc/security/keytabs/atlas.service.keytab +atlas.authentication.method.file=true +atlas.authentication.method.file.filename=/home/hadoop/software/apache-atlas-2.0.0/conf/users-credentials.properties +atlas.authentication.method.kerberos=false +atlas.authentication.method.ldap=false +atlas.authentication.method.ldap.ad.base.dn= +atlas.authentication.method.ldap.ad.bind.dn= +atlas.authentication.method.ldap.ad.bind.password= +atlas.authentication.method.ldap.ad.default.role=ROLE_USER +atlas.authentication.method.ldap.ad.domain= +atlas.authentication.method.ldap.ad.referral=ignore +atlas.authentication.method.ldap.ad.url= +atlas.authentication.method.ldap.ad.user.searchfilter=(sAMAccountName={0}) +atlas.authentication.method.ldap.base.dn= +atlas.authentication.method.ldap.bind.dn= +atlas.authentication.method.ldap.bind.password= +atlas.authentication.method.ldap.default.role=ROLE_USER +atlas.authentication.method.ldap.groupRoleAttribute=cn +atlas.authentication.method.ldap.groupSearchBase= +atlas.authentication.method.ldap.groupSearchFilter= +atlas.authentication.method.ldap.referral=ignore +atlas.authentication.method.ldap.type=ldap +atlas.authentication.method.ldap.url= +atlas.authentication.method.ldap.user.searchfilter= +atlas.authentication.method.ldap.userDNpattern=uid= +atlas.authentication.principal=atlas +atlas.authorizer.impl=ranger +atlas.cluster.name=bigdata_all_in_one +atlas.enableTLS=false +atlas.graph.index.search.solr.mode=cloud +atlas.graph.index.search.solr.wait-searcher=true +atlas.graph.index.search.solr.zookeeper-url=hadoop:2181/infra-solr +atlas.graph.storage.hbase.table=atlas_janus +atlas.graph.storage.hostname=hadoop +atlas.kafka.auto.commit.enable=false +atlas.kafka.bootstrap.servers=hadoop:6667 +atlas.kafka.hook.group.id=atlas +atlas.kafka.zookeeper.connect=hadoop:2181 +atlas.kafka.zookeeper.connection.timeout.ms=30000 +atlas.kafka.zookeeper.session.timeout.ms=60000 +atlas.kafka.zookeeper.sync.time.ms=20 +atlas.lineage.schema.query.hive_table=hive_table where __guid='%s'\, columns +atlas.lineage.schema.query.Table=Table where __guid='%s'\, columns +atlas.notification.create.topics=true +atlas.notification.embedded=false +atlas.notification.replicas=1 +atlas.notification.topics=ATLAS_HOOK,ATLAS_ENTITIES +atlas.proxyusers= +atlas.rest.address=http://hadoop:21000 +atlas.server.address.id1=hadoop:21000 +atlas.server.bind.address=0.0.0.0 +atlas.server.ha.enabled=false +atlas.server.http.port=21000 +atlas.server.https.port=21443 +atlas.server.ids=id1 +atlas.simple.authz.policy.file=/home/hadoop/software/apache-atlas-2.0.0/conf/atlas-simple-authz-policy.json +atlas.solr.kerberos.enable=false +atlas.ssl.exclude.protocols=TLSv1.2 +atlas.sso.knox.browser.useragent= +atlas.sso.knox.enabled=false +atlas.sso.knox.providerurl= +atlas.sso.knox.publicKey= diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/linkis.properties b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/linkis.properties new file mode 100644 index 0000000000..bd993d9096 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/linkis.properties @@ -0,0 +1,82 @@ +# +# /* +# * Copyright 2019 WeBank +# * +# * 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. +# */ +# + +wds.linkis.test.mode=true +wds.linkis.log.clear=true +wds.linkis.server.version=v1 + + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://hdp:3306/hive?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username=root + +***REMOVED***root + + + + + +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.data.governance.restful + +##mybatis +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/data/governance/dao/impl/*.xml + +wds.linkis.server.mybatis.typeAliasesPackage=com.webank.wedatasphere.dss.data.governance.entity + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.data.governance.dao + + +# atlas config +atlas.rest.address=http://hdp:21000 +atlas.username=admin +atlas.password=admin123 +atlas.client.readTimeoutMSecs=60000 +atlas.client.connectTimeoutMSecs=60000 + +# create root classification +atlas.root.indicator=datamodel_indicator +atlas.root.measure=datamodel_measure +atlas.root.dimension=datamodel_dimension +atlas.root.layer=datamodel_layer +atlas.root.theme=datamodel_theme + +# create root glossary +atlas.root.label=datamodel_label +atlas.root.collection=datamodel_collection + + +# hive metadata config +metastore.datasource.driver=com.mysql.jdbc.Driver +metastore.datasource.url=jdbc:mysql://hdp:3306/hive?characterEncoding=UTF-8 +metastore.datasource.username=root +metastore.datasource.password=root + + +wds.workspace.client.serverurl=http://hdp:29001 + +wds.workspace.client.authtoken.key=hdfs + +wds.workspace.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.workspace.client.discovery.enabled=false + +wds.workspace.client.authtoken.value=hdfs + +wds.workspace.client.dws.version=v1 + +wds.wedatasphere.data.assert.client.strategy=static \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j.properties b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j.properties similarity index 52% rename from dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j.properties rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j.properties index f88f949da0..0807e60877 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/log4j.properties +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j.properties @@ -1,19 +1,18 @@ # -# /* -# * Copyright 2019 WeBank -# * -# * 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. -# */ +# Copyright 2019 WeBank +# +# 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. +# # ### set log levels ### @@ -32,7 +31,7 @@ log4j.appender.com.webank.bdp.ide.core.Threshold=INFO log4j.additivity.com.webank.bdp.ide.core=false log4j.appender.com.webank.bdp.ide.core.layout=org.apache.log4j.PatternLayout log4j.appender.com.webank.bdp.ide.core.Append=true -log4j.appender.com.webank.bdp.ide.core.File=logs/dss-data-governance-server.log +log4j.appender.com.webank.bdp.ide.core.File=logs/linkis.log log4j.appender.com.webank.bdp.ide.core.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n -log4j.logger.org.springframework=INFO \ No newline at end of file +log4j.logger.org.springframework=INFO diff --git a/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j2.xml b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..3923cd9f39 --- /dev/null +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/resources/log4j2.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DSSDataGovernanceApplication.scala b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsApplication.scala similarity index 92% rename from dss-apps/dss-data-governance/dss-data-governance-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DSSDataGovernanceApplication.scala rename to dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsApplication.scala index 1fe794bfff..da173966da 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DSSDataGovernanceApplication.scala +++ b/dss-apps/dss-dataasset-management/dss-data-assets-server/src/main/scala/com/webank/wedatasphere/dss/data/governance/DataAssetsApplication.scala @@ -1,4 +1,4 @@ - /* +/* * * * Copyright 2019 WeBank * * @@ -19,11 +19,13 @@ package com.webank.wedatasphere.dss.data.governance import com.webank.wedatasphere.dss.common.utils.DSSMainHelper -import org.apache.linkis.DataWorkCloudApplication import org.apache.linkis.common.utils.{Logging, Utils} +import org.apache.linkis.{DataWorkCloudApplication, LinkisBaseServerApp} -object DSSDataGovernanceApplication extends Logging { + +object DataAssetsApplication extends Logging { + val userName: String = System.getProperty("user.name") val hostName: String = Utils.getComputerName diff --git a/dss-apps/dss-dataasset-management/pom.xml b/dss-apps/dss-dataasset-management/pom.xml new file mode 100644 index 0000000000..394f9366b8 --- /dev/null +++ b/dss-apps/dss-dataasset-management/pom.xml @@ -0,0 +1,85 @@ + + + + dss + com.webank.wedatasphere.dss + 1.2.0 + ../../pom.xml + + 4.0.0 + + dss-dataasset-management + pom + + dss-data-assets-server + dss-data-assets-client + + + UTF-8 + 2.16 + 2.22.2 + 2.22.2 + 1.2.0 + + + + + + com.webank.wedatasphere.dss + dss-common + ${dss.version} + provided + + + org.apache.linkis + linkis-module + ${linkis.version} + + + asm + org.ow2.asm + + + hk2-api + org.glassfish.hk2 + + + jersey-common + org.glassfish.jersey.core + + + linkis-common + org.apache.linkis + + + + + org.apache.linkis + linkis-mybatis + ${linkis.version} + + + + org.modelmapper + modelmapper + 2.4.4 + + + + junit + junit + 4.12 + test + + + org.junit.platform + junit-platform-launcher + 1.5.2 + test + + + + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/pom.xml new file mode 100644 index 0000000000..fdc938be0a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/pom.xml @@ -0,0 +1,57 @@ + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + + 4.0.0 + + dss-datamodel-center-client + + + 8 + 8 + + + + + org.apache.linkis + linkis-gateway-httpclient-support + ${linkis.version} + + + org.projectlombok + lombok + 1.18.16 + compile + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + src/main/resources + + + ${project.artifactId}-${project.version} + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/ClassificationConstant.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/ClassificationConstant.java new file mode 100644 index 0000000000..59555c77ef --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/ClassificationConstant.java @@ -0,0 +1,76 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.entity; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; + +public enum ClassificationConstant { + /** + * 指标 + */ + INDICATOR(1, "indicator"), + /** + * 度量 + */ + MEASURE(2,"measure"), + /** + * 维度 + */ + DIMENSION(0, "dimension"), + /** + * 主题 + */ + THEME(3, "theme"), + /** + * 分层 + */ + LAYER(4, "layer"); + + private int type; + + + private String typeCode; + + ClassificationConstant(int type, String typeCode) { + this.type = type; + + this.typeCode = typeCode; + } + + public static boolean isTypeScope(int type) { + return type >= 0 && type < values().length; + } + + public static boolean isTypeScope(String type) { + return getClassificationConstantByTypeCode(type).isPresent(); + } + + public static Optional getClassificationConstantByTypeCode(String typeCode) { + for (ClassificationConstant c : values()) { + if (StringUtils.equals(c.typeCode,typeCode)) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + public static Optional getClassificationConstantByType(int type) { + for (ClassificationConstant c : values()) { + if (c.type == type) { + return Optional.of(c); + } + } + return Optional.empty(); + } + + + + public int getType() { + return type; + } + + public String getTypeCode() { + return typeCode; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/CreateModelTypeInfo.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/CreateModelTypeInfo.java new file mode 100644 index 0000000000..e3a210f784 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/CreateModelTypeInfo.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.entity; + + +import lombok.Data; + +@Data +public class CreateModelTypeInfo { + private String name; + + private String guid; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/HiveSimpleInfo.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/HiveSimpleInfo.java new file mode 100644 index 0000000000..36f363ac29 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/HiveSimpleInfo.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.entity; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; + + +@Data +public class HiveSimpleInfo implements Serializable { + private String guid; + private String name; + private String qualifiedName; + private String createTime; + private String owner; + private String aliases; + private String lastAccessTime; + private String comment; + private List classifications; + private String totalSize; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/UpdateModelTypeInfo.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/UpdateModelTypeInfo.java new file mode 100644 index 0000000000..a8b3ffa67e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/java/com/webank/wedatasphere/dss/datamodel/center/client/entity/UpdateModelTypeInfo.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.entity; + + +import lombok.Data; + +@Data +public class UpdateModelTypeInfo { + private String name; + + private String guid; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/AbstractRemoteClient.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/AbstractRemoteClient.scala new file mode 100644 index 0000000000..90a2bc2f0d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/AbstractRemoteClient.scala @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.center.client + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result + +abstract class AbstractRemoteClient extends RemoteClient { + protected val dwsHttpClient:DWSHttpClient + + override def execute(action: Action): Result = action match { + case action: Action => dwsHttpClient.execute(action) + } + + override def close(): Unit = dwsHttpClient.close() +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/DatamodelCenterRemoteClient.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/DatamodelCenterRemoteClient.scala new file mode 100644 index 0000000000..0632b21164 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/DatamodelCenterRemoteClient.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client + +import com.webank.wedatasphere.dss.datamodel.center.client.request._ +import com.webank.wedatasphere.dss.datamodel.center.client.response._ + +trait DatamodelCenterRemoteClient extends RemoteClient { + def themesReference(action: ThemesReferenceAction) : ThemesReferenceResult + def layersReference(action: LayersReferenceAction) : LayersReferenceResult + def modifiersReference(action: ModifiersReferenceAction):ModifiersReferenceResult + def cyclesReference(action:CyclesReferenceAction) : CyclesReferenceResult +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/RemoteClient.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/RemoteClient.scala new file mode 100644 index 0000000000..614bcfa721 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/RemoteClient.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client + +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result +import java.io.Closeable + +trait RemoteClient extends Closeable{ + protected def execute(action: Action): Result + + override def close(): Unit +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/exception/DatamodelCenterClientBuilderException.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/exception/DatamodelCenterClientBuilderException.scala new file mode 100644 index 0000000000..9ac06cd545 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/exception/DatamodelCenterClientBuilderException.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.exception + +import org.apache.linkis.common.exception.ErrorException + +class DatamodelCenterClientBuilderException(errorDesc: String) extends ErrorException(212400, errorDesc) diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/impl/LinkisDatamodelCenterRemoteClient.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/impl/LinkisDatamodelCenterRemoteClient.scala new file mode 100644 index 0000000000..7f2a67284f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/impl/LinkisDatamodelCenterRemoteClient.scala @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.impl + +import com.webank.wedatasphere.dss.datamodel.center.client.request.{CyclesReferenceAction, LayersReferenceAction, ModifiersReferenceAction, ThemesReferenceAction} +import com.webank.wedatasphere.dss.datamodel.center.client.response.{CyclesReferenceResult, LayersReferenceResult, ModifiersReferenceResult, ThemesReferenceResult} +import com.webank.wedatasphere.dss.datamodel.center.client.{AbstractRemoteClient, DatamodelCenterRemoteClient} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.config.DWSClientConfig + +class LinkisDatamodelCenterRemoteClient(clientConfig: DWSClientConfig) extends AbstractRemoteClient with DatamodelCenterRemoteClient { + override protected val dwsHttpClient: DWSHttpClient = new DWSHttpClient(clientConfig, "Datamodel-center-Client") + + override def themesReference(action: ThemesReferenceAction): ThemesReferenceResult = execute(action).asInstanceOf[ThemesReferenceResult] + + override def layersReference(action: LayersReferenceAction): LayersReferenceResult = execute(action).asInstanceOf[LayersReferenceResult] + + override def modifiersReference(action: ModifiersReferenceAction): ModifiersReferenceResult = execute(action).asInstanceOf[ModifiersReferenceResult] + + override def cyclesReference(action: CyclesReferenceAction): CyclesReferenceResult = execute(action).asInstanceOf[CyclesReferenceResult] +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/CyclesReferenceAction.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/CyclesReferenceAction.scala new file mode 100644 index 0000000000..ef267eefaf --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/CyclesReferenceAction.scala @@ -0,0 +1,43 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.request + +import com.webank.wedatasphere.dss.datamodel.center.client.exception.DatamodelCenterClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class CyclesReferenceAction extends GetAction with DatamodelCenterAction{ + + private var name:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("datamodel", "cycles", "reference",name) +} +object CyclesReferenceAction{ + def builder(): Builder = new Builder + + class Builder private[CyclesReferenceAction]() { + private var name:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setName(name:String): Builder = { + this.name = name + this + } + + def build(): CyclesReferenceAction = { + val action = new CyclesReferenceAction + if(name == null) throw new DatamodelCenterClientBuilderException("name is needed!") + action.name = name + action.setUser(user) + action + } + } +} + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/DatamodelCenterAction.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/DatamodelCenterAction.scala new file mode 100644 index 0000000000..5d238c773b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/DatamodelCenterAction.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.request + +import org.apache.linkis.httpclient.dws.request.DWSHttpAction + +trait DatamodelCenterAction extends DWSHttpAction with org.apache.linkis.httpclient.request.UserAction diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/LayersReferenceAction.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/LayersReferenceAction.scala new file mode 100644 index 0000000000..68ee6532f2 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/LayersReferenceAction.scala @@ -0,0 +1,43 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.request + +import com.webank.wedatasphere.dss.datamodel.center.client.exception.DatamodelCenterClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class LayersReferenceAction extends GetAction with DatamodelCenterAction{ + + private var name:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("datamodel", "layers", "reference",name) +} +object LayersReferenceAction{ + def builder(): Builder = new Builder + + class Builder private[LayersReferenceAction]() { + private var name:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setName(name:String): Builder = { + this.name = name + this + } + + def build(): LayersReferenceAction = { + val action = new LayersReferenceAction + if(name == null) throw new DatamodelCenterClientBuilderException("name is needed!") + action.name = name + action.setUser(user) + action + } + } +} + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ModifiersReferenceAction.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ModifiersReferenceAction.scala new file mode 100644 index 0000000000..684b792651 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ModifiersReferenceAction.scala @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.request + +import com.webank.wedatasphere.dss.datamodel.center.client.exception.DatamodelCenterClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class ModifiersReferenceAction extends GetAction with DatamodelCenterAction{ + + private var name:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("datamodel", "modifiers", "reference",name) +} +object ModifiersReferenceAction{ + def builder(): Builder = new Builder + + class Builder private[ModifiersReferenceAction]() { + private var name:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setName(name:String): Builder = { + this.name = name + this + } + + def build(): ModifiersReferenceAction = { + val action = new ModifiersReferenceAction + if(name == null) throw new DatamodelCenterClientBuilderException("name is needed!") + action.name = name + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ThemesReferenceAction.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ThemesReferenceAction.scala new file mode 100644 index 0000000000..484f0bb3fa --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/request/ThemesReferenceAction.scala @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.request + +import com.webank.wedatasphere.dss.datamodel.center.client.exception.DatamodelCenterClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class ThemesReferenceAction extends GetAction with DatamodelCenterAction{ + + private var name:String=_ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("datamodel", "themes", "reference",name) +} +object ThemesReferenceAction{ + def builder(): Builder = new Builder + + class Builder private[ThemesReferenceAction]() { + private var name:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setName(name:String): Builder = { + this.name = name + this + } + + def build(): ThemesReferenceAction = { + val action = new ThemesReferenceAction + if(name == null) throw new DatamodelCenterClientBuilderException("name is needed!") + action.name = name + action.setUser(user) + action + } + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/CyclesReferenceResult.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/CyclesReferenceResult.scala new file mode 100644 index 0000000000..125d0c6dcc --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/CyclesReferenceResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/datamodel/cycles/reference/(\\S+)") +class CyclesReferenceResult extends DWSResult{ + @BeanProperty var result:Int = _ +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/LayersReferenceResult.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/LayersReferenceResult.scala new file mode 100644 index 0000000000..916266be60 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/LayersReferenceResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/datamodel/layers/reference/(\\S+)") +class LayersReferenceResult extends DWSResult{ + @BeanProperty var result:Int = _ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ModifiersReferenceResult.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ModifiersReferenceResult.scala new file mode 100644 index 0000000000..fdcf81cb37 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ModifiersReferenceResult.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/datamodel/modifiers/reference/(\\S+)") +class ModifiersReferenceResult extends DWSResult{ + @BeanProperty var result:Int = _ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ThemesReferenceResult.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ThemesReferenceResult.scala new file mode 100644 index 0000000000..a8111cee5a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/main/scala/com/webank/wedatasphere/dss/datamodel/center/client/response/ThemesReferenceResult.scala @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.client.response + +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/datamodel/themes/reference/(\\S+)") +class ThemesReferenceResult extends DWSResult{ + @BeanProperty var result:Int = _ +} + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/test/scala/com/webank/wedatasphere/dss/datamodel/center/client/TestDatamodelCenterRemoteClient.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/test/scala/com/webank/wedatasphere/dss/datamodel/center/client/TestDatamodelCenterRemoteClient.scala new file mode 100644 index 0000000000..06dd824511 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-client/src/test/scala/com/webank/wedatasphere/dss/datamodel/center/client/TestDatamodelCenterRemoteClient.scala @@ -0,0 +1,48 @@ +package com.webank.wedatasphere.dss.datamodel.center.client + +import com.webank.wedatasphere.dss.datamodel.center.client.impl.LinkisDatamodelCenterRemoteClient +import com.webank.wedatasphere.dss.datamodel.center.client.request.{CyclesReferenceAction, LayersReferenceAction, ModifiersReferenceAction, ThemesReferenceAction} +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder + +import java.util.concurrent.TimeUnit + +object TestDatamodelCenterRemoteClient { + def main(args: Array[String]): Unit = { + val clientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl("http://localhost:9321") + .connectionTimeout(30000) + .discoveryEnabled(false) + .discoveryFrequency(1,TimeUnit.MINUTES) + .loadbalancerEnabled(true) + .maxConnectionSize(5) + .retryEnabled(false) + .readTimeout(30000) + .setAuthenticationStrategy(null) + .setAuthTokenKey("hdfs") + .setAuthTokenValue("hdfs") + .setDWSVersion("v1") + .build() + + val datamodelCenterClient = new LinkisDatamodelCenterRemoteClient(clientConfig) + + val themesResult = datamodelCenterClient + .themesReference(ThemesReferenceAction.builder().setUser("hdfs").setName("主题").build()) + .result + println(themesResult) + + val layersResult = datamodelCenterClient + .layersReference(LayersReferenceAction.builder().setUser("hdfs").setName("DWS").build()) + .result + println(layersResult) + + val cyclesResult = datamodelCenterClient + .cyclesReference(CyclesReferenceAction.builder().setUser("hdfs").setName("Once").build()) + .result + println(cyclesResult) + + val modifiersResult = datamodelCenterClient + .modifiersReference(ModifiersReferenceAction.builder().setUser("hdfs").setName("在商场").build()) + .result + println(modifiersResult) + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/pom.xml new file mode 100644 index 0000000000..98b3f8b8e9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/pom.xml @@ -0,0 +1,99 @@ + + + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-center-common + + + + + org.apache.linkis + linkis-module + ${linkis.version} + + + org.apache.linkis + linkis-mybatis + ${linkis.version} + + + + com.webank.wedatasphere.dss + dss-data-warehouse-client + ${dss.version} + + + + org.apache.linkis + linkis-computation-client + ${linkis.version} + + + com.webank.wedatasphere.dss + dss-framework-workspace-client + ${dss.version} + + + + com.webank.wedatasphere.dss + dss-data-assets-client + ${dss.version} + + + + org.projectlombok + lombok + 1.18.16 + compile + + + + mysql + mysql-connector-java + 5.1.49 + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ClientStrategy.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ClientStrategy.java new file mode 100644 index 0000000000..3f25d32623 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ClientStrategy.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import lombok.Data; + + +public enum ClientStrategy { + TOKEN("token"), + STATIC("static"); + + private final String code; + + ClientStrategy(String code) { + this.code = code; + } + + public String getCode() { + return code; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/CommonConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/CommonConfig.java new file mode 100644 index 0000000000..2892e47712 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/CommonConfig.java @@ -0,0 +1,127 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.datamodel.center.common.filter.AuthFilter; +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient; +import org.apache.linkis.httpclient.authentication.AuthenticationStrategy; +import org.apache.linkis.httpclient.dws.config.DWSClientConfig; +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder; +import org.apache.linkis.ujes.client.UJESClient; +import org.apache.linkis.ujes.client.UJESClientImpl; +import com.webank.wedatasphere.warehouse.client.GovernanceDwRemoteClient; +import org.springframework.boot.web.servlet.FilterRegistrationBean; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.annotation.Resource; +import java.util.concurrent.TimeUnit; + + +@Configuration +public class CommonConfig { + + @Bean("myMetaObjectHandler") + public MetaObjectHandler myMetaObjectHandler() { + + //TODO 无法自动组装生效 + return new MyMetaObjectHandler(); + } + + @Bean + public GovernanceDwRemoteClient getGovernanceDwRemoteClient() throws Exception { + System.out.println("url: " + DataWarehouseGovernanceConfig.SERVER_URL.getValue()); + AuthenticationStrategy authenticationStrategy = (AuthenticationStrategy) Class.forName(DataWarehouseGovernanceConfig.AUTHENTICATION_STRATEGY.getValue()).newInstance(); + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) DWSClientConfigBuilder.newBuilder() + .addServerUrl(DataWarehouseGovernanceConfig.SERVER_URL.getValue()) + .connectionTimeout(DataWarehouseGovernanceConfig.CONNECTION_TIMEOUT.getValue()) + .discoveryEnabled(DataWarehouseGovernanceConfig.DISCOVERY_ENABLED.getValue()) + .discoveryFrequency(DataWarehouseGovernanceConfig.DISCOVERY_FREQUENCY_PERIOD.getValue(), TimeUnit.MINUTES) + .loadbalancerEnabled(DataWarehouseGovernanceConfig.LOAD_BALANCER_ENABLED.getValue()) + .maxConnectionSize(DataWarehouseGovernanceConfig.MAX_CONNECTION_SIZE.getValue()) + .retryEnabled(DataWarehouseGovernanceConfig.RETRY_ENABLED.getValue()) + .readTimeout(DataWarehouseGovernanceConfig.READ_TIMEOUT.getValue()) + .setAuthenticationStrategy(authenticationStrategy) + .setAuthTokenKey(DataWarehouseGovernanceConfig.AUTHTOKEN_KEY.getValue()) + .setAuthTokenValue(DataWarehouseGovernanceConfig.AUTHTOKEN_VALUE.getValue()) + ).setDWSVersion(DataWarehouseGovernanceConfig.DWS_VERSION.getValue()) + .build(); + return new GovernanceDwRemoteClient(clientConfig); + } + + @Bean + public LinkisDataAssetsRemoteClient linkisDataAssetsRemoteClient() throws Exception { + AuthenticationStrategy authenticationStrategy = (AuthenticationStrategy) Class.forName(DataWarehouseAssetsRemoteConfig.AUTHENTICATION_STRATEGY.getValue()).newInstance(); + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) DWSClientConfigBuilder.newBuilder() + .addServerUrl(DataWarehouseAssetsRemoteConfig.SERVER_URL.getValue()) + .connectionTimeout(DataWarehouseAssetsRemoteConfig.CONNECTION_TIMEOUT.getValue()) + .discoveryEnabled(DataWarehouseAssetsRemoteConfig.DISCOVERY_ENABLED.getValue()) + .discoveryFrequency(DataWarehouseAssetsRemoteConfig.DISCOVERY_FREQUENCY_PERIOD.getValue(), TimeUnit.MINUTES) + .loadbalancerEnabled(DataWarehouseAssetsRemoteConfig.LOAD_BALANCER_ENABLED.getValue()) + .maxConnectionSize(DataWarehouseAssetsRemoteConfig.MAX_CONNECTION_SIZE.getValue()) + .retryEnabled(DataWarehouseAssetsRemoteConfig.RETRY_ENABLED.getValue()) + .readTimeout(DataWarehouseAssetsRemoteConfig.READ_TIMEOUT.getValue()) + .setAuthenticationStrategy(authenticationStrategy) + .setAuthTokenKey(DataWarehouseAssetsRemoteConfig.AUTHTOKEN_KEY.getValue()) + .setAuthTokenValue(DataWarehouseAssetsRemoteConfig.AUTHTOKEN_VALUE.getValue()) + ).setDWSVersion(DataWarehouseAssetsRemoteConfig.DWS_VERSION.getValue()) + .build(); + return new LinkisDataAssetsRemoteClient(clientConfig); + } + + @Bean + public LinkisWorkSpaceRemoteClient linkisWorkSpaceRemoteClient() throws Exception { + AuthenticationStrategy authenticationStrategy = (AuthenticationStrategy) Class.forName(DataWorkspaceRemoteConfig.AUTHENTICATION_STRATEGY.getValue()).newInstance(); + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) DWSClientConfigBuilder.newBuilder() + .addServerUrl(DataWorkspaceRemoteConfig.SERVER_URL.getValue()) + .connectionTimeout(DataWorkspaceRemoteConfig.CONNECTION_TIMEOUT.getValue()) + .discoveryEnabled(DataWorkspaceRemoteConfig.DISCOVERY_ENABLED.getValue()) + .discoveryFrequency(DataWorkspaceRemoteConfig.DISCOVERY_FREQUENCY_PERIOD.getValue(), TimeUnit.MINUTES) + .loadbalancerEnabled(DataWorkspaceRemoteConfig.LOAD_BALANCER_ENABLED.getValue()) + .maxConnectionSize(DataWorkspaceRemoteConfig.MAX_CONNECTION_SIZE.getValue()) + .retryEnabled(DataWorkspaceRemoteConfig.RETRY_ENABLED.getValue()) + .readTimeout(DataWorkspaceRemoteConfig.READ_TIMEOUT.getValue()) + .setAuthenticationStrategy(authenticationStrategy) + .setAuthTokenKey(DataWorkspaceRemoteConfig.AUTHTOKEN_KEY.getValue()) + .setAuthTokenValue(DataWorkspaceRemoteConfig.AUTHTOKEN_VALUE.getValue()) + ).setDWSVersion(DataWorkspaceRemoteConfig.DWS_VERSION.getValue()) + .build(); + return new LinkisWorkSpaceRemoteClient(clientConfig); + } + + + + @Bean + public UJESClient ujesClient()throws Exception { + AuthenticationStrategy authenticationStrategy = (AuthenticationStrategy) Class.forName(LinkisJobConfiguration.AUTHENTICATION_STRATEGY.getValue()).newInstance(); + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) (DWSClientConfigBuilder.newBuilder().addServerUrl(LinkisJobConfiguration.LINKIS_SERVER_URL.getValue()) + .connectionTimeout(LinkisJobConfiguration.CONNECTION_TIMEOUT.getValue()) + .discoveryEnabled(LinkisJobConfiguration.DISCOVERY_ENABLED.getValue()) + .discoveryFrequency(LinkisJobConfiguration.DISCOVERY_FREQUENCY_PERIOD.getValue(), TimeUnit.MINUTES) + .loadbalancerEnabled(LinkisJobConfiguration.LOAD_BALANCER_ENABLED.getValue()) + .maxConnectionSize(LinkisJobConfiguration.MAX_CONNECTION_SIZE.getValue()) + .retryEnabled(LinkisJobConfiguration.RETRY_ENABLED.getValue()) + .readTimeout(LinkisJobConfiguration.READ_TIMEOUT.getValue()) + .setAuthenticationStrategy(authenticationStrategy) + .setAuthTokenKey(LinkisJobConfiguration.AUTHTOKEN_KEY.getValue()) + .setAuthTokenValue(LinkisJobConfiguration.AUTHTOKEN_VALUE.getValue()))) + .setDWSVersion(LinkisJobConfiguration.DWS_VERSION.getValue()).build(); + return new UJESClientImpl(clientConfig); + } + + @Resource + private AuthFilter authFilter; + + @Bean + public FilterRegistrationBean registrationBean(){ + //通过FilterRegistrationBean实例设置优先级可以生效 + //通过@WebFilter无效 + FilterRegistrationBean bean = new FilterRegistrationBean(); + bean.setFilter(authFilter);//注册自定义过滤器 + bean.setName("authFilter1");//过滤器名称 + bean.addUrlPatterns("/*");//过滤所有路径 + bean.setOrder(1);//优先级,最顶级 + return bean; + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseAssetsRemoteConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseAssetsRemoteConfig.java new file mode 100644 index 0000000000..310a187222 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseAssetsRemoteConfig.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + + +import org.apache.linkis.common.conf.CommonVars; + +public class DataWarehouseAssetsRemoteConfig { + public static final CommonVars SERVER_URL = CommonVars.apply("wds.wedatasphere.assets.client.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.wedatasphere.assets.client.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.wedatasphere.assets.client.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.wedatasphere.assets.client.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.wedatasphere.assets.client.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.wedatasphere.assets.client.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.wedatasphere.assets.client.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.wedatasphere.assets.client.readtimeout", 30000L); + public static final CommonVars AUTHENTICATION_STRATEGY = CommonVars.apply("wds.wedatasphere.assets.client.authenticationStrategy", ""); + + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.wedatasphere.assets.client.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.wedatasphere.assets.client.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.wedatasphere.assets.client.dws.version", ""); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseGovernanceConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseGovernanceConfig.java new file mode 100644 index 0000000000..2759099c39 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWarehouseGovernanceConfig.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + + +import org.apache.linkis.common.conf.CommonVars; + +public class DataWarehouseGovernanceConfig { + public static final CommonVars SERVER_URL = CommonVars.apply("wds.wedatasphere.warehouse.client.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.wedatasphere.warehouse.client.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.wedatasphere.warehouse.client.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.wedatasphere.warehouse.client.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.wedatasphere.warehouse.client.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.wedatasphere.warehouse.client.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.wedatasphere.warehouse.client.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.wedatasphere.warehouse.client.readtimeout", 30000L); + public static final CommonVars AUTHENTICATION_STRATEGY = CommonVars.apply("wds.wedatasphere.warehouse.client.authenticationStrategy", "org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy"); + + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.wedatasphere.warehouse.client.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.wedatasphere.warehouse.client.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.wedatasphere.warehouse.client.dws.version", ""); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWorkspaceRemoteConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWorkspaceRemoteConfig.java new file mode 100644 index 0000000000..ce5fe4a6e5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/DataWorkspaceRemoteConfig.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + + +import org.apache.linkis.common.conf.CommonVars; + +public class DataWorkspaceRemoteConfig { + public static final CommonVars SERVER_URL = CommonVars.apply("wds.workspace.client.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.workspace.client.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.workspace.client.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.workspace.client.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.workspace.client.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.workspace.client.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.workspace.client.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.workspace.client.readtimeout", 30000L); + public static final CommonVars AUTHENTICATION_STRATEGY = CommonVars.apply("wds.workspace.client.authenticationStrategy", ""); + + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.workspace.client.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.workspace.client.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.workspace.client.dws.version", ""); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/LinkisJobConfiguration.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/LinkisJobConfiguration.java new file mode 100644 index 0000000000..0f4b1719d5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/LinkisJobConfiguration.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import org.apache.linkis.common.conf.CommonVars; + +public class LinkisJobConfiguration { + public static final CommonVars LINKIS_SERVER_URL = CommonVars.apply("wds.wedatasphere.linkis.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.wedatasphere.linkis.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.wedatasphere.linkis.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.wedatasphere.linkis.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.wedatasphere.linkis.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.wedatasphere.linkis.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.wedatasphere.linkis.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.wedatasphere.linkis.readtimeout", 30000L); + public static final CommonVars AUTHENTICATION_STRATEGY = CommonVars.apply("wds.wedatasphere.linkis.authenticationStrategy", ""); + + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.wedatasphere.linkis.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.wedatasphere.linkis.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.wedatasphere.linkis.dws.version", ""); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ModelMapperConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ModelMapperConfig.java new file mode 100644 index 0000000000..7e0aa8ea7b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ModelMapperConfig.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import org.modelmapper.ModelMapper; +import org.modelmapper.convention.MatchingStrategies; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Configuration +public class ModelMapperConfig { + + @Bean + public ModelMapper getModelMapper() { + ModelMapper modelMapper = new ModelMapper(); + modelMapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + return modelMapper; + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MyMetaObjectHandler.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MyMetaObjectHandler.java new file mode 100644 index 0000000000..4e5e981f5e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MyMetaObjectHandler.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import com.baomidou.mybatisplus.core.handlers.MetaObjectHandler; +import org.apache.ibatis.reflection.MetaObject; +import org.springframework.stereotype.Component; + +import java.util.Date; + + +public class MyMetaObjectHandler implements MetaObjectHandler { + + + @Override + public void insertFill(MetaObject metaObject) { + this.strictInsertFill(metaObject,"createTime",Date.class,new Date()); + this.strictInsertFill(metaObject,"updateTime",Date.class,new Date()); + } + + @Override + public void updateFill(MetaObject metaObject) { + this.strictUpdateFill(metaObject,"updateTime",Date.class,new Date()); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MybatisPlusConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MybatisPlusConfig.java new file mode 100644 index 0000000000..91b13c1de1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/MybatisPlusConfig.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.PaginationInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.OptimisticLockerInnerInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +public class MybatisPlusConfig { + + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + System.out.println("mybatisPlusInterceptor init"); + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + //interceptor.addInnerInterceptor(new OptimisticLockerInnerInterceptor());//乐观锁插件 + return interceptor; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ThreadPoolTaskConfig.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ThreadPoolTaskConfig.java new file mode 100644 index 0000000000..fd56906c34 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/config/ThreadPoolTaskConfig.java @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.config; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; + +import java.util.concurrent.ThreadPoolExecutor; + +@Configuration +@EnableAsync +public class ThreadPoolTaskConfig { + private static final int corePoolSize = 10; // 核心线程数(默认线程数) + private static final int maxPoolSize = 100; // 最大线程数 + private static final int keepAliveTime = 10; // 允许线程空闲时间(单位:默认为秒) + private static final int queueCapacity = 200; // 缓冲队列数 + private static final String threadNamePrefix = "Async-Service-"; // 线程池名前缀 + + @Bean("taskExecutor") // bean的名称,默认为首字母小写的方法名 + public ThreadPoolTaskExecutor getAsyncExecutor(){ + ThreadPoolTaskExecutor executor = new ThreadPoolTaskExecutor(); + executor.setCorePoolSize(corePoolSize); + executor.setMaxPoolSize(maxPoolSize); + executor.setQueueCapacity(queueCapacity); + executor.setKeepAliveSeconds(keepAliveTime); + executor.setThreadNamePrefix(threadNamePrefix); + + // 线程池对拒绝任务的处理策略 + executor.setRejectedExecutionHandler(new ThreadPoolExecutor.CallerRunsPolicy()); + // 初始化 + executor.initialize(); + return executor; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ColumnType.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ColumnType.java new file mode 100644 index 0000000000..a959bc87fd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ColumnType.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum ColumnType { + COLUMN(0), + PARTITION_KEY(1); + private Integer code; + + ColumnType(Integer code) { + this.code = code; + } + + public Integer getCode() { + return code; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ErrorCode.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ErrorCode.java new file mode 100644 index 0000000000..ca55e0e03b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ErrorCode.java @@ -0,0 +1,56 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum ErrorCode { + + INDICATOR_VERSION_ADD_ERROR(212031), + INDICATOR_VERSION_ROLL_BACK_ERROR(212032), + + MEASURE_QUERY_ERROR(212101), + MEASURE_DELETE_ERROR(212102), + MEASURE_ADD_ERROR(212103), + MEASURE_UPDATE_ERROR(212104), + + DIMENSION_QUERY_ERROR(212201), + DIMENSION_DELETE_ERROR(212202), + DIMENSION_ADD_ERROR(212203), + DIMENSION_UPDATE_ERROR(212204), + + INDICATOR_ADD_ERROR(212001), + INDICATOR_QUERY_ERROR(212002), + INDICATOR_UPDATE_ERROR(212003), + INDICATOR_DELETE_ERROR(212004), + INDICATOR_CONTENT_ADD_ERROR(212011), + + + TABLE_ADD_ERROR(212301), + TABLE_UPDATE_ERROR(212302), + TABLE_QUERY_ERROR(212303), + TABLE_VERSION_ADD_ERROR(212304), + TABLE_VERSION_ROLL_BACK_ERROR(212305), + TABLE_COLLECT_ADD_ERROR(212306), + TABLE_COLUMN_ADD_ERROR(212307), + TABLE_CREATE_ERROR(212308), + TABLE_CREATE_SQL_ERROR(212309), + TABLE_CHECK_ERROR(212310), + TABLE_BIND_ERROR(212311), + TABLE_DELETE_ERROR(212312), + + LABEL_ADD_ERROR(212401), + LABEL_UPDATE_ERROR(212402), + LABEL_QUERY_ERROR(212403), + LABEL_DELETE_ERROR(212404); + + + + + private int code; + + ErrorCode(int i) { + code = i; + } + + public int getCode() { + return code; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/IndicatorSourceInfoConstant.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/IndicatorSourceInfoConstant.java new file mode 100644 index 0000000000..b587c0bb83 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/IndicatorSourceInfoConstant.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum IndicatorSourceInfoConstant { + cycle, + cycleEn, + + modifier, + modifierEn, + + dimension, + dimensionEn, + + measure, + measureEn, + + indicatorName, + indicatorNameEn +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/LabelConstant.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/LabelConstant.java new file mode 100644 index 0000000000..70f5226f2c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/LabelConstant.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum LabelConstant { + LABEL; + public static final String SEPARATOR=","; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ModeType.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ModeType.java new file mode 100644 index 0000000000..f5ae5e5a67 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ModeType.java @@ -0,0 +1,49 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; + +public enum ModeType { + + /** + * 指标 + */ + INDICATOR(ClassificationConstant.INDICATOR.getType(), ClassificationConstant.INDICATOR.getTypeCode()), + /** + * 度量 + */ + MEASURE(ClassificationConstant.MEASURE.getType(), ClassificationConstant.MEASURE.getTypeCode()), + /** + * 维度 + */ + DIMENSION(ClassificationConstant.INDICATOR.getType(), ClassificationConstant.INDICATOR.getTypeCode()); + + + private int type; + + + + private String typeCode; + + ModeType(int type, String typeCode) { + this.type = type; + + this.typeCode = typeCode; + } + + public int getType() { + return type; + } + + public void setType(int type) { + this.type = type; + } + + public String getTypeCode() { + return typeCode; + } + + public void setTypeCode(String typeCode) { + this.typeCode = typeCode; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceExpression.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceExpression.java new file mode 100644 index 0000000000..20844d11ba --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceExpression.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum ReferenceExpression { + + EXPRESSION; + + private final static String oriCode ="(\"%s\":)(\"|\".*,)(%s)(\"|,)"; + + private final static String regexpCode = " REGEXP '"+oriCode+"' "; + + private String getFormatExpCode(String key, String value){ + return String.format(oriCode,key,value); + } + + public String getSqlExpCode(String key,String value){ + return String.format(regexpCode,key,value); + } + + + public static void main(String[] args) { + System.out.println(ReferenceExpression.EXPRESSION.getSqlExpCode("warehouseLayerNameEn","year")); + } +} + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceKey.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceKey.java new file mode 100644 index 0000000000..9688af471f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/ReferenceKey.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +public enum ReferenceKey { + label, + measure, + dimension, + indicatorName, + + //分层 + warehouseLayerName, + warehouseLayerNameEn, + + //主题 + warehouseThemeName, + warehouseThemeNameEn, + + //主题 + themeArea, + themeAreaEn, + + //分层 + layerArea, + layerAreaEn, + + //周期 + lifecycle, + lifecycleEn, + + //修饰词 + modifier, + modifierEn, + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/TabelExternalType.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/TabelExternalType.java new file mode 100644 index 0000000000..aafee13a28 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/constant/TabelExternalType.java @@ -0,0 +1,37 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.constant; + + +import org.apache.commons.lang3.StringUtils; + +import java.util.Optional; + +public enum TabelExternalType { + INNER(0,"MANAGED_TABLE"), + EXTERNAL(1,"EXTERNAL_TABLE"); + + private Integer code; + + private String type; + + TabelExternalType(Integer code, String type) { + this.code = code; + this.type = type; + } + + public Integer getCode() { + return code; + } + + public String getType() { + return type; + } + + public static Optional getByType(String type){ + for (TabelExternalType e : values()){ + if (StringUtils.equals(type,e.getType())){ + return Optional.of(e); + } + } + return Optional.empty(); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelAuthentication.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelAuthentication.java new file mode 100644 index 0000000000..958db2041a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelAuthentication.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.context; + +import lombok.Data; + +@Data +public class DataModelAuthentication { + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContext.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContext.java new file mode 100644 index 0000000000..c19cfce89a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContext.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.context; + + +import lombok.Data; + +@Data +public class DataModelSecurityContext { + private DataModelAuthentication dataModelAuthentication; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolder.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolder.java new file mode 100644 index 0000000000..d4c0c17e73 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolder.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.context; + + +public class DataModelSecurityContextHolder { + + private static DataModelSecurityContextHolderStrategy strategy; + + static { + initialize(); + } + + private static void initialize(){ + strategy = new ThreadLocalSecurityContextHolderStrategy(); + } + + + /** + * Explicitly clears the context value from the current thread. + */ + public static void clearContext() { + strategy.clearContext(); + } + + /** + * Obtain the current SecurityContext. + * @return the security context (never null) + */ + public static DataModelSecurityContext getContext() { + return strategy.getContext(); + } + + public static void setContext(DataModelSecurityContext context) { + strategy.setContext(context); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolderStrategy.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolderStrategy.java new file mode 100644 index 0000000000..9c6f3b90af --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/DataModelSecurityContextHolderStrategy.java @@ -0,0 +1,30 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.context; + + +public interface DataModelSecurityContextHolderStrategy { + + void clearContext(); + + /** + * Obtains the current context. + * @return a context (never null - create a default implementation if + * necessary) + */ + DataModelSecurityContext getContext(); + + /** + * Sets the current context. + * @param context to the new argument (should never be null, although + * implementations must check if null has been passed and throw an + * IllegalArgumentException in such cases) + */ + void setContext(DataModelSecurityContext context); + + /** + * Creates a new, empty context implementation, for use by + * SecurityContextRepository implementations, when creating a new context for + * the first time. + * @return the empty context. + */ + DataModelSecurityContext createEmptyContext(); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/ThreadLocalSecurityContextHolderStrategy.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/ThreadLocalSecurityContextHolderStrategy.java new file mode 100644 index 0000000000..27769e47e8 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/context/ThreadLocalSecurityContextHolderStrategy.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.context; + + +import org.springframework.util.Assert; + +final class ThreadLocalSecurityContextHolderStrategy implements DataModelSecurityContextHolderStrategy{ + + private static final ThreadLocal contextHolder = new ThreadLocal<>(); + + @Override + public void clearContext() { + contextHolder.remove(); + } + + @Override + public DataModelSecurityContext getContext() { + DataModelSecurityContext ctx = contextHolder.get(); + if (ctx == null) { + ctx = createEmptyContext(); + contextHolder.set(ctx); + } + return ctx; + } + + @Override + public void setContext(DataModelSecurityContext context) { + Assert.notNull(context, "Only non-null SecurityContext instances are permitted"); + contextHolder.set(context); + } + + @Override + public DataModelSecurityContext createEmptyContext() { + return new DataModelSecurityContext(); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/CreateTableDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/CreateTableDTO.java new file mode 100644 index 0000000000..0c053569ab --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/CreateTableDTO.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.dto; + + +import lombok.Data; + +@Data +public class CreateTableDTO { + private Integer status; + + private String taskId; + + private String sql; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/PreviewDataDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/PreviewDataDTO.java new file mode 100644 index 0000000000..9d85b6594d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/dto/PreviewDataDTO.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.dto; + + +import lombok.Data; + +@Data +public class PreviewDataDTO { + private Object metadata; + + private Object data; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindLabelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindLabelEvent.java new file mode 100644 index 0000000000..59bcbd7f9a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindLabelEvent.java @@ -0,0 +1,36 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class BindLabelEvent extends ApplicationEvent { + + private String user; + + private String label; + + private String tableName; + + private String labelGuid; + + private String tableGuid; + + public BindLabelEvent(Object source, String user, String label, String tableName, String labelGuid, String tableGuid) { + super(source); + this.user = user; + this.label = label; + this.tableName = tableName; + this.labelGuid = labelGuid; + this.tableGuid = tableGuid; + } + + public BindLabelEvent(Object source, String user, String label, String tableName) { + super(source); + this.user = user; + this.label = label; + this.tableName = tableName; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindModelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindModelEvent.java new file mode 100644 index 0000000000..182b041347 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/BindModelEvent.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.request.BindModelTypeAction; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class BindModelEvent extends ApplicationEvent { + + private String user; + + private String modelName; + + private ClassificationConstant modelType; + + private String tableName; + + private String guid; + + + public BindModelEvent(Object source,String user,String guid,String tableName,String modelName,ClassificationConstant modelType) { + super(source); + this.user = user; + this.guid = guid; + this.tableName = tableName; + this.modelName = modelName; + this.modelType = modelType; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateLabelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateLabelEvent.java new file mode 100644 index 0000000000..bb301eddb4 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateLabelEvent.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class CreateLabelEvent extends ApplicationEvent { + + private String user; + + private String name; + + public CreateLabelEvent(Object source, String user, String name) { + super(source); + this.user = user; + this.name = name; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateModelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateModelEvent.java new file mode 100644 index 0000000000..8a1f52b98d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/CreateModelEvent.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; +@Getter +@ToString +public class CreateModelEvent extends ApplicationEvent { + + private String user; + + private ClassificationConstant type; + + private String name; + + public CreateModelEvent(Object source,String user, String name, ClassificationConstant type) { + super(source); + this.type = type; + this.name = name; + this.user = user; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteLabelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteLabelEvent.java new file mode 100644 index 0000000000..a9ff076d3b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteLabelEvent.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class DeleteLabelEvent extends ApplicationEvent { + private String user; + + private String name; + + public DeleteLabelEvent(Object source, String user, String name) { + super(source); + this.user = user; + this.name = name; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteModelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteModelEvent.java new file mode 100644 index 0000000000..e2690c6650 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/DeleteModelEvent.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class DeleteModelEvent extends ApplicationEvent { + private String user; + + private ClassificationConstant type; + + private String name; + + public DeleteModelEvent(Object source,String user, String name, ClassificationConstant type) { + super(source); + this.type = type; + this.name = name; + this.user = user; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindLabelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindLabelEvent.java new file mode 100644 index 0000000000..5c8066aa17 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindLabelEvent.java @@ -0,0 +1,40 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + +import javafx.application.Application; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class UnBindLabelEvent extends ApplicationEvent { + + private String user; + + private String label; + + private String tableName; + + private String labelGuid; + + private String tableGuid; + + private String relationGuid; + + public UnBindLabelEvent(Object source, String user, String label, String tableName, String labelGuid, String tableGuid, String relationGuid) { + super(source); + this.user = user; + this.label = label; + this.tableName = tableName; + this.labelGuid = labelGuid; + this.tableGuid = tableGuid; + this.relationGuid = relationGuid; + } + + public UnBindLabelEvent(Object source, String user, String label, String tableName) { + super(source); + this.user = user; + this.label = label; + this.tableName = tableName; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindModelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindModelEvent.java new file mode 100644 index 0000000000..a75f305394 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UnBindModelEvent.java @@ -0,0 +1,32 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class UnBindModelEvent extends ApplicationEvent { + + private String user; + + private String modelName; + + private ClassificationConstant modelType; + + private String tableName; + + private String guid; + + + public UnBindModelEvent(Object source,String user,String guid,String tableName,String modelName,ClassificationConstant modelType) { + super(source); + this.user = user; + this.guid = guid; + this.tableName = tableName; + this.modelName = modelName; + this.modelType = modelType; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateLabelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateLabelEvent.java new file mode 100644 index 0000000000..8c7831fb27 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateLabelEvent.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class UpdateLabelEvent extends ApplicationEvent { + private String user; + + private String name; + + private String oriName; + + public UpdateLabelEvent(Object source, String user, String name, String oriName) { + super(source); + this.user = user; + this.name = name; + this.oriName = oriName; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateModelEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateModelEvent.java new file mode 100644 index 0000000000..7e71bd08d2 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/event/UpdateModelEvent.java @@ -0,0 +1,29 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.event; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class UpdateModelEvent extends ApplicationEvent { + + private String name; + + private ClassificationConstant type; + + private String user; + + private String orgName; + + + public UpdateModelEvent(Object source,String user,String name,String orgName, ClassificationConstant type) { + super(source); + this.user = user; + this.type = type; + this.name = name; + this.orgName = orgName; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/exception/DSSDatamodelCenterException.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/exception/DSSDatamodelCenterException.java new file mode 100644 index 0000000000..1e3b2464bb --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/exception/DSSDatamodelCenterException.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.exception; + +import org.apache.linkis.common.exception.ErrorException; + + +public class DSSDatamodelCenterException extends ErrorException { + + public DSSDatamodelCenterException(int errCode, String desc) { + super(errCode, desc); + } + + public DSSDatamodelCenterException(int errCode, String desc, String ip, int port, String serviceKind) { + super(errCode, desc, ip, port, serviceKind); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/filter/AuthFilter.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/filter/AuthFilter.java new file mode 100644 index 0000000000..3cd1687279 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/filter/AuthFilter.java @@ -0,0 +1,32 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.filter; + + +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelAuthentication; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AuthenticationClientStrategy; +import org.springframework.stereotype.Component; + +import javax.servlet.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +@Component +public class AuthFilter implements Filter, AuthenticationClientStrategy { + @Override + public void init(FilterConfig filterConfig) throws ServletException { + + } + + @Override + public void destroy() { + + } + + @Override + public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { + DataModelAuthentication dataModelAuthentication = new DataModelAuthentication(); + dataModelAuthentication.setUser(getStrategyUser((HttpServletRequest) servletRequest)); + DataModelSecurityContextHolder.getContext().setDataModelAuthentication(dataModelAuthentication); + filterChain.doFilter(servletRequest, servletResponse); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonDataModelJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonDataModelJobLauncher.java new file mode 100644 index 0000000000..48593eb41d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonDataModelJobLauncher.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; + +public class CommonDataModelJobLauncher implements DataModelJobLauncher { + + @Override + public SubmittableInteractiveJob callBack(SubmittableInteractiveJob job) { + return job; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonExistsDataModelJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonExistsDataModelJobTask.java new file mode 100644 index 0000000000..dbc55e8288 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/CommonExistsDataModelJobTask.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +public class CommonExistsDataModelJobTask extends DataModelJobTask { + + @Override + public void formatCode(String orgCode) { + setCode(orgCode); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobLauncher.java new file mode 100644 index 0000000000..7fe70468a7 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobLauncher.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +import org.apache.linkis.computation.client.ResultSetIterator; +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; + +public class DataExistsDataModelJobLauncher implements DataModelJobLauncher { + @Override + public Integer callBack(SubmittableInteractiveJob job) { + ResultSetIterator iterator = job.getResultSetIterables()[0].iterator(); + + System.out.println(iterator.getMetadata()); + + // 如果已数据返回1 + if (iterator.hasNext()) { + return 1; + } + return 0; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobTask.java new file mode 100644 index 0000000000..a9f28eeb18 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataExistsDataModelJobTask.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +public class DataExistsDataModelJobTask extends DataModelJobTask { + @Override + public void formatCode(String orgCode) { + setCode(String.format("select * from %s limit 1",orgCode)); + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobLauncher.java new file mode 100644 index 0000000000..915e2700cf --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobLauncher.java @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +import com.webank.wedatasphere.dss.datamodel.center.common.config.LinkisJobConfiguration; +import org.apache.linkis.computation.client.LinkisJobClient; +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; + +public interface DataModelJobLauncher { + /** + * + * @param launchTask + * @return + */ + default E launch(DataModelJobTask launchTask){ + LinkisJobClient.config().setDefaultServerUrl(LinkisJobConfiguration.LINKIS_SERVER_URL.getValue()); + SubmittableInteractiveJob job = + LinkisJobClient.interactive().builder().setEngineType(launchTask.getEngineType()) + .setRunTypeStr(launchTask.getRunType()).setCreator(launchTask.getCreator()) + .setCode(launchTask.getCode()).addExecuteUser(launchTask.getExecuteUser()).build(); + // 3. Submit Job to Linkis + job.submit(); + // 4. Wait for Job completed + job.waitForCompleted(); + return callBack(job); + } + + E callBack(SubmittableInteractiveJob job); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTask.java new file mode 100644 index 0000000000..cbc23adf1e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTask.java @@ -0,0 +1,62 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + + +public abstract class DataModelJobTask { + + private String engineType; + + private String runType; + + private String code; + + private String creator; + + private String executeUser; + + public void setEngineType(String engineType) { + this.engineType = engineType; + } + + public void setRunType(String runType) { + this.runType = runType; + } + + public void setCode(String code) { + this.code = code; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public void setExecuteUser(String executeUser) { + this.executeUser = executeUser; + } + + public String getEngineType() { + return engineType; + } + + public String getRunType() { + return runType; + } + + public String getCode() { + return code; + } + + + public String getCreator() { + return creator; + } + + + public String getExecuteUser() { + return executeUser; + } + + + + public abstract void formatCode(String orgCode); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTaskBuilder.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTaskBuilder.java new file mode 100644 index 0000000000..8a480d8bde --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/DataModelJobTaskBuilder.java @@ -0,0 +1,46 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +public class DataModelJobTaskBuilder { + + private DataModelJobTask dataModelJobTask; + + public DataModelJobTaskBuilder withDataExistsExchangisJobTask(){ + dataModelJobTask = new DataExistsDataModelJobTask(); + return this; + } + + public DataModelJobTaskBuilder withCommonExchangisJobTask(){ + dataModelJobTask = new CommonExistsDataModelJobTask(); + return this; + } + + public DataModelJobTaskBuilder creator(String creator){ + dataModelJobTask.setCreator(creator); + return this; + } + + public DataModelJobTaskBuilder engineType(String engineType){ + dataModelJobTask.setEngineType(engineType); + return this; + } + + public DataModelJobTaskBuilder runType(String runType){ + dataModelJobTask.setRunType(runType); + return this; + } + + public DataModelJobTaskBuilder executeUser(String executeUser){ + dataModelJobTask.setExecuteUser(executeUser); + return this; + } + + public DataModelJobTaskBuilder code(String code){ + dataModelJobTask.formatCode(code); + return this; + } + + public DataModelJobTask build(){ + return dataModelJobTask; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/PreviewDataModelJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/PreviewDataModelJobLauncher.java new file mode 100644 index 0000000000..d637977b19 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/launcher/PreviewDataModelJobLauncher.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.launcher; + + +import org.apache.linkis.computation.client.ResultSetIterator; +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; +import scala.collection.Map; + +import java.util.List; + +public class PreviewDataModelJobLauncher implements DataModelJobLauncher>>{ + + @Override + public List> callBack(SubmittableInteractiveJob job) { + ResultSetIterator iterator = job.getResultSetIterables()[0].iterator(); + + return null; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/listener/AssertsListener.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/listener/AssertsListener.java new file mode 100644 index 0000000000..ce44875ca6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/listener/AssertsListener.java @@ -0,0 +1,136 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.listener; + + +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.*; +import com.webank.wedatasphere.dss.data.governance.response.*; +import com.webank.wedatasphere.dss.datamodel.center.common.event.*; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AssertsSyncService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.scheduling.annotation.EnableAsync; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class AssertsListener { + + private static final Logger LOGGER = LoggerFactory.getLogger(AssertsListener.class); + + + @Resource + private AssertsSyncService assertsSyncService; + + @EventListener + @Async("taskExecutor") + public void createModel(CreateModelEvent event) { + try { + CreateModelTypeResult result = assertsSyncService.syncCreateModel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + + } + + @EventListener + @Async("taskExecutor") + public void updateModel(UpdateModelEvent event) { + try { + UpdateModelTypeResult result = assertsSyncService.syncUpdateModel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void deleteModel(DeleteModelEvent event) { + LOGGER.info("deleteModel event : {}", event); + try { + DeleteModelTypeResult result = assertsSyncService.syncDeleteModel(event); + LOGGER.info("deleteModel result : {}", result.getResult()); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void bindModel(BindModelEvent event) { + LOGGER.info("bindModel event : {}", event); + try { + BindModelTypeResult result = assertsSyncService.syncBindModel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void unBindModel(UnBindModelEvent event) { + LOGGER.info("unBindModel event : {}", event); + try { + UnBindModelTypeResult result = assertsSyncService.syncUnBindModel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void createLabel(CreateLabelEvent event) { + LOGGER.info("createLabel event : {}", event); + try { + CreateLabelResult result = assertsSyncService.syncCreateLabel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void updateLabel(UpdateLabelEvent event) { + LOGGER.info("updateLabel event : {}", event); + try { + UpdateLabelResult result = assertsSyncService.syncUpdateLabel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void deleteLabel(DeleteLabelEvent event) { + LOGGER.info("deleteLabel event : {}", event); + try { + DeleteLabelResult result = assertsSyncService.syncDeleteLabel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void bindLabel(BindLabelEvent event) { + LOGGER.info("bindLabel event : {}", event); + try { + BindLabelResult result = assertsSyncService.syncBindLabel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } + + @EventListener + @Async("taskExecutor") + public void unBindLabel(UnBindLabelEvent event) { + LOGGER.info("unBindLabel event : {}", event); + try { + UnBindLabelResult result = assertsSyncService.syncUnBindLabel(event); + } catch (Exception e) { + LOGGER.error(e.getMessage(), e); + } + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AssertsSyncService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AssertsSyncService.java new file mode 100644 index 0000000000..271c309d36 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AssertsSyncService.java @@ -0,0 +1,208 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.*; +import com.webank.wedatasphere.dss.data.governance.response.*; +import com.webank.wedatasphere.dss.datamodel.center.common.event.*; +import com.webank.wedatasphere.dss.datamodel.center.common.listener.AssertsListener; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; + +@Component +public class AssertsSyncService { + @Resource + private LinkisDataAssetsRemoteClient client; + + private static final Logger LOGGER = LoggerFactory.getLogger(AssertsListener.class); + + + public CreateModelTypeResult syncCreateModel(CreateModelEvent event){ + LOGGER.info("createModel event : {}",event); + try { + CreateModelTypeResult result = client.createModelType(CreateModelTypeAction.builder() + .setUser(event.getUser()) + .setType(event.getType()) + .setName(event.getName()) + .build()); + LOGGER.info("createModel result : {}",result.getInfo()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + public UpdateModelTypeResult syncUpdateModel(UpdateModelEvent event){ + LOGGER.info("updateModel event : {}",event); + if(StringUtils.equals(event.getName(),event.getOrgName())){ + LOGGER.info("name is same ignore"); + return null; + } + try { + UpdateModelTypeResult result = client.updateModelType(UpdateModelTypeAction.builder() + .setUser(event.getUser()) + .setName(event.getName()) + .setType(event.getType()) + .setOrgName(event.getOrgName()) + .build()); + LOGGER.info("updateModel result : {}",result.getInfo()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public DeleteModelTypeResult syncDeleteModel(DeleteModelEvent event){ + LOGGER.info("deleteModel event : {}",event); + try { + DeleteModelTypeResult result = client.deleteModelType(DeleteModelTypeAction.builder() + .setUser(event.getUser()) + .setType(event.getType()) + .setName(event.getName()) + .build()); + LOGGER.info("deleteModel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public BindModelTypeResult syncBindModel(BindModelEvent event){ + LOGGER.info("bindModel event : {}",event); + try { + BindModelTypeResult result = client.bindModelType(BindModelTypeAction.builder() + .setUser(event.getUser()) + .setGuid(event.getGuid()) + .setModelName(event.getModelName()) + .setModelType(event.getModelType()) + .setTableName(event.getTableName()) + .build()); + LOGGER.info("bindModel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public UnBindModelTypeResult syncUnBindModel(UnBindModelEvent event){ + LOGGER.info("unBindModel event : {}", event); + try { + UnBindModelTypeResult result = client.unBindModelType(UnBindModelTypeAction.builder() + .setUser(event.getUser()) + .setGuid(event.getGuid()) + .setModelName(event.getModelName()) + .setModelType(event.getModelType()) + .setTableName(event.getTableName()) + .build()); + LOGGER.info("unBindModel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public CreateLabelResult syncCreateLabel(CreateLabelEvent event){ + LOGGER.info("createLabel event : {}", event); + try { + CreateLabelResult result = client.createLabel(CreateLabelAction.builder() + .setUser(event.getUser()) + .setName(event.getName()) + .build()); + LOGGER.info("createLabel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public UpdateLabelResult syncUpdateLabel(UpdateLabelEvent event){ + LOGGER.info("updateLabel event : {}", event); + if(StringUtils.equals(event.getName(),event.getOriName())){ + LOGGER.info("name is same ignore"); + return null; + } + try { + UpdateLabelResult result = client.updateLabel(UpdateLabelAction.builder() + .setUser(event.getUser()) + .setOrgName(event.getOriName()) + .setName(event.getName()) + .build()); + LOGGER.info("updateLabel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + public DeleteLabelResult syncDeleteLabel(DeleteLabelEvent event){ + LOGGER.info("deleteLabel event : {}", event); + try { + DeleteLabelResult result = client.deleteLabel(DeleteLabelAction.builder() + .setUser(event.getUser()) + .setName(event.getName()) + .build()); + LOGGER.info("deleteLabel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public BindLabelResult syncBindLabel(BindLabelEvent event){ + LOGGER.info("bindLabel event : {}", event); + try { + BindLabelResult result = client.bindLabel(BindLabelAction.builder() + .setUser(event.getUser()) + .setLabel(event.getLabel()) + .setTableName(event.getTableName()) + .setLabelGuid(event.getLabelGuid()) + .setTableGuid(event.getTableGuid()) + .build()); + LOGGER.info("bindLabel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + public UnBindLabelResult syncUnBindLabel(UnBindLabelEvent event){ + LOGGER.info("unBindLabel event : {}", event); + try { + UnBindLabelResult result = client.unBindLabel(UnBindLabelAction.builder() + .setUser(event.getUser()) + .setLabel(event.getLabel()) + .setTableName(event.getTableName()) + .setLabelGuid(event.getLabelGuid()) + .setTableGuid(event.getTableGuid()) + .setRelationGuid(event.getRelationGuid()) + .build()); + LOGGER.info("unBindLabel result : {}",result.getResult()); + return result; + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + } + } + + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AuthenticationClientStrategy.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AuthenticationClientStrategy.java new file mode 100644 index 0000000000..8a56927134 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/AuthenticationClientStrategy.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +import com.webank.wedatasphere.dss.datamodel.center.common.config.ClientStrategy; +import org.apache.linkis.common.conf.CommonVars; +import org.apache.linkis.server.security.SecurityFilter; +import org.apache.commons.lang3.StringUtils; + +import javax.servlet.http.HttpServletRequest; + +public interface AuthenticationClientStrategy { + + CommonVars CLIENT_STRATEGY = CommonVars.apply("wds.wedatasphere.data.model.client.strategy", ""); + + default String getStrategyUser(HttpServletRequest req){ + if (StringUtils.equals(ClientStrategy.TOKEN.getCode(),CLIENT_STRATEGY.getValue())){ + return SecurityFilter.getLoginUsername(req); + } + return "hadoop"; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/CycleReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/CycleReferenceService.java new file mode 100644 index 0000000000..f0f72e4a2b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/CycleReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface CycleReferenceService { + /** + * 周期被引用情况 + * @param name + * @return + */ + int cycleReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseDimensionReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseDimensionReferenceService.java new file mode 100644 index 0000000000..c2412c343c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseDimensionReferenceService.java @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DataWarehouseDimensionReferenceService extends DimensionThemeReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseIndicatorReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseIndicatorReferenceService.java new file mode 100644 index 0000000000..4f70599fee --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseIndicatorReferenceService.java @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DataWarehouseIndicatorReferenceService extends IndicatorThemeReferenceService,IndicatorModifierReferenceService,IndicatorCycleReferenceService,IndicatorLayerReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseLabelReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseLabelReferenceService.java new file mode 100644 index 0000000000..45a7696fb6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseLabelReferenceService.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + +/** + * 标签引用数仓情况统计 + */ +public interface DataWarehouseLabelReferenceService extends LabelThemeReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseMeasuredReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseMeasuredReferenceService.java new file mode 100644 index 0000000000..1739046795 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseMeasuredReferenceService.java @@ -0,0 +1,6 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + + +public interface DataWarehouseMeasuredReferenceService extends MeasuredThemeReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseReferenceService.java new file mode 100644 index 0000000000..891383d26d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseReferenceService.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + +/** + * 数仓被引用情况统计 + */ +public interface DataWarehouseReferenceService extends ThemeReferenceService,LayerReferenceService,CycleReferenceService,ModifierReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseTableReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseTableReferenceService.java new file mode 100644 index 0000000000..d749b6aaa6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DataWarehouseTableReferenceService.java @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DataWarehouseTableReferenceService extends TableThemeReferenceService,TableCycleReferenceService,TableLayerReferenceService,TableModifierReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelIndicatorReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelIndicatorReferenceService.java new file mode 100644 index 0000000000..ceac232038 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelIndicatorReferenceService.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + +/** + * 指标引用数据模型情况统计 + */ +public interface DatamodelIndicatorReferenceService extends IndicatorDimensionReferenceService,IndicatorMeasuredReferenceService,IndicatorIndicatorReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelReferencService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelReferencService.java new file mode 100644 index 0000000000..81d772f8c0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelReferencService.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +/** + * 数据模型被引用情况统计 + */ +public interface DatamodelReferencService extends IndicatorReferenceService,DimensionReferenceService,MeasureReferenceService,LabelReferenceService{ + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelTableReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelTableReferenceService.java new file mode 100644 index 0000000000..7ab7141d3f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DatamodelTableReferenceService.java @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DatamodelTableReferenceService extends TableIndicatorReferenceService,TableDimensionReferenceService,TableMeasuredReferenceService,TableLabelReferenceService{ +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionReferenceService.java new file mode 100644 index 0000000000..251c34fcb5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DimensionReferenceService { + + /** + * 维度被引用情况 + * @param name + * @return + */ + int dimensionReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionThemeReferenceService.java new file mode 100644 index 0000000000..7f0dd3b82b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/DimensionThemeReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface DimensionThemeReferenceService { + + /** + * 主题引用情况 + * @param name + * @return + */ + int dimensionThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorCycleReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorCycleReferenceService.java new file mode 100644 index 0000000000..c1aa298991 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorCycleReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorCycleReferenceService { + /** + * 周期引用情况 + * @param name + * @return + */ + int indicatorCycleReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorDimensionReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorDimensionReferenceService.java new file mode 100644 index 0000000000..8a7677a471 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorDimensionReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorDimensionReferenceService { + + /** + * 指标引用维度计数 + * @param name + * @return + */ + int indicatorDimensionReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorIndicatorReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorIndicatorReferenceService.java new file mode 100644 index 0000000000..04603abe3d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorIndicatorReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorIndicatorReferenceService { + /** + * 原子指标引用情况 + * @param name + * @return + */ + int indicatorIndicatorCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorLayerReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorLayerReferenceService.java new file mode 100644 index 0000000000..ac9a7ad2a6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorLayerReferenceService.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorLayerReferenceService { + + /** + * 分层引用情况 + * @param name + * @return + */ + int indicatorLayerReferenceCount(String name); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorMeasuredReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorMeasuredReferenceService.java new file mode 100644 index 0000000000..e9606873fe --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorMeasuredReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorMeasuredReferenceService { + + /** + * 指标引用度量计数 + * @param name + * @return + */ + int indicatorMeasuredReference(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorModifierReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorModifierReferenceService.java new file mode 100644 index 0000000000..edb7ccc583 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorModifierReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorModifierReferenceService { + /** + * 修饰词引用情况 + * @param name + * @return + */ + int indicatorModifierReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorReferenceService.java new file mode 100644 index 0000000000..fea3805440 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorReferenceService { + + /** + * 指标被引用情况 + * @param name + * @return + */ + int indicatorReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorThemeReferenceService.java new file mode 100644 index 0000000000..d89e04b682 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/IndicatorThemeReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface IndicatorThemeReferenceService { + /** + * 主题引用情况 + * @param name + * @return + */ + int indicatorThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelReferenceService.java new file mode 100644 index 0000000000..cbdca0dcf9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface LabelReferenceService { + /** + * 标签被引用情况 + * @param name + * @return + */ + int labelReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelThemeReferenceService.java new file mode 100644 index 0000000000..2627ee4a97 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LabelThemeReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface LabelThemeReferenceService { + /** + * 标签引用情况 + * @param name + * @return + */ + int labelThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LayerReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LayerReferenceService.java new file mode 100644 index 0000000000..5d0228ab10 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/LayerReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + + +public interface LayerReferenceService { + /** + * 分层被引用情况 + * @param name + * @return + */ + int layerReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasureReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasureReferenceService.java new file mode 100644 index 0000000000..289eb18794 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasureReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface MeasureReferenceService { + /** + * 度量被引用情况 + * @param name + * @return + */ + int measureReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasuredThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasuredThemeReferenceService.java new file mode 100644 index 0000000000..251a77c28a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/MeasuredThemeReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + + +public interface MeasuredThemeReferenceService { + /** + * 主题引用情况 + * @param name + * @return + */ + int measureThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ModifierReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ModifierReferenceService.java new file mode 100644 index 0000000000..2e1328ed72 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ModifierReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface ModifierReferenceService { + /** + * 修饰词被引用情况 + * @param name + * @return + */ + int modifierReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableCycleReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableCycleReferenceService.java new file mode 100644 index 0000000000..bdfb48b778 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableCycleReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableCycleReferenceService { + /** + * 周期引用情况 + * @param name + * @return + */ + int tableCycleReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableDimensionReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableDimensionReferenceService.java new file mode 100644 index 0000000000..02b00eda85 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableDimensionReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableDimensionReferenceService { + + /** + * 表引用维度计数 + * @param name + * @return + */ + int tableDimensionReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableIndicatorReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableIndicatorReferenceService.java new file mode 100644 index 0000000000..57c2541adb --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableIndicatorReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableIndicatorReferenceService { + + /** + * 表引用指标计数 + * @param name + * @return + */ + int tableIndicatorReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLabelReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLabelReferenceService.java new file mode 100644 index 0000000000..58eac733a9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLabelReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + + +public interface TableLabelReferenceService { + /** + * 表引用标签计数 + * @param name + * @return + */ + int tableLabelReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLayerReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLayerReferenceService.java new file mode 100644 index 0000000000..2cfb2be05e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableLayerReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableLayerReferenceService { + /** + * 分层引用情况 + * @param name + * @return + */ + int tableLayerReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableMeasuredReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableMeasuredReferenceService.java new file mode 100644 index 0000000000..8dcd53655a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableMeasuredReferenceService.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableMeasuredReferenceService { + + /** + * 表引用度量计数 + * @param name + * @return + */ + int tableMeasuredReferenceService(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableModifierReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableModifierReferenceService.java new file mode 100644 index 0000000000..51f6534163 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableModifierReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableModifierReferenceService { + /** + * 修饰词引用情况 + * @param name + * @return + */ + int tableModifierReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableThemeReferenceService.java new file mode 100644 index 0000000000..ad72534aa8 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/TableThemeReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface TableThemeReferenceService { + /** + * 主题引用情况 + * @param name + * @return + */ + int tableThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ThemeReferenceService.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ThemeReferenceService.java new file mode 100644 index 0000000000..1d50fc5b8b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/ThemeReferenceService.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service; + + +public interface ThemeReferenceService { + /** + * 主题被引用情况 + * @param name + * @return + */ + int themeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/impl/DatamodelReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/impl/DatamodelReferenceServiceImpl.java new file mode 100644 index 0000000000..0f6f7355b5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/service/impl/DatamodelReferenceServiceImpl.java @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.service.impl; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelIndicatorReferenceService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelReferencService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelTableReferenceService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DatamodelReferenceServiceImpl implements DatamodelReferencService { + + @Resource + private DatamodelIndicatorReferenceService datamodelIndicatorReferenceService; + + @Resource + private DatamodelTableReferenceService datamodelTableReferenceService; + + @Override + public int dimensionReferenceCount(String name) { + return datamodelIndicatorReferenceService.indicatorDimensionReferenceCount(name) + + datamodelTableReferenceService.tableDimensionReferenceCount(name); + } + + @Override + public int indicatorReferenceCount(String name) { + return datamodelTableReferenceService.tableIndicatorReferenceCount(name) + + datamodelIndicatorReferenceService.indicatorIndicatorCount(name); + } + + @Override + public int measureReferenceCount(String name) { + return datamodelIndicatorReferenceService.indicatorMeasuredReference(name) + + datamodelTableReferenceService.tableMeasuredReferenceService(name); + } + + @Override + public int labelReferenceCount(String name){ + return datamodelTableReferenceService.tableLabelReferenceCount(name); + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/DataModelUJESJobTaskBuilder.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/DataModelUJESJobTaskBuilder.java new file mode 100644 index 0000000000..74f390f720 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/DataModelUJESJobTaskBuilder.java @@ -0,0 +1,32 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataModelUJESJobTask; + +public class DataModelUJESJobTaskBuilder { + + private DataModelUJESJobTask dataModelUJESJobTask; + + public DataModelUJESJobTaskBuilder(DataModelUJESJobTask dataModelUJESJobTask){ + this.dataModelUJESJobTask = dataModelUJESJobTask; + } + + public DataModelUJESJobTaskBuilder code(String code){ + dataModelUJESJobTask.formatCode(code); + return this; + } + + public DataModelUJESJobTaskBuilder count(Integer count){ + dataModelUJESJobTask.setCount(count); + return this; + } + + public DataModelUJESJobTaskBuilder user(String user){ + dataModelUJESJobTask.setUser(user); + return this; + } + + public DataModelUJESJobTask build(){ + return dataModelUJESJobTask; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/AbstractDataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/AbstractDataModelUJESJobLauncher.java new file mode 100644 index 0000000000..ea9417b1cb --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/AbstractDataModelUJESJobLauncher.java @@ -0,0 +1,56 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataModelUJESJobTask; +import org.apache.linkis.common.utils.Utils; +import org.apache.linkis.ujes.client.UJESClient; +import org.apache.linkis.ujes.client.request.JobExecuteAction; +import org.apache.linkis.ujes.client.response.*; +import org.apache.commons.io.IOUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Resource; + +public abstract class AbstractDataModelUJESJobLauncher implements DataModelUJESJobLauncher{ + + private static final Logger LOGGER = LoggerFactory.getLogger(AbstractDataModelUJESJobLauncher.class); + + @Resource + protected UJESClient client; + + + protected void launch0(DataModelUJESJobTask task, JobExecuteResult jobExecuteResult){ + LOGGER.info("exec code : {}", task.getCode()); + //System.out.println("execId: " + jobExecuteResult.getExecID() + ", taskId: " + jobExecuteResult.taskID()); + LOGGER.info("execId : {}, taskId : {}",jobExecuteResult.getExecID(),jobExecuteResult.taskID()); + JobStatusResult status = client.status(jobExecuteResult); + while (!status.isCompleted()) { + JobProgressResult progress = client.progress(jobExecuteResult); + //System.out.println("progress: " + progress.getProgress()); + LOGGER.info("progress : {}",progress.getProgress()); + Utils.sleepQuietly(500); + status = client.status(jobExecuteResult); + } + + } + + @Override + public E launch(DataModelUJESJobTask task) { + try { + JobExecuteResult jobExecuteResult = client.execute(JobExecuteAction.builder().setCreator("hdfs") + .addExecuteCode(task.getCode()) + .setEngineType((JobExecuteAction.EngineType) JobExecuteAction.EngineType$.MODULE$.HIVE()).setEngineTypeStr("hql") + .setUser(task.getUser()).build()); + launch0(task,jobExecuteResult); + return callBack(jobExecuteResult); + }catch (Exception e){ + LOGGER.error(e.getMessage(),e); + throw e; + }finally { + //IOUtils.closeQuietly(client); + } + } + + abstract E callBack(JobExecuteResult jobExecuteResult); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/CreateTableDataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/CreateTableDataModelUJESJobLauncher.java new file mode 100644 index 0000000000..54d0e2e904 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/CreateTableDataModelUJESJobLauncher.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + +import com.webank.wedatasphere.dss.datamodel.center.common.dto.CreateTableDTO; +import org.apache.linkis.ujes.client.response.JobExecuteResult; +import org.apache.linkis.ujes.client.response.JobInfoResult; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Component; + +@Component +public class CreateTableDataModelUJESJobLauncher extends AbstractDataModelUJESJobLauncher{ + private static final Logger LOGGER = LoggerFactory.getLogger(CreateTableDataModelUJESJobLauncher.class); + + @Override + CreateTableDTO callBack(JobExecuteResult jobExecuteResult) { + JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult); + + CreateTableDTO createTableDTO = new CreateTableDTO(); + createTableDTO.setStatus(jobInfo.getStatus()); + createTableDTO.setTaskId(jobExecuteResult.getTaskID()); + LOGGER.info("create table status : {}, info : {}",createTableDTO,jobInfo); + return createTableDTO; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataExistsDataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataExistsDataModelUJESJobLauncher.java new file mode 100644 index 0000000000..0c786175af --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataExistsDataModelUJESJobLauncher.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + + +import org.apache.linkis.ujes.client.request.ResultSetAction; +import org.apache.linkis.ujes.client.response.JobExecuteResult; +import org.apache.linkis.ujes.client.response.JobInfoResult; +import org.apache.linkis.ujes.client.response.ResultSetResult; +import org.apache.commons.collections.CollectionUtils; +import org.springframework.stereotype.Component; + +import java.util.List; + +@Component +public class DataExistsDataModelUJESJobLauncher extends AbstractDataModelUJESJobLauncher{ + + @Override + Boolean callBack( JobExecuteResult jobExecuteResult) { + JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult); + String resultSet = jobInfo.getResultSetList(client)[0]; + ResultSetResult resultSetResult = client.resultSet(ResultSetAction.builder().setPath(resultSet).setUser(jobExecuteResult.getUser()).build()); + + Object fileContents = resultSetResult.getFileContent(); + return !CollectionUtils.isEmpty((List)fileContents); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataModelUJESJobLauncher.java new file mode 100644 index 0000000000..9646b3b45a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DataModelUJESJobLauncher.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataModelUJESJobTask; + +public interface DataModelUJESJobLauncher { + + + /** + * + * @param task + * @return + */ + E launch(DataModelUJESJobTask task); + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DropTableDataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DropTableDataModelUJESJobLauncher.java new file mode 100644 index 0000000000..eff067f672 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/DropTableDataModelUJESJobLauncher.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + + +import org.apache.linkis.ujes.client.response.JobExecuteResult; +import org.apache.linkis.ujes.client.response.JobInfoResult; +import org.springframework.stereotype.Component; + +@Component +public class DropTableDataModelUJESJobLauncher extends AbstractDataModelUJESJobLauncher{ + + @Override + Boolean callBack(JobExecuteResult jobExecuteResult) { + JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult); + return jobInfo.getStatus()==0; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/PreviewDataModelUJESJobLauncher.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/PreviewDataModelUJESJobLauncher.java new file mode 100644 index 0000000000..63784d1873 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/launcher/PreviewDataModelUJESJobLauncher.java @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher; + + + +import com.webank.wedatasphere.dss.datamodel.center.common.dto.PreviewDataDTO; +import org.apache.linkis.ujes.client.request.ResultSetAction; +import org.apache.linkis.ujes.client.response.JobExecuteResult; +import org.apache.linkis.ujes.client.response.JobInfoResult; +import org.apache.linkis.ujes.client.response.ResultSetResult; +import org.springframework.stereotype.Component; + +@Component +public class PreviewDataModelUJESJobLauncher extends AbstractDataModelUJESJobLauncher { + + @Override + PreviewDataDTO callBack(JobExecuteResult jobExecuteResult) { + JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult); + String resultSet = jobInfo.getResultSetList(client)[0]; + ResultSetResult resultSetResult = client.resultSet(ResultSetAction.builder().setPath(resultSet).setUser(jobExecuteResult.getUser()).build()); + + Object fileContents = resultSetResult.getFileContent(); + Object metadata = resultSetResult.getMetadata(); + PreviewDataDTO preview = new PreviewDataDTO(); + preview.setMetadata(metadata); + preview.setData(fileContents); + return preview; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/CreateTableDataModelUJESJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/CreateTableDataModelUJESJobTask.java new file mode 100644 index 0000000000..8c18728a5e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/CreateTableDataModelUJESJobTask.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.task; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.DataModelUJESJobTaskBuilder; + +public class CreateTableDataModelUJESJobTask extends DataModelUJESJobTask { + + public static DataModelUJESJobTaskBuilder newBuilder() { + return new DataModelUJESJobTaskBuilder(new CreateTableDataModelUJESJobTask()); + } + + CreateTableDataModelUJESJobTask() { + } + + + @Override + public void formatCode(String code) { + setCode(code); + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataExistsDataModelUJESJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataExistsDataModelUJESJobTask.java new file mode 100644 index 0000000000..b39415e706 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataExistsDataModelUJESJobTask.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.task; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.DataModelUJESJobTaskBuilder; + +public class DataExistsDataModelUJESJobTask extends DataModelUJESJobTask{ + + public static DataModelUJESJobTaskBuilder newBuilder(){ + return new DataModelUJESJobTaskBuilder(new DataExistsDataModelUJESJobTask()); + } + + DataExistsDataModelUJESJobTask(){}; + + @Override + public void formatCode(String code) { + setCode( String.format("select * from %s limit 1",code)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataModelUJESJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataModelUJESJobTask.java new file mode 100644 index 0000000000..f417f50011 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DataModelUJESJobTask.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.task; + + +import lombok.Data; + +@Data +public abstract class DataModelUJESJobTask { + + private String code; + + private Integer count = 10; + + private String user; + + public abstract void formatCode(String code); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DropTableDataModelUJESJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DropTableDataModelUJESJobTask.java new file mode 100644 index 0000000000..ca78c06837 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/DropTableDataModelUJESJobTask.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.task; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.DataModelUJESJobTaskBuilder; + +public class DropTableDataModelUJESJobTask extends DataModelUJESJobTask { + + public static DataModelUJESJobTaskBuilder newBuilder() { + return new DataModelUJESJobTaskBuilder(new DropTableDataModelUJESJobTask()); + } + + DropTableDataModelUJESJobTask() { + } + + + @Override + public void formatCode(String code) { + setCode(String.format("drop table if exists %s",code)); + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/PreviewDataModelUJESJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/PreviewDataModelUJESJobTask.java new file mode 100644 index 0000000000..4188e53832 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/ujes/task/PreviewDataModelUJESJobTask.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.ujes.task; + + +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.DataModelUJESJobTaskBuilder; + +public class PreviewDataModelUJESJobTask extends DataModelUJESJobTask { + + public static DataModelUJESJobTaskBuilder newBuilder() { + return new DataModelUJESJobTaskBuilder(new PreviewDataModelUJESJobTask()); + } + + PreviewDataModelUJESJobTask() { + } + + + @Override + public void formatCode(String code) { + setCode(String.format("select * from %s limit %s", code,getCount()+"")); + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/vo/PageVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/vo/PageVO.java new file mode 100644 index 0000000000..ec3e6a80c6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/main/java/com/webank/wedatasphere/dss/datamodel/center/common/vo/PageVO.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.datamodel.center.common.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class PageVO { + private Integer pageSize = 50; + + private Integer pageNum = 1; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/TestJobTask.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/TestJobTask.java new file mode 100644 index 0000000000..77819be5c0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/TestJobTask.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel; + + +import org.apache.linkis.computation.client.LinkisJobClient; +import org.apache.linkis.computation.client.ResultSetIterator; +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; + +public class TestJobTask { + public static void main(String[] args) { + // TODO First, set the right gateway url. + LinkisJobClient.config().setDefaultServerUrl("http://121.36.12.247:8088"); + //TODO Secondly, please modify the executeUser + SubmittableInteractiveJob job = LinkisJobClient.interactive().builder() + .setEngineType("hive-2.3.3").setRunTypeStr("hql") + .setCode("select * from linkis_db.linkis_partitions limit 1") + .addExecuteUser("hdfs") + .setCreator("hdfs") + .build(); + // 3. Submit Job to Linkis + job.submit(); +// System.out.println("execId: " + job.getJobSubmitResult().getExecID() + ", taskId: " + job.getJobSubmitResult().taskID()); +// System.out.println("ResponseBody:"+job.getJobSubmitResult().getResponseBody()); + +// // 4. Wait for Job completed + job.waitForCompleted(); + +// // 5. Get results from iterators. + ResultSetIterator iterator = job.getResultSetIterables()[0].iterator(); + System.out.println(iterator.getMetadata()); + while(iterator.hasNext()){ + System.out.println(iterator.next()); + } + + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/UJESClientImplTestJ.java b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/UJESClientImplTestJ.java new file mode 100644 index 0000000000..439fd817e7 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-common/src/test/java/com/webank/wedatasphere/dss/datamodel/UJESClientImplTestJ.java @@ -0,0 +1,97 @@ +/* + * Copyright 2019 WeBank + * + * 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 com.webank.wedatasphere.dss.datamodel; + +import com.google.gson.Gson; +import org.apache.linkis.common.utils.Utils; +import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy; +import org.apache.linkis.httpclient.dws.config.DWSClientConfig; +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder; +import org.apache.linkis.ujes.client.UJESClient; +import org.apache.linkis.ujes.client.UJESClientImpl; +import org.apache.linkis.ujes.client.request.JobExecuteAction; +import org.apache.linkis.ujes.client.request.ResultSetAction; +import org.apache.linkis.ujes.client.response.*; +import lombok.Data; +import org.apache.commons.io.IOUtils; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +@Deprecated +public class UJESClientImplTestJ{ + public static void main(String[] args){ + // Suggest to use LinkisJobClient to submit job to Linkis. + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) (DWSClientConfigBuilder.newBuilder().addServerUrl("http://121.36.12.247:8088") + .connectionTimeout(30000).discoveryEnabled(true) + .discoveryFrequency(1, TimeUnit.MINUTES) + .loadbalancerEnabled(true).maxConnectionSize(5) + .retryEnabled(false).readTimeout(30000) + .setAuthenticationStrategy(new StaticAuthenticationStrategy()).setAuthTokenKey("hdfs") + .setAuthTokenValue("hdfs"))).setDWSVersion("v1").build(); + UJESClient client = new UJESClientImpl(clientConfig); + + JobExecuteResult jobExecuteResult = client.execute(JobExecuteAction.builder().setCreator("hdfs") + .addExecuteCode("select * from default.testTable3 limit 1") + //.addExecuteCode("show tables") + //.addExecuteCode(String.format("drop table if exists %s","linkis_db.linkis_test01")) + .setEngineType((JobExecuteAction.EngineType)JobExecuteAction.EngineType$.MODULE$.HIVE()).setEngineTypeStr("hql") + .setUser("hdfs").build()); + System.out.println("execId: " + jobExecuteResult.getExecID() + ", taskId: " + jobExecuteResult.taskID()); + JobStatusResult status = client.status(jobExecuteResult); + while(!status.isCompleted()) { + JobProgressResult progress = client.progress(jobExecuteResult); + System.out.println("progress: " + progress.getProgress()); + Utils.sleepQuietly(500); + status = client.status(jobExecuteResult); + } + JobInfoResult jobInfo = client.getJobInfo(jobExecuteResult); + System.out.println(jobInfo.getStatus()); + String resultSet = jobInfo.getResultSetList(client)[0]; + ResultSetResult resultSetResult =client.resultSet(ResultSetAction.builder().setPath(resultSet).setUser(jobExecuteResult.getUser()).build()); + Object fileContents = resultSetResult.getFileContent(); + Object metadata = resultSetResult.getMetadata(); + System.out.println("metadata: " + metadata); + System.out.println("fileContents: " + fileContents); + System.out.println("fileContents size: " + ((List)fileContents).size()); + Preview preview = new Preview(); + preview.setMetadata(metadata); + preview.setData(fileContents); + Gson gson = new Gson(); + System.out.println(gson.toJson(preview)); + IOUtils.closeQuietly(client); + } + + @Data + public static class Preview{ + private Object metadata; + + private Object data; + } + + @Data + public static class Metadata{ + private String columnName; + + private String comment; + + private String dataType; + } + + + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_ddl.sql b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_ddl.sql new file mode 100644 index 0000000000..ddf7202abd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_ddl.sql @@ -0,0 +1,320 @@ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + + +-- ---------------------------- +-- Table structure for dss_datamodel_dimension +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_dimension`; +CREATE TABLE `dss_datamodel_dimension` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=27 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator`; +CREATE TABLE `dss_datamodel_indicator` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `is_core_indicator` tinyint(1) NOT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `theme_area_en` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '英文名称', + `layer_area_en` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '英文名称', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=82 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator_content +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator_content`; +CREATE TABLE `dss_datamodel_indicator_content` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `indicator_id` int(11) NOT NULL, + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `indicator_type` int(4) NOT NULL COMMENT '0 原子 1 衍生 2 派生 3 复杂 4 自定义', + `measure_id` int(11) DEFAULT NULL, + `indicator_source_info` text COLLATE utf8_bin NOT NULL COMMENT '指标来源信息', + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `business` varchar(255) COLLATE utf8_bin NOT NULL, + `business_owner` varchar(255) COLLATE utf8_bin NOT NULL, + `calculation` varchar(255) COLLATE utf8_bin NOT NULL, + `calculation_owner` varchar(255) COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=158 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_indicator_version +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_indicator_version`; +CREATE TABLE `dss_datamodel_indicator_version` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `version` varchar(255) COLLATE utf8_bin NOT NULL, + `version_context` text COLLATE utf8_bin NOT NULL COMMENT '历史版本详细信息快照', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`,`version`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=50 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_label +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_label`; +CREATE TABLE `dss_datamodel_label` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `params` text COLLATE utf8_bin COMMENT '标签键值对 json', + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=34 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_measure +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_measure`; +CREATE TABLE `dss_datamodel_measure` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `field_identifier` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `owner` varchar(64) COLLATE utf8_bin NOT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` tinyint(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE, + UNIQUE KEY `field_identifier` (`field_identifier`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table`; +CREATE TABLE `dss_datamodel_table` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) COLLATE utf8_bin NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `creator` varchar(255) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_layer_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级', + `warehouse_layer_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级英文', + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `lifecycle` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期', + `is_partition_table` tinyint(1) NOT NULL, + `is_available` tinyint(1) NOT NULL, + `storage_type` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '存储类型:hive/mysql', + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `compress` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '压缩格式', + `file_type` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '文件格式', + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + `is_external` tinyint(1) NOT NULL COMMENT '是否外部表 0 内部表 1外部表', + `location` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '外部表时 location', + `label` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '标签', + `lifecycle_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期英文', + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `database` (`data_base`,`name`) USING BTREE, + UNIQUE KEY `name` (`name`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=92 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_collcetion +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_collcetion`; +CREATE TABLE `dss_datamodel_table_collcetion` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `warehouse_layer_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级', + `warehouse_theme_name` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题格式为: theme_domain_name.theme_name', + `lifecycle` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期', + `is_partition_table` tinyint(1) DEFAULT NULL, + `is_available` tinyint(1) DEFAULT NULL, + `storage_type` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '存储类型:hive/mysql', + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `compress` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '压缩格式', + `file_type` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '文件格式', + `user` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '收藏人', + `version` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '版本信息:默认1', + `is_external` tinyint(1) DEFAULT NULL COMMENT '是否外部表 0 内部表 1外部表', + `location` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '外部表时 location', + `label` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '标签', + `guid` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT 'atlas标识', + `warehouse_layer_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓层级英文', + `warehouse_theme_name_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '数仓主题英文', + `lifecycle_en` varchar(512) COLLATE utf8_bin DEFAULT NULL COMMENT '生命周期英文', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=26 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_columns +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_columns`; +CREATE TABLE `dss_datamodel_table_columns` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `table_id` int(11) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `alias` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `type` varchar(64) COLLATE utf8_bin NOT NULL, + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_partition_field` tinyint(1) NOT NULL, + `is_primary` tinyint(1) NOT NULL, + `length` int(11) DEFAULT NULL, + `rule` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `model_type` int(4) DEFAULT NULL COMMENT '0 维度,1 指标 2 度量', + `model_name_en` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '模型信息英文名称', + `model_id` int(11) DEFAULT NULL COMMENT '关联具体模型id信息(因为有版本数据表id不可靠,暂时不用)', + `model_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '模型信息名称', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=226 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_materialized_history +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_materialized_history`; +CREATE TABLE `dss_datamodel_table_materialized_history` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `materialized_code` mediumtext COLLATE utf8_bin COMMENT '物化sql', + `reason` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '物化原因', + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '物化者', + `status` int(4) NOT NULL COMMENT 'succeed,failed,in progess', + `create_time` datetime NOT NULL, + `last_update_time` datetime NOT NULL, + `task_id` varchar(512) COLLATE utf8_bin NOT NULL, + `error_msg` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `tableName` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '表名', + `data_base` varchar(255) COLLATE utf8_bin NOT NULL, + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=66 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_params +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_params`; +CREATE TABLE `dss_datamodel_table_params` ( + `tbl_id` int(11) NOT NULL, + `param_key` varchar(256) COLLATE utf8_bin NOT NULL COMMENT '创建表参数:压缩/orc等', + `param_value` mediumtext COLLATE utf8_bin, + PRIMARY KEY (`tbl_id`,`param_key`) USING BTREE, + KEY `table_params_n49` (`tbl_id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_statics +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_statics`; +CREATE TABLE `dss_datamodel_table_statics` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `origin_tables` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `table_id` int(11) NOT NULL, + `access_count` int(11) NOT NULL, + `last_access_time` int(11) NOT NULL, + `sample_data_path` varchar(256) COLLATE utf8_bin DEFAULT NULL COMMENT '存储10行用例数据', + `sample_update_time` int(11) NOT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_stats +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_stats`; +CREATE TABLE `dss_datamodel_table_stats` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `data_base` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `name` varchar(255) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `column_count` int(11) NOT NULL COMMENT '字段数', + `storage_size` int(11) NOT NULL COMMENT '存储大小', + `file_count` int(11) NOT NULL COMMENT '文件数', + `partition_count` int(11) NOT NULL COMMENT '分区数', + `access_count` int(11) NOT NULL COMMENT '访问次数', + `collect_count` int(11) NOT NULL COMMENT '收藏次数', + `ref_count` int(11) NOT NULL COMMENT '引用次数', + `version` varchar(128) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认1', + PRIMARY KEY (`id`) USING BTREE +) ENGINE=InnoDB DEFAULT CHARSET=utf8; + +-- ---------------------------- +-- Table structure for dss_datamodel_table_version +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_table_version`; +CREATE TABLE `dss_datamodel_table_version` ( + `id` int(11) NOT NULL AUTO_INCREMENT, + `tbl_id` int(11) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `is_materialized` tinyint(1) NOT NULL COMMENT '是否物化', + `table_code` mediumtext COLLATE utf8_bin COMMENT '创建table的sql', + `comment` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '版本注释', + `version` varchar(128) COLLATE utf8_bin NOT NULL COMMENT '版本信息:默认version0002', + `table_params` mediumtext COLLATE utf8_bin, + `columns` varchar(4000) COLLATE utf8_bin DEFAULT NULL, + `source_type` varchar(128) COLLATE utf8_bin DEFAULT 'add' COMMENT 'rollback,update,add', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `creator` varchar(255) COLLATE utf8_bin DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE, + UNIQUE KEY `table_version` (`version`,`name`) USING BTREE +) ENGINE=InnoDB AUTO_INCREMENT=40 DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_dml.sql b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_dml.sql new file mode 100644 index 0000000000..5a7024fe83 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/db/datamodel_dml.sql @@ -0,0 +1,40 @@ + +SET NAMES utf8mb4; +SET FOREIGN_KEY_CHECKS = 0; + +-- ---------------------------- +-- Table structure for dss_datamodel_dictionary +-- ---------------------------- +DROP TABLE IF EXISTS `dss_datamodel_dictionary`; +CREATE TABLE `dss_datamodel_dictionary` ( + `id` int(50) NOT NULL COMMENT '主键id', + `code` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '类型code', + `type` varchar(128) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '字典类型', + `description` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '描述', + `created_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) COMMENT '创建时间', + `update_time` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新时间', + `sort` int(11) NULL DEFAULT NULL, + PRIMARY KEY (`id`) USING BTREE +) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci COMMENT = '数模字典' ROW_FORMAT = Dynamic; + +-- ---------------------------- +-- Records of dss_datamodel_dictionary +-- ---------------------------- +INSERT INTO `dss_datamodel_dictionary` VALUES (10000001, 'Snappy', 'COMPRESS', 'Snappy', '2021-10-09 15:41:23', '2021-10-09 15:55:44', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000002, 'None', 'COMPRESS', '无', '2021-10-09 15:42:17', '2021-10-20 14:48:59', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000003, 'ORC', 'FILE_STORAGE', 'orc', '2021-10-09 15:55:32', '2021-10-20 14:49:00', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000004, 'Parquet', 'FILE_STORAGE', 'Parquet', '2021-10-09 15:55:32', '2021-10-20 14:49:02', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000005, 'None', 'FILE_STORAGE', '无', '2021-10-09 15:55:32', '2021-10-20 14:49:04', 3); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000006, 'Once', 'LIFECYCLE', '一次', '2021-10-09 15:55:32', '2021-10-20 14:49:05', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000007, 'OneDay', 'LIFECYCLE', '一天', '2021-10-09 15:55:32', '2021-10-20 14:49:06', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000008, 'HalfMonth', 'LIFECYCLE', '半月', '2021-10-09 15:55:32', '2021-10-20 14:49:07', 3); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000009, 'OneMonth', 'LIFECYCLE', '一个月', '2021-10-09 15:55:32', '2021-10-20 14:49:08', 4); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000010, 'ThreeMonths', 'LIFECYCLE', '三个月', '2021-10-09 15:55:32', '2021-10-20 14:49:09', 5); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000011, 'SixMonths', 'LIFECYCLE', '六个月', '2021-10-09 15:55:32', '2021-10-20 14:49:10', 6); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000012, 'OneYear', 'LIFECYCLE', '一年', '2021-10-09 15:55:32', '2021-10-20 14:49:11', 7); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000013, 'ThreeYears', 'LIFECYCLE', '三年', '2021-10-09 15:55:32', '2021-10-20 14:49:12', 8); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000014, 'Hive', 'STORAGE_ENGINE', 'hive', '2021-10-09 15:55:32', '2021-10-20 14:49:19', 1); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000015, 'Mysql', 'STORAGE_ENGINE', 'mysql', '2021-10-09 15:55:32', '2021-10-20 14:49:20', 2); +INSERT INTO `dss_datamodel_dictionary` VALUES (10000016, 'ES', 'STORAGE_ENGINE', 'es', '2021-10-09 15:55:32', '2021-10-20 14:49:25', 3); + +SET FOREIGN_KEY_CHECKS = 1; diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/pom.xml new file mode 100644 index 0000000000..308ac5c9a3 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/pom.xml @@ -0,0 +1,119 @@ + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-center-server + + + 8 + 8 + + + + + com.webank.wedatasphere.dss + dss-common + ${dss.version} + provided + + + com.webank.wedatasphere.dss + dss-datamodel-dimension-management + ${dss.version} + + + com.webank.wedatasphere.dss + dss-datamodel-measure-management + ${dss.version} + + + com.webank.wedatasphere.dss + dss-datamodel-indicator-management + ${dss.version} + + + com.webank.wedatasphere.dss + dss-datamodel-table-management + ${dss.version} + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + org.apache.maven.plugins + maven-assembly-plugin + 2.3 + false + + + make-assembly + package + + single + + + + src/main/assembly/distribution.xml + + + + + + false + out + false + false + + src/main/assembly/distribution.xml + + + + + org.apache.maven.plugins + maven-compiler-plugin + + 8 + 8 + + + + + + src/main/java + + **/*.xml + + + + + + + + + + + + + \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/assembly/distribution.xml b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/assembly/distribution.xml similarity index 59% rename from dss-apps/dss-data-governance/dss-data-asset-server/src/main/assembly/distribution.xml rename to dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/assembly/distribution.xml index 46d83d32f8..9a245b7843 100644 --- a/dss-apps/dss-data-governance/dss-data-asset-server/src/main/assembly/distribution.xml +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/assembly/distribution.xml @@ -1,31 +1,30 @@ - dss-data-asset-server + dss-datamodel-center-server dir true - dss-data-asset-server + dss-datamodel-center-server @@ -39,8 +38,5 @@ true - - - diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/application.yml b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/application.yml new file mode 100644 index 0000000000..bddac1e886 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/application.yml @@ -0,0 +1,20 @@ +server: + port: 9321 +spring: + application: + name: datamodel-server +eureka: + client: + serviceUrl: + defaultZone: http://localhost:20303/eureka/ + instance: + metadata-map: + test: wedatasphere + +management: + endpoints: + web: + exposure: + include: refresh,info +logging: + config: classpath:log4j2.xml diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/linkis.properties b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/linkis.properties new file mode 100644 index 0000000000..0ac3b56402 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/linkis.properties @@ -0,0 +1,104 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# + +wds.linkis.test.mode=true + + + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://localhost:3306/datamodel?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username= + +***REMOVED*** + + +wds.linkis.log.clear=true + +wds.linkis.server.version=v1 + + +wds.wedatasphere.linkis.serverurl=http://localhost:8088 + +wds.wedatasphere.linkis.authtoken.key=hdfs + +wds.wedatasphere.linkis.discovery.enabled=false + +wds.wedatasphere.linkis.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.linkis.authtoken.value=hdfs + +wds.wedatasphere.linkis.dws.version=v1 + + +##restful +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.dss.datamodel.indicator.restful,\ + com.webank.wedatasphere.dss.datamodel.table.restful,\ + com.webank.wedatasphere.dss.datamodel.dimension.restful,\ + com.webank.wedatasphere.dss.datamodel.measure.restful + +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/dss/datamodel/dimension/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/table/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/measure/dao/impl/*.xml,\ + classpath*:com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/*.xml + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.dss.datamodel.dimension.dao,\ + com.webank.wedatasphere.dss.datamodel.table.dao,\ + com.webank.wedatasphere.dss.datamodel.measure.dao,\ + com.webank.wedatasphere.dss.datamodel.indicator.dao + +wds.wedatasphere.warehouse.client.serverurl=http://localhost:29001 + +wds.wedatasphere.warehouse.client.authtoken.key=hdfs + +wds.wedatasphere.warehouse.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.warehouse.client.authtoken.value=hdfs + +wds.wedatasphere.warehouse.client.discovery.enabled=false + +wds.wedatasphere.warehouse.client.dws.version=v1 + + +wds.wedatasphere.assets.client.serverurl=http://localhost:29001 + +wds.wedatasphere.assets.client.authtoken.key=hdfs + +wds.wedatasphere.assets.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.wedatasphere.assets.client.discovery.enabled=false + +wds.wedatasphere.assets.client.authtoken.value=hdfs + +wds.wedatasphere.assets.client.dws.version=v1 + + + +wds.workspace.client.serverurl=http://localhost:29001 + +wds.workspace.client.authtoken.key=hdfs + +wds.workspace.client.authenticationStrategy=org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy + +wds.workspace.client.discovery.enabled=false + +wds.workspace.client.authtoken.value=hdfs + +wds.workspace.client.dws.version=v1 + + + +wds.wedatasphere.data.model.client.strategy=static diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j.properties b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j.properties new file mode 100644 index 0000000000..0807e60877 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j.properties @@ -0,0 +1,37 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# + +### set log levels ### + +log4j.rootCategory=INFO,console + +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.Threshold=INFO +log4j.appender.console.layout=org.apache.log4j.PatternLayout +#log4j.appender.console.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n +log4j.appender.console.layout.ConversionPattern= %d{ISO8601} %-5p (%t) %p %c{1} - %m%n + + +log4j.appender.com.webank.bdp.ide.core=org.apache.log4j.DailyRollingFileAppender +log4j.appender.com.webank.bdp.ide.core.Threshold=INFO +log4j.additivity.com.webank.bdp.ide.core=false +log4j.appender.com.webank.bdp.ide.core.layout=org.apache.log4j.PatternLayout +log4j.appender.com.webank.bdp.ide.core.Append=true +log4j.appender.com.webank.bdp.ide.core.File=logs/linkis.log +log4j.appender.com.webank.bdp.ide.core.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n + +log4j.logger.org.springframework=INFO diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j2.xml b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..5ae60f1441 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/resources/log4j2.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/scala/com/webank/wedatasphere/dss/datamodel/DataModelApplication.scala b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/scala/com/webank/wedatasphere/dss/datamodel/DataModelApplication.scala new file mode 100644 index 0000000000..a883c09eae --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-center-server/src/main/scala/com/webank/wedatasphere/dss/datamodel/DataModelApplication.scala @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel + +import com.webank.wedatasphere.dss.common.utils.DSSMainHelper +import org.apache.linkis.DataWorkCloudApplication +import org.apache.linkis.common.utils.{Logging, Utils} + +object DataModelApplication extends Logging{ + val userName: String = System.getProperty("user.name") + val hostName: String = Utils.getComputerName + + def main(args: Array[String]): Unit = { + val serviceName = System.getProperty("serviceName")//ProjectConf.SERVICE_NAME.getValue + DSSMainHelper.formatPropertyFiles(serviceName) + val allArgs = args ++ DSSMainHelper.getExtraSpringOptions + System.setProperty("hostName", hostName) + System.setProperty("userName", userName) + info(s"Ready to start $serviceName with args: ${allArgs.toList}.") + println(s"Test Ready to start $serviceName with args: ${allArgs.toList}.") + DataWorkCloudApplication.main(allArgs) + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/pom.xml new file mode 100644 index 0000000000..b49941d747 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/pom.xml @@ -0,0 +1,59 @@ + + + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-dimension-management + + + + + com.webank.wedatasphere.dss + dss-datamodel-center-common + ${dss.version} + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/DssDatamodelDimensionMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/DssDatamodelDimensionMapper.java new file mode 100644 index 0000000000..34ccc92025 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/DssDatamodelDimensionMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.dao; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import org.apache.ibatis.annotations.Param; + +import com.webank.wedatasphere.dss.datamodel.dimension.entity.DssDatamodelDimension; + +public interface DssDatamodelDimensionMapper extends BaseMapper { + int deleteByPrimaryKey(Long id); + + int insert(DssDatamodelDimension record); + + int insertSelective(DssDatamodelDimension record); + + DssDatamodelDimension selectByPrimaryKey(Long id); + + int updateByPrimaryKeySelective(DssDatamodelDimension record); + + int updateByPrimaryKey(DssDatamodelDimension record); + + int updateIsAvailableById(@Param("updatedIsAvailable")Integer updatedIsAvailable,@Param("id")Long id); + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/impl/DssDatamodelDimensionMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/impl/DssDatamodelDimensionMapper.xml new file mode 100644 index 0000000000..2e71b2525e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dao/impl/DssDatamodelDimensionMapper.xml @@ -0,0 +1,174 @@ + + + + + + + + + + + + + + + + + + + + + id, `name`, field_identifier, formula, `comment`, warehouse_theme_name, `owner`, + principal_name, is_available, create_time, update_time + + + + + delete from dss_datamodel_dimension + where id = #{id,jdbcType=BIGINT} + + + + insert into dss_datamodel_dimension (`name`, field_identifier, formula, + `comment`, warehouse_theme_name, `owner`, + principal_name, is_available, create_time, + update_time) + values (#{name,jdbcType=VARCHAR}, #{fieldIdentifier,jdbcType=VARCHAR}, #{formula,jdbcType=VARCHAR}, + #{comment,jdbcType=VARCHAR}, #{warehouseThemeName,jdbcType=VARCHAR}, #{owner,jdbcType=VARCHAR}, + #{principalName,jdbcType=VARCHAR}, #{isAvailable,jdbcType=BOOLEAN}, #{createTime,jdbcType=TIMESTAMP}, + #{updateTime,jdbcType=TIMESTAMP}) + + + + insert into dss_datamodel_dimension + + + `name`, + + + field_identifier, + + + formula, + + + `comment`, + + + warehouse_theme_name, + + + `owner`, + + + principal_name, + + + is_available, + + + create_time, + + + update_time, + + + + + #{name,jdbcType=VARCHAR}, + + + #{fieldIdentifier,jdbcType=VARCHAR}, + + + #{formula,jdbcType=VARCHAR}, + + + #{comment,jdbcType=VARCHAR}, + + + #{warehouseThemeName,jdbcType=VARCHAR}, + + + #{owner,jdbcType=VARCHAR}, + + + #{principalName,jdbcType=VARCHAR}, + + + #{isAvailable,jdbcType=BOOLEAN}, + + + #{createTime,jdbcType=TIMESTAMP}, + + + #{updateTime,jdbcType=TIMESTAMP}, + + + + + + update dss_datamodel_dimension + + + `name` = #{name,jdbcType=VARCHAR}, + + + field_identifier = #{fieldIdentifier,jdbcType=VARCHAR}, + + + formula = #{formula,jdbcType=VARCHAR}, + + + `comment` = #{comment,jdbcType=VARCHAR}, + + + warehouse_theme_name = #{warehouseThemeName,jdbcType=VARCHAR}, + + + `owner` = #{owner,jdbcType=VARCHAR}, + + + principal_name = #{principalName,jdbcType=VARCHAR}, + + + is_available = #{isAvailable,jdbcType=BOOLEAN}, + + + create_time = #{createTime,jdbcType=TIMESTAMP}, + + + update_time = #{updateTime,jdbcType=TIMESTAMP}, + + + where id = #{id,jdbcType=BIGINT} + + + + update dss_datamodel_dimension + set `name` = #{name,jdbcType=VARCHAR}, + field_identifier = #{fieldIdentifier,jdbcType=VARCHAR}, + formula = #{formula,jdbcType=VARCHAR}, + `comment` = #{comment,jdbcType=VARCHAR}, + warehouse_theme_name = #{warehouseThemeName,jdbcType=VARCHAR}, + `owner` = #{owner,jdbcType=VARCHAR}, + principal_name = #{principalName,jdbcType=VARCHAR}, + is_available = #{isAvailable,jdbcType=BOOLEAN}, + create_time = #{createTime,jdbcType=TIMESTAMP}, + update_time = #{updateTime,jdbcType=TIMESTAMP} + where id = #{id,jdbcType=BIGINT} + + + + + update dss_datamodel_dimension + set is_available=#{updatedIsAvailable,jdbcType=BOOLEAN} + where id=#{id,jdbcType=BIGINT} + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dto/DimensionQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dto/DimensionQueryDTO.java new file mode 100644 index 0000000000..78b83523e0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/dto/DimensionQueryDTO.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.dto; + + +import lombok.Data; + +import java.util.Date; + +@Data +public class DimensionQueryDTO { + private Long id; + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + + private String warehouseThemeNameEn; + + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Date createTime; + + private Date updateTime; + + /** + * 被引用次数 + */ + private Integer refCount =0; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/entity/DssDatamodelDimension.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/entity/DssDatamodelDimension.java new file mode 100644 index 0000000000..5db862c15d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/entity/DssDatamodelDimension.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelDimension { + + @TableId(type = IdType.AUTO) + private Long id; + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + } \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/restful/DimensionRestfulApi.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/restful/DimensionRestfulApi.java new file mode 100644 index 0000000000..fbd185065f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/restful/DimensionRestfulApi.java @@ -0,0 +1,100 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.restful; + +import com.webank.wedatasphere.dss.datamodel.dimension.service.DimensionService; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionAddVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionEnableVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionQueryVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + +@RequestMapping(path = "/datamodel", produces = {"application/json"}) +@RestController +public class DimensionRestfulApi { + private static final Logger LOGGER = LoggerFactory.getLogger(DimensionRestfulApi.class); + + @Autowired + private DimensionService dimensionService; + + /** + * 新增 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/dimensions",method = RequestMethod.POST) + public Message add(HttpServletRequest req, @RequestBody DimensionAddVO vo) throws ErrorException { + LOGGER.info("dimensionAddVO : {}", vo); + return Message.ok().data("id", dimensionService.addDimension(vo)); + } + + /** + * 启用/禁用 + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/enable/{id}",method = RequestMethod.POST) + public Message enable(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody DimensionEnableVO vo) { + LOGGER.info("enable id : {}, vo : {}", id, vo); + return Message.ok().data("count", dimensionService.enableDimension(id, vo)); + } + + /** + * 修改 + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/dimensions/{id}",method = RequestMethod.PUT) + public Message update(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody DimensionUpdateVO vo) throws ErrorException{ + LOGGER.info("update id : {}, vo : {}", id, vo); + return Message.ok().data("count",dimensionService.updateDimension(id,vo)); + } + + /** + * 删除 + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/dimensions/{id}",method = RequestMethod.DELETE) + public Message delete(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("delete id : {}", id); + return Message.ok().data("count",dimensionService.deleteDimension(id)); + } + + /** + * 分页搜索 + * @param req + * @return + */ + @RequestMapping(value = "/dimensions/list",method = RequestMethod.POST) + public Message list(HttpServletRequest req,@RequestBody DimensionQueryVO vo){ + LOGGER.info("list vo : {}",vo); + return dimensionService.listDimensions(vo); + } + + + /** + * 查看 + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/dimensions/{id}",method = RequestMethod.GET) + public Message query(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("query id : {}", id); + return Message.ok().data("detail",dimensionService.queryById(id)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/DimensionService.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/DimensionService.java new file mode 100644 index 0000000000..fa9c089bc2 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/DimensionService.java @@ -0,0 +1,70 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.dimension.dto.DimensionQueryDTO; +import com.webank.wedatasphere.dss.datamodel.dimension.entity.DssDatamodelDimension; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionAddVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionEnableVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionQueryVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; + + +public interface DimensionService extends IService { + + /** + * 新增维度 + * @param vo + * @return + */ + long addDimension(DimensionAddVO vo)throws ErrorException; + + /** + * 启用/禁用 + * @param vo + * @return + */ + int enableDimension(Long id, DimensionEnableVO vo); + + + /** + * 更新 + * @param id + * @param vo + * @return + */ + int updateDimension(Long id, DimensionUpdateVO vo) throws ErrorException; + + + /** + * 删除 + * @param id + * @return + */ + int deleteDimension(Long id) throws ErrorException; + + + /** + * 查看 + * @param id + * @return + */ + DimensionQueryDTO queryById(Long id) throws ErrorException; + + + /** + * 查询列表 + * @param vo + * @return + */ + Message listDimensions(DimensionQueryVO vo); + + + /** + * 主题引用情况 + * @param name + * @return + */ + int dimensionThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DataWarehouseDimensionReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DataWarehouseDimensionReferenceServiceImpl.java new file mode 100644 index 0000000000..3b4da459f5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DataWarehouseDimensionReferenceServiceImpl.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.service.impl; + + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseDimensionReferenceService; +import com.webank.wedatasphere.dss.datamodel.dimension.service.DimensionService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseDimensionReferenceServiceImpl implements DataWarehouseDimensionReferenceService { + + @Resource + private DimensionService dimensionService; + + @Override + public int dimensionThemeReferenceCount(String name) { + return dimensionService.dimensionThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DimensionServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DimensionServiceImpl.java new file mode 100644 index 0000000000..007fc17f86 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/service/impl/DimensionServiceImpl.java @@ -0,0 +1,214 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.response.CreateModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.UpdateModelTypeResult; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.event.CreateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.DeleteModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UpdateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AssertsSyncService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelReferencService; +import com.webank.wedatasphere.dss.datamodel.dimension.dao.DssDatamodelDimensionMapper; +import com.webank.wedatasphere.dss.datamodel.dimension.dto.DimensionQueryDTO; +import com.webank.wedatasphere.dss.datamodel.dimension.entity.DssDatamodelDimension; +import com.webank.wedatasphere.dss.datamodel.dimension.service.DimensionService; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionAddVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionEnableVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionQueryVO; +import com.webank.wedatasphere.dss.datamodel.dimension.vo.DimensionUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.stream.Collectors; + + + +@Service +public class DimensionServiceImpl extends ServiceImpl implements DimensionService { + + private static final Logger LOGGER = LoggerFactory.getLogger(DimensionServiceImpl.class); + + private final ModelMapper modelMapper = new ModelMapper(); + + + @Resource + private AssertsSyncService assertsSyncService; + + @Resource + private DatamodelReferencService datamodelReferencService; + + @Override + @Transactional(rollbackFor = Exception.class) + public long addDimension(DimensionAddVO vo) throws DSSDatamodelCenterException{ + if (getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelDimension::getName, vo.getName()) + .or().eq(DssDatamodelDimension::getFieldIdentifier,vo.getFieldIdentifier())) > 0) { + LOGGER.error("errorCode : {}, dimension name or field identifier can not repeat, name : {}", ErrorCode.INDICATOR_ADD_ERROR.getCode(), vo.getName()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_ADD_ERROR.getCode(), "dimension name or field identifier can not repeat"); + } + + if (datamodelReferencService.dimensionReferenceCount(vo.getName())>0 + ||datamodelReferencService.dimensionReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, dimension name can not referenced", ErrorCode.DIMENSION_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_ADD_ERROR.getCode(), "dimension name can not referenced"); + } + + DssDatamodelDimension newOne = modelMapper.map(vo,DssDatamodelDimension.class); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + + getBaseMapper().insert(newOne); + + //同步atlas + CreateModelTypeResult result = assertsSyncService.syncCreateModel( + new CreateModelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getFieldIdentifier() + , ClassificationConstant.DIMENSION)); + return newOne.getId(); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int enableDimension(Long id ,DimensionEnableVO vo) { + DssDatamodelDimension enableOne = new DssDatamodelDimension(); + enableOne.setIsAvailable(vo.getIsAvailable()); + enableOne.setUpdateTime(new Date()); + return getBaseMapper().update(enableOne, Wrappers.lambdaUpdate().eq(DssDatamodelDimension::getId,id)); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateDimension(Long id, DimensionUpdateVO vo) throws DSSDatamodelCenterException{ + DssDatamodelDimension org = getBaseMapper().selectById(id); + if (org == null) { + LOGGER.error("errorCode : {}, update dimension error not exists", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "update dimension error not exists"); + } + + if (datamodelReferencService.dimensionReferenceCount(org.getName())>0 + ||datamodelReferencService.dimensionReferenceCount(org.getFieldIdentifier())>0 + ||datamodelReferencService.dimensionReferenceCount(vo.getName())>0 + ||datamodelReferencService.dimensionReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, dimension name can not referenced", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "dimension name can not referenced"); + } + + + //当更新名称时 + if (!StringUtils.equals(vo.getName(), org.getName())) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelDimension::getName, vo.getName())); + if (repeat > 0) { + LOGGER.error("errorCode : {}, dimension name can not repeat ", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "dimension name can not repeat "); + } + } + + String orgFieldIdentifier = org.getFieldIdentifier(); + //当更新标识时 + if (!StringUtils.equals(vo.getFieldIdentifier(), orgFieldIdentifier)) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelDimension::getFieldIdentifier, vo.getFieldIdentifier())); + if (repeat > 0) { + LOGGER.error("errorCode : {}, dimension field identifier can not repeat", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "dimension field identifier can not repeat "); + } + } + DssDatamodelDimension updateOne = modelMapper.map(vo,DssDatamodelDimension.class); + updateOne.setUpdateTime(new Date()); + getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelDimension::getId,id)); + + //同步atlas + UpdateModelTypeResult updateModelTypeResult = assertsSyncService.syncUpdateModel( + new UpdateModelEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,vo.getFieldIdentifier() + ,orgFieldIdentifier + ,ClassificationConstant.DIMENSION)); + return 1; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteDimension(Long id) throws ErrorException{ + + DssDatamodelDimension dssDatamodelDimension = getBaseMapper().selectById(id); + if (dssDatamodelDimension == null){ + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_DELETE_ERROR.getCode(), "dimension id " +id +" not exists"); + } + //校验引用情况 + if(datamodelReferencService.dimensionReferenceCount(dssDatamodelDimension.getName())>0||datamodelReferencService.dimensionReferenceCount(dssDatamodelDimension.getFieldIdentifier())>0){ + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_DELETE_ERROR.getCode(), "dimension id " +id +" has referenced"); + } + getBaseMapper().deleteById(id); + //同步资产 + assertsSyncService.syncDeleteModel(new DeleteModelEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,dssDatamodelDimension.getFieldIdentifier() + ,ClassificationConstant.DIMENSION)); + return 1; + } + + + @Override + public Message listDimensions(DimensionQueryVO vo) { + QueryWrapper queryWrapper = new QueryWrapper() + .like(StringUtils.isNotBlank(vo.getName()),"name",vo.getName()) + .eq(vo.getIsAvailable()!=null,"is_available",vo.getIsAvailable()) + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()),"warehouse_theme_name",vo.getWarehouseThemeName()) + .like(StringUtils.isNotBlank(vo.getOwner()),"owner",vo.getOwner()); + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(),vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList(queryWrapper)); + //IPage iPage = page(new Page<>(vo.getPageNum(),vo.getPageSize()),queryWrapper); + + return Message.ok() + .data("list",pageInfo + .getList() + .stream() + .map(dssDatamodelDimension ->{ + DimensionQueryDTO dto = modelMapper.map(dssDatamodelDimension, DimensionQueryDTO.class); + dto.setRefCount(datamodelReferencService.dimensionReferenceCount(dssDatamodelDimension.getName())); + return dto; + }) + .collect(Collectors.toList())) + .data("total",pageInfo.getTotal()); + } + + + @Override + public DimensionQueryDTO queryById(Long id) throws ErrorException { + DssDatamodelDimension dssDatamodelDimension = getBaseMapper().selectById(id); + if (dssDatamodelDimension == null){ + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_QUERY_ERROR.getCode(), "dimension id " +id +" not exists"); + } + DimensionQueryDTO dto = modelMapper.map(dssDatamodelDimension,DimensionQueryDTO.class); + dto.setRefCount(datamodelReferencService.dimensionReferenceCount(dssDatamodelDimension.getName())); + return dto; + } + + + @Override + public int dimensionThemeReferenceCount(String name) { + int count = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelDimension::getWarehouseThemeName,name)); + int countEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelDimension::getWarehouseThemeNameEn,name)); + return count + countEn; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionAddVO.java new file mode 100644 index 0000000000..cd5e1398a1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionAddVO.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.vo; + +import com.webank.wedatasphere.dss.datamodel.dimension.entity.DssDatamodelDimension; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class DimensionAddVO { + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionEnableVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionEnableVO.java new file mode 100644 index 0000000000..b64683c7e5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionEnableVO.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.vo; + + +public class DimensionEnableVO { + + + private Integer isAvailable; + + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + @Override + public String toString() { + return "DimensionEnableVO{" + + "isAvailable=" + isAvailable + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionQueryVO.java new file mode 100644 index 0000000000..2e46a9c3de --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionQueryVO.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.vo; + +import com.webank.wedatasphere.dss.datamodel.center.common.vo.PageVO; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class DimensionQueryVO extends PageVO { + + private String name; + + private Integer isAvailable; + + private String owner; + + private String warehouseThemeName; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionUpdateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionUpdateVO.java new file mode 100644 index 0000000000..74b2456d90 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-dimension-management/src/main/java/com/webank/wedatasphere/dss/datamodel/dimension/vo/DimensionUpdateVO.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.dimension.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class DimensionUpdateVO { + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/pom.xml new file mode 100644 index 0000000000..92b91d0fa3 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/pom.xml @@ -0,0 +1,64 @@ + + + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-indicator-management + + + + + + com.webank.wedatasphere.dss + dss-datamodel-center-common + ${dss.version} + + + com.alibaba + fastjson + 1.2.83 + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorContentMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorContentMapper.java new file mode 100644 index 0000000000..fc78a2d5c4 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorContentMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; + +public interface DssDatamodelIndicatorContentMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorMapper.java new file mode 100644 index 0000000000..e75fbdec1e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicator; + +public interface DssDatamodelIndicatorMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorVersionMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorVersionMapper.java new file mode 100644 index 0000000000..6846fd04ac --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/DssDatamodelIndicatorVersionMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorVersion; + +public interface DssDatamodelIndicatorVersionMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/IndicatorQueryMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/IndicatorQueryMapper.java new file mode 100644 index 0000000000..32778367a1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/IndicatorQueryMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dao; + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorQuery; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + + +public interface IndicatorQueryMapper extends BaseMapper { + + String querySql = "SELECT a.*, b.indicator_type, b.measure_id, b.indicator_source_info, b.formula, b.business, b.business_owner, b.calculation, b.calculation_owner " + + " FROM dss_datamodel_indicator AS a LEFT JOIN dss_datamodel_indicator_content AS b ON b.indicator_id = a.id ${ew.customSqlSegment}"; + String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}"; + + @Select(querySql) + List page(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorContentMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorContentMapper.xml new file mode 100644 index 0000000000..4dd3eebf85 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorContentMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + id, indicator_id, version, indicator_type, measure_id, indicator_source_info, formula, + business, business_owner, calculation, calculation_owner, create_time, update_time + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorMapper.xml new file mode 100644 index 0000000000..a0cd76e2be --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + id, `name`, field_identifier, `comment`, warehouse_theme_name, `owner`, principal_name, + is_available, is_core_indicator, theme_area, layer_area, create_time, update_time, + version, warehouse_theme_name_en + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorVersionMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorVersionMapper.xml new file mode 100644 index 0000000000..30981471b0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dao/impl/DssDatamodelIndicatorVersionMapper.xml @@ -0,0 +1,22 @@ + + + + + + + + + + + + + + + + + + + id, `name`, `owner`, principal_name, version, version_context, create_time, update_time, + `comment` + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorContentQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorContentQueryDTO.java new file mode 100644 index 0000000000..cde5742c38 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorContentQueryDTO.java @@ -0,0 +1,143 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dto; + +import java.util.Date; + + +public class IndicatorContentQueryDTO { + + private Long id; + + private Long indicatorId; + + private String version; + + /** + * 0 原子 1 衍生 2 派生 3 复杂 4 自定义 + */ + private Integer indicatorType; + + private Long measureId; + + /** + * 指标来源信息 + */ + private String indicatorSourceInfo; + + private String formula; + + private String business; + + private String businessOwner; + + private String calculation; + + private String calculationOwner; + + private Date createTime; + + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getIndicatorId() { + return indicatorId; + } + + public void setIndicatorId(Long indicatorId) { + this.indicatorId = indicatorId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Integer getIndicatorType() { + return indicatorType; + } + + public void setIndicatorType(Integer indicatorType) { + this.indicatorType = indicatorType; + } + + public Long getMeasureId() { + return measureId; + } + + public void setMeasureId(Long measureId) { + this.measureId = measureId; + } + + public String getIndicatorSourceInfo() { + return indicatorSourceInfo; + } + + public void setIndicatorSourceInfo(String indicatorSourceInfo) { + this.indicatorSourceInfo = indicatorSourceInfo; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getBusiness() { + return business; + } + + public void setBusiness(String business) { + this.business = business; + } + + public String getBusinessOwner() { + return businessOwner; + } + + public void setBusinessOwner(String businessOwner) { + this.businessOwner = businessOwner; + } + + public String getCalculation() { + return calculation; + } + + public void setCalculation(String calculation) { + this.calculation = calculation; + } + + public String getCalculationOwner() { + return calculationOwner; + } + + public void setCalculationOwner(String calculationOwner) { + this.calculationOwner = calculationOwner; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorQueryDTO.java new file mode 100644 index 0000000000..b6ea24bba6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorQueryDTO.java @@ -0,0 +1,65 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dto; + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class IndicatorQueryDTO { + private Long id; + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String themeAreaEn; + + private String layerAreaEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + private Date createTime; + + private Date updateTime; + + private String version; + + /** + * 引用次数 + */ + private Integer refCount = 0; + + private IndicatorContentQueryDTO content; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionDTO.java new file mode 100644 index 0000000000..d2ba5f11ba --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionDTO.java @@ -0,0 +1,43 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dto; + +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicator; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; + + +public class IndicatorVersionDTO { + + private DssDatamodelIndicator essential; + + private DssDatamodelIndicatorContent content; + + public IndicatorVersionDTO() { + } + + public IndicatorVersionDTO(DssDatamodelIndicator essential, DssDatamodelIndicatorContent content) { + this.essential = essential; + this.content = content; + } + + public DssDatamodelIndicator getEssential() { + return essential; + } + + public void setEssential(DssDatamodelIndicator essential) { + this.essential = essential; + } + + public DssDatamodelIndicatorContent getContent() { + return content; + } + + public void setContent(DssDatamodelIndicatorContent content) { + this.content = content; + } + + public static IndicatorVersionDTO of(DssDatamodelIndicator essential, DssDatamodelIndicatorContent content){ + IndicatorVersionDTO dto = new IndicatorVersionDTO(); + dto.setContent(content); + dto.setEssential(essential); + return dto; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionQueryDTO.java new file mode 100644 index 0000000000..4a1ae6cf6e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/dto/IndicatorVersionQueryDTO.java @@ -0,0 +1,106 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.dto; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.TableField; + +import java.util.Date; + + +public class IndicatorVersionQueryDTO { + + private Long id; + + private String name; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private String version; + + /** + * 历史版本详细信息快照 + */ + private String versionContext; + + private Date createTime; + + private Date updateTime; + + private String comment; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getVersionContext() { + return versionContext; + } + + public void setVersionContext(String versionContext) { + this.versionContext = versionContext; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicator.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicator.java new file mode 100644 index 0000000000..aa6aa72e47 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicator.java @@ -0,0 +1,61 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelIndicator { + @TableId(type = IdType.AUTO) + private Long id; + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + private String themeAreaEn; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + private String layerAreaEn; + + private Date createTime; + + private Date updateTime; + + private String version; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorContent.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorContent.java new file mode 100644 index 0000000000..517acbe728 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorContent.java @@ -0,0 +1,150 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.util.Date; + +public class DssDatamodelIndicatorContent { + + @TableId(type = IdType.AUTO) + private Long id; + + private Long indicatorId; + + private String version; + + /** + * 0 原子 1 衍生 2 派生 3 复杂 4 自定义 + */ + private Integer indicatorType; + + private Long measureId; + + /** + * 指标来源信息 + */ + private String indicatorSourceInfo; + + private String formula; + + private String business; + + private String businessOwner; + + private String calculation; + + private String calculationOwner; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getIndicatorId() { + return indicatorId; + } + + public void setIndicatorId(Long indicatorId) { + this.indicatorId = indicatorId; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Integer getIndicatorType() { + return indicatorType; + } + + public void setIndicatorType(Integer indicatorType) { + this.indicatorType = indicatorType; + } + + public Long getMeasureId() { + return measureId; + } + + public void setMeasureId(Long measureId) { + this.measureId = measureId; + } + + public String getIndicatorSourceInfo() { + return indicatorSourceInfo; + } + + public void setIndicatorSourceInfo(String indicatorSourceInfo) { + this.indicatorSourceInfo = indicatorSourceInfo; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getBusiness() { + return business; + } + + public void setBusiness(String business) { + this.business = business; + } + + public String getBusinessOwner() { + return businessOwner; + } + + public void setBusinessOwner(String businessOwner) { + this.businessOwner = businessOwner; + } + + public String getCalculation() { + return calculation; + } + + public void setCalculation(String calculation) { + this.calculation = calculation; + } + + public String getCalculationOwner() { + return calculationOwner; + } + + public void setCalculationOwner(String calculationOwner) { + this.calculationOwner = calculationOwner; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorQuery.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorQuery.java new file mode 100644 index 0000000000..3932fd9a72 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorQuery.java @@ -0,0 +1,258 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.entity; + +import java.util.Date; + + +public class DssDatamodelIndicatorQuery { + + private Long id; + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + private Date createTime; + + private Date updateTime; + + private String version; + + /** + * 0 原子 1 衍生 2 派生 3 复杂 4 自定义 + */ + private Integer indicatorType; + + private Long measureId; + + /** + * 指标来源信息 + */ + private String indicatorSourceInfo; + + private String formula; + + private String business; + + private String businessOwner; + + private String calculation; + + private String calculationOwner; + + /** + * 引用次数 + */ + private Integer refCount = 0; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getFieldIdentifier() { + return fieldIdentifier; + } + + public void setFieldIdentifier(String fieldIdentifier) { + this.fieldIdentifier = fieldIdentifier; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getWarehouseThemeName() { + return warehouseThemeName; + } + + public void setWarehouseThemeName(String warehouseThemeName) { + this.warehouseThemeName = warehouseThemeName; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + public Integer getIsCoreIndicator() { + return isCoreIndicator; + } + + public void setIsCoreIndicator(Integer isCoreIndicator) { + this.isCoreIndicator = isCoreIndicator; + } + + public String getThemeArea() { + return themeArea; + } + + public void setThemeArea(String themeArea) { + this.themeArea = themeArea; + } + + public String getLayerArea() { + return layerArea; + } + + public void setLayerArea(String layerArea) { + this.layerArea = layerArea; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Integer getIndicatorType() { + return indicatorType; + } + + public void setIndicatorType(Integer indicatorType) { + this.indicatorType = indicatorType; + } + + public Long getMeasureId() { + return measureId; + } + + public void setMeasureId(Long measureId) { + this.measureId = measureId; + } + + public String getIndicatorSourceInfo() { + return indicatorSourceInfo; + } + + public void setIndicatorSourceInfo(String indicatorSourceInfo) { + this.indicatorSourceInfo = indicatorSourceInfo; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getBusiness() { + return business; + } + + public void setBusiness(String business) { + this.business = business; + } + + public String getBusinessOwner() { + return businessOwner; + } + + public void setBusinessOwner(String businessOwner) { + this.businessOwner = businessOwner; + } + + public String getCalculation() { + return calculation; + } + + public void setCalculation(String calculation) { + this.calculation = calculation; + } + + public String getCalculationOwner() { + return calculationOwner; + } + + public void setCalculationOwner(String calculationOwner) { + this.calculationOwner = calculationOwner; + } + + public Integer getRefCount() { + return refCount; + } + + public void setRefCount(Integer refCount) { + this.refCount = refCount; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorVersion.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorVersion.java new file mode 100644 index 0000000000..0acff1f3ee --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/entity/DssDatamodelIndicatorVersion.java @@ -0,0 +1,110 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.entity; + +import com.baomidou.mybatisplus.annotation.FieldFill; +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.util.Date; + +public class DssDatamodelIndicatorVersion { + + @TableId(type = IdType.AUTO) + private Long id; + + private String name; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private String version; + + /** + * 历史版本详细信息快照 + */ + private String versionContext; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; + + private String comment; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getVersionContext() { + return versionContext; + } + + public void setVersionContext(String versionContext) { + this.versionContext = versionContext; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/restful/IndicatorRestfulApi.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/restful/IndicatorRestfulApi.java new file mode 100644 index 0000000000..2cee2efcd8 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/restful/IndicatorRestfulApi.java @@ -0,0 +1,222 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.restful; + +import com.alibaba.fastjson.JSON; +import com.alibaba.fastjson.JSONObject; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AuthenticationClientStrategy; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorService; +import com.webank.wedatasphere.dss.datamodel.indicator.vo.*; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.client.GovernanceDwRemoteClient; +import com.webank.wedatasphere.warehouse.client.action.ListDwLayerAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwModifierAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwStatisticalPeriodAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwThemeDomainAction; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.*; +import java.io.IOException; + + +@RequestMapping(path = "/datamodel", produces = {"application/json"}) +@RestController +public class IndicatorRestfulApi implements AuthenticationClientStrategy { + + + private static final Logger LOGGER = LoggerFactory.getLogger(IndicatorRestfulApi.class); + + @Autowired + private IndicatorService indicatorService; + + @Autowired + private GovernanceDwRemoteClient governanceDwRemoteClient; + + /** + * 新增 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/indicators",method = RequestMethod.POST) + public Message add(HttpServletRequest req, @RequestBody IndicatorAddVO vo) throws Exception { + LOGGER.info("indicatorAddVO : {}", vo); + return Message.ok().data("count",indicatorService.addIndicator(vo,"1" )); + } + + + /** + * 修改 + * @param req + * @param id + * @param vo + * @return + * @throws Exception + */ + @RequestMapping(value = "/indicators/{id}",method = RequestMethod.PUT) + public Message update(HttpServletRequest req, @PathVariable("id") Long id , @RequestBody IndicatorUpdateVO vo) throws Exception { + LOGGER.info("update id : {}, indicatorUpdateVO : {}", id, vo); + return Message.ok().data("count",indicatorService.updateIndicator(id,vo)); + } + + + /** + * 启用/禁用 + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/indicators/enable/{id}",method = RequestMethod.PUT) + public Message enable(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody IndicatorEnableVO vo) { + LOGGER.info("enable id : {}, vo : {}", id, vo); + return Message.ok().data("count", indicatorService.enableIndicator(id, vo)); + } + + + /** + * 分页搜索 + * @param req + * @return + */ + @RequestMapping(value = "/indicators/list",method = RequestMethod.POST) + public Message list(HttpServletRequest req, @RequestBody IndicatorQueryVO vo){ + LOGGER.info("list vo : {}",vo); + return indicatorService.listIndicators(vo); + } + + + + /** + * 查看 + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/indicators/{id}",method = RequestMethod.GET) + public Message query(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("query id : {}", id); + return indicatorService.queryById(id); + } + + /** + * 删除 + * @param req + * @param id + * @return + */ + @DELETE + @RequestMapping(value = "/indicators/{id}",method = RequestMethod.DELETE) + public Message delete(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("delete id : {}", id); + return Message.ok().data("count",indicatorService.deleteIndicator(id)); + } + + + /** + * 新增版本 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/indicators/versions/{id}",method = RequestMethod.POST) + public Message addVersion(HttpServletRequest req, @PathVariable("id") Long id,@RequestBody IndicatorVersionAddVO vo) throws Exception { + LOGGER.info("indicatorVersionAddVO : {}", vo); + return Message.ok().data("count",indicatorService.addIndicatorVersion(id,vo)); + } + + + + /** + * + * 回退指定版本 + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/indicators/versions/rollback",method = RequestMethod.POST) + public Message versionRollBack(HttpServletRequest req,IndicatorVersionRollBackVO vo) throws Exception { + LOGGER.info("indicatorVersionRollBackVO : {}", vo); + return Message.ok().data("count",indicatorService.versionRollBack(vo)); + } + + + + /** + * 搜索指标版本 + * @param req + * @return + */ + @RequestMapping(value = "/indicators/versions/list",method = RequestMethod.POST) + public Message indicatorVersionsList(HttpServletRequest req, @RequestBody IndicatorVersionQueryVO vo){ + LOGGER.info("version list vo : {}",vo); + return indicatorService.listIndicatorVersions(vo); + } + + + /** + * 指标相关主题可选列表 + * @param req + * @return + */ + @RequestMapping(value = "/themes/list",method = RequestMethod.POST) + public Message themesList(HttpServletRequest req){ + ListDwThemeDomainAction action = ListDwThemeDomainAction.builder().setUser(getStrategyUser(req)).setIsAvailable(true).build(); + String jsonStr=governanceDwRemoteClient.execute(action).getResponseBody(); + JSONObject jsonObject=JSON.parseObject(jsonStr); + JSONObject data=(JSONObject) jsonObject.get("data"); + return Message.ok().data("list",data.get("list")); + } + + /** + * 指标相关分层 + * @param req + * @return + */ + @RequestMapping(value = "/layers/list",method = RequestMethod.POST) + public Message layerList(HttpServletRequest req,@RequestBody LayerVO vo){ + LOGGER.info("layerList vo : {}",vo); + ListDwLayerAction action = ListDwLayerAction.builder().setIsAvailable(true).setDb(vo.getDbName()).setUser(getStrategyUser(req)).build(); + String jsonStr=governanceDwRemoteClient.execute(action).getResponseBody(); + JSONObject jsonObject=JSON.parseObject(jsonStr); + JSONObject data=(JSONObject) jsonObject.get("data"); + return Message.ok().data("list",data.get("list")); + } + + /** + * 指标相关周期列表 + * @param req + * @return + */ + @RequestMapping(value = "/cycles/list",method = RequestMethod.POST) + public Message cycleList(HttpServletRequest req,@RequestBody CycleVO vo){ + LOGGER.info("cycleList vo : {}",vo); + ListDwStatisticalPeriodAction action =ListDwStatisticalPeriodAction.builder().setUser(getStrategyUser(req)).setLayer(vo.getLayer()).setIsAvailable(true).setTheme(vo.getTheme()).build(); + String jsonStr=governanceDwRemoteClient.execute(action).getResponseBody(); + JSONObject jsonObject=JSON.parseObject(jsonStr); + JSONObject data=(JSONObject) jsonObject.get("data"); + return Message.ok().data("list",data.get("list")); + } + + /** + * 指标相关修饰词列表 + * @param req + * @return + */ + @RequestMapping(value = "/modifiers/list",method = RequestMethod.POST) + public Message modifierList(HttpServletRequest req,@RequestBody ModifierVO vo){ + LOGGER.info("modifierList vo : {}",vo); + ListDwModifierAction action = ListDwModifierAction.builder().setUser(getStrategyUser(req)).setLayer(vo.getLayer()).setIsAvailable(true).setTheme(vo.getTheme()).build(); + String jsonStr=governanceDwRemoteClient.execute(action).getResponseBody(); + JSONObject jsonObject=JSON.parseObject(jsonStr); + JSONObject data=(JSONObject) jsonObject.get("data"); + return Message.ok().data("list",data.get("list")); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorContentService.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorContentService.java new file mode 100644 index 0000000000..0222ef4060 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorContentService.java @@ -0,0 +1,59 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; +import com.webank.wedatasphere.dss.datamodel.indicator.vo.IndicatorContentVO; +import org.apache.linkis.common.exception.ErrorException; + +import java.util.List; + + +public interface IndicatorContentService extends IService { + + /** + * 新增 + * + * @param vo + * @return + */ + int addIndicatorContent(Long indicateId, String version, IndicatorContentVO vo) throws ErrorException; + + + /** + * 修改 + * @param indicateId + * @param version + * @param vo + * @return + * @throws ErrorException + */ + int updateIndicatorContent(Long indicateId, String version, IndicatorContentVO vo) throws ErrorException; + + + /** + * 查看 + * @param indicateId + * @return + */ + DssDatamodelIndicatorContent queryByIndicateId(Long indicateId); + + + /** + * 根据indicator 删除指标详情 + * @param id + * @return + * @throws ErrorException + */ + int deleteByIndicatorId(Long id)throws ErrorException; + + + /** + * 校验indicator引用情况 + * @param name + * @return + * @throws ErrorException + */ + List sourceInfoReference(String name); + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorService.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorService.java new file mode 100644 index 0000000000..e7449a8eb2 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorService.java @@ -0,0 +1,146 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicator; +import com.webank.wedatasphere.dss.datamodel.indicator.vo.*; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; + + +public interface IndicatorService extends IService { + + /** + * 新增 + * @param vo + * @param version + * @return + */ + Long addIndicator(IndicatorAddVO vo, String version) throws ErrorException; + + + + /** + * 更新 + * @param vo + * @return + * @throws ErrorException + */ + int updateIndicator(Long id, IndicatorUpdateVO vo) throws ErrorException; + + + + /** + * 启用/禁用 + * @param vo + * @return + */ + int enableIndicator(Long id, IndicatorEnableVO vo); + + + + /** + * 删除 + * @param id + * @return + * @throws ErrorException + */ + int deleteIndicator(Long id) throws ErrorException; + + + + /** + * 查询列表 + * @param vo + * @return + */ + Message listIndicators(IndicatorQueryVO vo); + + + /** + * 查看 + * @param id + * @return + */ + Message queryById(Long id) throws DSSDatamodelCenterException; + + + /** + * 新增版本 + * @param id + * @return + */ + int addIndicatorVersion(Long id, IndicatorVersionAddVO vo) throws ErrorException; + + + /** + * 回退到某一版本 + * @param vo + * @return + * @throws ErrorException + */ + int versionRollBack(IndicatorVersionRollBackVO vo) throws ErrorException; + + + /** + * 查询历史版本列表 + * @param vo + * @return + */ + Message listIndicatorVersions(IndicatorVersionQueryVO vo); + + + /** + * 主题引用情况 + * @param name + * @return + */ + int indicatorThemeReferenceCount(String name); + + /** + * 分层引用情况 + * @param name + * @return + */ + int indicatorLayerReferenceCount(String name); + + + /** + * 周期引用情况 + * @param name + * @return + */ + int indicatorCycleReferenceCount(String name); + + + /** + * 修饰词引用情况 + * @param name + * @return + */ + int indicatorModifierReferenceCount(String name); + + + /** + * 维度引用情况 + * @param name + * @return + */ + int indicatorDimensionReferenceCount(String name); + + + /** + * 度量引用情况 + * @param name + * @return + */ + int indicatorMeasureReferenceCount(String name); + + + /** + * 指标引用指标情况 + * @param name + * @return + */ + int indicatorIndicatorReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorVersionService.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorVersionService.java new file mode 100644 index 0000000000..04f77dc1ba --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/IndicatorVersionService.java @@ -0,0 +1,57 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorVersionDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorVersion; +import org.apache.linkis.common.exception.ErrorException; + +import java.util.List; + + +public interface IndicatorVersionService extends IService { + + + /** + * 保存旧版本 + * + * @param name + * @param owner + * @param principalName + * @param version + * @param versionContext + * @return + */ + int addOlderVersion(String name, String owner, String principalName, String version, String comment, IndicatorVersionDTO versionContext) throws ErrorException; + + /** + * 根据指标名称查找最大版本 + * @param name + * @return + */ + String findLastVersion(String name); + + + /** + * 查询指定版本指标 + * @param name + * @param version + * @return + */ + DssDatamodelIndicatorVersion findBackup(String name,String version); + + + /** + * 引用情况 + * @param context + * @return + */ + List contentReferenceCount(String context); + + + /** + * 原子指标引用 + * @param indicatorName + * @return + */ + int sourceAtomicIndicatorReference(String indicatorName); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DataWarehouseIndicatorReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DataWarehouseIndicatorReferenceServiceImpl.java new file mode 100644 index 0000000000..e762d51621 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DataWarehouseIndicatorReferenceServiceImpl.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service.impl; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseIndicatorReferenceService; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseIndicatorReferenceServiceImpl implements DataWarehouseIndicatorReferenceService { + + @Resource + private IndicatorService indicatorService; + + + @Override + public int indicatorCycleReferenceCount(String name) { + return indicatorService.indicatorCycleReferenceCount(name); + } + + @Override + public int indicatorLayerReferenceCount(String name) { + return indicatorService.indicatorLayerReferenceCount(name); + } + + @Override + public int indicatorModifierReferenceCount(String name) { + return indicatorService.indicatorModifierReferenceCount(name); + } + + @Override + public int indicatorThemeReferenceCount(String name) { + return indicatorService.indicatorThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DatamodelIndicatorReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DatamodelIndicatorReferenceServiceImpl.java new file mode 100644 index 0000000000..e847a7ea57 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/DatamodelIndicatorReferenceServiceImpl.java @@ -0,0 +1,40 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service.impl; + + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelIndicatorReferenceService; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorContentService; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorService; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorVersionService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DatamodelIndicatorReferenceServiceImpl implements DatamodelIndicatorReferenceService { + + @Resource + public IndicatorService indicatorService; + + @Resource + public IndicatorContentService indicatorContentService; + + @Resource + public IndicatorVersionService indicatorVersionService; + + @Override + public int indicatorDimensionReferenceCount(String name) { + return indicatorService.indicatorDimensionReferenceCount(name); + } + + @Override + public int indicatorMeasuredReference(String name) { + return indicatorService.indicatorMeasureReferenceCount(name); + } + + @Override + public int indicatorIndicatorCount(String name) { + return indicatorService.indicatorIndicatorReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorContentServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorContentServiceImpl.java new file mode 100644 index 0000000000..2c07e78f8f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorContentServiceImpl.java @@ -0,0 +1,88 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.indicator.dao.DssDatamodelIndicatorContentMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorContentService; +import com.webank.wedatasphere.dss.datamodel.indicator.vo.IndicatorContentVO; +import org.apache.linkis.common.exception.ErrorException; +import org.modelmapper.ModelMapper; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + + +@Service +public class IndicatorContentServiceImpl extends ServiceImpl implements IndicatorContentService { + + private final Gson gson = new Gson(); + + @Resource + private ModelMapper modelMapper; + + + @Override + @Transactional(rollbackFor = Exception.class) + public int addIndicatorContent(Long indicatorId, String version, IndicatorContentVO vo) throws ErrorException { + + DssDatamodelIndicatorContent newOne = modelMapper.map(vo, DssDatamodelIndicatorContent.class); + newOne.setVersion(version); + newOne.setIndicatorId(indicatorId); + //todo 检查内容 + newOne.setIndicatorSourceInfo(gson.toJson(vo.getSourceInfo())); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + if (!save(newOne)) { + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_CONTENT_ADD_ERROR.getCode(), "add indicator content error"); + } + return 1; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateIndicatorContent(Long indicateId, String version, IndicatorContentVO vo) throws ErrorException { + //删除原有详细信息 + getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorContent::getIndicatorId, indicateId)); + //新增一条 + return addIndicatorContent(indicateId, version, vo); + } + + + @Override + public DssDatamodelIndicatorContent queryByIndicateId(Long indicateId) { + return getBaseMapper() + .selectOne(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorContent::getIndicatorId, indicateId)); + } + + + @Override + public int deleteByIndicatorId(Long id) throws ErrorException { + return getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorContent::getIndicatorId, id)); + } + + + @Override + public List sourceInfoReference(String name) { + + return getBaseMapper().selectList( + Wrappers.lambdaQuery().like(DssDatamodelIndicatorContent::getIndicatorSourceInfo, name)); +// .like(DssDatamodelIndicatorContent::getIndicatorSourceInfo,"\""+ name + "\"") +// .or() +// .like(DssDatamodelIndicatorContent::getIndicatorSourceInfo,"\""+ name + ",") +// .or() +// .like(DssDatamodelIndicatorContent::getIndicatorSourceInfo,","+ name + ",") +// .or() +// .like(DssDatamodelIndicatorContent::getIndicatorSourceInfo,","+ name + "\"")); + } + + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorServiceImpl.java new file mode 100644 index 0000000000..4341e26b7d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorServiceImpl.java @@ -0,0 +1,539 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.response.CreateModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.UpdateModelTypeResult; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.IndicatorSourceInfoConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.event.CreateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.DeleteModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UpdateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AssertsSyncService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelReferencService; +import com.webank.wedatasphere.dss.datamodel.indicator.dao.DssDatamodelIndicatorMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.dao.IndicatorQueryMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorContentQueryDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorQueryDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorVersionDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorVersionQueryDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicator; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorQuery; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorVersion; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorContentService; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorService; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorVersionService; +import com.webank.wedatasphere.dss.datamodel.indicator.vo.*; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +@Service +public class IndicatorServiceImpl extends ServiceImpl implements IndicatorService { + + private static final Logger LOGGER = LoggerFactory.getLogger(IndicatorServiceImpl.class); + + + private final Gson gson = new Gson(); + + @Resource + private ModelMapper modelMapper; + + @Resource + private IndicatorContentService indicatorContentService; + + @Resource + private IndicatorVersionService indicatorVersionService; + + @Resource + private IndicatorQueryMapper indicatorQueryMapper; + + + @Resource + private LinkisDataAssetsRemoteClient linkisDataAssetsRemoteClient; + + @Resource + private AssertsSyncService assertsSyncService; + + + @Resource + private DatamodelReferencService datamodelReferencService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addIndicator(IndicatorAddVO vo, String version) throws ErrorException { + if (getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getName, vo.getName()) + .or().eq(DssDatamodelIndicator::getFieldIdentifier, vo.getFieldIdentifier())) > 0) { + LOGGER.error("errorCode : {}, indicator name or field identifier can not repeat, name : {}", ErrorCode.INDICATOR_ADD_ERROR.getCode(), vo.getName()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_ADD_ERROR.getCode(), "indicator name or field identifier can not repeat"); + } + //校验引用情况 + if (datamodelReferencService.indicatorReferenceCount(vo.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, indicator name can not referenced", ErrorCode.INDICATOR_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_ADD_ERROR.getCode(), "indicator name can not referenced"); + } + + + DssDatamodelIndicator newOne = modelMapper.map(vo, DssDatamodelIndicator.class); + //基本信息中设置版本号 + newOne.setVersion(version); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + if (!save(newOne)) { + LOGGER.error("errorCode : {}, add indicator error", ErrorCode.INDICATOR_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_ADD_ERROR.getCode(), "add indicator error"); + } + + indicatorContentService.addIndicatorContent(newOne.getId(), version, vo.getContent()); + + //同步atlas + CreateModelTypeResult result = assertsSyncService.syncCreateModel( + new CreateModelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getFieldIdentifier() + , ClassificationConstant.INDICATOR)); + return newOne.getId(); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateIndicator(Long id, IndicatorUpdateVO vo) throws ErrorException { + DssDatamodelIndicator org = getBaseMapper().selectById(id); + if (org == null) { + LOGGER.error("errorCode : {}, update indicator error not exists", ErrorCode.INDICATOR_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_UPDATE_ERROR.getCode(), "update indicator error not exists"); + } + + //校验引用情况 + if (datamodelReferencService.indicatorReferenceCount(org.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(vo.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(org.getFieldIdentifier())>0 + ||datamodelReferencService.indicatorReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, indicator name can not referenced", ErrorCode.INDICATOR_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_UPDATE_ERROR.getCode(), "indicator name can not referenced"); + } + + + DssDatamodelIndicatorContent orgContent = indicatorContentService.queryByIndicateId(id); + + + //当更新指标名称时,存在其他指标名称同名或者当前指标名称已经存在版本信息,则不允许修改指标名称 + if (!StringUtils.equals(vo.getName(), org.getName())) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getName, vo.getName())); + String lastVersion = indicatorVersionService.findLastVersion(org.getName()); + if (repeat > 0 || StringUtils.isNotBlank(lastVersion)) { + LOGGER.error("errorCode : {}, indicator name can not repeat or has version", ErrorCode.INDICATOR_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_UPDATE_ERROR.getCode(), "indicator name can not repeat or has version"); + } + } + + String orgFieldIdentifier = org.getFieldIdentifier(); + //当更新指标标识时,存在其他指标名称同名或者当前指标名称已经存在版本信息,则不允许修改指标名称 + if (!StringUtils.equals(vo.getFieldIdentifier(), orgFieldIdentifier)) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getFieldIdentifier, vo.getFieldIdentifier())); + if (repeat > 0) { + LOGGER.error("errorCode : {}, indicator field identifier can not repeat or has version", ErrorCode.INDICATOR_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_UPDATE_ERROR.getCode(), "indicator field identifier can not repeat or has version"); + } + } + + + Long orgId = org.getId(); + String version = org.getVersion(); + + //更新原有指标 + DssDatamodelIndicator updateOne = modelMapper.map(vo, DssDatamodelIndicator.class); + updateOne.setUpdateTime(new Date()); + int result = getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelIndicator::getId, id)); + if (result != 1) { + LOGGER.error("errorCode : {}, update indicator error not exists", ErrorCode.INDICATOR_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_UPDATE_ERROR.getCode(), "update indicator error not exists"); + } + + indicatorContentService.updateIndicatorContent(orgId, version, vo.getContent()); + + + + //同步atlas + UpdateModelTypeResult updateModelTypeResult = assertsSyncService.syncUpdateModel( + new UpdateModelEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,vo.getFieldIdentifier() + ,orgFieldIdentifier + ,ClassificationConstant.INDICATOR) + ); + + + return 1; + } + + + @Override + public int deleteIndicator(Long id) throws ErrorException { + DssDatamodelIndicator dssDatamodelIndicator = getBaseMapper().selectById(id); + if (dssDatamodelIndicator == null) { + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_DELETE_ERROR.getCode(), "indicator id " + id + " not exists"); + } + + //校验引用情况 + if (datamodelReferencService.indicatorReferenceCount(dssDatamodelIndicator.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(dssDatamodelIndicator.getFieldIdentifier())>0){ + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_DELETE_ERROR.getCode(), "indicator id " + id + " has referenced"); + } + + +// //有版本不能删除 +// if (indicatorVersionService.getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorVersion::getName, dssDatamodelIndicator.getName())) > 0) { +// throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_DELETE_ERROR.getCode(), "indicator id " + id + " has version"); +// } + //同时删除版本 + indicatorVersionService.getBaseMapper() + .delete(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorVersion::getName, dssDatamodelIndicator.getName())); + //删除指标 + getBaseMapper().deleteById(id); + indicatorContentService.getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorContent::getIndicatorId, id)); + + + //同步资产 + assertsSyncService.syncDeleteModel(new DeleteModelEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,dssDatamodelIndicator.getFieldIdentifier() + ,ClassificationConstant.INDICATOR)); + + return 1; + } + + + @Override + public Message listIndicators(IndicatorQueryVO vo) { + QueryWrapper queryWrapper = new QueryWrapper() + .like(StringUtils.isNotBlank(vo.getName()), "name", vo.getName()) + .eq(vo.getIsAvailable() != null, "is_available", vo.getIsAvailable()) + .eq(vo.getIndicatorType() != null, "indicator_type", vo.getIndicatorType()) + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), "theme_area", vo.getWarehouseThemeName()) + .like(StringUtils.isNotBlank(vo.getOwner()), "owner", vo.getOwner()); + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(indicatorQueryMapper.page(queryWrapper)); + //IPage iPage = indicatorQueryMapper.page(new Page<>(vo.getPageNum(), vo.getPageSize()), queryWrapper); + + return Message.ok() + .data("list", pageInfo.getList().stream().peek(e-> e.setRefCount(datamodelReferencService.indicatorReferenceCount(e.getName()))).collect(Collectors.toList())) + .data("total", pageInfo.getTotal()); + } + + + @Override + public Message queryById(Long id) throws DSSDatamodelCenterException { + DssDatamodelIndicator indicator = baseMapper.selectById(id); + if (indicator == null) { + LOGGER.error("errorCode : {}, indicator id : {} not exists", ErrorCode.INDICATOR_QUERY_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_QUERY_ERROR.getCode(), "indicator id " + id + " not exists"); + } + + DssDatamodelIndicatorContent content = indicatorContentService.queryByIndicateId(id); + if (content == null) { + LOGGER.error("errorCode : {}, indicator content indicatorId : {} not exists", ErrorCode.INDICATOR_QUERY_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_QUERY_ERROR.getCode(), "indicator content id " + id + " not exists"); + } + + IndicatorQueryDTO indicatorQueryDTO = modelMapper.map(indicator, IndicatorQueryDTO.class); + IndicatorContentQueryDTO indicatorContentQueryDTO = modelMapper.map(content, IndicatorContentQueryDTO.class); + indicatorQueryDTO.setContent(indicatorContentQueryDTO); + indicatorQueryDTO.setRefCount(datamodelReferencService.indicatorReferenceCount(indicator.getName())); + return Message.ok().data("detail", indicatorQueryDTO); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int enableIndicator(Long id, IndicatorEnableVO vo) { + DssDatamodelIndicator updateOne = modelMapper.map(vo, DssDatamodelIndicator.class); + updateOne.setUpdateTime(new Date()); + return getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelIndicator::getId, id)); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int addIndicatorVersion(Long id, IndicatorVersionAddVO vo) throws ErrorException { + //todo 生成新版本 则旧版本是否判断存在 关联其他表信息 + + //判断旧版本指标是否存在 + DssDatamodelIndicator orgVersion = getBaseMapper().selectById(id); + if (orgVersion == null) { + LOGGER.error("errorCode : {}, indicator id : {} not exists", ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "indicator id " + id + " not exists"); + } + + //校验引用情况 + if (datamodelReferencService.indicatorReferenceCount(orgVersion.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(vo.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(orgVersion.getFieldIdentifier())>0 + ||datamodelReferencService.indicatorReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, indicator name can not referenced", ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "indicator name can not referenced"); + } + + + + + String orgName = orgVersion.getName(); + String orgNameEn = orgVersion.getFieldIdentifier(); + String orgV = orgVersion.getVersion(); + String assignVersion = newVersion(orgName, orgV); + + //指标名称不能改变 + if (!StringUtils.equals(orgName, vo.getName()) || !StringUtils.equals(orgNameEn, vo.getFieldIdentifier())) { + LOGGER.error("errorCode : {}, indicator name or fieldIdentifier must be same", ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "indicator name or fieldIdentifier must be same"); + } + + //查询指标详细信息 + DssDatamodelIndicatorContent orgContent = indicatorContentService.queryByIndicateId(id); + if (orgContent == null) { + LOGGER.error("errorCode : {}, indicator content indicatorId : {} not exists", ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "indicator content id " + id + " not exists"); + } + + //旧版本备份 + indicatorVersionService.addOlderVersion(orgName, orgVersion.getOwner(), orgVersion.getPrincipalName(), orgV, orgVersion.getComment(), IndicatorVersionDTO.of(orgVersion, orgContent)); + + + //删除旧版本 + getBaseMapper().deleteById(id); + indicatorContentService.deleteByIndicatorId(id); + + //填充新增版本 + DssDatamodelIndicator newOne = modelMapper.map(vo, DssDatamodelIndicator.class); + //基本信息中设置版本号,如果新增时未指定版本号则生成新版本号 + String newVersion = assignVersion; + newOne.setVersion(newVersion); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + //保存新版本 + if (!save(newOne)) { + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "save new version indicator error"); + + } + //更新指标详细信息 + indicatorContentService.updateIndicatorContent(newOne.getId(), newVersion, vo.getContent()); + + return 1; + } + + + private String newVersion(String orgName, String orgVersion) { + String lastVersion = indicatorVersionService.findLastVersion(orgName); + + return StringUtils.isBlank(lastVersion) ? + (Integer.parseInt(orgVersion) + 1 + "") : + (Integer.parseInt(lastVersion) > Integer.parseInt(orgVersion)) ? (Integer.parseInt(lastVersion) + 1 + "") : + (Integer.parseInt(orgVersion) + 1 + ""); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int versionRollBack(IndicatorVersionRollBackVO vo) throws ErrorException { + + String name = vo.getName(); + String version = vo.getVersion(); + + //获取当前使用版本指标 + DssDatamodelIndicator current = + getBaseMapper().selectOne(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getName, name)); + //判断当前使用指标 + if (current == null) { + LOGGER.error("errorCode : {}, current indicator not exists, name : {} version : {}", ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), name, version); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), "current indicator not exists, name : " + name + " version : " + version); + } + + //校验引用情况 + if (datamodelReferencService.indicatorReferenceCount(current.getName())>0 + ||datamodelReferencService.indicatorReferenceCount(current.getFieldIdentifier())>0){ + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), "indicator id " + current.getId() + " has referenced"); + } + + + //查询当前详细信息 + DssDatamodelIndicatorContent currentContent = indicatorContentService.queryByIndicateId(current.getId()); + if (currentContent == null) { + LOGGER.error("errorCode : {}, current indicator content not exists, name : {} version : {}", ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), name, version); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), "current indicator content not exists, name : " + name + " version : " + version); + } + //当前版本备份 + indicatorVersionService.addOlderVersion(current.getName(), current.getOwner(), current.getPrincipalName(), current.getVersion(), current.getComment(), IndicatorVersionDTO.of(current, currentContent)); + //删除当前版本 + getBaseMapper().deleteById(current.getId()); + //删除当前版本详情 + indicatorContentService.deleteByIndicatorId(current.getId()); + + //获取需要回退指标版本信息 + DssDatamodelIndicatorVersion rollBackVersion = indicatorVersionService.findBackup(name, version); + if (rollBackVersion == null) { + LOGGER.error("errorCode : {}, indicator name : {} version : {}", ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), name, version); + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ROLL_BACK_ERROR.getCode(), "indicator name : " + name + " version : " + version + " not exist"); + } + Long rollBackId = rollBackVersion.getId(); + + IndicatorVersionDTO rollBackDTO = gson.fromJson(rollBackVersion.getVersionContext(), IndicatorVersionDTO.class); + DssDatamodelIndicator rollBackIndicator = rollBackDTO.getEssential(); + //重置id + rollBackIndicator.setId(null); + save(rollBackIndicator); + + + DssDatamodelIndicatorContent rollBackContent = rollBackDTO.getContent(); + //重置id + rollBackContent.setId(null); + //设置新指标id + rollBackContent.setIndicatorId(rollBackIndicator.getId()); + indicatorContentService.save(rollBackContent); + indicatorVersionService.getBaseMapper().deleteById(rollBackId); + return 1; + } + + + @Override + public Message listIndicatorVersions(IndicatorVersionQueryVO vo) { + List list = indicatorVersionService.getBaseMapper() + .selectList(Wrappers.lambdaQuery().eq(DssDatamodelIndicatorVersion::getName, vo.getName())) + .stream() + .map(dssDatamodelIndicatorVersion -> modelMapper.map(dssDatamodelIndicatorVersion, IndicatorVersionQueryDTO.class)) + .collect(Collectors.toList()); + return Message.ok().data("list", list); + } + + + @Override + public int indicatorThemeReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getThemeArea, name)); + int currentCountEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getThemeAreaEn, name)); + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = (int) preReferences.stream().filter(e->{ + IndicatorVersionDTO rollBackDTO = gson.fromJson(e.getVersionContext(), IndicatorVersionDTO.class); + DssDatamodelIndicator rollBackIndicator = rollBackDTO.getEssential(); + return StringUtils.equals(rollBackIndicator.getThemeArea(),name)||StringUtils.equals(rollBackIndicator.getThemeAreaEn(),name); + }).count(); + return currentCount + versionCount + currentCountEn; + } + + @Override + public int indicatorLayerReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getLayerArea, name)); + int currentCountEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelIndicator::getLayerAreaEn, name)); + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = (int) preReferences.stream().filter(e->{ + IndicatorVersionDTO rollBackDTO = gson.fromJson(e.getVersionContext(), IndicatorVersionDTO.class); + DssDatamodelIndicator rollBackIndicator = rollBackDTO.getEssential(); + return StringUtils.equals(rollBackIndicator.getLayerArea(),name)||StringUtils.equals(rollBackIndicator.getLayerAreaEn(),name); + }).count(); + return currentCount + versionCount + currentCountEn; + } + + @Override + public int indicatorCycleReferenceCount(String name) { + List currentContents = indicatorContentService.sourceInfoReference(name); + int currentCount = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.cycle,name,currentContents); + int currentCountEn = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.cycleEn,name,currentContents); + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.cycle.name(),name); + int versionCountEn = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.cycleEn.name(),name); + return currentCount + currentCountEn + versionCount + versionCountEn; + } + + private int versionCountFromIndicatorContentSourceInfo(List preReferences,String type,String name){ + return (int) preReferences.stream().filter(e->{ + IndicatorVersionDTO rollBackDTO = gson.fromJson(e.getVersionContext(), IndicatorVersionDTO.class); + DssDatamodelIndicatorContent rollBackContent = rollBackDTO.getContent(); + return filterFromIndicatorContentSourceInfo(type, name, rollBackContent); + }).count(); + } + + private int currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant type, String name,List contents){ + return (int) contents.stream().filter(e-> filterFromIndicatorContentSourceInfo(type.name(),name,e)).count(); + } + + private boolean filterFromIndicatorContentSourceInfo(String type, String name, DssDatamodelIndicatorContent rollBackContent) { + Map content = gson.fromJson(rollBackContent.getIndicatorSourceInfo(),Map.class); + if (!content.containsKey(type)){ + return false; + } + return Sets.newHashSet(StringUtils.split(content.get(type), ",")).contains(name); + } + + @Override + public int indicatorModifierReferenceCount(String name) { + List currentContents = indicatorContentService.sourceInfoReference(name); + int currentCount = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.modifier,name,currentContents); + int currentCountEn = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.modifierEn,name,currentContents); + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.modifier.name(),name); + int versionCountEn = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.modifierEn.name(),name); + return currentCount + currentCountEn + versionCount + versionCountEn; + } + + + @Override + public int indicatorDimensionReferenceCount(String name) { + List currentContents = indicatorContentService.sourceInfoReference(name); + int currentCount = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.dimension,name,currentContents); + int currentCountEn = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.dimensionEn,name,currentContents); + + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.dimension.name(),name); + int versionCountEn = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.dimensionEn.name(),name); + return currentCount + currentCountEn + versionCount + versionCountEn; + } + + @Override + public int indicatorMeasureReferenceCount(String name) { + List currentContents = indicatorContentService.sourceInfoReference(name); + int currentCount = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.measure,name,currentContents); + int currentCountEn = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.measureEn,name,currentContents); + + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.measure.name(),name); + int versionCountEn = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.measureEn.name(), name); + return currentCount + currentCountEn + versionCount + versionCountEn; + } + + @Override + public int indicatorIndicatorReferenceCount(String name) { + List currentContents = indicatorContentService.sourceInfoReference(name); + int currentCount = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.indicatorName,name,currentContents); + int currentCountEn = currentCountFromIndicatorContentSourceInfo(IndicatorSourceInfoConstant.indicatorNameEn,name,currentContents); + + List preReferences = indicatorVersionService.contentReferenceCount(name); + int versionCount = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.indicatorName.name(),name); + int versionCountEn = versionCountFromIndicatorContentSourceInfo(preReferences,IndicatorSourceInfoConstant.indicatorNameEn.name(),name); + return currentCount + currentCountEn + versionCount + versionCountEn; + } + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorVersionServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorVersionServiceImpl.java new file mode 100644 index 0000000000..c6d6ee2853 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/service/impl/IndicatorVersionServiceImpl.java @@ -0,0 +1,97 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.gson.Gson; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.indicator.dao.DssDatamodelIndicatorVersionMapper; +import com.webank.wedatasphere.dss.datamodel.indicator.dto.IndicatorVersionDTO; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorContent; +import com.webank.wedatasphere.dss.datamodel.indicator.entity.DssDatamodelIndicatorVersion; +import com.webank.wedatasphere.dss.datamodel.indicator.service.IndicatorVersionService; +import org.apache.linkis.common.exception.ErrorException; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; + + +@Service +public class IndicatorVersionServiceImpl extends ServiceImpl implements IndicatorVersionService { + + private final Gson gson = new Gson(); + + @Override + @Transactional + public int addOlderVersion(String name, String owner, String principalName, String version, String comment, IndicatorVersionDTO versionContext) throws ErrorException { + DssDatamodelIndicatorVersion oldVersion = new DssDatamodelIndicatorVersion(); + oldVersion.setName(name); + oldVersion.setPrincipalName(principalName); + oldVersion.setOwner(owner); + oldVersion.setVersion(version); + oldVersion.setVersionContext(gson.toJson(versionContext)); + oldVersion.setComment(comment); + oldVersion.setCreateTime(new Date()); + oldVersion.setUpdateTime(new Date()); + if (!save(oldVersion)) { + throw new DSSDatamodelCenterException(ErrorCode.INDICATOR_VERSION_ADD_ERROR.getCode(), "old version save error"); + + } + return 1; + } + + + @Override + public String findLastVersion(String name) { + PageHelper.clearPage(); + PageHelper.startPage(1,1); + //查询当前指标名称最大版本 + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList( + Wrappers.lambdaQuery() + .eq(DssDatamodelIndicatorVersion::getName, name) + .orderByDesc(DssDatamodelIndicatorVersion::getVersion))); + + List list = pageInfo.getList(); + return !CollectionUtils.isEmpty(list) ? list.get(0).getVersion() : null; + } + + + @Override + public DssDatamodelIndicatorVersion findBackup(String name, String version) { + return getBaseMapper().selectOne( + Wrappers.lambdaQuery() + .eq(DssDatamodelIndicatorVersion::getName, name) + .eq(DssDatamodelIndicatorVersion::getVersion, version)); + } + + + @Override + public List contentReferenceCount(String context) { + return getBaseMapper().selectList( + Wrappers.lambdaQuery() + .like(DssDatamodelIndicatorVersion::getVersionContext,context )); +// .like(DssDatamodelIndicatorVersion::getVersionContext,"\""+ context + "\"") +// .or() +// .like(DssDatamodelIndicatorVersion::getVersionContext,"\""+ context + "\"") +// .or() +// .like(DssDatamodelIndicatorVersion::getVersionContext,"\""+ context + ",") +// .or() +// .like(DssDatamodelIndicatorVersion::getVersionContext,","+ context + ",") +// .or() +// .like(DssDatamodelIndicatorVersion::getVersionContext,","+ context + "\"")); + } + + + @Override + public int sourceAtomicIndicatorReference(String indicatorName) { + return getBaseMapper().selectCount( + Wrappers.lambdaQuery() + .like(DssDatamodelIndicatorVersion::getVersionContext,"\"indicatorName\":\""+ indicatorName + "\"")); + + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/CycleVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/CycleVO.java new file mode 100644 index 0000000000..38c6551a93 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/CycleVO.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import lombok.Data; + +@Data +public class CycleVO { + private String theme; + + private String layer; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorAddVO.java new file mode 100644 index 0000000000..9fe86ce72b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorAddVO.java @@ -0,0 +1,54 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class IndicatorAddVO { + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + private String themeAreaEn; + + private String layerAreaEn; + + private IndicatorContentVO content; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorContentVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorContentVO.java new file mode 100644 index 0000000000..ada0eecf89 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorContentVO.java @@ -0,0 +1,119 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import java.util.Map; + +public class IndicatorContentVO { + + private Long indicatorId; + + /** + * 0 原子 1 衍生 2 派生 3 复杂 4 自定义 + */ + private Integer indicatorType; + + private Long measureId; + + /** + * 指标来源信息 + */ + private Map sourceInfo; + + private String formula; + + private String business; + + private String businessOwner; + + private String calculation; + + private String calculationOwner; + + public Long getIndicatorId() { + return indicatorId; + } + + public void setIndicatorId(Long indicatorId) { + this.indicatorId = indicatorId; + } + + + public Integer getIndicatorType() { + return indicatorType; + } + + public void setIndicatorType(Integer indicatorType) { + this.indicatorType = indicatorType; + } + + public Long getMeasureId() { + return measureId; + } + + public void setMeasureId(Long measureId) { + this.measureId = measureId; + } + + + public Map getSourceInfo() { + return sourceInfo; + } + + public void setSourceInfo(Map sourceInfo) { + this.sourceInfo = sourceInfo; + } + + public String getFormula() { + return formula; + } + + public void setFormula(String formula) { + this.formula = formula; + } + + public String getBusiness() { + return business; + } + + public void setBusiness(String business) { + this.business = business; + } + + public String getBusinessOwner() { + return businessOwner; + } + + public void setBusinessOwner(String businessOwner) { + this.businessOwner = businessOwner; + } + + public String getCalculation() { + return calculation; + } + + public void setCalculation(String calculation) { + this.calculation = calculation; + } + + public String getCalculationOwner() { + return calculationOwner; + } + + public void setCalculationOwner(String calculationOwner) { + this.calculationOwner = calculationOwner; + } + + @Override + public String toString() { + return "IndicatorContentVO{" + + "indicatorId=" + indicatorId + + ", indicatorType=" + indicatorType + + ", measureId=" + measureId + + ", sourceInfo=" + sourceInfo + + ", formula='" + formula + '\'' + + ", business='" + business + '\'' + + ", businessOwner='" + businessOwner + '\'' + + ", calculation='" + calculation + '\'' + + ", calculationOwner='" + calculationOwner + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorEnableVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorEnableVO.java new file mode 100644 index 0000000000..b5311eea34 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorEnableVO.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + + +public class IndicatorEnableVO { + + private Integer isAvailable; + + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + @Override + public String toString() { + return "IndicatorEnableVO{" + + "isAvailable=" + isAvailable + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorQueryVO.java new file mode 100644 index 0000000000..c746baa157 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorQueryVO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import com.webank.wedatasphere.dss.datamodel.center.common.vo.PageVO; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class IndicatorQueryVO extends PageVO { + + private String name; + + private Integer indicatorType; + + private Integer isAvailable; + + private String owner; + + private String warehouseThemeName; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorUpdateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorUpdateVO.java new file mode 100644 index 0000000000..c9268a5304 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorUpdateVO.java @@ -0,0 +1,50 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class IndicatorUpdateVO { + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + private String warehouseThemeNameEn; + + private String themeAreaEn; + + private String layerAreaEn; + + private IndicatorContentVO content; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionAddVO.java new file mode 100644 index 0000000000..a57918986b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionAddVO.java @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class IndicatorVersionAddVO { + + + private String name; + + private String fieldIdentifier; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Integer isCoreIndicator; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + */ + private String themeArea; + + /** + * 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + */ + private String layerArea; + + private String warehouseThemeNameEn; + + private String themeAreaEn; + + private String layerAreaEn; + + private IndicatorContentVO content; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionQueryVO.java new file mode 100644 index 0000000000..9d806b46e9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionQueryVO.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + + +public class IndicatorVersionQueryVO { + + private String name; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + @Override + public String toString() { + return "IndicatorVersionQueryVO{" + + "name='" + name + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionRollBackVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionRollBackVO.java new file mode 100644 index 0000000000..fdf2e89db5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/IndicatorVersionRollBackVO.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + + +public class IndicatorVersionRollBackVO { + + private String name; + + private String version; + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + @Override + public String toString() { + return "VersionRollBackVO{" + + "name='" + name + '\'' + + ", version='" + version + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/LayerVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/LayerVO.java new file mode 100644 index 0000000000..f89c7a0926 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/LayerVO.java @@ -0,0 +1,8 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import lombok.Data; + +@Data +public class LayerVO { + private String dbName; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/ModifierVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/ModifierVO.java new file mode 100644 index 0000000000..62f89df6cc --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-indicator-management/src/main/java/com/webank/wedatasphere/dss/datamodel/indicator/vo/ModifierVO.java @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.dss.datamodel.indicator.vo; + +import lombok.Data; + +@Data +public class ModifierVO { + private String theme; + + private String layer; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/pom.xml new file mode 100644 index 0000000000..22af89ca6d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/pom.xml @@ -0,0 +1,60 @@ + + + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-measure-management + + + + + + com.webank.wedatasphere.dss + dss-datamodel-center-common + ${dss.version} + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/DssDatamodelMeasureMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/DssDatamodelMeasureMapper.java new file mode 100644 index 0000000000..f68df7ce3d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/DssDatamodelMeasureMapper.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.datamodel.measure.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.measure.entity.DssDatamodelMeasure; +import org.apache.ibatis.annotations.Param; + +public interface DssDatamodelMeasureMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/impl/DssDatamodelMeasureMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/impl/DssDatamodelMeasureMapper.xml new file mode 100644 index 0000000000..12c13ba566 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dao/impl/DssDatamodelMeasureMapper.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + + + + + + + + id, `name`, field_identifier, formula, `comment`, warehouse_theme_name, `owner`, + principal_name, is_available, create_time, update_time + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dto/MeasureQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dto/MeasureQueryDTO.java new file mode 100644 index 0000000000..d543d3f1df --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/dto/MeasureQueryDTO.java @@ -0,0 +1,44 @@ +package com.webank.wedatasphere.dss.datamodel.measure.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class MeasureQueryDTO { + private Long id; + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Date createTime; + + private Date updateTime; + + /** + * 引用次数 + */ + private Integer refCount = 0; + + } diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/entity/DssDatamodelMeasure.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/entity/DssDatamodelMeasure.java new file mode 100644 index 0000000000..1d5e0a65a5 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/entity/DssDatamodelMeasure.java @@ -0,0 +1,43 @@ +package com.webank.wedatasphere.dss.datamodel.measure.entity; + +import com.baomidou.mybatisplus.annotation.*; +import lombok.Data; + +import java.util.Date; +@TableName("dss_datamodel_measure") +@Data +public class DssDatamodelMeasure { + + @TableId(type = IdType.AUTO) + private Long id; + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + @TableField(fill = FieldFill.INSERT) + private Date createTime; + + @TableField(fill = FieldFill.INSERT_UPDATE) + private Date updateTime; +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/restful/MeasureRestfulApi.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/restful/MeasureRestfulApi.java new file mode 100644 index 0000000000..6bded3f081 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/restful/MeasureRestfulApi.java @@ -0,0 +1,105 @@ +package com.webank.wedatasphere.dss.datamodel.measure.restful; + + +import com.webank.wedatasphere.dss.datamodel.measure.service.MeasureService; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureAddVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureEnableVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureQueryVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + + +@RequestMapping(path = "/datamodel", produces = {"application/json"}) +@RestController +public class MeasureRestfulApi { + + + private static final Logger LOGGER = LoggerFactory.getLogger(MeasureRestfulApi.class); + + @Autowired + private MeasureService measureService; + + /** + * 新增 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/measures",method = RequestMethod.POST) + public Message add(HttpServletRequest req, @RequestBody MeasureAddVO vo) throws ErrorException{ + LOGGER.info("measureAddVO : {}", vo); + //String userName = SecurityFilter.getLoginUsername(req); + return Message.ok().data("id", measureService.addMeasure(vo)); + } + + /** + * 启用/禁用 + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/measures/enable/{id}",method = RequestMethod.PUT) + public Message enable(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody MeasureEnableVO vo) { + LOGGER.info("enable id : {}, vo : {}", id, vo); + return Message.ok().data("count", measureService.enableMeasure(id, vo)); + } + + /** + * 修改 + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/measures/{id}",method = RequestMethod.PUT) + public Message update(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody MeasureUpdateVO vo) throws ErrorException{ + LOGGER.info("update id : {}, vo : {}", id, vo); + return Message.ok().data("count",measureService.updateMeasure(id,vo)); + } + + + /** + * 查看 + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/measures/{id}",method = RequestMethod.GET) + public Message query(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("query id : {}", id); + return Message.ok().data("detail",measureService.queryById(id)); + } + + /** + * 删除 + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/measures/{id}",method = RequestMethod.DELETE) + public Message delete(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("delete id : {}", id); + return Message.ok().data("count",measureService.deleteMeasure(id)); + } + + /** + * 分页搜索 + * @param req + * @return + */ + @RequestMapping(value = "/measures/list",method = RequestMethod.POST) + public Message list(HttpServletRequest req,@RequestBody MeasureQueryVO vo){ + LOGGER.info("list vo : {}",vo); + return measureService.listMeasures(vo); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/MeasureService.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/MeasureService.java new file mode 100644 index 0000000000..1864413e41 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/MeasureService.java @@ -0,0 +1,70 @@ +package com.webank.wedatasphere.dss.datamodel.measure.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.measure.dto.MeasureQueryDTO; +import com.webank.wedatasphere.dss.datamodel.measure.entity.DssDatamodelMeasure; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureAddVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureEnableVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureQueryVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; + + +public interface MeasureService extends IService { + + /** + * 新增维度 + * @param vo + * @return + */ + long addMeasure(MeasureAddVO vo)throws ErrorException; + + /** + * 启用/禁用 + * @param vo + * @return + */ + int enableMeasure(Long id, MeasureEnableVO vo); + + + /** + * 更新 + * @param id + * @param vo + * @return + */ + int updateMeasure(Long id, MeasureUpdateVO vo)throws ErrorException; + + + /** + * 查看 + * @param id + * @return + */ + MeasureQueryDTO queryById(Long id) throws ErrorException; + + + /** + * 删除 + * @param id + * @return + */ + int deleteMeasure(Long id) throws ErrorException; + + + /** + * 查询列表 + * @param vo + * @return + */ + Message listMeasures(MeasureQueryVO vo); + + + /** + * 主题引用情况 + * @param name + * @return + */ + int measureThemeReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/DataWarehouseMeasuredReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/DataWarehouseMeasuredReferenceServiceImpl.java new file mode 100644 index 0000000000..959d668f75 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/DataWarehouseMeasuredReferenceServiceImpl.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.measure.service.impl; + + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseMeasuredReferenceService; +import com.webank.wedatasphere.dss.datamodel.measure.service.MeasureService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseMeasuredReferenceServiceImpl implements DataWarehouseMeasuredReferenceService { + + @Resource + private MeasureService measureService; + + @Override + public int measureThemeReferenceCount(String name) { + return measureService.measureThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/MeasureServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/MeasureServiceImpl.java new file mode 100644 index 0000000000..7859c9bc9b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/service/impl/MeasureServiceImpl.java @@ -0,0 +1,214 @@ +package com.webank.wedatasphere.dss.datamodel.measure.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.response.CreateModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.UpdateModelTypeResult; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.event.CreateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.DeleteModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UpdateModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AssertsSyncService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelReferencService; +import com.webank.wedatasphere.dss.datamodel.measure.dao.DssDatamodelMeasureMapper; +import com.webank.wedatasphere.dss.datamodel.measure.dto.MeasureQueryDTO; +import com.webank.wedatasphere.dss.datamodel.measure.entity.DssDatamodelMeasure; +import com.webank.wedatasphere.dss.datamodel.measure.service.MeasureService; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureAddVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureEnableVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureQueryVO; +import com.webank.wedatasphere.dss.datamodel.measure.vo.MeasureUpdateVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.stream.Collectors; + + +@Service +public class MeasureServiceImpl extends ServiceImpl implements MeasureService { + + private static final Logger LOGGER = LoggerFactory.getLogger(MeasureServiceImpl.class); + + private final ModelMapper modelMapper = new ModelMapper(); + + + + @Resource + private AssertsSyncService assertsSyncService; + + @Resource + private DatamodelReferencService datamodelReferencService; + + @Override + @Transactional(rollbackFor = Exception.class) + public long addMeasure(MeasureAddVO vo) throws ErrorException { + if (getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelMeasure::getName, vo.getName()) + .or().eq(DssDatamodelMeasure::getFieldIdentifier, vo.getFieldIdentifier())) > 0) { + LOGGER.error("errorCode : {}, measure name or field identifier can not repeat, name : {}", ErrorCode.INDICATOR_ADD_ERROR.getCode(), vo.getName()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_ADD_ERROR.getCode(), "measure name or field identifier can not repeat"); + } + + + //校验引用情况 + if(datamodelReferencService.measureReferenceCount(vo.getName())>0 + ||datamodelReferencService.measureReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, measure name can not be referenced ", ErrorCode.MEASURE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_UPDATE_ERROR.getCode(), "measure name can not be referenced"); + } + + DssDatamodelMeasure newOne = modelMapper.map(vo, DssDatamodelMeasure.class); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + getBaseMapper().insert(newOne); + //同步atlas + CreateModelTypeResult result = assertsSyncService.syncCreateModel( + new CreateModelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getFieldIdentifier() + , ClassificationConstant.MEASURE)); + return newOne.getId(); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int enableMeasure(Long id, MeasureEnableVO vo) { + DssDatamodelMeasure enableOne = new DssDatamodelMeasure(); + enableOne.setIsAvailable(vo.getIsAvailable()); + enableOne.setUpdateTime(new Date()); + return getBaseMapper().update(enableOne, Wrappers.lambdaUpdate().eq(DssDatamodelMeasure::getId, id)); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateMeasure(Long id, MeasureUpdateVO vo) throws ErrorException { + DssDatamodelMeasure org = getBaseMapper().selectById(id); + if (org == null) { + LOGGER.error("errorCode : {}, update measure error not exists", ErrorCode.MEASURE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_UPDATE_ERROR.getCode(), "update measure error not exists"); + } + + //校验引用情况 + if(datamodelReferencService.measureReferenceCount(vo.getName())>0 + ||datamodelReferencService.measureReferenceCount(vo.getFieldIdentifier())>0 + ||datamodelReferencService.measureReferenceCount(org.getName())>0 + ||datamodelReferencService.measureReferenceCount(org.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, measure name can not be referenced ", ErrorCode.MEASURE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_UPDATE_ERROR.getCode(), "measure name can not be referenced"); + } + + //当更新名称时 + if (!StringUtils.equals(vo.getName(), org.getName())) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelMeasure::getName, vo.getName())); + if (repeat > 0 ) { + LOGGER.error("errorCode : {}, measure name can not repeat ", ErrorCode.MEASURE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_UPDATE_ERROR.getCode(), "measure name can not repeat "); + } + } + + String orgFieldIdentifier = org.getFieldIdentifier(); + //当更新标识时 + if (!StringUtils.equals(vo.getFieldIdentifier(), orgFieldIdentifier)) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelMeasure::getFieldIdentifier, vo.getFieldIdentifier())); + + if (repeat > 0 || datamodelReferencService.measureReferenceCount(orgFieldIdentifier)>0) { + LOGGER.error("errorCode : {}, measure field identifier can not repeat or referenced", ErrorCode.MEASURE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_UPDATE_ERROR.getCode(), "measure field identifier can not repeat or referenced"); + } + } + DssDatamodelMeasure updateOne = modelMapper.map(vo, DssDatamodelMeasure.class); + updateOne.setUpdateTime(new Date()); + getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelMeasure::getId, id)); + //同步atlas + UpdateModelTypeResult updateModelTypeResult = assertsSyncService.syncUpdateModel( + new UpdateModelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getFieldIdentifier() + , orgFieldIdentifier + , ClassificationConstant.MEASURE)); + return 1; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteMeasure(Long id) throws ErrorException { + DssDatamodelMeasure dssDatamodelMeasure = getBaseMapper().selectById(id); + if (dssDatamodelMeasure == null) { + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_DELETE_ERROR.getCode(), "measure id " + id + " not exists"); + } + //校验引用情况 + if(datamodelReferencService.measureReferenceCount(dssDatamodelMeasure.getName())>0 + ||datamodelReferencService.measureReferenceCount(dssDatamodelMeasure.getFieldIdentifier())>0){ + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_DELETE_ERROR.getCode(), "measure id " + id + " has referenced"); + } + + getBaseMapper().deleteById(id); + //同步资产 + assertsSyncService.syncDeleteModel(new DeleteModelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , dssDatamodelMeasure.getFieldIdentifier() + , ClassificationConstant.MEASURE)); + return 1; + } + + + @Override + public Message listMeasures(MeasureQueryVO vo) { + QueryWrapper queryWrapper = new QueryWrapper() + .like(StringUtils.isNotBlank(vo.getName()), "name", vo.getName()) + .eq(vo.getIsAvailable() != null, "is_available", vo.getIsAvailable()) + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), "warehouse_theme_name", vo.getWarehouseThemeName()) + .like(StringUtils.isNotBlank(vo.getOwner()), "owner", vo.getOwner()); + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList(queryWrapper)); + //IPage iPage = page(new Page<>(vo.getPageNum(),vo.getPageSize()),queryWrapper); + return Message.ok() + .data("list", pageInfo + .getList() + .stream() + .map(dssDatamodelMeasure -> { + MeasureQueryDTO dto = modelMapper.map(dssDatamodelMeasure, MeasureQueryDTO.class); + dto.setRefCount(datamodelReferencService.measureReferenceCount(dssDatamodelMeasure.getName())); + return dto; + }) + .collect(Collectors.toList())) + .data("total", pageInfo.getTotal()); + } + + + @Override + public MeasureQueryDTO queryById(Long id) throws DSSDatamodelCenterException { + DssDatamodelMeasure dssDatamodelMeasure = getBaseMapper().selectById(id); + if (dssDatamodelMeasure == null) { + throw new DSSDatamodelCenterException(ErrorCode.MEASURE_QUERY_ERROR.getCode(), "measure id " + id + " not exists"); + } + MeasureQueryDTO dto = modelMapper.map(dssDatamodelMeasure, MeasureQueryDTO.class); + dto.setRefCount(datamodelReferencService.measureReferenceCount(dssDatamodelMeasure.getName())); + return dto; + } + + + @Override + public int measureThemeReferenceCount(String name) { + int count = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelMeasure::getWarehouseThemeName, name)); + int countEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelMeasure::getWarehouseThemeNameEn, name)); + return count + countEn; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureAddVO.java new file mode 100644 index 0000000000..dc15c333e0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureAddVO.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.measure.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class MeasureAddVO { + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureEnableVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureEnableVO.java new file mode 100644 index 0000000000..bb2f09fed3 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureEnableVO.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.measure.vo; + + +public class MeasureEnableVO { + + + private Integer isAvailable; + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + @Override + public String toString() { + return "MeasureEnableVO{" + + "isAvailable=" + isAvailable + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureQueryVO.java new file mode 100644 index 0000000000..75837a7027 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureQueryVO.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.measure.vo; + +import com.webank.wedatasphere.dss.datamodel.center.common.vo.PageVO; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class MeasureQueryVO extends PageVO { + + private String name; + + private Integer isAvailable; + + private String owner; + + private String warehouseThemeName; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureUpdateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureUpdateVO.java new file mode 100644 index 0000000000..59ed05435f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-measure-management/src/main/java/com/webank/wedatasphere/dss/datamodel/measure/vo/MeasureUpdateVO.java @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.dss.datamodel.measure.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class MeasureUpdateVO { + + private String name; + + private String fieldIdentifier; + + private String formula; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String warehouseThemeNameEn; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/pom.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/pom.xml new file mode 100644 index 0000000000..c14ea8d6ca --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/pom.xml @@ -0,0 +1,59 @@ + + + + + + dss-datamodel-center + com.webank.wedatasphere.dss + 1.2.0 + ../pom.xml + + 4.0.0 + + dss-datamodel-table-management + + + + + com.webank.wedatasphere.dss + dss-datamodel-center-common + ${dss.version} + + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelDictionaryMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelDictionaryMapper.java new file mode 100644 index 0000000000..71cd712559 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelDictionaryMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelDictionary; + +public interface DssDatamodelDictionaryMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelLabelMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelLabelMapper.java new file mode 100644 index 0000000000..242aab574b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelLabelMapper.java @@ -0,0 +1,8 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelLabel; + +public interface DssDatamodelLabelMapper extends BaseMapper { + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableCollcetionMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableCollcetionMapper.java new file mode 100644 index 0000000000..714abfa68c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableCollcetionMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableCollcetion; + +public interface DssDatamodelTableCollcetionMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableColumnsMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableColumnsMapper.java new file mode 100644 index 0000000000..8444d4a805 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableColumnsMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; + +public interface DssDatamodelTableColumnsMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMapper.java new file mode 100644 index 0000000000..31b1328059 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; + +public interface DssDatamodelTableMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMaterializedHistoryMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMaterializedHistoryMapper.java new file mode 100644 index 0000000000..e0ac1b87a6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableMaterializedHistoryMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableMaterializedHistory; + +public interface DssDatamodelTableMaterializedHistoryMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStaticsMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStaticsMapper.java new file mode 100644 index 0000000000..a1c5276eb0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStaticsMapper.java @@ -0,0 +1,4 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +public interface DssDatamodelTableStaticsMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStatsMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStatsMapper.java new file mode 100644 index 0000000000..0fde86e310 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableStatsMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableStats; + +public interface DssDatamodelTableStatsMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableVersionMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableVersionMapper.java new file mode 100644 index 0000000000..052c8a234a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/DssDatamodelTableVersionMapper.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableVersion; + +public interface DssDatamodelTableVersionMapper extends BaseMapper { +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/TableQueryMapper.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/TableQueryMapper.java new file mode 100644 index 0000000000..d703a816de --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/TableQueryMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.table.dao; + + +import com.baomidou.mybatisplus.core.conditions.Wrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTabelQuery; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.List; + +public interface TableQueryMapper extends BaseMapper { + String querySql = "SELECT a.*, b.model_type,b.model_name FROM dss_datamodel_table AS a LEFT JOIN dss_datamodel_table_columns AS b ON b.table_id = a.id " + + " ${ew.customSqlSegment}"; + String wrapperSql = "SELECT * from ( " + querySql + " ) AS q ${ew.customSqlSegment}"; + + + + @Select(querySql) + List page(@Param(Constants.WRAPPER) Wrapper queryWrapper); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelDictionaryMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelDictionaryMapper.xml new file mode 100644 index 0000000000..6aa69080d9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelDictionaryMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + id, code, `type`, description, created_time, update_time, sort + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelLabelMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelLabelMapper.xml new file mode 100644 index 0000000000..394fc1f040 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelLabelMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, `name`, field_identifier, params, `comment`, warehouse_theme_name, `owner`, principal_name, + is_available, create_time, update_time, warehouse_theme_name_en + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableCollcetionMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableCollcetionMapper.xml new file mode 100644 index 0000000000..9a1e80df6f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableCollcetionMapper.xml @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, data_base, `name`, `alias`, creator, `comment`, create_time, update_time, warehouse_layer_name, + warehouse_theme_name, lifecycle, is_partition_table, is_available, storage_type, + principal_name, `compress`, file_type, `user`, version, is_external, `location`, + `label`, guid, warehouse_layer_name_en, warehouse_theme_name_en + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableColumnsMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableColumnsMapper.xml new file mode 100644 index 0000000000..dcbf7e32f1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableColumnsMapper.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + id, table_id, `name`, `alias`, `type`, `comment`, is_partition_field, is_primary, + `length`, `rule`, model_type, model_name_en, model_id, model_name, create_time, update_time + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMapper.xml new file mode 100644 index 0000000000..57d36a49da --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMapper.xml @@ -0,0 +1,38 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + id, data_base, `name`, `alias`, creator, `comment`, create_time, update_time, warehouse_layer_name, + warehouse_layer_name_en, warehouse_theme_name, warehouse_theme_name_en, lifecycle, + is_partition_table, is_available, storage_type, principal_name, `compress`, file_type, + version, is_external, `location`, `label` + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMaterializedHistoryMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMaterializedHistoryMapper.xml new file mode 100644 index 0000000000..8435cbca06 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableMaterializedHistoryMapper.xml @@ -0,0 +1,25 @@ + + + + + + + + + + + + + + + + + + + + + + id, materialized_code, reason, creator, `status`, create_time, last_update_time, + task_id, error_msg, tableName, `database`, version + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStaticsMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStaticsMapper.xml new file mode 100644 index 0000000000..2e1b1d14b9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStaticsMapper.xml @@ -0,0 +1,19 @@ + + + + + + + + + + + + + + + + + id, origin_tables, table_id, access_count, last_access_time, sample_data_path, sample_update_time + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStatsMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStatsMapper.xml new file mode 100644 index 0000000000..c77d513351 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableStatsMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + id, data_base, `name`, create_time, update_time, column_count, storage_size, file_count, + partition_count, access_count, collect_count, ref_count, version + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableVersionMapper.xml b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableVersionMapper.xml new file mode 100644 index 0000000000..4131b9e4d9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dao/impl/DssDatamodelTableVersionMapper.xml @@ -0,0 +1,26 @@ + + + + + + + + + + + + + + + + + + + + + + + id, tbl_id, `name`, is_materialized, table_code, `comment`, version, table_params, + `columns`, source_type, create_time, update_time, creator + + \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblDetailInfoDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblDetailInfoDTO.java new file mode 100644 index 0000000000..e3c10a8dea --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblDetailInfoDTO.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import lombok.Data; + +import java.io.Serializable; +import java.util.List; +import java.util.Set; + + +@Data +public class HiveTblDetailInfoDTO implements Serializable { + private HiveTblBasicInfo basic; + private List columns; + private List partitionKeys; + + + @Data + public static class HiveTblBasicInfo extends HiveTblSimpleInfo { + private String store; + private String comment; + private Set labels; + private Boolean isParTbl; + } + + @Data + public static class HiveColumnInfoDTO { + private String name; + private String type; + private String guid; + private String comment; + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfo.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfo.java new file mode 100644 index 0000000000..146a133b3a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfo.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import lombok.Data; + +import java.util.Date; + + +@Data +public class HiveTblSimpleInfo { + private String guid; + private String name; + private String qualifiedName; + private Date createTime; + private String owner; + private Date lastAccessTime; + private String external; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfoDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfoDTO.java new file mode 100644 index 0000000000..342c303d30 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/HiveTblSimpleInfoDTO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.Data; + +import java.util.Date; +import java.util.List; + +@Data +public class HiveTblSimpleInfoDTO { + private String guid; + private String name; + private String qualifiedName; + private Date createTime; + private String owner; + private Date lastAccessTime; + private String aliases; + private String comment; + private List classifications; + private String totalSize; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/LabelQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/LabelQueryDTO.java new file mode 100644 index 0000000000..4c70def69a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/LabelQueryDTO.java @@ -0,0 +1,52 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class LabelQueryDTO { + + private Long id; + + private String name; + + private String fieldIdentifier; + + /** + * 标签键值对 json + */ + private String params; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Date createTime; + + private Date updateTime; + + /** + * 英文 + */ + private String warehouseThemeNameEn; + + /** + * 被引用次数 + */ + private Integer refCount =0; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ListDataBasesVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ListDataBasesVO.java new file mode 100644 index 0000000000..4d9673a640 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ListDataBasesVO.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class ListDataBasesVO { + private String name; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ModelTypeDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ModelTypeDTO.java new file mode 100644 index 0000000000..a581ee5fd0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/ModelTypeDTO.java @@ -0,0 +1,28 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; + +@Data +@EqualsAndHashCode +@AllArgsConstructor +public class ModelTypeDTO { + + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + + + /** + * 模型信息名称 + */ + private String modelName; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/PartInfoDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/PartInfoDTO.java new file mode 100644 index 0000000000..72ed291cc6 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/PartInfoDTO.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import lombok.Data; + +import java.util.Date; + + +@Data +public class PartInfoDTO { + private String partName; + private int reordCnt; + private int store; + private int fileCount; + private Date createTime; + private Date lastAccessTime; +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableCollectionDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableCollectionDTO.java new file mode 100644 index 0000000000..239229cae0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableCollectionDTO.java @@ -0,0 +1,105 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class TableCollectionDTO { + + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 收藏人 + */ + private String user; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + /** + * 标签 + */ + private String label; + + /** + * atlas标识 + */ + private String guid; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableColumnQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableColumnQueryDTO.java new file mode 100644 index 0000000000..7dcd94bec0 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableColumnQueryDTO.java @@ -0,0 +1,50 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class TableColumnQueryDTO { + + private Long id; + + private Long tableId; + + private String name; + + private String alias; + + private String type; + + private String comment; + + private Integer isPartitionField; + + private Integer isPrimary; + + private Integer length; + + private String rule; + + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 模型信息名称 + */ + private String modelName; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + + private Date createTime; + + private Date updateTime; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableHeadlineDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableHeadlineDTO.java new file mode 100644 index 0000000000..edea9a8c9e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableHeadlineDTO.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableHeadlineDTO { + + /** + * 0 表示 Hive + */ + private Integer storageType; + + /** + * 0 表示离线表 + */ + private Integer tableType; + + + /** + * 0 逻辑表 1 物理表 + */ + private Integer entityType; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableListDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableListDTO.java new file mode 100644 index 0000000000..e3476a1856 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableListDTO.java @@ -0,0 +1,102 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class TableListDTO { + + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + /** + * 生命周期 + */ + private String lifecycle; + + + private String lifecycleEn; + + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 版本信息:默认1 + */ + private String version; + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + + private Long size; + + + private String guid; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableQueryDTO.java new file mode 100644 index 0000000000..a722c3fd1a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableQueryDTO.java @@ -0,0 +1,170 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import com.google.common.collect.Lists; +import com.webank.wedatasphere.dss.data.governance.entity.HiveTblStatsDTO; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ColumnType; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.LabelConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.TabelExternalType; +import lombok.Data; +import lombok.ToString; +import org.apache.commons.lang3.StringUtils; +import org.springframework.util.CollectionUtils; + +import java.util.Date; +import java.util.List; +import java.util.Optional; + +@Data +@ToString +public class TableQueryDTO { + + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + private Date lastAccessTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 版本信息:默认1 + */ + private String version; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + private List columns = Lists.newArrayList(); + + /** + * 标签 + */ + private String label; + + + private TableStatsDTO stats = new TableStatsDTO(); + + + private TableHeadlineDTO headline; + + public static TableQueryDTO toTableStatsDTO(HiveTblDetailInfoDTO hiveTblDTO, HiveTblStatsDTO hiveTblStatsDTO, String name){ + TableQueryDTO dto = new TableQueryDTO(); + dto.setName(name); + dto.setCreateTime(hiveTblDTO.getBasic().getCreateTime()); + dto.setLastAccessTime(hiveTblDTO.getBasic().getLastAccessTime()); + dto.setCreator(hiveTblDTO.getBasic().getOwner()); + dto.setComment(hiveTblDTO.getBasic().getComment()); + + Optional tableExternalType = TabelExternalType.getByType(hiveTblDTO.getBasic().getExternal()); + tableExternalType.ifPresent(e -> dto.setIsExternal(e.getCode())); + + if (!CollectionUtils.isEmpty(hiveTblDTO.getBasic().getLabels())){ + StringBuilder sb = new StringBuilder(); + for (String label:hiveTblDTO.getBasic().getLabels()){ + sb.append(label).append(LabelConstant.SEPARATOR); + } + dto.setLabel(StringUtils.substringBeforeLast(sb.toString(),LabelConstant.SEPARATOR)); + } + dto.setIsPartitionTable(hiveTblDTO.getBasic().getIsParTbl()?ColumnType.PARTITION_KEY.getCode():ColumnType.COLUMN.getCode()); + + if (!CollectionUtils.isEmpty(hiveTblDTO.getColumns())){ + hiveTblDTO.getColumns().forEach(hiveColumn->{ + TableColumnQueryDTO columnQueryDTO = new TableColumnQueryDTO(); + columnQueryDTO.setComment(hiveColumn.getComment()); + columnQueryDTO.setName(hiveColumn.getName()); + columnQueryDTO.setType(hiveColumn.getType()); + columnQueryDTO.setIsPartitionField(ColumnType.COLUMN.getCode()); + dto.columns.add(columnQueryDTO); + }); + } + + if (!CollectionUtils.isEmpty(hiveTblDTO.getPartitionKeys())){ + hiveTblDTO.getPartitionKeys().forEach(hiveColumn->{ + TableColumnQueryDTO columnQueryDTO = new TableColumnQueryDTO(); + columnQueryDTO.setComment(hiveColumn.getComment()); + columnQueryDTO.setName(hiveColumn.getName()); + columnQueryDTO.setType(hiveColumn.getType()); + columnQueryDTO.setIsPartitionField(ColumnType.PARTITION_KEY.getCode()); + dto.columns.add(columnQueryDTO); + }); + } + TableHeadlineDTO headlineDTO = new TableHeadlineDTO(); + headlineDTO.setStorageType(0); + headlineDTO.setTableType(0); + headlineDTO.setEntityType(1); + dto.setHeadline(headlineDTO); + + dto.setStats(TableStatsDTO.from(hiveTblStatsDTO,0)); + return dto; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableStatsDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableStatsDTO.java new file mode 100644 index 0000000000..4289a17bf3 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableStatsDTO.java @@ -0,0 +1,73 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + +import com.webank.wedatasphere.dss.data.governance.entity.HiveTblStatsDTO; +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class TableStatsDTO { + + private Long id; + + private String dataBase; + + private String name; + + private Date createTime; + + private Date updateTime; + + /** + * 字段数 + */ + private Integer columnCount = 0; + + /** + * 存储大小 + */ + private Long storageSize = 0L; + + /** + * 文件数 + */ + private Integer fileCount = 0; + + /** + * 分区数 + */ + private Integer partitionCount = 0; + + /** + * 访问次数 + */ + private Integer accessCount = 0; + + /** + * 收藏次数 + */ + private Integer collectCount = 0; + + /** + * 引用次数 + */ + private Integer refCount = 0; + + /** + * 版本信息:默认1 + */ + private String version; + + + public static TableStatsDTO from(HiveTblStatsDTO hiveTblStatsDTO,Integer collectCount){ + TableStatsDTO dto = new TableStatsDTO(); + dto.setColumnCount(hiveTblStatsDTO.getColumnCount()); + dto.setFileCount(hiveTblStatsDTO.getNumFiles()); + dto.setPartitionCount(hiveTblStatsDTO.getPartitionCount()); + dto.setStorageSize(hiveTblStatsDTO.getTotalSize()); + dto.setCollectCount(collectCount); + return dto; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableVersionQueryDTO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableVersionQueryDTO.java new file mode 100644 index 0000000000..a60a68497d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/dto/TableVersionQueryDTO.java @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.dss.datamodel.table.dto; + + +import lombok.Data; + +import java.util.Date; + +@Data +public class TableVersionQueryDTO { + + private Long id; + + private Long tblId; + + private String name; + + /** + * 是否物化 + */ + private Integer isMaterialized; + + /** + * 创建table的sql + */ + private String tableCode; + + /** + * 版本注释 + */ + private String comment; + + /** + * 版本信息:默认 1 + */ + private String version; + + private String tableParams; + + private String columns; + + /** + * rollback,update,add + */ + private String sourceType; + + private Date createTime; + + private Date updateTime; + + private String creator; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelDictionary.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelDictionary.java new file mode 100644 index 0000000000..a8e50abc00 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelDictionary.java @@ -0,0 +1,100 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.util.Date; + +/** + * 数模字典 + */ +public class DssDatamodelDictionary { + /** + * 主键id + */ + @TableId(type = IdType.AUTO) + private Integer id; + + /** + * 类型code + */ + private String code; + + /** + * 字典类型 + */ + private String type; + + /** + * 描述 + */ + private String description; + + /** + * 创建时间 + */ + private Date createdTime; + + /** + * 更新时间 + */ + private Date updateTime; + + private Integer sort; + + public Integer getId() { + return id; + } + + public void setId(Integer id) { + this.id = id; + } + + public String getCode() { + return code; + } + + public void setCode(String code) { + this.code = code; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Date getCreatedTime() { + return createdTime; + } + + public void setCreatedTime(Date createdTime) { + this.createdTime = createdTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelLabel.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelLabel.java new file mode 100644 index 0000000000..4bcbd1da5f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelLabel.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import java.util.Date; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +@Data +public class DssDatamodelLabel { + @TableId(type = IdType.AUTO) + private Long id; + + private String name; + + private String fieldIdentifier; + + /** + * 标签键值对 json + */ + private String params; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + private Date createTime; + + private Date updateTime; + + /** + * 英文 + */ + private String warehouseThemeNameEn; +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTabelQuery.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTabelQuery.java new file mode 100644 index 0000000000..412256ea58 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTabelQuery.java @@ -0,0 +1,83 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + + +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelTabelQuery { + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 生命周期 + */ + private String lifecycle; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 版本信息:默认1 + */ + private String version; + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + private Integer modelType; + + private String modelName; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTable.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTable.java new file mode 100644 index 0000000000..8bd88066cd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTable.java @@ -0,0 +1,275 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelTable { + @TableId(type = IdType.AUTO) + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 版本信息:默认1 + */ + private String version; + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + /** + * 标签 + */ + private String label; + + + public String getDataBase() { + return dataBase; + } + + public void setDataBase(String dataBase) { + this.dataBase = dataBase; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getWarehouseLayerName() { + return warehouseLayerName; + } + + public void setWarehouseLayerName(String warehouseLayerName) { + this.warehouseLayerName = warehouseLayerName; + } + + public String getWarehouseLayerNameEn() { + return warehouseLayerNameEn; + } + + public void setWarehouseLayerNameEn(String warehouseLayerNameEn) { + this.warehouseLayerNameEn = warehouseLayerNameEn; + } + + public String getWarehouseThemeName() { + return warehouseThemeName; + } + + public void setWarehouseThemeName(String warehouseThemeName) { + this.warehouseThemeName = warehouseThemeName; + } + + public String getWarehouseThemeNameEn() { + return warehouseThemeNameEn; + } + + public void setWarehouseThemeNameEn(String warehouseThemeNameEn) { + this.warehouseThemeNameEn = warehouseThemeNameEn; + } + + public String getLifecycle() { + return lifecycle; + } + + public void setLifecycle(String lifecycle) { + this.lifecycle = lifecycle; + } + + public Integer getIsPartitionTable() { + return isPartitionTable; + } + + public void setIsPartitionTable(Integer isPartitionTable) { + this.isPartitionTable = isPartitionTable; + } + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + public String getStorageType() { + return storageType; + } + + public void setStorageType(String storageType) { + this.storageType = storageType; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public String getCompress() { + return compress; + } + + public void setCompress(String compress) { + this.compress = compress; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public Integer getIsExternal() { + return isExternal; + } + + public void setIsExternal(Integer isExternal) { + this.isExternal = isExternal; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public String getLabel() { + return label; + } + + public void setLabel(String label) { + this.label = label; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableCollcetion.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableCollcetion.java new file mode 100644 index 0000000000..90e204e3b3 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableCollcetion.java @@ -0,0 +1,110 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelTableCollcetion { + @TableId(type = IdType.AUTO) + private Long id; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 收藏人 + */ + private String user; + + /** + * 版本信息:默认1 + */ + private String version; + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + /** + * 标签 + */ + private String label; + + /** + * atlas标识 + */ + private String guid; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableColumns.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableColumns.java new file mode 100644 index 0000000000..464a4e1e6c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableColumns.java @@ -0,0 +1,169 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; + +import java.util.Date; + +@Data +public class DssDatamodelTableColumns { + @TableId(type = IdType.AUTO) + private Long id; + + private Long tableId; + + private String name; + + private String alias; + + private String type; + + private String comment; + + private Integer isPartitionField; + + private Integer isPrimary; + + private Integer length; + + private String rule; + + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + + /** + * 关联具体模型id信息(因为有版本数据表id不可靠,暂时不用) + */ + private Integer modelId; + + /** + * 模型信息名称 + */ + private String modelName; + + private Date createTime; + + private Date updateTime; + + + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public Integer getIsPartitionField() { + return isPartitionField; + } + + public void setIsPartitionField(Integer isPartitionField) { + this.isPartitionField = isPartitionField; + } + + public Integer getIsPrimary() { + return isPrimary; + } + + public void setIsPrimary(Integer isPrimary) { + this.isPrimary = isPrimary; + } + + public Integer getLength() { + return length; + } + + public void setLength(Integer length) { + this.length = length; + } + + public String getRule() { + return rule; + } + + public void setRule(String rule) { + this.rule = rule; + } + + public Integer getModelType() { + return modelType; + } + + public void setModelType(Integer modelType) { + this.modelType = modelType; + } + + public String getModelNameEn() { + return modelNameEn; + } + + public void setModelNameEn(String modelNameEn) { + this.modelNameEn = modelNameEn; + } + + public Integer getModelId() { + return modelId; + } + + public void setModelId(Integer modelId) { + this.modelId = modelId; + } + + public String getModelName() { + return modelName; + } + + public void setModelName(String modelName) { + this.modelName = modelName; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableMaterializedHistory.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableMaterializedHistory.java new file mode 100644 index 0000000000..c5b942a81f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableMaterializedHistory.java @@ -0,0 +1,57 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class DssDatamodelTableMaterializedHistory { + @TableId(type = IdType.AUTO) + private Long id; + + /** + * 物化sql + */ + private String materializedCode; + + /** + * 物化原因 + */ + private String reason; + + /** + * 物化者 + */ + private String creator; + + /** + * succeed,failed,in progess + */ + private Integer status; + + private Date createTime; + + private Date lastUpdateTime; + + private String taskId; + + private String errorMsg; + + /** + * 表名 + */ + private String tablename; + + private String dataBase; + + /** + * 版本信息:默认1 + */ + private String version; + + +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStatics.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStatics.java new file mode 100644 index 0000000000..16ca259b7a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStatics.java @@ -0,0 +1,80 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +public class DssDatamodelTableStatics { + @TableId(type = IdType.AUTO) + private Long id; + + private String originTables; + + private Long tableId; + + private Integer accessCount; + + private Integer lastAccessTime; + + /** + * 存储10行用例数据 + */ + private String sampleDataPath; + + private Integer sampleUpdateTime; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getOriginTables() { + return originTables; + } + + public void setOriginTables(String originTables) { + this.originTables = originTables; + } + + public Long getTableId() { + return tableId; + } + + public void setTableId(Long tableId) { + this.tableId = tableId; + } + + public Integer getAccessCount() { + return accessCount; + } + + public void setAccessCount(Integer accessCount) { + this.accessCount = accessCount; + } + + public Integer getLastAccessTime() { + return lastAccessTime; + } + + public void setLastAccessTime(Integer lastAccessTime) { + this.lastAccessTime = lastAccessTime; + } + + public String getSampleDataPath() { + return sampleDataPath; + } + + public void setSampleDataPath(String sampleDataPath) { + this.sampleDataPath = sampleDataPath; + } + + public Integer getSampleUpdateTime() { + return sampleUpdateTime; + } + + public void setSampleUpdateTime(Integer sampleUpdateTime) { + this.sampleUpdateTime = sampleUpdateTime; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStats.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStats.java new file mode 100644 index 0000000000..3ece606c5e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableStats.java @@ -0,0 +1,163 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.util.Date; + +public class DssDatamodelTableStats { + @TableId(type = IdType.AUTO) + private Long id; + + private String dataBase; + + private String name; + + private Date createTime; + + private Date updateTime; + + /** + * 字段数 + */ + private Integer columnCount; + + /** + * 存储大小 + */ + private Integer storageSize; + + /** + * 文件数 + */ + private Integer fileCount; + + /** + * 分区数 + */ + private Integer partitionCount; + + /** + * 访问次数 + */ + private Integer accessCount; + + /** + * 收藏次数 + */ + private Integer collectCount; + + /** + * 引用次数 + */ + private Integer refCount; + + /** + * 版本信息:默认1 + */ + private String version; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getDataBase() { + return dataBase; + } + + public void setDataBase(String dataBase) { + this.dataBase = dataBase; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Integer getColumnCount() { + return columnCount; + } + + public void setColumnCount(Integer columnCount) { + this.columnCount = columnCount; + } + + public Integer getStorageSize() { + return storageSize; + } + + public void setStorageSize(Integer storageSize) { + this.storageSize = storageSize; + } + + public Integer getFileCount() { + return fileCount; + } + + public void setFileCount(Integer fileCount) { + this.fileCount = fileCount; + } + + public Integer getPartitionCount() { + return partitionCount; + } + + public void setPartitionCount(Integer partitionCount) { + this.partitionCount = partitionCount; + } + + public Integer getAccessCount() { + return accessCount; + } + + public void setAccessCount(Integer accessCount) { + this.accessCount = accessCount; + } + + public Integer getCollectCount() { + return collectCount; + } + + public void setCollectCount(Integer collectCount) { + this.collectCount = collectCount; + } + + public Integer getRefCount() { + return refCount; + } + + public void setRefCount(Integer refCount) { + this.refCount = refCount; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableVersion.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableVersion.java new file mode 100644 index 0000000000..83689f366e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/entity/DssDatamodelTableVersion.java @@ -0,0 +1,154 @@ +package com.webank.wedatasphere.dss.datamodel.table.entity; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableId; + +import java.util.Date; + +public class DssDatamodelTableVersion { + @TableId(type = IdType.AUTO) + private Long id; + + private Long tblId; + + private String name; + + /** + * 是否物化 + */ + private Integer isMaterialized; + + /** + * 创建table的sql + */ + private String tableCode; + + /** + * 版本注释 + */ + private String comment; + + /** + * 版本信息:默认version0002 + */ + private String version; + + private String tableParams; + + private String columns; + + /** + * rollback,update,add + */ + private String sourceType; + + private Date createTime; + + private Date updateTime; + + private String creator; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getTblId() { + return tblId; + } + + public void setTblId(Long tblId) { + this.tblId = tblId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public Integer getIsMaterialized() { + return isMaterialized; + } + + public void setIsMaterialized(Integer isMaterialized) { + this.isMaterialized = isMaterialized; + } + + public String getTableCode() { + return tableCode; + } + + public void setTableCode(String tableCode) { + this.tableCode = tableCode; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getVersion() { + return version; + } + + public void setVersion(String version) { + this.version = version; + } + + public String getTableParams() { + return tableParams; + } + + public void setTableParams(String tableParams) { + this.tableParams = tableParams; + } + + public String getColumns() { + return columns; + } + + public void setColumns(String columns) { + this.columns = columns; + } + + public String getSourceType() { + return sourceType; + } + + public void setSourceType(String sourceType) { + this.sourceType = sourceType; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindLabelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindLabelByTableEvent.java new file mode 100644 index 0000000000..6c0630353c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindLabelByTableEvent.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@Getter +@ToString +public class BindLabelByTableEvent extends ApplicationEvent { + + private String user; + + private DssDatamodelTable table; + + public BindLabelByTableEvent(Object source,String user,DssDatamodelTable table) { + super(source); + this.user = user; + this.table = table; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByColumnsEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByColumnsEvent.java new file mode 100644 index 0000000000..27f16ed691 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByColumnsEvent.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.List; + +@Getter +public class BindModelByColumnsEvent extends ApplicationEvent { + + private String user; + + private String tableName; + + List columns; + + public BindModelByColumnsEvent(Object source, String user, String tableName, List columns) { + super(source); + this.user = user; + this.tableName = tableName; + this.columns = columns; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByTableEvent.java new file mode 100644 index 0000000000..55b30e7ded --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/BindModelByTableEvent.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +@Getter +public class BindModelByTableEvent extends ApplicationEvent { + + private String user; + + private DssDatamodelTable table; + + public BindModelByTableEvent(Object source,String user,DssDatamodelTable table) { + super(source); + this.user = user; + this.table = table; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/TableFirstBindEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/TableFirstBindEvent.java new file mode 100644 index 0000000000..aae0783449 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/TableFirstBindEvent.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +@Getter +public class TableFirstBindEvent extends ApplicationEvent { + private String user; + private Long tableId; + private String tableName; + + public TableFirstBindEvent(Object source, String user, Long tableId, String tableName) { + super(source); + this.user = user; + this.tableId = tableId; + this.tableName = tableName; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindLabelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindLabelByTableEvent.java new file mode 100644 index 0000000000..06f7302c55 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindLabelByTableEvent.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; +import org.springframework.stereotype.Component; + +@ToString +@Getter +public class UnBindLabelByTableEvent extends ApplicationEvent { + + private String user; + + private DssDatamodelTable table; + + public UnBindLabelByTableEvent(Object source,String user,DssDatamodelTable table) { + super(source); + this.user = user; + this.table = table; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByColumnsEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByColumnsEvent.java new file mode 100644 index 0000000000..7d8c8a067f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByColumnsEvent.java @@ -0,0 +1,24 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.List; + +@Getter +public class UnBindModelByColumnsEvent extends ApplicationEvent { + + private String user; + + private String tableName; + + List columns; + + public UnBindModelByColumnsEvent(Object source, String user, String tableName, List columns) { + super(source); + this.user = user; + this.tableName = tableName; + this.columns = columns; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByTableEvent.java new file mode 100644 index 0000000000..5a0b7d6d83 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UnBindModelByTableEvent.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; +@Getter +public class UnBindModelByTableEvent extends ApplicationEvent { + + private String user; + + private DssDatamodelTable table; + + public UnBindModelByTableEvent(Object source,String user,DssDatamodelTable table) { + super(source); + this.user = user; + this.table = table; + } +} \ No newline at end of file diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindLabelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindLabelByTableEvent.java new file mode 100644 index 0000000000..679bc4e8be --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindLabelByTableEvent.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import lombok.ToString; +import org.springframework.context.ApplicationEvent; + +@ToString +@Getter +public class UpdateBindLabelByTableEvent extends ApplicationEvent { + private String user; + + private DssDatamodelTable ori; + + private DssDatamodelTable updateOne; + + public UpdateBindLabelByTableEvent(Object source, String user, DssDatamodelTable ori, DssDatamodelTable updateOne) { + super(source); + this.user = user; + this.ori = ori; + this.updateOne = updateOne; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByColumnsEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByColumnsEvent.java new file mode 100644 index 0000000000..3b869b36fd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByColumnsEvent.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +import java.util.List; + +@Getter +public class UpdateBindModelByColumnsEvent extends ApplicationEvent { + private String user; + + private String tableName; + + private List orgColumns; + + private List updateColumns; + + public UpdateBindModelByColumnsEvent(Object source, String user, String tableName, List orgColumns, List updateColumns) { + super(source); + this.user = user; + this.tableName = tableName; + this.orgColumns = orgColumns; + this.updateColumns = updateColumns; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByTableEvent.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByTableEvent.java new file mode 100644 index 0000000000..65629a87ad --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/event/UpdateBindModelByTableEvent.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.table.event; + + +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import lombok.Getter; +import org.springframework.context.ApplicationEvent; + +@Getter +public class UpdateBindModelByTableEvent extends ApplicationEvent { + private String user; + + private DssDatamodelTable org; + + private DssDatamodelTable updateOne; + + public UpdateBindModelByTableEvent(Object source, String user, DssDatamodelTable org, DssDatamodelTable updateOne) { + super(source); + this.user = user; + this.org = org; + this.updateOne = updateOne; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableFirstBindListener.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableFirstBindListener.java new file mode 100644 index 0000000000..8e869e4353 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableFirstBindListener.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.dss.datamodel.table.listener; + +import com.webank.wedatasphere.dss.datamodel.table.event.BindLabelByTableEvent; +import com.webank.wedatasphere.dss.datamodel.table.event.TableFirstBindEvent; +import com.webank.wedatasphere.dss.datamodel.table.service.TableMaterializedHistoryService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableService; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.concurrent.TimeUnit; + +@Component +public class TableFirstBindListener { + private static final Logger LOGGER = LoggerFactory.getLogger(TableFirstBindListener.class); + + @Resource + private TableService tableService; + + @Resource + private TableMaterializedHistoryService tableMaterializedHistoryService; + + + @EventListener + @Async("taskExecutor") + public void firstBindTable(TableFirstBindEvent event) throws ErrorException, InterruptedException { + int count = 0; + do { + LOGGER.info("table id : {}, tableName : {}, user : {} wait 5s to bind ",event.getTableId(),event.getTableName(),event.getUser()); + TimeUnit.SECONDS.sleep(5); + if (tableMaterializedHistoryService.tableExists(event.getTableName(), event.getUser())) { + LOGGER.info("table id : {}, tableName : {}, user : {} exists bind",event.getTableId(),event.getTableName(),event.getUser()); + tableService.bind(event.getTableId(), event.getUser()); + count++; + break; + } + count++; + } while (count < 5); + LOGGER.info("table id : {}, tableName : {}, user : {} try bind {} times ",event.getTableId(),event.getTableName(),event.getUser(),count); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableLabelListener.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableLabelListener.java new file mode 100644 index 0000000000..f402be7b55 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableLabelListener.java @@ -0,0 +1,91 @@ +package com.webank.wedatasphere.dss.datamodel.table.listener; + +import com.webank.wedatasphere.dss.datamodel.center.common.constant.LabelConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.event.BindLabelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UnBindLabelEvent; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.event.BindLabelByTableEvent; +import com.webank.wedatasphere.dss.datamodel.table.event.UnBindLabelByTableEvent; +import com.webank.wedatasphere.dss.datamodel.table.event.UpdateBindLabelByTableEvent; +import jersey.repackaged.com.google.common.collect.Sets; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Arrays; +import java.util.Set; +import java.util.stream.Collectors; + +@Component +public class TableLabelListener { + private static final Logger LOGGER = LoggerFactory.getLogger(TableLabelListener.class); + + public static final String LABEL_SEPARATOR = LabelConstant.SEPARATOR; + + @Resource + private ApplicationEventPublisher publisher; + + @EventListener + @Async("taskExecutor") + public void bindLabelByTable(BindLabelByTableEvent event){ + if (preEvent(event.getTable())) return; + String labels = event.getTable().getLabel(); + String[] binds = StringUtils.split(labels,LABEL_SEPARATOR); + + Arrays.stream(binds).forEach(bind->{ + publishBind(event.getUser(),bind,event.getTable().getName()); + }); + } + + private boolean preEvent(DssDatamodelTable table) { + return StringUtils.isBlank(table.getLabel()); + } + + private void publishBind(String user,String labelName,String tableName){ + publisher.publishEvent(new BindLabelEvent(this,user,labelName,tableName)); + } + + private void publishUnBind(String user,String labelName,String tableName){ + publisher.publishEvent(new UnBindLabelEvent(this,user,labelName,tableName)); + } + + @EventListener + @Async("taskExecutor") + public void unBindLabelByTable(UnBindLabelByTableEvent event){ + if (preEvent(event.getTable())) return; + String labels = event.getTable().getLabel(); + String[] unBinds = StringUtils.split(labels,LABEL_SEPARATOR); + + Arrays.stream(unBinds).forEach(bind->{ + publishBind(event.getUser(),bind,event.getTable().getName()); + }); + } + + @EventListener + @Async("taskExecutor") + public void updateBindLabelByTable(UpdateBindLabelByTableEvent event){ + String tableName = event.getOri().getName(); + String bindLabels = event.getUpdateOne().getLabel(); + String unBindLabels = event.getOri().getLabel(); + Set bindSets = Sets.newHashSet(); + Set unBindSets = Sets.newHashSet(); + if (StringUtils.isNotBlank(bindLabels)){ + bindSets.addAll(Arrays.stream(StringUtils.split(bindLabels,LABEL_SEPARATOR)).collect(Collectors.toSet())); + } + if (StringUtils.isNotBlank(unBindLabels)){ + unBindSets.addAll(Arrays.stream(StringUtils.split(unBindLabels,LABEL_SEPARATOR)).collect(Collectors.toSet())); + } + + Set willBinds = bindSets.stream().filter(bind->!unBindSets.contains(bind)).collect(Collectors.toSet()); + Set willUnBinds = unBindSets.stream().filter(unBind->!bindLabels.contains(unBind)).collect(Collectors.toSet()); + LOGGER.info("bind labels : {}",willBinds); + willBinds.forEach(bind->publishBind(event.getUser(),bind,tableName)); + LOGGER.info("unBind labels : {}",willUnBinds); + willUnBinds.forEach(unBind->publishUnBind(event.getUser(),unBind,tableName)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableModelListener.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableModelListener.java new file mode 100644 index 0000000000..2e1fd7deed --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/listener/TableModelListener.java @@ -0,0 +1,147 @@ +package com.webank.wedatasphere.dss.datamodel.table.listener; + + +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.event.BindModelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UnBindModelEvent; +import com.webank.wedatasphere.dss.datamodel.table.dto.ModelTypeDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import com.webank.wedatasphere.dss.datamodel.table.event.*; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.context.event.EventListener; +import org.springframework.scheduling.annotation.Async; +import org.springframework.stereotype.Component; + +import javax.annotation.Resource; +import java.util.Optional; +import java.util.Set; +import java.util.function.Predicate; +import java.util.stream.Collectors; + +@Component +public class TableModelListener { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableModelListener.class); + + + @Resource + private ApplicationEventPublisher publisher; + + @EventListener + @Async("taskExecutor") + public void bindByTable(BindModelByTableEvent event){ + bindByTable(event.getUser(),event.getTable()); + } + + @EventListener + @Async("taskExecutor") + public void unBindByTable(UnBindModelByTableEvent event){ + unBindByTable(event.getUser(),event.getTable()); + } + + @Async("taskExecutor") + @EventListener + public void updateBindByTable(UpdateBindModelByTableEvent event){ + if (StringUtils.equals(event.getOrg().getName(),event.getUpdateOne().getName())){ + return; + } + String user = event.getUser(); + String tableName = event.getOrg().getName(); + + String orgLayerNameEn = event.getOrg().getWarehouseLayerNameEn(); + String updateLayerNameEn = event.getUpdateOne().getWarehouseLayerNameEn(); + //分层名称不同 则换绑 + if (!StringUtils.equals(orgLayerNameEn,updateLayerNameEn)){ + publishBind(user,null, tableName,updateLayerNameEn,ClassificationConstant.LAYER); + publishUnBind(user,null, tableName,orgLayerNameEn,ClassificationConstant.LAYER); + } + + + String orgThemeNameEn = event.getOrg().getWarehouseThemeNameEn(); + String updateThemeNameEn = event.getUpdateOne().getWarehouseThemeNameEn(); + //主题名称不同 则换绑 + if (!StringUtils.equals(orgThemeNameEn,updateThemeNameEn)){ + publishBind(user,null, tableName,updateThemeNameEn,ClassificationConstant.THEME); + publishUnBind(user,null, tableName,orgThemeNameEn,ClassificationConstant.THEME); + } + } + + + + + @Async("taskExecutor") + @EventListener + public void updateBindByColumns(UpdateBindModelByColumnsEvent event){ + Set orgModels = event.getUpdateColumns().stream().filter(filterNull()).map(c->new ModelTypeDTO(c.getModelType(),c.getModelNameEn(),c.getModelName())).collect(Collectors.toSet()); + Set updateModels = event.getOrgColumns().stream().filter(filterNull()).map(c->new ModelTypeDTO(c.getModelType(),c.getModelNameEn(),c.getModelName())).collect(Collectors.toSet()); + + //去重 获取绑定列表 + Set bindModels = updateModels.stream().filter(bindOne->!orgModels.contains(bindOne)).collect(Collectors.toSet()); + LOGGER.info("bindModels : {}",bindModels); + //去重 获取解绑列表 + Set unBindModels = orgModels.stream().filter(unBindOne->!updateModels.contains(unBindOne)).collect(Collectors.toSet()); + LOGGER.info("unBindModels : {}",unBindModels); + + bindByColumnsModel(event.getUser(),event.getTableName(),bindModels); + unBindByColumnsModel(event.getUser(), event.getTableName(), unBindModels); + } + + private void unBindByTable(String user,DssDatamodelTable deleteOne) { + publishUnBind(user,null, deleteOne.getName(), deleteOne.getWarehouseThemeNameEn(),ClassificationConstant.THEME); + publishUnBind(user,null, deleteOne.getName(), deleteOne.getWarehouseLayerNameEn(),ClassificationConstant.LAYER); + } + + private void bindByTable(String user,DssDatamodelTable newOne) { + publishBind(user,null, newOne.getName(), newOne.getWarehouseThemeNameEn(),ClassificationConstant.THEME); + publishBind(user,null, newOne.getName(), newOne.getWarehouseLayerNameEn(),ClassificationConstant.LAYER); + } + + private void publishBind(String user, String guid, String tableName, String modelName, ClassificationConstant modelType){ + publisher.publishEvent(new BindModelEvent(this,user,guid,tableName,modelName,modelType)); + } + + private void publishUnBind(String user, String guid, String tableName, String modelName, ClassificationConstant modelType){ + publisher.publishEvent(new UnBindModelEvent(this,user,guid,tableName,modelName,modelType)); + } + + @EventListener + @Async("taskExecutor") + public void bindByColumnsModel(BindModelByColumnsEvent event){ + bindByColumnsModel(event.getUser(),event.getTableName(),event.getColumns().stream().filter(filterNull()).map(c->new ModelTypeDTO(c.getModelType(),c.getModelNameEn(),c.getModelName())).collect(Collectors.toSet())); + } + + //过滤所有空值 + private Predicate filterNull() { + return c -> c.getModelType() != null && c.getModelName() != null && c.getModelNameEn() != null; + } + + @EventListener + @Async("taskExecutor") + public void unBindByColumnsModel(UnBindModelByColumnsEvent event){ + unBindByColumnsModel(event.getUser(),event.getTableName(),event.getColumns().stream().filter(filterNull()).map(c->new ModelTypeDTO(c.getModelType(),c.getModelNameEn(),c.getModelName())).collect(Collectors.toSet())); + } + + private void bindByColumnsModel(String user, String tableName, Set modelTypeDTOS){ + for (ModelTypeDTO model : modelTypeDTOS){ + Optional optional = ClassificationConstant.getClassificationConstantByType(model.getModelType()); + if (!optional.isPresent()){ + continue; + } + publishBind(user,null, tableName, model.getModelNameEn(),optional.get()); + } + } + + private void unBindByColumnsModel(String user, String tableName, Set modelTypeDTOS){ + for (ModelTypeDTO column : modelTypeDTOS){ + Optional optional = ClassificationConstant.getClassificationConstantByType(column.getModelType()); + if (!optional.isPresent()){ + continue; + } + publishUnBind(user,null, tableName, column.getModelNameEn(),optional.get()); + } + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchema.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchema.java new file mode 100644 index 0000000000..3aa6a73426 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchema.java @@ -0,0 +1,180 @@ +package com.webank.wedatasphere.dss.datamodel.table.materialized; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + + +public class HiveSchema { + + private Map columnMap = new HashMap(); + private List columnList = new ArrayList(); + private String tableName; + private String dataBase; + private String originalDataFormat; + private String storedType; + private boolean isExternal =false; + private String location; + private String comment; + public List partitionList = new ArrayList(); + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public void setExternal(boolean external) { + isExternal = external; + } + + public void setStoredType(String storedType) { + this.storedType = storedType; + } + + public String getStoredType() { + return storedType; + } + + public boolean isExternal() { + return isExternal; + } + + public String getDataBase() { + return dataBase; + } + + public void setDataBase(String dataBase) { + this.dataBase = dataBase; + } + + public List getPartitionColumns() { + return partitionList; + } + + public List getColumns() { + return columnList; + } + + public Column getColumn(String name) { + return columnMap.get(name); + } + + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + public String getTableName() { + return tableName; + } + + + public String getOriginalDataFormat() { + return originalDataFormat; + } + + public void setOriginalDataFormat(String originalDataFormat) { + this.originalDataFormat = originalDataFormat; + } + + public void addColumn(String name, String type, int length, int percision, boolean isPartition, boolean isPrimaryKey,String comment) { + Column column = new Column(name, type, length, percision, isPartition, isPrimaryKey,comment); + columnList.add(column); + columnMap.put(name, column); + if (isPartition) { + partitionList.add(column); + } + } + + + public static class Column { + String name; + String type; + int length; + int percision; + private String comment; + boolean isPartition; + boolean isPrimaryKey; + + public Column(String name, String type, int length, int percision, boolean isPartition, boolean isPrimaryKey,String comment) { + super(); + this.name = name; + this.type = type; + this.length = length; + this.percision = percision; + this.isPartition = isPartition; + this.isPrimaryKey = isPrimaryKey; + this.comment = comment; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public int getLength() { + return length; + } + + public void setLength(int length) { + this.length = length; + } + + public int getPercision() { + return percision; + } + + public void setPercision(int percision) { + this.percision = percision; + } + + public boolean isPartition() { + return isPartition; + } + + public void setPartition(boolean isPartition) { + this.isPartition = isPartition; + } + + public boolean isPrimaryKey() { + return isPrimaryKey; + } + + public void setPrimaryKey(boolean isPrimaryKey) { + this.isPrimaryKey = isPrimaryKey; + } + + + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchemaDdlBuilder.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchemaDdlBuilder.java new file mode 100644 index 0000000000..2796e6283b --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/materialized/HiveSchemaDdlBuilder.java @@ -0,0 +1,182 @@ +package com.webank.wedatasphere.dss.datamodel.table.materialized; + +import com.webank.wedatasphere.dss.datamodel.table.materialized.HiveSchema.Column; +import org.apache.commons.lang3.StringUtils; + +import java.util.List; + + +public class HiveSchemaDdlBuilder { + public static String lineSeparator = System.getProperty("line.separator"); + + private String fieldsTerminated = "\'\\t\'"; + + private String linesTerminated = "\'\\n\'"; + + private HiveSchema hiveSchema; + + private boolean isExternal = false; + + public HiveSchemaDdlBuilder() { + hiveSchema = new HiveSchema(); + } + + + public HiveSchemaDdlBuilder tableName(String tableName) { + hiveSchema.setTableName(tableName); + return this; + } + + public HiveSchemaDdlBuilder storedType(String storedType) { + hiveSchema.setStoredType(storedType); + return this; + } + + public HiveSchemaDdlBuilder location(String location) { + hiveSchema.setLocation(location); + return this; + } + + public HiveSchemaDdlBuilder comment(String comment) { + hiveSchema.setComment(comment); + return this; + } + + + public HiveSchemaDdlBuilder withExternal() { + hiveSchema.setExternal(true); + return this; + } + + public HiveSchemaDdlBuilder fieldsTerminated(String fieldsTerminated) { + this.fieldsTerminated = fieldsTerminated; + return this; + } + + public HiveSchemaDdlBuilder linesTerminated(String linesTerminated) { + this.linesTerminated = linesTerminated; + return this; + } + + public HiveSchemaDdlBuilder dataBase(String dataBase) { + hiveSchema.setDataBase(dataBase); + return this; + } + + public HiveSchemaDdlBuilder addColumn(String name, String type, int length, int percision, boolean isPartition, boolean isPrimaryKey, String comment) { + hiveSchema.addColumn(name, type, length, percision, isPartition, isPrimaryKey, comment); + return this; + } + + public void addColumn(String name, String type, boolean isPartition, String comment) { + addColumn(name,type,0,0,isPartition,false,comment); + } + + public String createTableString() { + StringBuilder builder = new StringBuilder(); + + builder.append("CREATE "); + + if (hiveSchema.isExternal()) { + builder.append("EXTERNAL "); + } + +// builder.append("TABLE " + hiveSchema.getDataBase() + "." + hiveSchema.getTableName() +// + lineSeparator); + builder.append("TABLE IF NOT EXISTS ").append(hiveSchema.getTableName()).append(lineSeparator); + + + builder.append("( "); + boolean isFirstColumn = true; + for (HiveSchema.Column c : hiveSchema.getColumns()) { + if (!c.isPartition()) { + if (isFirstColumn) { + isFirstColumn = false; + } else { + builder.append(","); + } + builder.append(lineSeparator); + builder.append(" ").append(c.getName()).append(" ").append(c.getType()); + if (c.getComment() != null && !c.getComment().equals("")) { + builder.append(" ").append("COMMENT '").append(c.getComment()).append("'"); + } + } + } + + builder.append(") ").append(lineSeparator); + + if (hiveSchema.getComment() != null && !hiveSchema.getComment().equals("")) { + builder.append("COMMENT '").append(hiveSchema.getComment()).append("'").append(lineSeparator); + } + + List partitionColumns = hiveSchema.getPartitionColumns(); + if (partitionColumns.size() > 0) { + builder.append("PARTITIONED BY ("); + + isFirstColumn = true; + for (Column c : partitionColumns) { + if (isFirstColumn) { + isFirstColumn = false; + } else { + builder.append(", "); + } + builder.append(c.getName()).append(" ").append(c.getType()); + } + + builder.append(")").append(lineSeparator); + } + + if (hiveSchema.getStoredType() != null) { + builder.append("STORED AS ").append(hiveSchema.getStoredType()).append(lineSeparator); + } + + if (hiveSchema.isExternal()&&StringUtils.isNotBlank(hiveSchema.getLocation())) { + builder.append("LOCATION ").append("'").append(hiveSchema.getLocation()).append("'"); + } + + + builder.append(";"); + + return builder.toString(); + } + + private static String convertColumnType(Column column) { + String dbType = column.getType().toUpperCase(); + + if (dbType.equals("STRING") || dbType.equals("VARCHAR2") + || dbType.equals("CHAR") || dbType.equals("VARCHAR") + || dbType.equals("CLOB")) { + return "STRING"; + } else if (dbType.equals("NUMBER") || dbType.equals("DECIMAL") + || dbType.equals("BYTEINT") || dbType.equals("SMALLINT") + || dbType.equals("INTEGER") || dbType.equals("BIGINT") + || dbType.equals("INT") || dbType.equals("FLOAT")) { + if (column.getPercision() == 0) { + if (column.getLength() > 18) { + return "STRING"; + } else if (column.getLength() > 9 || dbType.equals("BIGINT")) { + return "BIGINT"; + } else if (column.getLength() > 4 || dbType.equals("INTEGER")) { + return "INT"; + } else if (column.getLength() > 2 || dbType.equals("SMALLINT")) { + return "SMALLINT"; + } else { + return "TINYINT"; + } + } else { + if (column.getLength() > 17) { + return "STRING"; + } else { + return "DOUBLE"; + } + } + + } else if (dbType.equals("OTHERDATE") || dbType.equals("DATE") + || dbType.equals("DATETIME") || dbType.equals("TIMESTAMP")) { + return "TIMESTAMP"; + } else { + throw new RuntimeException("Currently doesn't support " + dbType + " for column " + column.getName()); + } + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/restful/TableRestfulApi.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/restful/TableRestfulApi.java new file mode 100644 index 0000000000..db80cf93cc --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/restful/TableRestfulApi.java @@ -0,0 +1,565 @@ +package com.webank.wedatasphere.dss.datamodel.table.restful; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.AuthenticationClientStrategy; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseReferenceService; +import com.webank.wedatasphere.dss.datamodel.table.service.LabelService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableService; +import com.webank.wedatasphere.dss.datamodel.table.vo.*; +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient; +import com.webank.wedatasphere.dss.framework.workspace.client.request.GetWorkspaceUsersAction; +import com.webank.wedatasphere.dss.framework.workspace.client.response.GetWorkspaceUsersResult; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.client.GovernanceDwRemoteClient; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.annotation.Resource; +import javax.servlet.http.HttpServletRequest; +import java.io.IOException; + + + +@RequestMapping(path = "/datamodel", produces = {"application/json"}) +@RestController +public class TableRestfulApi implements AuthenticationClientStrategy { + + + private static final Logger LOGGER = LoggerFactory.getLogger(TableRestfulApi.class); + + + @Autowired + private TableService tableService; + + + @Resource + private LabelService labelService; + + + @Autowired + private GovernanceDwRemoteClient governanceDwRemoteClient; + + + @Resource + private DataWarehouseReferenceService dataWarehouseReferenceService; + + @Resource + private LinkisWorkSpaceRemoteClient linkisWorkSpaceRemoteClient; + + /** + * 新增 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables",method = RequestMethod.POST) + public Message add(HttpServletRequest req, @RequestBody TableAddVO vo) throws ErrorException { + vo.setCreator(getStrategyUser(req)); + LOGGER.info("tablesAddVO : {}", vo); + return Message.ok().data("id", tableService.addTable(vo)); + } + + + /** + * 更新 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables/{id}",method = RequestMethod.PUT) + public Message update(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody TableUpdateVO vo) throws ErrorException { + vo.setCreator(getStrategyUser(req)); + LOGGER.info("update id : {}, tableUpdateVO : {}", id, vo); + return Message.ok().data("count", tableService.updateTable(id, vo)); + } + + /** + * 删除 + * + * @param req + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables/{id}",method = RequestMethod.DELETE) + public Message delete(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("delete id : {}", id); + return Message.ok().data("count", tableService.deleteTable(id)); + } + + + /** + * 主动绑定 + * + * @param req + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables/bind/{id}",method = RequestMethod.PUT) + public Message bind(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("bind id : {}", id); + tableService.tryBind(id); + return Message.ok(); + } + + + /** + * 查看 + * + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/tables/{id}",method = RequestMethod.GET) + public Message query(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("query id : {}", id); + return Message.ok().data("detail", tableService.queryById(id)); + } + + + /** + * 按表名搜索查看 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/name",method = RequestMethod.POST) + public Message queryName(HttpServletRequest req, @RequestBody TableQueryOneVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("query vo : {}", vo); + return Message.ok().data("detail", tableService.queryByName(vo)); + } + + + /** + * 分页搜索 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/list",method = RequestMethod.POST) + public Message list(HttpServletRequest req, @RequestBody TableListVO vo) { + vo.setUser(getStrategyUser(req)); + LOGGER.info("list vo : {}", vo); + return tableService.list(vo); + } + + + /** + * 新增版本 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables/versions/{id}",method = RequestMethod.POST) + public Message addVersion(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody TableVersionAddVO vo) throws Exception { + vo.setCreator(getStrategyUser(req)); + LOGGER.info("tableVersionAddVO : {}", vo); + return Message.ok().data("count", tableService.addTableVersion(id, vo)); + } + + + /** + * 回退指定版本 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/tables/versions/rollback",method = RequestMethod.POST) + public Message versionRollBack(HttpServletRequest req, @RequestBody TableVersionRollBackVO vo) throws Exception { + vo.setUser(getStrategyUser(req)); + LOGGER.info("tableVersionRollBackVO : {}", vo); + return Message.ok().data("count", tableService.versionRollBack(vo)); + } + + + /** + * 搜索表版本历史 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/versions/list",method = RequestMethod.POST) + public Message tableVersionsList(HttpServletRequest req, @RequestBody TableVersionQueryVO vo) { + LOGGER.info("version list vo : {}", vo); + return tableService.listTableVersions(vo); + } + + +// /** +// * 相关主题可选列表 +// * +// * @param req +// * @return +// */ +// @POST +// @Path("/tables/themes/list") +// public Message tableThemesList(HttpServletRequest req) { +// ListDwThemeDomainAction action = ListDwThemeDomainAction.builder().setUser(getStrategyUser(req)).setIsAvailable(true).build(); +// return Message.messageToResponse(Message.ok().data("list", governanceDwRemoteClient.listThemeDomains(action).getAll())); +// } + + + /** + * 主题引用情况 + * + * @param req + * @return + */ + @RequestMapping(value = "/themes/reference/{name}",method = RequestMethod.GET) + public Message themesReference(HttpServletRequest req, @PathVariable("name") String name) { + LOGGER.info("themes reference name : {}", name); + return Message.ok().data("result", dataWarehouseReferenceService.themeReferenceCount(name)); + } + +// /** +// * 相关分层 +// * +// * @param req +// * @return +// */ +// @POST +// @Path("/tables/layers/list") +// public Message tableLayerList(HttpServletRequest req) { +// ListDwLayerAction action = ListDwLayerAction.builder().setIsAvailable(true).setUser(getStrategyUser(req)).build(); +// return Message.messageToResponse(Message.ok().data("list", governanceDwRemoteClient.listLayers(action).getAll())); +// } + + /** + * 分层引用情况 + * + * @param req + * @return + */ + @RequestMapping(value = "/layers/reference/{name}",method = RequestMethod.GET) + public Message layersReference(HttpServletRequest req, @PathVariable("name") String name) { + LOGGER.info("layers reference name : {}", name); + return Message.ok().data("result", dataWarehouseReferenceService.layerReferenceCount(name)); + } + + /** + * 周期引用情况 + * + * @param req + * @return + */ + @RequestMapping(value = "/cycles/reference/{name}",method = RequestMethod.GET) + public Message cycleReference(HttpServletRequest req, @PathVariable("name") String name) { + LOGGER.info("cycles reference name : {}", name); + return Message.ok().data("result", dataWarehouseReferenceService.cycleReferenceCount(name)); + } + + /** + * 修饰词引用情况 + * + * @param req + * @return + */ + + @RequestMapping(value = "/modifiers/reference/{name}",method = RequestMethod.GET) + public Message modifiersReference(HttpServletRequest req, @PathVariable("name") String name) { + LOGGER.info("modifiers reference name : {}", name); + return Message.ok().data("result", dataWarehouseReferenceService.modifierReferenceCount(name)); + } + + /** + * 数据库列表 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/databases/list",method = RequestMethod.POST) + public Message tableDataBasesList(HttpServletRequest req, @RequestBody TableDatabasesQueryVO vo) { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table databases vo : {}", vo); + return tableService.listDataBases(vo); + } + + + /** + * 收藏 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/collect",method = RequestMethod.POST) + public Message tableCollect(HttpServletRequest req, @RequestBody TableCollectVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table collection vo : {}", vo); + return Message.ok().data("count", tableService.tableCollect(vo)); + } + + /** + * 取消收藏 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/collect/cancel",method = RequestMethod.POST) + public Message tableCancelCollect(HttpServletRequest req, @RequestBody TableCollectCancelVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table collection cancel vo : {}", vo); + return Message.ok().data("count", tableService.tableCancel(vo)); + } + + + /** + * 我的收藏列表 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/collect/list",method = RequestMethod.POST) + public Message tableCollectList(HttpServletRequest req, @RequestBody TableCollectQueryVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table collection list vo : {}", vo); + return tableService.tableCollections(vo); + } + + /** + * 表数据预览 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/data/preview",method = RequestMethod.POST) + public Message tableDataPreview(HttpServletRequest req, @RequestBody TableDataPreviewVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table data preview : {}", vo); + return tableService.previewData(vo); + } + + + /** + * 执行建表 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/create",method = RequestMethod.POST) + public Message tableCreate(HttpServletRequest req, @RequestBody TableCreateVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table create vo : {}", vo); + return Message.ok().data("count", tableService.tableCreate(vo)); + } + + /** + * 生成建表语句 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/create/sql",method = RequestMethod.POST) + public Message tableCreateSql(HttpServletRequest req, @RequestBody TableCreateSqlVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table create sql vo : {}", vo); + return Message.ok().data("detail", tableService.tableCreateSql(vo)); + } + + + /** + * 字典列表 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/dictionaries/list",method = RequestMethod.POST) + public Message tableDictionaryList(HttpServletRequest req, @RequestBody TableDictionaryListVO vo) { + LOGGER.info("table dictionaries list vo : {}", vo); + return tableService.dictionaryList(vo); + } + + + /** + * 新增字段 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/columns/add",method = RequestMethod.POST) + public Message tableColumnsAdd(HttpServletRequest req, @RequestBody TableColumnsAddVO vo) throws ErrorException { + LOGGER.info("table column add vo : {}", vo); + return Message.ok().data("count", tableService.addTableColumn(vo)); + } + + /** + * 字段绑定模型 + * + * @param req + * @param vo + * @return + */ + @RequestMapping(value = "/tables/columns/bind/{columnId}",method = RequestMethod.POST) + public Message tableColumnBind(HttpServletRequest req, @PathVariable("columnId") Long columnId, @RequestBody TableColumnBindVO vo) throws ErrorException { + LOGGER.info("table column bind model columnId : {}, vo : {}", columnId, vo); + return Message.ok().data("count", tableService.tableColumnBind(columnId, vo)); + } + + /** + * 分区统计信息 + * + * @param vo + * @return + */ + @RequestMapping(value = "/tables/partition/stats",method = RequestMethod.POST) + public Message tblPartitionStats(HttpServletRequest req, TblPartitionStatsVO vo) { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table partition stats vo : {}", vo); + return tableService.listTablePartitionStats(vo); + } + + + /** + * 获取当前用户 + * + * @param req + * @return + */ + @RequestMapping(value = "/current/user",method = RequestMethod.POST) + public Message currentUser(HttpServletRequest req) { + return Message.ok().data("user", getStrategyUser(req)); + } + + + /** + * 检测表是否有数据 + * + * @param req + * @return + */ + @RequestMapping(value = "/tables/check/data",method = RequestMethod.POST) + public Message tableCheckData(HttpServletRequest req, @RequestBody TableCheckDataVO vo) throws ErrorException { + vo.setUser(getStrategyUser(req)); + LOGGER.info("table partition stats vo : {}", vo); + return Message.ok().data("status", tableService.tableCheckData(vo)); + } + + + /** + * 新增标签 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/labels",method = RequestMethod.POST) + public Message addLabels(HttpServletRequest req, @RequestBody LabelAddVO vo) throws ErrorException { + LOGGER.info("addLabels vo : {}", vo); + return Message.ok().data("id", labelService.add(vo)); + } + + + /** + * 更新标签 + * + * @param req + * @param vo + * @return + * @throws IOException + */ + @RequestMapping(value = "/labels/{id}",method = RequestMethod.POST) + public Message updateLabels(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody LabelUpdateVO vo) throws ErrorException { + LOGGER.info("updateLabels id : {}, vo : {}", id, vo); + return Message.ok().data("count", labelService.update(id, vo)); + } + + /** + * 删除标签 + * + * @param req + * @return + * @throws IOException + */ + @RequestMapping(value = "/labels/{id}",method = RequestMethod.DELETE) + public Message deleteLabels(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("deleteLabels id : {}", id); + return Message.ok().data("count", labelService.delete(id)); + } + + /** + * 查看标签 + * + * @param req + * @param id + * @return + */ + @RequestMapping(value = "/labels/{id}",method = RequestMethod.GET) + public Message queryLabels(HttpServletRequest req, @PathVariable("id") Long id) throws ErrorException { + LOGGER.info("queryLabels id : {}", id); + return Message.ok().data("detail", labelService.query(id)); + } + + + /** + * 标签搜索 + * + * @param req + * @return + */ + @RequestMapping(value = "/labels/list",method = RequestMethod.POST) + public Message listLabels(HttpServletRequest req, @RequestBody LabelsQueryVO vo) throws ErrorException { + LOGGER.info("listLabels vo : {}", vo); + return labelService.list(vo); + } + + /** + * 启用/禁用 + * + * @param req + * @param id + * @param vo + * @return + */ + @RequestMapping(value = "/labels/enable/{id}",method = RequestMethod.PUT) + public Message enableLabel(HttpServletRequest req, @PathVariable("id") Long id, @RequestBody LabelEnableVO vo) throws ErrorException { + LOGGER.info("enableLabel id : {}, vo : {}", id, vo); + return Message.ok().data("count", labelService.enable(id, vo)); + } + + + /** + * 查询用户 + * + * @param req + * @param workspaceId + * @return + */ + @RequestMapping(value = "/users/{workspaceId}",method = RequestMethod.GET) + public Message users(HttpServletRequest req, @PathVariable("workspaceId") String workspaceId) throws ErrorException { + LOGGER.info("users workspaceId : {}", workspaceId); + GetWorkspaceUsersResult result = linkisWorkSpaceRemoteClient.getWorkspaceUsers(GetWorkspaceUsersAction.builder().setUser(getStrategyUser(req)).setWorkspaceId(workspaceId).build()); + return Message.ok().data("users", result.getWorkspaceUserList()); + } + + + /** + * 查询角色 + * + * @param req + * @param workspaceId + * @return + */ + @RequestMapping(value = "/roles/{workspaceId}",method = RequestMethod.GET) + public Message roles(HttpServletRequest req, @PathVariable("workspaceId") String workspaceId) throws ErrorException { + LOGGER.info("roles workspaceId : {}", workspaceId); + GetWorkspaceUsersResult result = linkisWorkSpaceRemoteClient.getWorkspaceUsers(GetWorkspaceUsersAction.builder().setUser(getStrategyUser(req)).setWorkspaceId(workspaceId).build()); + return Message.ok().data("users", result.getWorkspaceRoleList()); + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/LabelService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/LabelService.java new file mode 100644 index 0000000000..1e2cd63950 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/LabelService.java @@ -0,0 +1,77 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.dto.LabelQueryDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelLabel; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelAddVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelEnableVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelUpdateVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelsQueryVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; + +public interface LabelService extends IService { + + /** + * 新增标签 + * @param vo + * @return + * @throws ErrorException + */ + Long add(LabelAddVO vo) throws ErrorException; + + + /** + * 更新标签 + * @return + * @throws ErrorException + */ + int update(Long id, LabelUpdateVO vo) throws ErrorException; + + + /** + * 查看标签 + * @param id + * @return + * @throws ErrorException + */ + LabelQueryDTO query(Long id) throws ErrorException; + + + /** + * 启用/禁用 + * @param id + * @param vo + * @return + * @throws ErrorException + */ + int enable(Long id, LabelEnableVO vo) throws ErrorException; + + + /** + * 删除标签 + * @param id + * @return + * @throws ErrorException + */ + int delete(Long id) throws ErrorException; + + + /** + * 查询标签 + * @param vo + * @return + * @throws ErrorException + */ + Message list(LabelsQueryVO vo) throws ErrorException; + + + /** + * 标签引用主题统计 + * @param themeName + * @return + * @throws ErrorException + */ + int labelThemeReferenceCount(String themeName); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableCollectService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableCollectService.java new file mode 100644 index 0000000000..3ee1cfb4af --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableCollectService.java @@ -0,0 +1,38 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableCollcetion; +import com.webank.wedatasphere.dss.datamodel.table.vo.TableCollectVO; + +public interface TableCollectService extends IService { + + /** + * 收藏目标表 + * + * @param user + * @param targetTable + * @return + */ + Integer tableCollect(String user, DssDatamodelTable targetTable); + + + /** + * 收藏上传表信息 + * @param vo + * @return + */ + Integer tableCollect(TableCollectVO vo); + + + /** + * 取消收藏 + * @param user + * @param tableName + * @return + */ + Integer tableCollectCancel(String user, String tableName); + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableColumnsService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableColumnsService.java new file mode 100644 index 0000000000..a875f11256 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableColumnsService.java @@ -0,0 +1,77 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ModeType; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import org.apache.linkis.common.exception.ErrorException; + +import java.util.List; + +public interface TableColumnsService extends IService { + + /** + * 批量新增表字段 + * @param columnsList + * @return + */ + int batchInsert(Long tableId,List columnsList) throws ErrorException; + + + /** + * 批量更新表字段 + * @param tableId + * @param columnsList + * @return + * @throws ErrorException + */ + int batchUpdate(Long tableId,List columnsList) throws ErrorException; + + + /** + * 表字段列表 + * @param tableId + * @return + * @throws ErrorException + */ + List listByTableId(Long tableId); + + + /** + * 根据表id删除字段 + * @param tableId + * @return + * @throws ErrorException + */ + Integer deleteByTableId(Long tableId)throws ErrorException; + + + /** + * 新增数据表字段 + * @param column + * @return + */ + Integer addColumn(DssDatamodelTableColumns column); + + + + Integer tableColumnBind(Long id, Integer modelType, String modelName,String modelNameEn) throws ErrorException; + + + /** + * 模型引用计数 + * @param modeType + * @param name + * @return + */ + int modelReferenceCount(ModeType modeType, String name); + + /** + * 模型英文引用计数 + * @param modeType + * @param name + * @return + */ + int modelReferenceCountEn(ModeType modeType, String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableDictionaryService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableDictionaryService.java new file mode 100644 index 0000000000..cd368bd398 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableDictionaryService.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelDictionary; + +import java.util.List; + +public interface TableDictionaryService extends IService { + + /** + * 根据类型搜索字典 + * @param type + * @return + */ + List listByType(String type); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableMaterializedHistoryService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableMaterializedHistoryService.java new file mode 100644 index 0000000000..5541713e5f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableMaterializedHistoryService.java @@ -0,0 +1,97 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.center.common.dto.CreateTableDTO; +import com.webank.wedatasphere.dss.datamodel.table.dto.HiveTblSimpleInfoDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableMaterializedHistory; +import org.apache.linkis.common.exception.ErrorException; + +import java.util.Optional; + +public interface TableMaterializedHistoryService extends IService { + + /** + * 物化表结构 + * @param current + * @param user + * @return + */ + Integer materializedTable(DssDatamodelTable current, String user) throws ErrorException; + + + /** + * 生成建表语句 + * @param current + * @return + */ + String generateSql(DssDatamodelTable current); + + + /** + * 检查是否有数据 + * @param current + * @param user + * @throws ErrorException + */ + void checkData(DssDatamodelTable current, String user) throws ErrorException; + + + /** + * 判断是否有数据 + * + * @param tableName @return + * @param user + */ + boolean hasData(String tableName, String user); + + + /** + * + * @param tableName + * @param user + * @throws ErrorException + * @return + */ + boolean tableExists(String tableName, String user) throws ErrorException; + + + /** + * 删除表 + * @param tableName + * @param user + * @return + * @throws ErrorException + */ + boolean dropTable(String tableName, String user) throws ErrorException; + + + /** + * 创建表 + * @param current + * @param user + * @return + * @throws ErrorException + */ + CreateTableDTO createTable(DssDatamodelTable current, String user) throws ErrorException; + + + /** + * 查看是否物化 + * @param tableName + * @param version + * @return + * @throws ErrorException + */ + boolean isMaterialized(String tableName, String version) throws ErrorException; + + + /** + * 根据表名查询查询资产 + * @param tableName + * @return + * @throws ErrorException + */ + Optional getHiveTblSimpleInfoByName(String tableName, String user)throws ErrorException; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableService.java new file mode 100644 index 0000000000..ef3b0235cd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableService.java @@ -0,0 +1,267 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.dto.TableQueryDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.vo.*; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; + +public interface TableService extends IService { + + /** + * 新增表 + * @param vo + * @return + */ + Long addTable(TableAddVO vo) throws ErrorException; + + + /** + * 更新 + * + * @param id + * @param vo + * @return + * @throws ErrorException + */ + int updateTable(Long id, TableUpdateVO vo) throws ErrorException; + + + /** + * 按表名搜索 + * @param vo + * @return + */ + TableQueryDTO queryByName(TableQueryOneVO vo)throws ErrorException; + + + /** + * 按id搜索 + * @param id + * @return + */ + TableQueryDTO queryById(Long id)throws ErrorException; + + + /** + * 新增版本 + * @param id + * @return + * @throws ErrorException + */ + Integer addTableVersion(Long id, TableVersionAddVO vo) throws ErrorException; + + /** + * 版本回退 + * @param vo + * @return + * @throws ErrorException + */ + Integer versionRollBack(TableVersionRollBackVO vo) throws ErrorException; + + + /** + * 查询历史版本列表 + * @param vo + * @return + */ + Message listTableVersions(TableVersionQueryVO vo); + + + /** + * 添加我的收藏 + * @param vo + * @return + */ + Integer tableCollect(TableCollectVO vo) throws ErrorException; + + /** + * 取消收藏 + * @param vo + * @return + * @throws ErrorException + */ + Integer tableCancel(TableCollectCancelVO vo) throws ErrorException; + + /** + * 基于收藏搜索 + * @param vo + * @return + * @throws ErrorException + */ + Message tableCollections(TableCollectQueryVO vo) throws ErrorException; + + /** + * + * @param vo + * @return + * @throws ErrorException + */ + Message dictionaryList(TableDictionaryListVO vo); + + + /** + * 增加字段 + * @param vo + * @return + */ + Integer addTableColumn(TableColumnsAddVO vo) throws ErrorException; + + + /** + * 字段绑定模型信息 + * @param columnId + * @param vo + * @return + */ + Integer tableColumnBind(Long columnId, TableColumnBindVO vo)throws ErrorException; + + + /** + * 执行建表 + * @param vo + * @return + * @throws ErrorException + */ + Integer tableCreate(TableCreateVO vo) throws ErrorException; + + + + /** + * 生成建表语句 + * @param vo + * @return + * @throws ErrorException + */ + String tableCreateSql(TableCreateSqlVO vo) throws ErrorException; + + + /** + * table 列表 + * @param vo + * @return + * @throws ErrorException + */ + Message list(TableListVO vo); + + + /** + * 分区统计信息 + * @param vo + * @return + */ + Message listTablePartitionStats(TblPartitionStatsVO vo); + + + /** + * 库列表 + * @return + * @param vo + */ + Message listDataBases(TableDatabasesQueryVO vo); + + + /** + * 数据预览 + * @param vo + * @return + */ + Message previewData(TableDataPreviewVO vo) throws ErrorException; + + + /** + * 检测表状态 + * @param vo + * @return + */ + Integer tableCheckData(TableCheckDataVO vo) throws ErrorException; + + + /** + * 主题引用情况 + * @param name + * @return + */ + int tableThemeReferenceCount(String name); + + /** + * 分层引用情况 + * @param name + * @return + */ + int tableLayerReferenceCount(String name); + + + /** + * 周期引用情况 + * @param name + * @return + */ + int tableCycleReferenceCount(String name); + + + /** + * 修饰词引用情况 + * @param name + * @return + */ + int tableModifierReferenceCount(String name); + + + /** + * 维度引用情况 + * @param name + * @return + */ + int tableDimensionReferenceCount(String name); + + + /** + * 度量引用情况 + * @param name + * @return + */ + int tableMeasureReferenceCount(String name); + + + /** + * 指标引用情况 + * @param name + * @return + */ + int tableIndicatorReferenceCount(String name); + + /** + * 主动绑定模型 + * @param id + * @param user + */ + void bind(long id, String user) throws ErrorException; + + + /** + * 主动绑定模型 + * @param id + * + */ + void tryBind(long id) throws ErrorException; + + + /** + * 删除逻辑表 + * @param id + * @return + * @throws ErrorException + */ + int deleteTable(Long id) throws ErrorException; + + + /** + * 标签引用情况 + * @param name + * @return + */ + int tableLabelReferenceCount(String name); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableStatsService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableStatsService.java new file mode 100644 index 0000000000..9c211b3d5e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableStatsService.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableStats; + +public interface TableStatsService extends IService { + + /** + * 搜索指定版本表指定版本统计信息 + * @param tableName + * @return + */ + DssDatamodelTableStats queryByTableName(String tableName); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableVersionService.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableVersionService.java new file mode 100644 index 0000000000..c30dc28afd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/TableVersionService.java @@ -0,0 +1,61 @@ +package com.webank.wedatasphere.dss.datamodel.table.service; + +import com.baomidou.mybatisplus.extension.service.IService; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableVersion; + +import java.util.List; + + +public interface TableVersionService extends IService { + + /** + * 根据表名称查找最大版本 + * @param name + * @return + */ + String findLastVersion(String name); + + + /** + * 增加新版本 + * @param orgVersion + * @param orgColumns + * @return + */ + Long addOlderVersion(DssDatamodelTable orgVersion, List orgColumns); + + + + /** + * 查询指定版本 + * @param name + * @param version + * @return + */ + DssDatamodelTableVersion findBackup(String name,String version); + + + /** + * 表内容引用情况 + * @param content + * @return + */ + List tableContentReference(String content); + + + /** + * 字段内容引用情况 + * @param content + * @return + */ + List tableColumnsReference(String content); + + + /** + * 表多重引用 + * @return + */ + List tableContentMultipleReference(String content); +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseLabelReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseLabelReferenceServiceImpl.java new file mode 100644 index 0000000000..0f6eb76cdc --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseLabelReferenceServiceImpl.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseLabelReferenceService; +import com.webank.wedatasphere.dss.datamodel.table.service.LabelService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseLabelReferenceServiceImpl implements DataWarehouseLabelReferenceService { + + @Resource + private LabelService labelService; + + @Override + public int labelThemeReferenceCount(String name) { + return labelService.labelThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseReferenceServiceImpl.java new file mode 100644 index 0000000000..ada8079393 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseReferenceServiceImpl.java @@ -0,0 +1,50 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.webank.wedatasphere.dss.datamodel.center.common.service.*; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseReferenceServiceImpl implements DataWarehouseReferenceService { + + @Resource + private DataWarehouseTableReferenceService tableReferenceService; + + @Resource + private DataWarehouseIndicatorReferenceService indicatorReferenceService; + + @Resource + private DataWarehouseMeasuredReferenceService measuredReferenceService; + + @Resource + private DataWarehouseDimensionReferenceService dimensionReferenceService; + + @Resource + private DataWarehouseLabelReferenceService labelReferenceService; + + @Override + public int cycleReferenceCount(String name) { + return tableReferenceService.tableCycleReferenceCount(name) + indicatorReferenceService.indicatorCycleReferenceCount(name); + } + + @Override + public int layerReferenceCount(String name) { + return tableReferenceService.tableLayerReferenceCount(name) + indicatorReferenceService.indicatorLayerReferenceCount(name); + } + + @Override + public int modifierReferenceCount(String name) { + return tableReferenceService.tableModifierReferenceCount(name) + indicatorReferenceService.indicatorModifierReferenceCount(name); + } + + @Override + public int themeReferenceCount(String name) { + return tableReferenceService.tableThemeReferenceCount(name) + + indicatorReferenceService.indicatorThemeReferenceCount(name) + + dimensionReferenceService.dimensionThemeReferenceCount(name) + + measuredReferenceService.measureThemeReferenceCount(name) + + labelReferenceService.labelThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseTableReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseTableReferenceServiceImpl.java new file mode 100644 index 0000000000..2d6bd5d183 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DataWarehouseTableReferenceServiceImpl.java @@ -0,0 +1,34 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DataWarehouseTableReferenceService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DataWarehouseTableReferenceServiceImpl implements DataWarehouseTableReferenceService { + + @Resource + private TableService tableService; + + @Override + public int tableLayerReferenceCount(String name) { + return tableService.tableLayerReferenceCount(name); + } + + @Override + public int tableModifierReferenceCount(String name) { + return tableService.tableModifierReferenceCount(name); + } + + @Override + public int tableThemeReferenceCount(String name) { + return tableService.tableThemeReferenceCount(name); + } + + @Override + public int tableCycleReferenceCount(String name) { + return tableService.tableCycleReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DatamodelTableReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DatamodelTableReferenceServiceImpl.java new file mode 100644 index 0000000000..6ae88cb741 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/DatamodelTableReferenceServiceImpl.java @@ -0,0 +1,35 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelTableReferenceService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class DatamodelTableReferenceServiceImpl implements DatamodelTableReferenceService { + + @Resource + private TableService tableService; + + @Override + public int tableDimensionReferenceCount(String name) { + return tableService.tableDimensionReferenceCount(name); + } + + @Override + public int tableIndicatorReferenceCount(String name) { + return tableService.tableIndicatorReferenceCount(name); + } + + @Override + public int tableMeasuredReferenceService(String name) { + return tableService.tableMeasureReferenceCount(name); + } + + @Override + public int tableLabelReferenceCount(String name) { + return tableService.tableLabelReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/LabelServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/LabelServiceImpl.java new file mode 100644 index 0000000000..dc55e5b22a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/LabelServiceImpl.java @@ -0,0 +1,203 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.gson.Gson; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.event.CreateLabelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.DeleteLabelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.event.UpdateLabelEvent; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.service.AssertsSyncService; +import com.webank.wedatasphere.dss.datamodel.center.common.service.DatamodelReferencService; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelLabelMapper; +import com.webank.wedatasphere.dss.datamodel.table.dto.LabelQueryDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelLabel; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.service.LabelService; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelAddVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelEnableVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelUpdateVO; +import com.webank.wedatasphere.dss.datamodel.table.vo.LabelsQueryVO; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.stream.Collectors; + +@Service +public class LabelServiceImpl extends ServiceImpl implements LabelService { + + private static final Logger LOGGER = LoggerFactory.getLogger(LabelServiceImpl.class); + + private final Gson gson = new Gson(); + + @Resource + private DatamodelReferencService datamodelReferencService; + + @Resource + private ModelMapper modelMapper; + + @Resource + private AssertsSyncService assertsSyncService; + + @Override + @Transactional(rollbackFor = Exception.class) + public Long add(LabelAddVO vo) throws ErrorException { + if (getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelLabel::getName, vo.getName()) + .or().eq(DssDatamodelLabel::getFieldIdentifier,vo.getFieldIdentifier())) > 0) { + LOGGER.error("errorCode : {}, label name or field identifier can not repeat, name : {}", ErrorCode.LABEL_ADD_ERROR.getCode(), vo.getName()); + throw new DSSDatamodelCenterException(ErrorCode.LABEL_ADD_ERROR.getCode(), "label name or field identifier can not repeat"); + } + + if (datamodelReferencService.labelReferenceCount(vo.getName())>0 + ||datamodelReferencService.labelReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, label name can not be referenced", ErrorCode.DIMENSION_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_ADD_ERROR.getCode(), "label name can not be referenced"); + } + + + DssDatamodelLabel newOne = modelMapper.map(vo,DssDatamodelLabel.class); + newOne.setParams(gson.toJson(vo.getParamMap())); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + + getBaseMapper().insert(newOne); + + //todo 同步资产创建标签 + assertsSyncService.syncCreateLabel(new CreateLabelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getName())); + + return newOne.getId(); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int enable(Long id, LabelEnableVO vo) throws ErrorException { + DssDatamodelLabel enableOne = new DssDatamodelLabel(); + enableOne.setIsAvailable(vo.getIsAvailable()); + enableOne.setUpdateTime(new Date()); + return getBaseMapper().update(enableOne, Wrappers.lambdaUpdate().eq(DssDatamodelLabel::getId,id)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int update(Long id , LabelUpdateVO vo) throws ErrorException { + DssDatamodelLabel ori = getBaseMapper().selectById(id); + if (ori == null) { + LOGGER.error("errorCode : {}, update label error not exists", ErrorCode.LABEL_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.LABEL_UPDATE_ERROR.getCode(), "update label error not exists"); + } + + if (datamodelReferencService.labelReferenceCount(ori.getName())>0 + ||datamodelReferencService.labelReferenceCount(ori.getFieldIdentifier())>0 + ||datamodelReferencService.labelReferenceCount(vo.getName())>0 + ||datamodelReferencService.labelReferenceCount(vo.getFieldIdentifier())>0){ + LOGGER.error("errorCode : {}, label name can not referenced", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "label name can not referenced"); + } + + //当更新名称时 + if (!StringUtils.equals(vo.getName(), ori.getName())) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelLabel::getName, vo.getName())); + if (repeat > 0) { + LOGGER.error("errorCode : {}, label name can not repeat ", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "label name can not repeat "); + } + } + + String orgFieldIdentifier = ori.getFieldIdentifier(); + //当更新标识时 + if (!StringUtils.equals(vo.getFieldIdentifier(), orgFieldIdentifier)) { + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelLabel::getFieldIdentifier, vo.getFieldIdentifier())); + if (repeat > 0) { + LOGGER.error("errorCode : {}, label field identifier can not repeat", ErrorCode.DIMENSION_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.DIMENSION_UPDATE_ERROR.getCode(), "label field identifier can not repeat "); + } + } + + DssDatamodelLabel updateOne = modelMapper.map(vo,DssDatamodelLabel.class); + updateOne.setParams(gson.toJson(vo.getParamMap())); + updateOne.setUpdateTime(new Date()); + getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelLabel::getId,id)); + + //todo 同步资产 + assertsSyncService.syncUpdateLabel(new UpdateLabelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , vo.getName(),ori.getName())); + return 1; + } + + @Override + public LabelQueryDTO query(Long id) throws ErrorException { + DssDatamodelLabel dssDatamodelLabel = getBaseMapper().selectById(id); + if (dssDatamodelLabel == null){ + throw new DSSDatamodelCenterException(ErrorCode.LABEL_QUERY_ERROR.getCode(), "label id " +id +" not exists"); + } + LabelQueryDTO dto = modelMapper.map(dssDatamodelLabel,LabelQueryDTO.class); + dto.setRefCount(datamodelReferencService.labelReferenceCount(dssDatamodelLabel.getName())); + return dto; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int delete(Long id) throws ErrorException { + DssDatamodelLabel dssDatamodelLabel = getBaseMapper().selectById(id); + if (dssDatamodelLabel == null){ + throw new DSSDatamodelCenterException(ErrorCode.LABEL_DELETE_ERROR.getCode(), "label id " +id +" not exists"); + } + + //校验引用情况 + if(datamodelReferencService.labelReferenceCount(dssDatamodelLabel.getName())>0||datamodelReferencService.labelReferenceCount(dssDatamodelLabel.getFieldIdentifier())>0){ + throw new DSSDatamodelCenterException(ErrorCode.LABEL_DELETE_ERROR.getCode(), "label id " +id +" has referenced"); + } + + getBaseMapper().deleteById(id); + + //todo 同步资产 + assertsSyncService.syncDeleteLabel(new DeleteLabelEvent(this + , DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + , dssDatamodelLabel.getName())); + return 1; + } + + @Override + public Message list(LabelsQueryVO vo) throws ErrorException { + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList(Wrappers.lambdaQuery() + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), DssDatamodelLabel::getWarehouseThemeName, vo.getWarehouseThemeName()) + .eq(vo.getIsAvailable()!=null,DssDatamodelLabel::getIsAvailable,vo.getIsAvailable()) + .eq(StringUtils.isNotBlank(vo.getOwner()),DssDatamodelLabel::getOwner,vo.getOwner()) + .like(StringUtils.isNotBlank(vo.getName()), DssDatamodelLabel::getName, vo.getName()))); + return Message.ok() + .data("list",pageInfo + .getList() + .stream() + .map(dssDatamodelLabel ->{ + LabelQueryDTO dto = modelMapper.map(dssDatamodelLabel, LabelQueryDTO.class); + dto.setRefCount(datamodelReferencService.labelReferenceCount(dssDatamodelLabel.getName())); + return dto; + }) + .collect(Collectors.toList())) + .data("total",pageInfo.getTotal()); + } + + @Override + public int labelThemeReferenceCount(String themeName) { + int count = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelLabel::getWarehouseThemeName,themeName)); + int countEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelLabel::getWarehouseThemeNameEn,themeName)); + return count + countEn; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableCollectServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableCollectServiceImpl.java new file mode 100644 index 0000000000..5f94f4b61f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableCollectServiceImpl.java @@ -0,0 +1,70 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableCollcetionMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableCollcetion; +import com.webank.wedatasphere.dss.datamodel.table.service.TableCollectService; +import com.webank.wedatasphere.dss.datamodel.table.vo.TableCollectVO; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.annotation.Resource; +import java.util.Date; + +@Service +public class TableCollectServiceImpl extends ServiceImpl implements TableCollectService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableCollectServiceImpl.class); + + @Resource + private ModelMapper modelMapper; + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCollect(String user, DssDatamodelTable targetTable) { + cancelOlder(user,targetTable.getName()); + DssDatamodelTableCollcetion newCollect = modelMapper.map(targetTable, DssDatamodelTableCollcetion.class); + newCollect.setCreateTime(new Date()); + newCollect.setUpdateTime(new Date()); + newCollect.setUser(user); + getBaseMapper().insert(newCollect); + return 1; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCollect(TableCollectVO vo) { + cancelOlder(vo.getUser(),vo.getName()); + DssDatamodelTableCollcetion newOne = modelMapper.map(vo, DssDatamodelTableCollcetion.class); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + getBaseMapper().insert(newOne); + return 1; + } + + private Integer cancelOlder(String user, String tableName) { + DssDatamodelTableCollcetion olderCollection = getBaseMapper().selectOne(Wrappers.lambdaQuery() + .eq(DssDatamodelTableCollcetion::getName, tableName) + .eq(DssDatamodelTableCollcetion::getUser, user)); + + //如果已经收藏过该表则删除原有收藏,方便以后新增收藏 + if (olderCollection != null&&olderCollection.getId()!=null) { + return getBaseMapper().deleteById(olderCollection.getId()); + } + return 0; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCollectCancel(String user, String tableName) { + return cancelOlder(user, tableName); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableColumnsServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableColumnsServiceImpl.java new file mode 100644 index 0000000000..e37b4b690f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableColumnsServiceImpl.java @@ -0,0 +1,91 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ModeType; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableColumnsMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import com.webank.wedatasphere.dss.datamodel.table.service.TableColumnsService; +import org.apache.linkis.common.exception.ErrorException; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.Date; +import java.util.List; + + +@Service +public class TableColumnsServiceImpl extends ServiceImpl implements TableColumnsService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableColumnsServiceImpl.class); + + @Override + @Transactional(rollbackFor = Exception.class) + public int batchInsert(Long tableId,List columnsList) throws ErrorException { + for (DssDatamodelTableColumns newOne : columnsList){ + newOne.setTableId(tableId); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + getBaseMapper().insert(newOne); + } + return 1; + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int batchUpdate(Long tableId, List columnsList) throws ErrorException { + getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelTableColumns::getTableId, tableId)); + return batchInsert(tableId,columnsList); + } + + + @Override + public List listByTableId(Long tableId) { + return getBaseMapper().selectList(Wrappers.lambdaQuery().eq(DssDatamodelTableColumns::getTableId,tableId)); + } + + + @Override + public Integer deleteByTableId(Long tableId) throws ErrorException { + return getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelTableColumns::getTableId,tableId)); + } + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer addColumn(DssDatamodelTableColumns column) { + column.setCreateTime(new Date()); + column.setUpdateTime(new Date()); + return getBaseMapper().insert(column); + } + + + @Override + public Integer tableColumnBind(Long id, Integer modelType, String modelName,String modelNameEn) throws ErrorException{ + DssDatamodelTableColumns updateOne = new DssDatamodelTableColumns(); + updateOne.setModelType(modelType); + updateOne.setModelName(modelName); + updateOne.setModelNameEn(modelNameEn); + updateOne.setUpdateTime(new Date()); + return getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelTableColumns::getId,id)); + } + + + @Override + public int modelReferenceCount(ModeType modeType, String name) { + return getBaseMapper().selectCount( + Wrappers.lambdaQuery() + .eq(DssDatamodelTableColumns::getModelType, modeType.getType()) + .eq(DssDatamodelTableColumns::getModelName, name)); + } + + @Override + public int modelReferenceCountEn(ModeType modeType, String name) { + return getBaseMapper().selectCount( + Wrappers.lambdaQuery() + .eq(DssDatamodelTableColumns::getModelType, modeType.getType()) + .eq(DssDatamodelTableColumns::getModelNameEn, name)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableDictionaryServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableDictionaryServiceImpl.java new file mode 100644 index 0000000000..7f5e3be8dd --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableDictionaryServiceImpl.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelDictionaryMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelDictionary; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableCollcetion; +import com.webank.wedatasphere.dss.datamodel.table.service.TableDictionaryService; +import org.apache.commons.lang3.StringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +import java.util.List; + +@Service +public class TableDictionaryServiceImpl extends ServiceImpl implements TableDictionaryService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableColumnsServiceImpl.class); + + @Override + public List listByType(String type) { + return getBaseMapper().selectList(Wrappers.lambdaQuery().eq(StringUtils.isNotBlank(type),DssDatamodelDictionary::getType,type)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableMaterializedHistoryServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableMaterializedHistoryServiceImpl.java new file mode 100644 index 0000000000..03f825650f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableMaterializedHistoryServiceImpl.java @@ -0,0 +1,261 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.webank.wedatasphere.dss.data.governance.entity.QueryType; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.HiveTblSizeAction; +import com.webank.wedatasphere.dss.data.governance.request.SearchHiveTblAction; +import com.webank.wedatasphere.dss.data.governance.response.SearchHiveTblResult; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ColumnType; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.TabelExternalType; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.dto.CreateTableDTO; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.launcher.*; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher.CreateTableDataModelUJESJobLauncher; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher.DataExistsDataModelUJESJobLauncher; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher.DropTableDataModelUJESJobLauncher; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.CreateTableDataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataExistsDataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DropTableDataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableMaterializedHistoryMapper; +import com.webank.wedatasphere.dss.datamodel.table.dto.HiveTblSimpleInfoDTO; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableMaterializedHistory; +import com.webank.wedatasphere.dss.datamodel.table.materialized.HiveSchemaDdlBuilder; +import com.webank.wedatasphere.dss.datamodel.table.service.TableColumnsService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableMaterializedHistoryService; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.computation.client.interactive.SubmittableInteractiveJob; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; +import java.util.Objects; +import java.util.Optional; + +@Service +public class TableMaterializedHistoryServiceImpl extends ServiceImpl implements TableMaterializedHistoryService{ + + private static final Logger LOGGER = LoggerFactory.getLogger(TableMaterializedHistoryServiceImpl.class); + + @Resource + private ModelMapper modelMapper; + + @Resource + private TableColumnsService tableColumnsService; + + @Resource + private LinkisDataAssetsRemoteClient linkisDataAssetsRemoteClient; + + @Resource + private DataExistsDataModelUJESJobLauncher dataExistsDataModelUJESJobLauncher; + + @Resource + private DropTableDataModelUJESJobLauncher dropTableDataModelUJESJobLauncher; + + @Resource + private CreateTableDataModelUJESJobLauncher createTableDataModelUJESJobLauncher; + + private final Gson assertsGson = new GsonBuilder().setDateFormat("yyyy MM-dd HH:mm:ss").create(); + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer materializedTable(DssDatamodelTable current, String user) throws ErrorException { + + //判断是否有数据 + checkData(current, user); + //不存在数据删除表 + dropTable(current.getName(),user); + + CreateTableDTO dto = createTable(current, user); + + //创建表 +// SubmittableInteractiveJob job = linkisCreateTable(current, sql); +// +// if (!job.isSucceed()) { +// LOGGER.error("errorCode : {}, table id : {} create table error job : {}, sql : {}", ErrorCode.TABLE_CREATE_ERROR.getCode(), current.getId(), job.getId(), sql); +// //throw new DSSDatamodelCenterException(ErrorCode.TABLE_CREATE_ERROR.getCode(), " table id : " + current.getId() + " create table error job : " + job.getId() + ", sql : " + sql); +// } + + + DssDatamodelTableMaterializedHistory newOne = modelMapper.map(current, DssDatamodelTableMaterializedHistory.class); + newOne.setId(null); + newOne.setMaterializedCode(dto.getSql()); + newOne.setCreateTime(new Date()); + newOne.setStatus(dto.getStatus() == 0 ? 0 : 1);// + newOne.setLastUpdateTime(new Date()); + newOne.setReason("reason"); + newOne.setTaskId(dto.getTaskId()); + newOne.setTablename(current.getName()); + getBaseMapper().insert(newOne); + return 1; + } + + public void checkData(DssDatamodelTable current, String user) throws ErrorException { + //linkisJobCheck(current); + //如果表存在且存在数据 + if (hasData(current.getName(), user)) { + LOGGER.error("errorCode : {}, table id : {} has data", ErrorCode.TABLE_CHECK_ERROR.getCode(), current.getId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_CHECK_ERROR.getCode(), " table id : " + current.getId() + " has data"); + } + } + + @Override + public boolean hasData(String tableName, String user) { +// DataModelUJESJobTask dataModelUJESJobTask = DataExistsDataModelUJESJobTask.newBuilder().user(user).code(tableName).build(); +// return dataExistsDataModelUJESJobLauncher.launch(dataModelUJESJobTask); + String tblName = StringUtils.substringAfter(tableName,"."); + String dbName = StringUtils.substringBefore(tableName,"."); + return linkisDataAssetsRemoteClient. + searchHiveTblSize(HiveTblSizeAction.builder().setUser(user).setDbName(dbName).setTableName(tblName).build()) + .getResult() >0 ; + } + + @Override + public boolean tableExists(String tableName, String user) throws ErrorException { + SearchHiveTblResult result = linkisDataAssetsRemoteClient.searchHiveTbl(SearchHiveTblAction.builder().setUser(user).setQuery(tableName).setPrecise(QueryType.PRECISE).setOffset(0).setLimit(30).build()); + List dtos = assertsGson.fromJson(assertsGson.toJson(result.getResult()), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(dtos)){ + return false; + } + for(HiveTblSimpleInfoDTO dto : dtos){ + if (StringUtils.equals(StringUtils.substringBeforeLast(dto.getQualifiedName(),"@"),tableName)){ + return true; + } + } + return false; + } + + + @Override + public boolean dropTable(String tableName, String user) throws ErrorException { +// if(!tableExists(tableName)){ +// return true; +// } + DataModelUJESJobTask dataModelUJESJobTask = DropTableDataModelUJESJobTask.newBuilder().user(user).code(tableName).build(); + return dropTableDataModelUJESJobLauncher.launch(dataModelUJESJobTask); + } + + @Override + public CreateTableDTO createTable(DssDatamodelTable current, String user) throws ErrorException { + String sql = buildSql(current); + LOGGER.info("table id : {}, sql : {}", current.getId(), sql); + DataModelUJESJobTask dataModelUJESJobTask = CreateTableDataModelUJESJobTask.newBuilder().user(user).code(sql).build(); + CreateTableDTO createTableDTO = createTableDataModelUJESJobLauncher.launch(dataModelUJESJobTask); + createTableDTO.setSql(sql); + return createTableDTO; + } + + private void linkisJobCheck(DssDatamodelTable current) throws DSSDatamodelCenterException { + //校验是否已数据 + DataModelJobTaskBuilder dataModELJobTaskBuilder = new DataModelJobTaskBuilder(); + DataModelJobTask task = dataModELJobTaskBuilder.withDataExistsExchangisJobTask() + .code(current.getName()) + .creator("hdfs") + .executeUser("hdfs") + .engineType("hive-2.3.3") + .runType("hql") + .build(); + DataExistsDataModelJobLauncher launcher = new DataExistsDataModelJobLauncher(); + Integer result = launcher.launch(task); + if (result > 0) { + LOGGER.error("errorCode : {}, table id : {} has data", ErrorCode.TABLE_CREATE_ERROR.getCode(), current.getId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_CREATE_ERROR.getCode(), " table id : " + current.getId() + " has data"); + } + } + + private SubmittableInteractiveJob linkisCreateTable(DssDatamodelTable current, String sql) { + DataModelJobTaskBuilder dataModELJobTaskBuilder = new DataModelJobTaskBuilder(); + DataModelJobTask commonTask = dataModELJobTaskBuilder.withCommonExchangisJobTask() + .code(sql) + .creator("hdfs") + .executeUser("hdfs") + .engineType("hive-2.3.3") + .runType("hql") + .build(); + CommonDataModelJobLauncher commonExchangisJobLauncher = new CommonDataModelJobLauncher(); + return commonExchangisJobLauncher.launch(commonTask); + } + + private void linkisDropTable(DssDatamodelTable current) { + DataModelJobTaskBuilder dataModELJobTaskBuilder = new DataModelJobTaskBuilder(); + DataModelJobTask commonTask = dataModELJobTaskBuilder.withCommonExchangisJobTask() + .code(String.format("drop table if exists %s", current.getName())) + .creator("hdfs") + .executeUser("hdfs") + .engineType("hive-2.3.3") + .runType("hql") + .build(); + CommonDataModelJobLauncher commonExchangisJobLauncher = new CommonDataModelJobLauncher(); + commonExchangisJobLauncher.launch(commonTask); + } + + private String buildSql(DssDatamodelTable current) { + List columns = tableColumnsService.list(Wrappers.lambdaQuery().eq(DssDatamodelTableColumns::getTableId, current.getId())); + HiveSchemaDdlBuilder builder = new HiveSchemaDdlBuilder(); + builder.tableName(current.getName()); + if (StringUtils.isNotBlank(current.getComment())) { + builder.comment(current.getComment()); + } + if (Objects.equals(current.getIsExternal(), TabelExternalType.EXTERNAL.getCode())) { + builder.withExternal(); + } + if (StringUtils.isNotBlank(current.getLocation())) { + builder.location(current.getLocation()); + } + columns.forEach(column -> { + builder.addColumn(column.getName(), column.getType(), ColumnType.PARTITION_KEY.getCode().equals(column.getIsPartitionField()), column.getComment()); + }); + builder.storedType(current.getFileType()); + return builder.createTableString(); + } + + @Override + public String generateSql(DssDatamodelTable current) { + return buildSql(current); + } + + + @Override + public boolean isMaterialized(String tableName, String version) throws ErrorException { + return tableExists(tableName, DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser()); + +// return getBaseMapper().selectCount(Wrappers.lambdaQuery() +// .eq(DssDatamodelTableMaterializedHistory::getTablename, tableName) +// .eq(DssDatamodelTableMaterializedHistory::getVersion, version) +// .eq(DssDatamodelTableMaterializedHistory::getStatus, 0)) > 0 && tableExists(tableName, DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser()); + } + + @Override + public Optional getHiveTblSimpleInfoByName(String tableName, String user) throws ErrorException { + + SearchHiveTblResult result = linkisDataAssetsRemoteClient.searchHiveTbl(SearchHiveTblAction.builder().setPrecise(QueryType.PRECISE).setUser(user).setQuery(tableName).setOffset(0).setLimit(1).build()); + List dtos = assertsGson.fromJson(assertsGson.toJson(result.getResult()), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(dtos)){ + return Optional.empty(); + } + for(HiveTblSimpleInfoDTO dto : dtos){ + if (StringUtils.equals(StringUtils.substringBeforeLast(dto.getQualifiedName(),"@"),tableName)){ + return Optional.of(dto); + } + } + return Optional.empty(); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableServiceImpl.java new file mode 100644 index 0000000000..88689e734e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableServiceImpl.java @@ -0,0 +1,836 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.common.collect.Lists; +import com.google.common.collect.Sets; +import com.google.gson.Gson; +import com.google.gson.GsonBuilder; +import com.google.gson.reflect.TypeToken; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.entity.QueryType; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.*; +import com.webank.wedatasphere.dss.data.governance.response.*; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ErrorCode; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.LabelConstant; +import com.webank.wedatasphere.dss.datamodel.center.common.constant.ModeType; +import com.webank.wedatasphere.dss.datamodel.center.common.context.DataModelSecurityContextHolder; +import com.webank.wedatasphere.dss.datamodel.center.common.dto.PreviewDataDTO; +import com.webank.wedatasphere.dss.datamodel.center.common.exception.DSSDatamodelCenterException; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.DataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.launcher.PreviewDataModelUJESJobLauncher; +import com.webank.wedatasphere.dss.datamodel.center.common.ujes.task.PreviewDataModelUJESJobTask; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableMapper; +import com.webank.wedatasphere.dss.datamodel.table.dao.TableQueryMapper; +import com.webank.wedatasphere.dss.datamodel.table.dto.*; +import com.webank.wedatasphere.dss.datamodel.table.entity.*; +import com.webank.wedatasphere.dss.datamodel.table.event.*; +import com.webank.wedatasphere.dss.datamodel.table.service.*; +import com.webank.wedatasphere.dss.datamodel.table.vo.*; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import org.apache.linkis.ujes.client.exception.UJESJobException; +import org.apache.commons.lang3.StringUtils; +import org.modelmapper.ModelMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.context.ApplicationEventPublisher; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; + + +@Service +public class TableServiceImpl extends ServiceImpl implements TableService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceImpl.class); + + @Resource + private TableColumnsService tableColumnsService; + + @Resource + private TableVersionService tableVersionService; + + @Resource + private TableStatsService tableStatsService; + + @Resource + private ModelMapper modelMapper; + + @Resource + private TableCollectService tableCollectService; + + @Resource + private TableDictionaryService tableDictionaryService; + + @Resource + private TableMaterializedHistoryService tableMaterializedHistoryService; + + @Resource + private LinkisDataAssetsRemoteClient linkisDataAssetsRemoteClient; + + @Resource + private PreviewDataModelUJESJobLauncher previewDataModelUJESJobLauncher; + + @Resource + private TableQueryMapper tableQueryMapper; + + private Gson gson = new Gson(); + + @Resource + private ApplicationEventPublisher publisher; + + private final Gson assertsGson = new GsonBuilder().setDateFormat("yyyy MM-dd HH:mm:ss").create(); + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addTable(TableAddVO vo) throws ErrorException { + + int sameCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getName, vo.getName())); + if (sameCount > 0) { + LOGGER.error("errorCode : {}, table name can not repeat, name : {}", ErrorCode.TABLE_ADD_ERROR.getCode(), vo.getName()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_ADD_ERROR.getCode(), "table name can not repeat"); + } + + DssDatamodelTable newOne = modelMapper.map(vo, DssDatamodelTable.class); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + newOne.setVersion("1"); + getBaseMapper().insert(newOne); + + Long tableId = newOne.getId(); + List columns = addColumns(tableId, vo.getColumns()); + + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + + //发布表绑定模型事件 + publisher.publishEvent(new BindModelByTableEvent(this, user, newOne)); + publisher.publishEvent(new BindModelByColumnsEvent(this, user, newOne.getName(), columns)); + + //发布绑定标签事件 + publisher.publishEvent(new BindLabelByTableEvent(this, user, newOne)); + + return newOne.getId(); + } + + + private List addColumns(Long tableId, List columnVOs) throws ErrorException { + List columns = Lists.newArrayList(); + for (TableColumnVO columnVO : columnVOs) { + DssDatamodelTableColumns newColumn = modelMapper.map(columnVO, DssDatamodelTableColumns.class); + columns.add(newColumn); + } + + tableColumnsService.batchInsert(tableId, columns); + return columns; + } + + @Override + @Transactional(rollbackFor = Exception.class) + public int updateTable(Long id, TableUpdateVO vo) throws ErrorException { + + DssDatamodelTable org = getBaseMapper().selectById(id); + if (org == null) { + LOGGER.error("errorCode : {}, update table error not exists", ErrorCode.TABLE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_UPDATE_ERROR.getCode(), "update table error not exists"); + } + + //判断数据表是否有数据 + tableMaterializedHistoryService.checkData(org, vo.getCreator()); + + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + + //当更新表名称时,存在其他名称同名或者当前名称已经存在版本信息,则不允许修改指标名称 + if (!StringUtils.equals(vo.getName(), org.getName())) { + //表如果已经物化不能修改名称 + if (tableMaterializedHistoryService.tableExists(org.getName(), user)) { + LOGGER.error("errorCode : {}, table name can not change as table has materialized", ErrorCode.TABLE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_UPDATE_ERROR.getCode(), "table name can not change as table has materialized"); + } + int repeat = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getName, vo.getName())); + String lastVersion = tableVersionService.findLastVersion(org.getName()); + if (repeat > 0 || StringUtils.isNotBlank(lastVersion)) { + LOGGER.error("errorCode : {}, table name can not repeat or has version", ErrorCode.TABLE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_UPDATE_ERROR.getCode(), "table name can not repeat or has version"); + } + } + + Long orgId = org.getId(); + String version = org.getVersion(); + List orgColumns = tableColumnsService.listByTableId(id); + + DssDatamodelTable updateOne = modelMapper.map(vo, DssDatamodelTable.class); + updateOne.setUpdateTime(new Date()); + int result = getBaseMapper().update(updateOne, Wrappers.lambdaUpdate().eq(DssDatamodelTable::getId, id)); + if (result != 1) { + LOGGER.error("errorCode : {}, update table error not exists", ErrorCode.TABLE_UPDATE_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_UPDATE_ERROR.getCode(), "update table error not exists"); + } + List newColumns = Lists.newArrayList(); + for (TableColumnVO columnVO : vo.getColumns()) { + DssDatamodelTableColumns newColumn = modelMapper.map(columnVO, DssDatamodelTableColumns.class); + newColumns.add(newColumn); + } + + tableColumnsService.batchUpdate(orgId, newColumns); + + + publisher.publishEvent(new UpdateBindModelByTableEvent(this, user, org, updateOne)); + publisher.publishEvent(new UpdateBindModelByColumnsEvent(this, user, org.getName(), orgColumns, newColumns)); + publisher.publishEvent(new UpdateBindLabelByTableEvent(this, user, org, updateOne)); + + return 1; + } + + + @Override + public TableQueryDTO queryByName(TableQueryOneVO vo) throws ErrorException { + DssDatamodelTable table = getBaseMapper().selectOne(Wrappers.lambdaQuery().eq(DssDatamodelTable::getName, vo.getName())); + //如果查询不到则查询资产 + if (table == null) { + //查资产 guid 086c5785-8bda-4756-8ba6-46f9c3d597f1 a3be4a97-6465-4c3d-adee-76dfa662e531 ef09c10a-e156-4d09-96af-af30eb3af26a + GetHiveTblBasicResult result = linkisDataAssetsRemoteClient.getHiveTblBasic(GetHiveTblBasicAction.builder().setUser(vo.getUser()).setGuid(vo.getGuid()).build()); + HiveTblDetailInfoDTO dto = assertsGson.fromJson(assertsGson.toJson(result.getResult()), HiveTblDetailInfoDTO.class); + HiveTblStatsResult hiveTblStatsResult = linkisDataAssetsRemoteClient.searchHiveTblStats(HiveTblStatsAction.builder().setUser(vo.getUser()).setGuid(vo.getGuid()).build()); + return TableQueryDTO.toTableStatsDTO(dto, hiveTblStatsResult.getInfo(), StringUtils.substringBefore(dto.getBasic().getQualifiedName(),"@")); + } + return queryTable(table); + } + + private TableQueryDTO queryTable(DssDatamodelTable table) throws ErrorException { + TableQueryDTO tableQueryDTO = modelMapper.map(table, TableQueryDTO.class); + + List columnQueryDTOS = tableColumnsService.listByTableId(table.getId()) + .stream().map(column -> modelMapper.map(column, TableColumnQueryDTO.class)).collect(Collectors.toList()); + tableQueryDTO.setColumns(columnQueryDTOS); + +// DssDatamodelTableStats tableStats = tableStatsService.queryByTableName(table.getName()); +// if (tableStats != null) { +// tableQueryDTO.setStats(modelMapper.map(tableStats, TableStatsDTO.class)); +// } + TableHeadlineDTO headlineDTO = new TableHeadlineDTO(); + headlineDTO.setStorageType(0); + headlineDTO.setTableType(0); + headlineDTO.setEntityType( + tableMaterializedHistoryService.isMaterialized(table.getName(), table.getVersion()) ? 1 : 0); + tableQueryDTO.setHeadline(headlineDTO); + + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + Integer collectionCount = tableCollectService.getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTableCollcetion::getName, table.getName())); + String dbName = StringUtils.substringBefore(table.getName(), "."); + String tblName = StringUtils.substringAfter(table.getName(), "."); + HiveTblStatsResult hiveTblStatsResult = linkisDataAssetsRemoteClient.searchHiveTblStats(HiveTblStatsAction.builder().setUser(user) + .setTableName(tblName) + .setDbName(dbName) + .build()); + tableQueryDTO.setStats(TableStatsDTO.from(hiveTblStatsResult.getInfo(), collectionCount)); + + tableQueryDTO.setLastAccessTime(tableMaterializedHistoryService.getHiveTblSimpleInfoByName(table.getName(),user).map(HiveTblSimpleInfoDTO::getLastAccessTime).orElse(null)); + + return tableQueryDTO; + } + + + @Override + public TableQueryDTO queryById(Long id) throws ErrorException { + DssDatamodelTable table = getBaseMapper().selectOne(Wrappers.lambdaQuery().eq(DssDatamodelTable::getId, id)); + if (table == null) { + LOGGER.error("errorCode : {}, table id : {} not exists", ErrorCode.TABLE_QUERY_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_QUERY_ERROR.getCode(), "table id " + id + " not exists"); + } + return queryTable(table); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer addTableVersion(Long id, TableVersionAddVO vo) throws ErrorException { + + //判断旧版本指标是否存在 + DssDatamodelTable orgVersion = getBaseMapper().selectById(id); + if (orgVersion == null) { + LOGGER.error("errorCode : {}, table id : {} not exists", ErrorCode.TABLE_VERSION_ADD_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_VERSION_ADD_ERROR.getCode(), "table id " + id + " not exists"); + } + + //判断旧版本是否有数据 + tableMaterializedHistoryService.checkData(orgVersion, vo.getCreator()); + //没有数据删除表 + //tableMaterializedHistoryService.dropTable(orgVersion.getName(),vo.getCreator()); + + String orgName = orgVersion.getName(); + String orgDatabase = orgVersion.getDataBase(); + String orgV = orgVersion.getVersion(); + String assignVersion = newVersion(orgName, orgV); + + //表名称和数据库不能改变 + if (!StringUtils.equals(orgName, vo.getName()) || !StringUtils.equals(orgDatabase, vo.getDataBase())) { + LOGGER.error("errorCode : {}, table name must be same", ErrorCode.TABLE_VERSION_ADD_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_VERSION_ADD_ERROR.getCode(), "table name must be same"); + } + + //查询字段信息 + List orgColumns = tableColumnsService.listByTableId(id); + + //备份旧版本 + tableVersionService.addOlderVersion(orgVersion, orgColumns); + + //删除旧版本 + getBaseMapper().deleteById(id); + tableColumnsService.deleteByTableId(id); + + DssDatamodelTable newOne = modelMapper.map(vo, DssDatamodelTable.class); + newOne.setVersion(assignVersion); + newOne.setCreateTime(new Date()); + newOne.setUpdateTime(new Date()); + getBaseMapper().insert(newOne); + + Long tableId = newOne.getId(); + List newColumns = addColumns(tableId, vo.getColumns()); + + //发布更新模型绑定事件 + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + publisher.publishEvent(new UpdateBindModelByTableEvent(this, user, orgVersion, newOne)); + publisher.publishEvent(new UpdateBindModelByColumnsEvent(this, user, orgVersion.getName(), orgColumns, newColumns)); + publisher.publishEvent(new UpdateBindLabelByTableEvent(this, user, orgVersion, newOne)); + return 1; + } + + private String newVersion(String orgName, String orgVersion) { + String lastVersion = tableVersionService.findLastVersion(orgName); + + return StringUtils.isBlank(lastVersion) ? + (Integer.parseInt(orgVersion) + 1 + "") : + (Integer.parseInt(lastVersion) > Integer.parseInt(orgVersion)) ? (Integer.parseInt(lastVersion) + 1 + "") : + (Integer.parseInt(orgVersion) + 1 + ""); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer versionRollBack(TableVersionRollBackVO vo) throws ErrorException { + + String name = vo.getName(); + String version = vo.getVersion(); + + //获取当前使用版本表 + DssDatamodelTable current = + getBaseMapper().selectOne(Wrappers.lambdaQuery().eq(DssDatamodelTable::getName, name)); + + //判断当前使用表 + if (current == null) { + LOGGER.error("errorCode : {}, current table not exists, name : {} version : {}", ErrorCode.TABLE_VERSION_ROLL_BACK_ERROR.getCode(), name, version); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_VERSION_ROLL_BACK_ERROR.getCode(), "current table not exists, name : " + name + " version : " + version); + } + + //判断当前版本是否有数据 + tableMaterializedHistoryService.checkData(current, vo.getUser()); + //没有数据删除表 + //tableMaterializedHistoryService.dropTable(current.getName(),vo.getUser()); + + //查询字段信息 + List currentColumns = tableColumnsService.listByTableId(current.getId()); + + //当前版本备份 + tableVersionService.addOlderVersion(current, currentColumns); + + //删除当前版本 + getBaseMapper().deleteById(current.getId()); + tableColumnsService.deleteByTableId(current.getId()); + + + //获取需要回退指标版本信息 + DssDatamodelTableVersion rollBackVersion = tableVersionService.findBackup(name, version); + if (rollBackVersion == null) { + LOGGER.error("errorCode : {}, table name : {} version : {}", ErrorCode.TABLE_VERSION_ROLL_BACK_ERROR.getCode(), name, version); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_VERSION_ROLL_BACK_ERROR.getCode(), "table name : " + name + " version : " + version + " not exist"); + } + + Long rollbackId = rollBackVersion.getId(); + + DssDatamodelTable rollbackOne = gson.fromJson(rollBackVersion.getTableParams(), DssDatamodelTable.class); + rollbackOne.setId(null); + getBaseMapper().insert(rollbackOne); + + List rollbackColumns = gson.fromJson(rollBackVersion.getColumns(), new TypeToken>() { + }.getType()); + rollbackColumns.forEach(columns -> columns.setId(null)); + tableColumnsService.batchInsert(rollbackOne.getId(), rollbackColumns); + tableVersionService.getBaseMapper().deleteById(rollbackId); + + + //发布更新模型绑定事件 + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + publisher.publishEvent(new UpdateBindModelByTableEvent(this, user, current, rollbackOne)); + publisher.publishEvent(new UpdateBindModelByColumnsEvent(this, user, current.getName(), currentColumns, rollbackColumns)); + publisher.publishEvent(new UpdateBindLabelByTableEvent(this, user, current, rollbackOne)); + + return 1; + } + + + @Override + public Message listTableVersions(TableVersionQueryVO vo) { + List list = tableVersionService.getBaseMapper() + .selectList(Wrappers.lambdaQuery().eq(DssDatamodelTableVersion::getName, vo.getName())) + .stream() + .map(dssDatamodelTableVersion -> modelMapper.map(dssDatamodelTableVersion, TableVersionQueryDTO.class)) + .collect(Collectors.toList()); + return Message.ok().data("list", list); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCollect(TableCollectVO vo) throws ErrorException { + if (vo.getTableId() != null) { + DssDatamodelTable collection = getBaseMapper().selectById(vo.getTableId()); + if (collection == null) { + LOGGER.error("errorCode : {}, collect table not exists id : {} ", ErrorCode.TABLE_COLLECT_ADD_ERROR.getCode(), vo.getTableId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_COLLECT_ADD_ERROR.getCode(), " collect table not exist id : " + vo.getTableId()); + } + return tableCollectService.tableCollect(vo.getUser(), collection); + } + + return tableCollectService.tableCollect(vo); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCancel(TableCollectCancelVO vo) throws ErrorException { + return tableCollectService.tableCollectCancel(vo.getUser(), vo.getTableName()); + } + + + @Override + public Message tableCollections(TableCollectQueryVO vo) throws ErrorException { + QueryWrapper queryWrapper = new QueryWrapper() + .like(StringUtils.isNotBlank(vo.getName()), "name", vo.getName()) + .like(StringUtils.isNotBlank(vo.getDataBase()), "database", vo.getName()) + .eq(StringUtils.isNotBlank(vo.getUser()), "user", vo.getUser()) + .eq(StringUtils.isNotBlank(vo.getWarehouseLayerName()), "warehouse_layer_name", vo.getWarehouseLayerName()) + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), "warehouse_theme_name", vo.getWarehouseThemeName()); + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(tableCollectService.getBaseMapper().selectList(queryWrapper)); + + return Message.ok() + .data("list", pageInfo.getList().stream().map(entity -> { + TableCollectionDTO dto = modelMapper.map(entity, TableCollectionDTO.class); + //收藏表的Id 不返回前端 + dto.setId(null); + return dto; + }).collect(Collectors.toList())) + .data("total", pageInfo.getTotal()); + } + + + @Override + public Message dictionaryList(TableDictionaryListVO vo) { + return Message.ok().data("list", tableDictionaryService.listByType(vo.getType())); + } + + + @Override + public Integer addTableColumn(TableColumnsAddVO vo) throws ErrorException { + int count = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getId, vo.getTableId())); + if (count < 1) { + LOGGER.error("errorCode : {}, table not exists id : {} ", ErrorCode.TABLE_COLUMN_ADD_ERROR.getCode(), vo.getTableId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_COLUMN_ADD_ERROR.getCode(), " table not exists id : " + vo.getTableId()); + } + DssDatamodelTableColumns newColumn = modelMapper.map(vo, DssDatamodelTableColumns.class); + return tableColumnsService.addColumn(newColumn); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableColumnBind(Long columnId, TableColumnBindVO vo) throws ErrorException { + return tableColumnsService.tableColumnBind(columnId, vo.getModelType(), vo.getModelName(), vo.getModelNameEn()); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public Integer tableCreate(TableCreateVO vo) throws ErrorException { + DssDatamodelTable current = getBaseMapper().selectById(vo.getTableId()); + if (current == null) { + LOGGER.error("errorCode : {}, table not exists id : {} ", ErrorCode.TABLE_CREATE_ERROR.getCode(), vo.getTableId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_CREATE_ERROR.getCode(), " table not exists id : " + vo.getTableId()); + } + tableMaterializedHistoryService.materializedTable(current, vo.getUser()); + //发布尝试表绑定模型事件 + publisher.publishEvent(new TableFirstBindEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,current.getId() + ,current.getName())); + return 1; + } + + + + + @Override + public String tableCreateSql(TableCreateSqlVO vo) throws ErrorException { + + //先查询hdfs + if (StringUtils.isNotBlank(vo.getGuid())) { + GetHiveTblCreateResult result = linkisDataAssetsRemoteClient.getHiveTblCreate(GetHiveTblCreateAction.builder().setUser(vo.getUser()).setGuid(vo.getGuid()).build()); + if (StringUtils.isNotBlank(result.getResult())) { + LOGGER.info("sql : {}", result.getResult()); + return result.getResult(); + } + } + + DssDatamodelTable current = getBaseMapper().selectById(vo.getTableId()); + if (current == null) { + LOGGER.error("errorCode : {}, table not exists id : {} ", ErrorCode.TABLE_CREATE_SQL_ERROR.getCode(), vo.getTableId()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_CREATE_SQL_ERROR.getCode(), " table not exists id : " + vo.getTableId()); + } + String sql = tableMaterializedHistoryService.generateSql(current); + LOGGER.info("sql : {}", sql); + return sql; + } + + + @Override + public Message list(TableListVO vo) { + if (vo.getModelType() > 0) { + return listByIndicator(vo); + } + + if (vo.getTableType() < 0 || StringUtils.isNotBlank(vo.getWarehouseLayerName()) || StringUtils.isNotBlank(vo.getWarehouseThemeName())) { + return listDataModel(vo); + } + return listAssets(vo); + } + + private Message listByIndicator(TableListVO vo) { + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + + PageInfo pageInfo = new PageInfo<>(tableQueryMapper.page(Wrappers.lambdaQuery() + .eq(DssDatamodelTabelQuery::getModelType, vo.getModelType()) + .like(StringUtils.isNotBlank(vo.getModelName()), DssDatamodelTabelQuery::getModelName, vo.getModelName()) + .eq(StringUtils.isNotBlank(vo.getWarehouseLayerName()), DssDatamodelTabelQuery::getWarehouseLayerName, vo.getWarehouseLayerName()) + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), DssDatamodelTabelQuery::getWarehouseThemeName, vo.getWarehouseThemeName()) + .groupBy(DssDatamodelTabelQuery::getId))); + return Message.ok().data("list", pageInfo.getList().stream().map(entity -> modelMapper.map(entity, TableListDTO.class)).collect(Collectors.toList())) + .data("total", pageInfo.getTotal()); + } + + private Message listAssets(TableListVO vo) { + SearchHiveTblResult result = linkisDataAssetsRemoteClient.searchHiveTbl(SearchHiveTblAction.builder() + .setUser(vo.getUser()) + .setQuery(vo.getName()) + .setOffset((vo.getPageNum() - 1) * vo.getPageSize()) + .setLimit(vo.getPageSize()).build()); + List dtos = assertsGson.fromJson(assertsGson.toJson(result.getResult()), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(dtos)) { + return Message.ok().data("list", Lists.newArrayList()); + } + List tableListDTOS = Lists.newArrayList(); + dtos.forEach(hiveTblSimpleInfoDTO -> { + TableListDTO tableListDTO = new TableListDTO(); + tableListDTO.setGuid(hiveTblSimpleInfoDTO.getGuid()); + tableListDTO.setCreator(hiveTblSimpleInfoDTO.getOwner()); + tableListDTO.setCreateTime(hiveTblSimpleInfoDTO.getCreateTime()); + tableListDTO.setName(StringUtils.substringBefore(hiveTblSimpleInfoDTO.getQualifiedName(), "@")); + tableListDTO.setDataBase(StringUtils.substringBefore(hiveTblSimpleInfoDTO.getQualifiedName(), ".")); + + tableListDTO.setUpdateTime(hiveTblSimpleInfoDTO.getLastAccessTime()); + tableListDTO.setAlias(hiveTblSimpleInfoDTO.getAliases()); + tableListDTO.setComment(hiveTblSimpleInfoDTO.getComment()); + tableListDTO.setSize(getSize(hiveTblSimpleInfoDTO)); + String theme = getThemes(hiveTblSimpleInfoDTO.getClassifications()); + tableListDTO.setWarehouseThemeName(theme); + tableListDTO.setWarehouseThemeNameEn(theme); + String layer = getLayer(hiveTblSimpleInfoDTO.getClassifications()); + tableListDTO.setWarehouseLayerName(layer); + tableListDTO.setWarehouseLayerNameEn(layer); + + tableListDTOS.add(tableListDTO); + }); + + return Message.ok().data("list", tableListDTOS) + .data("total", tableListDTOS.size()); + } + + private String getThemes(List classifications) { + return getModel(ClassificationConstant.THEME,classifications); + } + private String getLayer(List classifications) { + return getModel(ClassificationConstant.LAYER,classifications); + } + + private String getModel(ClassificationConstant classificationConstant,List classifications) { + if (CollectionUtils.isEmpty(classifications)) { + return null; + } + for (String classification : classifications) { + String prefix = StringUtils.substringBefore(classification, ClassificationConstant.SEPARATOR); + if (classificationConstant.getTypeCode().equals(prefix)) { + return StringUtils.substringAfter(classification, ClassificationConstant.SEPARATOR); + } + } + return null; + } + + private long getSize(HiveTblSimpleInfoDTO hiveTblSimpleInfoDTO) { + long size = 0L; + if (StringUtils.isBlank(hiveTblSimpleInfoDTO.getTotalSize())) { + return size; + } + try { + size = Long.parseLong(hiveTblSimpleInfoDTO.getTotalSize()); + } catch (Exception e) { + //ignore + } + return size; + } + + private Message listDataModel(TableListVO vo) { + PageHelper.clearPage(); + PageHelper.startPage(vo.getPageNum(), vo.getPageSize()); + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList(Wrappers.lambdaQuery() + .eq(StringUtils.isNotBlank(vo.getWarehouseThemeName()), DssDatamodelTable::getWarehouseThemeName, vo.getWarehouseThemeName()) + .eq(StringUtils.isNotBlank(vo.getWarehouseLayerName()), DssDatamodelTable::getWarehouseLayerName, vo.getWarehouseLayerName()) + .like(StringUtils.isNotBlank(vo.getName()), DssDatamodelTable::getName, vo.getName()))); + return Message.ok().data("list", pageInfo.getList().stream().map(entity -> modelMapper.map(entity, TableListDTO.class)).collect(Collectors.toList())) + .data("total", pageInfo.getTotal()); + } + + @Override + public Message listTablePartitionStats(TblPartitionStatsVO vo) { + if (StringUtils.isNotBlank(vo.getGuid())) { + return queryByGuid(vo.getGuid(), vo.getUser()); + } + SearchHiveTblResult result = linkisDataAssetsRemoteClient.searchHiveTbl(SearchHiveTblAction.builder().setUser(vo.getUser()).setPrecise(QueryType.PRECISE).setQuery(vo.getName()).setOffset(0).setLimit(1).build()); + List dtos = assertsGson.fromJson(assertsGson.toJson(result.getResult()), new TypeToken>() { + }.getType()); + if (CollectionUtils.isEmpty(dtos)) { + return Message.ok().data("list", Lists.newArrayList()); + } + return queryByGuid(dtos.get(0).getGuid(), vo.getUser()); + } + + @Override + public Message listDataBases(TableDatabasesQueryVO vo) { + SearchHiveDbResult result = linkisDataAssetsRemoteClient.searchHiveDb( + SearchHiveDbAction.builder().setQuery("hive_db").setUser(vo.getUser()).setOffset(vo.getPageNum() - 1).setLimit(vo.getPageSize() * (vo.getPageNum() - 1)).build()); + List> results=result.getResult(); + return Message.ok().data("list",results); + } + + @Override + public Message previewData(TableDataPreviewVO vo) throws ErrorException { + if (!tableMaterializedHistoryService.tableExists(vo.getTableName(), vo.getUser())) { + return Message.ok(); + } + DataModelUJESJobTask dataModelUJESJobTask = PreviewDataModelUJESJobTask.newBuilder().user(vo.getUser()).code(vo.getTableName()).count(10).build(); + PreviewDataDTO previewDataDTO = null; + try { + previewDataDTO = previewDataModelUJESJobLauncher.launch(dataModelUJESJobTask); + } catch (Exception e) { + if (e instanceof UJESJobException) { + UJESJobException ujesJobException = (UJESJobException) e; + //表不存在错误忽略 + if (ujesJobException.getErrCode() == 40002) { + LOGGER.error(e.getMessage(), e); + return Message.ok(); + } + } + throw e; + } + return Message.ok().data("detail", previewDataDTO); + } + + + @Override + public Integer tableCheckData(TableCheckDataVO vo) throws ErrorException { + return tableMaterializedHistoryService.hasData(vo.getTableName(), vo.getUser()) ? 1 : 0; + } + + private Message queryByGuid(String guid, String user) { + GetHiveTblPartitionResult result = linkisDataAssetsRemoteClient.getHiveTblPartition(GetHiveTblPartitionAction.builder().setUser(user).setGuid(guid).build()); + if (result.getResult() == null) { + return Message.ok().data("list", Lists.newArrayList()); + } + List partInfoDTOS = assertsGson.fromJson(assertsGson.toJson(result.getResult()), new TypeToken>() { + }.getType()); + return Message.ok().data("list", partInfoDTOS); + } + + + @Override + public int tableThemeReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getWarehouseThemeName, name)); + int currentCountEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getWarehouseThemeNameEn, name)); + // int versionCount = tableVersionService.tableContentReference(name); + + List preReferences = tableVersionService.tableContentMultipleReference(name); + int versionCount = (int) preReferences.stream().filter(e->{ + DssDatamodelTable temp = gson.fromJson(e.getTableParams(),DssDatamodelTable.class); + return StringUtils.equals(temp.getWarehouseThemeName(),name)||StringUtils.equals(temp.getWarehouseThemeNameEn(),name); + }).count(); + + return currentCount + versionCount + currentCountEn; + } + + @Override + public int tableLayerReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getWarehouseLayerName, name)); + int currentCountEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getWarehouseLayerNameEn, name)); + //int versionCount = tableVersionService.tableContentReference(name); + List preReferences = tableVersionService.tableContentMultipleReference(name); + int versionCount = (int) preReferences.stream().filter(e->{ + DssDatamodelTable temp = gson.fromJson(e.getTableParams(),DssDatamodelTable.class); + return StringUtils.equals(temp.getWarehouseLayerName(),name)||StringUtils.equals(temp.getWarehouseLayerNameEn(),name); + }).count(); + return currentCount + versionCount + currentCountEn; + } + + @Override + public int tableCycleReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getLifecycle, name)); + int currentCountEn = getBaseMapper().selectCount(Wrappers.lambdaQuery().eq(DssDatamodelTable::getLifecycleEn, name)); + List preReferences = tableVersionService.tableContentMultipleReference(name); + int versionCount = (int) preReferences.stream().filter(e->{ + DssDatamodelTable temp = gson.fromJson(e.getTableParams(),DssDatamodelTable.class); + return StringUtils.equals(temp.getLifecycle(),name)||StringUtils.equals(temp.getLifecycleEn(),name); + }).count(); + return currentCount + versionCount + currentCountEn; + } + + @Override + public int tableDimensionReferenceCount(String name) { + return referenceCount(name, ModeType.DIMENSION); + } + + private int referenceCount(String name, ModeType modeType) { + int currentCount = tableColumnsService.modelReferenceCount(modeType, name); + int currentCountEn = tableColumnsService.modelReferenceCountEn(modeType, name); +// int versionCount = tableVersionService.tableColumnsReference(name); + + List preReferences = tableVersionService.tableColumnsReference(name); + int versionCount = (int) preReferences.stream().filter(e->{ + DssDatamodelTableColumns temp = gson.fromJson(e.getTableParams(),DssDatamodelTableColumns.class); + //名称相同且类型相同 + return modeType.getType() == temp.getModelType()&&StringUtils.equals(name,temp.getModelName()); + }).count(); + return currentCount + versionCount + currentCountEn; + } + + @Override + public int tableMeasureReferenceCount(String name) { + return referenceCount(name, ModeType.MEASURE); + } + + @Override + public int tableIndicatorReferenceCount(String name) { + return referenceCount(name, ModeType.INDICATOR); + } + + @Override + public int tableModifierReferenceCount(String name) { + return 0; + } + + + @Override + public void bind(long id, String user) throws ErrorException { + DssDatamodelTable current = getBaseMapper().selectById(id); + if (current == null) { + LOGGER.error("errorCode : {}, bind table error not exists", ErrorCode.TABLE_BIND_ERROR.getCode()); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_BIND_ERROR.getCode(), "bind table error not exists"); + } + + List currentColumns = tableColumnsService.listByTableId(id); + publisher.publishEvent(new BindModelByTableEvent(this, user, current)); + publisher.publishEvent(new BindModelByColumnsEvent(this, user, current.getName(), currentColumns)); + publisher.publishEvent(new BindLabelByTableEvent(this, user, current)); + } + + @Override + public void tryBind(long id) throws ErrorException { + DssDatamodelTable current = getBaseMapper().selectById(id); + if (current == null) { + LOGGER.error("errorCode : {}, table not exists id : {} ", ErrorCode.TABLE_BIND_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_BIND_ERROR.getCode(), " table not exists id : " + id); + } + + //发布尝试表绑定模型事件 + publisher.publishEvent(new TableFirstBindEvent(this + ,DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser() + ,current.getId() + ,current.getName())); + } + + + @Override + @Transactional(rollbackFor = Exception.class) + public int deleteTable(Long id) throws ErrorException { + DssDatamodelTable current = getBaseMapper().selectById(id); + if (current == null) { + return 0; + } + //有数据则不能删除 + if (tableMaterializedHistoryService.hasData(current.getName(), DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser())) { + LOGGER.error("errorCode : {}, table id : {} has data", ErrorCode.TABLE_DELETE_ERROR.getCode(), id); + throw new DSSDatamodelCenterException(ErrorCode.TABLE_DELETE_ERROR.getCode(), "bind table id " + id + "has data"); + } + List columns = tableColumnsService.listByTableId(id); + + String user = DataModelSecurityContextHolder.getContext().getDataModelAuthentication().getUser(); + + //删除表相关内容 + getBaseMapper().deleteById(id); + //删除字段 + tableColumnsService.deleteByTableId(id); + //删除版本 + tableVersionService.getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelTableVersion::getName, current.getName())); + //删除收藏信息 + tableCollectService.getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelTableCollcetion::getName, current.getName())); + //删除物化信息 + tableMaterializedHistoryService.getBaseMapper().delete(Wrappers.lambdaQuery().eq(DssDatamodelTableMaterializedHistory::getTablename, current.getName())); + //发布表解绑模型事件 + publisher.publishEvent(new UnBindModelByTableEvent(this, user, current)); + publisher.publishEvent(new UnBindModelByColumnsEvent(this, user, current.getName(), columns)); + + return 1; + } + + + @Override + public int tableLabelReferenceCount(String name) { + int currentCount = getBaseMapper().selectCount(Wrappers.lambdaQuery() + .eq(DssDatamodelTable::getLabel, name) + .or() + .like(DssDatamodelTable::getLabel, name + ",") + .or() + .like(DssDatamodelTable::getLabel, "," + name + ",") + .or() + .like(DssDatamodelTable::getLabel, "," + name)); + + List preReferences = tableVersionService.tableContentMultipleReference(name); + int versionCount = (int) preReferences.stream().filter(e->{ + DssDatamodelTable temp = gson.fromJson(e.getTableParams(),DssDatamodelTable.class); + return Sets.newHashSet(StringUtils.split(temp.getLabel(), LabelConstant.SEPARATOR)).contains(name); + }).count(); + return currentCount + versionCount; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableStatsServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableStatsServiceImpl.java new file mode 100644 index 0000000000..270ed5474e --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableStatsServiceImpl.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableStatsMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableStats; +import com.webank.wedatasphere.dss.datamodel.table.service.TableStatsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; + +@Service +public class TableStatsServiceImpl extends ServiceImpl implements TableStatsService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableServiceImpl.class); + + + @Override + public DssDatamodelTableStats queryByTableName(String tableName) { + return getBaseMapper().selectOne(Wrappers.lambdaQuery().eq(DssDatamodelTableStats::getName,tableName)); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableThemeReferenceServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableThemeReferenceServiceImpl.java new file mode 100644 index 0000000000..388d059f8d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableThemeReferenceServiceImpl.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + +import com.webank.wedatasphere.dss.datamodel.center.common.service.TableThemeReferenceService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableService; +import org.springframework.stereotype.Service; + +import javax.annotation.Resource; + +@Service +public class TableThemeReferenceServiceImpl implements TableThemeReferenceService { + + @Resource + private TableService tableService; + + @Override + public int tableThemeReferenceCount(String name) { + return tableService.tableThemeReferenceCount(name); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableVersionServiceImpl.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableVersionServiceImpl.java new file mode 100644 index 0000000000..bb4a6c1476 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/service/impl/TableVersionServiceImpl.java @@ -0,0 +1,109 @@ +package com.webank.wedatasphere.dss.datamodel.table.service.impl; + + +import com.baomidou.mybatisplus.core.toolkit.Wrappers; +import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; +import com.github.pagehelper.PageHelper; +import com.github.pagehelper.PageInfo; +import com.google.gson.Gson; +import com.webank.wedatasphere.dss.datamodel.table.dao.DssDatamodelTableVersionMapper; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTable; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableCollcetion; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableColumns; +import com.webank.wedatasphere.dss.datamodel.table.entity.DssDatamodelTableVersion; +import com.webank.wedatasphere.dss.datamodel.table.service.TableMaterializedHistoryService; +import com.webank.wedatasphere.dss.datamodel.table.service.TableVersionService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; +import org.springframework.util.CollectionUtils; + +import javax.annotation.Resource; +import java.util.Date; +import java.util.List; + +@Service +public class TableVersionServiceImpl extends ServiceImpl implements TableVersionService { + + private static final Logger LOGGER = LoggerFactory.getLogger(TableVersionServiceImpl.class); + + private Gson gson = new Gson(); + + @Resource + private TableMaterializedHistoryService tableMaterializedHistoryService; + + + @Override + public String findLastVersion(String name) { + PageHelper.clearPage(); + PageHelper.startPage(1,1); + //查询当前表名称最大版本 + PageInfo pageInfo = new PageInfo<>(getBaseMapper().selectList( + Wrappers.lambdaQuery() + .eq(DssDatamodelTableVersion::getName, name) + .orderByDesc(DssDatamodelTableVersion::getVersion))); + List list = pageInfo.getList(); + return !CollectionUtils.isEmpty(list) ? list.get(0).getVersion() : null; + } + + + + @Override + @Transactional(rollbackFor = Exception.class) + public Long addOlderVersion(DssDatamodelTable orgTable, List orgColumns) { + DssDatamodelTableVersion version = new DssDatamodelTableVersion(); + version.setTblId(orgTable.getId()); + version.setName(orgTable.getName()); + version.setComment(orgTable.getComment()); + version.setTableCode(tableMaterializedHistoryService.generateSql(orgTable));//todo 生成建表脚本 + version.setIsMaterialized(1);//todo 判断是否物化 + version.setColumns(gson.toJson(orgColumns)); + version.setTableParams(gson.toJson(orgTable)); + version.setSourceType("add");//todo 此字段的意义 + version.setCreateTime(new Date()); + version.setUpdateTime(new Date()); + version.setVersion(orgTable.getVersion()); + version.setCreator(orgTable.getCreator()); + getBaseMapper().insert(version); + return version.getId(); + } + + + @Override + public DssDatamodelTableVersion findBackup(String name, String version) { + return getBaseMapper().selectOne( + Wrappers.lambdaQuery() + .eq(DssDatamodelTableVersion::getName, name) + .eq(DssDatamodelTableVersion::getVersion, version)); + } + + + @Override + public List tableContentReference(String content) { + return getBaseMapper().selectList( + Wrappers.lambdaQuery() + .like(DssDatamodelTableVersion::getTableParams,"\""+content + "\"")); + } + + @Override + public List tableColumnsReference(String content) { + return getBaseMapper().selectList( + Wrappers.lambdaQuery() + .like(DssDatamodelTableVersion::getColumns,"\""+content + "\"")); + } + + + @Override + public List tableContentMultipleReference(String context) { + return getBaseMapper().selectList( + Wrappers.lambdaQuery() + .like(DssDatamodelTableVersion::getTableParams,"\""+ context + "\"") + .or() + .like(DssDatamodelTableVersion::getTableParams,"\""+ context + ",") + .or() + .like(DssDatamodelTableVersion::getTableParams,","+ context + ",") + .or() + .like(DssDatamodelTableVersion::getTableParams,","+ context + "\"")); + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelAddVO.java new file mode 100644 index 0000000000..95501a37f7 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelAddVO.java @@ -0,0 +1,37 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; +import java.util.Map; +@Data +public class LabelAddVO { + + private String name; + + private String fieldIdentifier; + + /** + * 标签键值对 json + */ + private Map paramMap; + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + /** + * 英文 + */ + private String warehouseThemeNameEn; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelEnableVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelEnableVO.java new file mode 100644 index 0000000000..2594f5b53a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelEnableVO.java @@ -0,0 +1,8 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; + +@Data +public class LabelEnableVO { + private Integer isAvailable; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelUpdateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelUpdateVO.java new file mode 100644 index 0000000000..ac215667ba --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelUpdateVO.java @@ -0,0 +1,40 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; + +import java.util.Map; + +@Data +public class LabelUpdateVO { + + private String name; + + private String fieldIdentifier; + + /** + * 标签键值对 json + */ + private Map paramMap; + + + private String comment; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + private String owner; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + private Integer isAvailable; + + /** + * 英文 + */ + private String warehouseThemeNameEn; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelsQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelsQueryVO.java new file mode 100644 index 0000000000..ddfc6fb3f8 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/LabelsQueryVO.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import com.webank.wedatasphere.dss.datamodel.center.common.vo.PageVO; +import lombok.Data; + +@Data +public class LabelsQueryVO extends PageVO { + private String name; + + private Integer isAvailable; + + private String owner; + + private String warehouseThemeName; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableAddVO.java new file mode 100644 index 0000000000..d40885da1d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableAddVO.java @@ -0,0 +1,229 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +import java.util.List; +@Data +@ToString +public class TableAddVO { + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + /** + * 外部表时 location + */ + private String location; + + /** + * 标签 + */ + private String label; + + private List columns; + + public String getLocation() { + return location; + } + + public void setLocation(String location) { + this.location = location; + } + + public Integer getIsExternal() { + return isExternal; + } + + public void setIsExternal(Integer isExternal) { + this.isExternal = isExternal; + } + + public String getDataBase() { + return dataBase; + } + + public void setDataBase(String dataBase) { + this.dataBase = dataBase; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getAlias() { + return alias; + } + + public void setAlias(String alias) { + this.alias = alias; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public String getComment() { + return comment; + } + + public void setComment(String comment) { + this.comment = comment; + } + + + + public String getWarehouseLayerName() { + return warehouseLayerName; + } + + public void setWarehouseLayerName(String warehouseLayerName) { + this.warehouseLayerName = warehouseLayerName; + } + + public String getWarehouseThemeName() { + return warehouseThemeName; + } + + public void setWarehouseThemeName(String warehouseThemeName) { + this.warehouseThemeName = warehouseThemeName; + } + + public String getLifecycle() { + return lifecycle; + } + + public void setLifecycle(String lifecycle) { + this.lifecycle = lifecycle; + } + + public Integer getIsPartitionTable() { + return isPartitionTable; + } + + public void setIsPartitionTable(Integer isPartitionTable) { + this.isPartitionTable = isPartitionTable; + } + + public Integer getIsAvailable() { + return isAvailable; + } + + public void setIsAvailable(Integer isAvailable) { + this.isAvailable = isAvailable; + } + + public String getStorageType() { + return storageType; + } + + public void setStorageType(String storageType) { + this.storageType = storageType; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public String getCompress() { + return compress; + } + + public void setCompress(String compress) { + this.compress = compress; + } + + public String getFileType() { + return fileType; + } + + public void setFileType(String fileType) { + this.fileType = fileType; + } + + public List getColumns() { + return columns; + } + + public void setColumns(List columns) { + this.columns = columns; + } + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCheckDataVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCheckDataVO.java new file mode 100644 index 0000000000..b1eaa66639 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCheckDataVO.java @@ -0,0 +1,12 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableCheckDataVO { + String tableName; + String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectCancelVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectCancelVO.java new file mode 100644 index 0000000000..561a64fd5a --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectCancelVO.java @@ -0,0 +1,33 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +public class TableCollectCancelVO { + + private String user; + + private String tableName; + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public String getTableName() { + return tableName; + } + + public void setTableName(String tableName) { + this.tableName = tableName; + } + + @Override + public String toString() { + return "TableCollectCancelVO{" + + "user='" + user + '\'' + + ", tableName='" + tableName + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectQueryVO.java new file mode 100644 index 0000000000..7adedc957c --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectQueryVO.java @@ -0,0 +1,99 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + + +public class TableCollectQueryVO { + + private Integer pageSize = 20; + + private Integer pageNum = 1; + + + private String dataBase; + + + private String name; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + + private String user; + + + public String getDataBase() { + return dataBase; + } + + public void setDataBase(String dataBase) { + this.dataBase = dataBase; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getWarehouseLayerName() { + return warehouseLayerName; + } + + public void setWarehouseLayerName(String warehouseLayerName) { + this.warehouseLayerName = warehouseLayerName; + } + + public String getWarehouseThemeName() { + return warehouseThemeName; + } + + public void setWarehouseThemeName(String warehouseThemeName) { + this.warehouseThemeName = warehouseThemeName; + } + + public String getUser() { + return user; + } + + public void setUser(String user) { + this.user = user; + } + + public Integer getPageSize() { + return pageSize; + } + + public void setPageSize(Integer pageSize) { + this.pageSize = pageSize; + } + + public Integer getPageNum() { + return pageNum; + } + + public void setPageNum(Integer pageNum) { + this.pageNum = pageNum; + } + + @Override + public String toString() { + return "TableCollectQueryVO{" + + "pageSize=" + pageSize + + ", pageNum=" + pageNum + + ", dataBase='" + dataBase + '\'' + + ", name='" + name + '\'' + + ", warehouseLayerName='" + warehouseLayerName + '\'' + + ", warehouseThemeName='" + warehouseThemeName + '\'' + + ", user='" + user + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectVO.java new file mode 100644 index 0000000000..425da6431d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCollectVO.java @@ -0,0 +1,94 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; + +@Data +@ToString +public class TableCollectVO { + + private Long tableId; + + private String user; + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 标签 + */ + private String label; + + + /** + * atlas标识 + */ + private String guid; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnBindVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnBindVO.java new file mode 100644 index 0000000000..99f5be4555 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnBindVO.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; + +@Data +public class TableColumnBindVO { + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 模型信息名称 + */ + private String modelName; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnVO.java new file mode 100644 index 0000000000..adb2ae9433 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnVO.java @@ -0,0 +1,44 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableColumnVO { + + private String name; + + private String alias; + + private String type; + + private String comment; + + private Integer isPartitionField; + + private Integer isPrimary; + + private Integer length; + + private String rule; + + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 关联具体模型id信息 + */ + private Long modelId; + + + private String modelName; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnsAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnsAddVO.java new file mode 100644 index 0000000000..987489dcaf --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableColumnsAddVO.java @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; + +@Data +public class TableColumnsAddVO { + + private Long tableId; + + private String name; + + private String alias; + + private String type; + + private String comment; + + private Integer isPartitionField; + + private Integer isPrimary; + + private Integer length; + + private String rule; + + /** + * 0 维度,1 指标 2 度量 + */ + private Integer modelType; + + /** + * 模型信息名称 + */ + private String modelName; + + /** + * 模型信息英文名称 + */ + private String modelNameEn; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateSqlVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateSqlVO.java new file mode 100644 index 0000000000..d7623760d9 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateSqlVO.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableCreateSqlVO { + private Long tableId; + + private String guid; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateVO.java new file mode 100644 index 0000000000..01077cb4d1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableCreateVO.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableCreateVO { + private Long tableId; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDataPreviewVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDataPreviewVO.java new file mode 100644 index 0000000000..f203ddac8d --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDataPreviewVO.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; + +@Data +public class TableDataPreviewVO { + private String tableName; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDatabasesQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDatabasesQueryVO.java new file mode 100644 index 0000000000..13f8a455bc --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDatabasesQueryVO.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableDatabasesQueryVO { + private String name; + + private Integer pageSize = 20; + + private Integer pageNum = 1; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDictionaryListVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDictionaryListVO.java new file mode 100644 index 0000000000..00e09209b2 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableDictionaryListVO.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +public class TableDictionaryListVO { + + private String type; + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + @Override + public String toString() { + return "TableDictionaryListVO{" + + "type='" + type + '\'' + + '}'; + } +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableListVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableListVO.java new file mode 100644 index 0000000000..9c3e4e41f7 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableListVO.java @@ -0,0 +1,40 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import com.webank.wedatasphere.dss.datamodel.center.common.vo.PageVO; +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableListVO extends PageVO { + + private String name; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + + private String user; + + /** + * 0 维度 1 指标 2 度量 -1 按照表名查询 + */ + private Integer modelType = -1; + + + private String modelName; + + /** + * -1 表示查询逻辑表 0 表示查询asserts + */ + private Integer tableType = -1; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TablePartitionStatsVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TablePartitionStatsVO.java new file mode 100644 index 0000000000..62a027c9fa --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TablePartitionStatsVO.java @@ -0,0 +1,6 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +public class TablePartitionStatsVO { + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableQueryOneVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableQueryOneVO.java new file mode 100644 index 0000000000..82904d072f --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableQueryOneVO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableQueryOneVO { + + private String name; + + /** + * atlas标识 + */ + private String guid; + + + private String user; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableUpdateVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableUpdateVO.java new file mode 100644 index 0000000000..abd9e6bfa1 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableUpdateVO.java @@ -0,0 +1,99 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +@Data +@ToString +public class TableUpdateVO { + + + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + private Date createTime; + + private Date updateTime; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + + /** + * 外部表时 location + */ + private String location; + + /** + * 标签 + */ + private String label; + + + private List columns; + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionAddVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionAddVO.java new file mode 100644 index 0000000000..397892ca52 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionAddVO.java @@ -0,0 +1,90 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; +import lombok.ToString; + +import java.util.Date; +import java.util.List; + +@Data +@ToString +public class TableVersionAddVO { + private String dataBase; + + private String name; + + private String alias; + + private String creator; + + private String comment; + + /** + * 数仓层级 + */ + private String warehouseLayerName; + + /** + * 数仓层级英文 + */ + private String warehouseLayerNameEn; + + /** + * 数仓主题格式为: theme_domain_name.theme_name + */ + private String warehouseThemeName; + + /** + * 数仓主题英文 + */ + private String warehouseThemeNameEn; + + /** + * 生命周期 + */ + private String lifecycle; + + private String lifecycleEn; + + private Integer isPartitionTable; + + private Integer isAvailable; + + /** + * 存储类型:hive/mysql + */ + private String storageType; + + /** + * 授权的名字:userName、roleName + */ + private String principalName; + + /** + * 压缩格式 + */ + private String compress; + + /** + * 文件格式 + */ + private String fileType; + + + /** + * 是否外部表 0 内部表 1外部表 + */ + private Integer isExternal; + + /** + * 外部表时 location + */ + private String location; + + private String label; + + private List columns; + + +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionQueryVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionQueryVO.java new file mode 100644 index 0000000000..c6ae4e44cf --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionQueryVO.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TableVersionQueryVO { + + private String name; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionRollBackVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionRollBackVO.java new file mode 100644 index 0000000000..795a031979 --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TableVersionRollBackVO.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + + +import lombok.Data; + +@Data +public class TableVersionRollBackVO { + + private String name; + + private String version; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TblPartitionStatsVO.java b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TblPartitionStatsVO.java new file mode 100644 index 0000000000..a8c7b00aad --- /dev/null +++ b/dss-apps/dss-datamodel-center/dss-datamodel-table-management/src/main/java/com/webank/wedatasphere/dss/datamodel/table/vo/TblPartitionStatsVO.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.datamodel.table.vo; + +import lombok.Data; +import lombok.ToString; + +@Data +@ToString +public class TblPartitionStatsVO { + + private String name; + + private String guid; + + private String user; +} diff --git a/dss-apps/dss-datamodel-center/pom.xml b/dss-apps/dss-datamodel-center/pom.xml new file mode 100644 index 0000000000..2ae030455f --- /dev/null +++ b/dss-apps/dss-datamodel-center/pom.xml @@ -0,0 +1,55 @@ + + + + dss + com.webank.wedatasphere.dss + 1.2.0 + ../../pom.xml + + 4.0.0 + + dss-datamodel-center + pom + + dss-datamodel-center-server + dss-datamodel-dimension-management + dss-datamodel-indicator-management + dss-datamodel-measure-management + dss-datamodel-table-management + dss-datamodel-center-common + dss-datamodel-center-client + + + + + UTF-8 + 2.16 + 2.22.2 + 2.22.2 + + + + + org.modelmapper + modelmapper + 2.4.4 + + + + junit + junit + 4.12 + test + + + org.junit.platform + junit-platform-launcher + 1.5.2 + test + + + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/pom.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/pom.xml new file mode 100644 index 0000000000..37bcab239e --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + dss-datawarehouse-design + com.webank.wedatasphere.dss + 1.2.0 + + + dss-data-warehouse-client + jar + + + 8 + 8 + + + + + + org.apache.linkis + linkis-module + + + + org.apache.linkis + linkis-httpclient + + + + org.apache.linkis + linkis-gateway-httpclient-support + + + + org.projectlombok + lombok + provided + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwLayerVO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwLayerVO.java new file mode 100644 index 0000000000..601d804a67 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwLayerVO.java @@ -0,0 +1,121 @@ +package com.webank.wedatasphere.warehouse.domain; + +//import lombok.Getter; +//import lombok.Setter; +//import lombok.ToString; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + +//@Setter +//@Getter +//@ToString +@JsonIgnoreProperties(ignoreUnknown = true) +public class DwLayerVO { + private String id; + private String name; + private String enName; + private Boolean preset; + private String description; + private String principalName; + private String dbs; + private Integer sort; + private Boolean isAvailable; + private Long createTime; + private Long updateTime; + private int referenceCount; + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEnName() { + return enName; + } + + public void setEnName(String enName) { + this.enName = enName; + } + + public Boolean getPreset() { + return preset; + } + + public void setPreset(Boolean preset) { + this.preset = preset; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public String getDbs() { + return dbs; + } + + public void setDbs(String dbs) { + this.dbs = dbs; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public Boolean getAvailable() { + return isAvailable; + } + + public void setAvailable(Boolean available) { + isAvailable = available; + } + + public Long getCreateTime() { + return createTime; + } + + public void setCreateTime(Long createTime) { + this.createTime = createTime; + } + + public Long getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Long updateTime) { + this.updateTime = updateTime; + } + + public int getReferenceCount() { + return referenceCount; + } + + public void setReferenceCount(int referenceCount) { + this.referenceCount = referenceCount; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwModifierVO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwModifierVO.java new file mode 100644 index 0000000000..0076ce598d --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwModifierVO.java @@ -0,0 +1,123 @@ +package com.webank.wedatasphere.warehouse.domain; + +//import lombok.Getter; +//import lombok.Setter; +//import lombok.ToString; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + +import java.util.Date; + +//@Setter +//@Getter +//@ToString +@JsonIgnoreProperties(ignoreUnknown = true) +public class DwModifierVO { + private Long id; + private String modifierType; + private String modifierTypeEn; + private String layerArea; + private String layerAreaEn; + private String themeArea; + private String themeAreaEn; + private String description; + private Boolean isAvailable; + private Date createTime; + private Date updateTime; + private int referenceCount; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getModifierType() { + return modifierType; + } + + public void setModifierType(String modifierType) { + this.modifierType = modifierType; + } + + public String getModifierTypeEn() { + return modifierTypeEn; + } + + public void setModifierTypeEn(String modifierTypeEn) { + this.modifierTypeEn = modifierTypeEn; + } + + public String getLayerArea() { + return layerArea; + } + + public void setLayerArea(String layerArea) { + this.layerArea = layerArea; + } + + public String getLayerAreaEn() { + return layerAreaEn; + } + + public void setLayerAreaEn(String layerAreaEn) { + this.layerAreaEn = layerAreaEn; + } + + public String getThemeArea() { + return themeArea; + } + + public void setThemeArea(String themeArea) { + this.themeArea = themeArea; + } + + public String getThemeAreaEn() { + return themeAreaEn; + } + + public void setThemeAreaEn(String themeAreaEn) { + this.themeAreaEn = themeAreaEn; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Boolean getAvailable() { + return isAvailable; + } + + public void setAvailable(Boolean available) { + isAvailable = available; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public int getReferenceCount() { + return referenceCount; + } + + public void setReferenceCount(int referenceCount) { + this.referenceCount = referenceCount; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwStatisticalPeriodVO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwStatisticalPeriodVO.java new file mode 100644 index 0000000000..4534a286dd --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwStatisticalPeriodVO.java @@ -0,0 +1,214 @@ +package com.webank.wedatasphere.warehouse.domain; + +//import lombok.Getter; +//import lombok.Setter; +//import lombok.ToString; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + +import java.util.Date; + +//@Setter +//@Getter +//@ToString +@JsonIgnoreProperties(ignoreUnknown = true) +public class DwStatisticalPeriodVO { + private Long id; + + private Long themeDomainId; + + private Long layerId; + + private String name; + + private String enName; + + private String description; + + private String startTimeFormula; + + private String endTimeFormula; + + private String principalName; + + private Boolean isAvailable; + + private String owner; + + private Date createTime; + + private Date updateTime; + + private String themeArea; + + private String themeAreaEn; + + private String layerArea; + + private String layerAreaEn; + + transient private Boolean status; + + private Boolean referenced; + + private int referenceCount; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public Long getThemeDomainId() { + return themeDomainId; + } + + public void setThemeDomainId(Long themeDomainId) { + this.themeDomainId = themeDomainId; + } + + public Long getLayerId() { + return layerId; + } + + public void setLayerId(Long layerId) { + this.layerId = layerId; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEnName() { + return enName; + } + + public void setEnName(String enName) { + this.enName = enName; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public String getStartTimeFormula() { + return startTimeFormula; + } + + public void setStartTimeFormula(String startTimeFormula) { + this.startTimeFormula = startTimeFormula; + } + + public String getEndTimeFormula() { + return endTimeFormula; + } + + public void setEndTimeFormula(String endTimeFormula) { + this.endTimeFormula = endTimeFormula; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public Boolean getAvailable() { + return isAvailable; + } + + public void setAvailable(Boolean available) { + isAvailable = available; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public String getThemeArea() { + return themeArea; + } + + public void setThemeArea(String themeArea) { + this.themeArea = themeArea; + } + + public String getThemeAreaEn() { + return themeAreaEn; + } + + public void setThemeAreaEn(String themeAreaEn) { + this.themeAreaEn = themeAreaEn; + } + + public String getLayerArea() { + return layerArea; + } + + public void setLayerArea(String layerArea) { + this.layerArea = layerArea; + } + + public String getLayerAreaEn() { + return layerAreaEn; + } + + public void setLayerAreaEn(String layerAreaEn) { + this.layerAreaEn = layerAreaEn; + } + + public Boolean getStatus() { + return status; + } + + public void setStatus(Boolean status) { + this.status = status; + } + + public Boolean getReferenced() { + return referenced; + } + + public void setReferenced(Boolean referenced) { + this.referenced = referenced; + } + + public int getReferenceCount() { + return referenceCount; + } + + public void setReferenceCount(int referenceCount) { + this.referenceCount = referenceCount; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwThemeDomainVO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwThemeDomainVO.java new file mode 100644 index 0000000000..89200431d2 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/java/com/webank/wedatasphere/warehouse/domain/DwThemeDomainVO.java @@ -0,0 +1,124 @@ +package com.webank.wedatasphere.warehouse.domain; + +//import lombok.Getter; +//import lombok.Setter; +//import lombok.ToString; +import org.codehaus.jackson.annotate.JsonIgnoreProperties; + +import java.util.Date; + +//@Setter +//@Getter +//@ToString +@JsonIgnoreProperties(ignoreUnknown = true) +public class DwThemeDomainVO { + private Long id; + private String name; + private String enName; + private String owner; + private String principalName; + private Integer sort; + private String description; + private Date createTime; + private Date updateTime; + private Boolean preset; + private Boolean isAvailable; + + private int referenceCount; + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getEnName() { + return enName; + } + + public void setEnName(String enName) { + this.enName = enName; + } + + public String getOwner() { + return owner; + } + + public void setOwner(String owner) { + this.owner = owner; + } + + public String getPrincipalName() { + return principalName; + } + + public void setPrincipalName(String principalName) { + this.principalName = principalName; + } + + public Integer getSort() { + return sort; + } + + public void setSort(Integer sort) { + this.sort = sort; + } + + public String getDescription() { + return description; + } + + public void setDescription(String description) { + this.description = description; + } + + public Date getCreateTime() { + return createTime; + } + + public void setCreateTime(Date createTime) { + this.createTime = createTime; + } + + public Date getUpdateTime() { + return updateTime; + } + + public void setUpdateTime(Date updateTime) { + this.updateTime = updateTime; + } + + public Boolean getPreset() { + return preset; + } + + public void setPreset(Boolean preset) { + this.preset = preset; + } + + public Boolean getAvailable() { + return isAvailable; + } + + public void setAvailable(Boolean available) { + isAvailable = available; + } + + public int getReferenceCount() { + return referenceCount; + } + + public void setReferenceCount(int referenceCount) { + this.referenceCount = referenceCount; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/AbstractDwRemoteClient.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/AbstractDwRemoteClient.scala new file mode 100644 index 0000000000..b4259e2b1f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/AbstractDwRemoteClient.scala @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.warehouse.client + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result + +abstract class AbstractDwRemoteClient extends RemoteClient { + protected val dwsHttpClient: DWSHttpClient + override def execute(action: Action) : Result = action match { + case action: Action => dwsHttpClient.execute(action) + } + override def close() : scala.Unit = dwsHttpClient.close() +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwAction.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwAction.scala new file mode 100644 index 0000000000..0415687d78 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwAction.scala @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.warehouse.client + +import org.apache.linkis.httpclient.dws.request.DWSHttpAction +import org.apache.linkis.httpclient.request.UserAction + +trait DwAction extends DWSHttpAction with UserAction { +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwRemoteClient.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwRemoteClient.scala new file mode 100644 index 0000000000..5fb3fe76f5 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/DwRemoteClient.scala @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.warehouse.client + +import com.webank.wedatasphere.warehouse.client.action.{ListDwLayerAction, ListDwModifierAction, ListDwStatisticalPeriodAction, ListDwThemeDomainAction} +import com.webank.wedatasphere.warehouse.client.result.{ListLayersResult, ListModifiersResult, ListStatisticalPeriodsResult, ListThemeDomainsResult} + +trait DwRemoteClient extends RemoteClient { + def listLayers(action : ListDwLayerAction) : ListLayersResult + + def listThemeDomains(action : ListDwThemeDomainAction) : ListThemeDomainsResult + + def listModifiers(action : ListDwModifierAction) : ListModifiersResult + + def listStatisticalPeriods(action : ListDwStatisticalPeriodAction) : ListStatisticalPeriodsResult +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/GovernanceDwRemoteClient.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/GovernanceDwRemoteClient.scala new file mode 100644 index 0000000000..a27aaf0c77 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/GovernanceDwRemoteClient.scala @@ -0,0 +1,26 @@ +package com.webank.wedatasphere.warehouse.client + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.config.DWSClientConfig +import com.webank.wedatasphere.warehouse.client.action.{ListDwLayerAction, ListDwModifierAction, ListDwStatisticalPeriodAction, ListDwThemeDomainAction} +import com.webank.wedatasphere.warehouse.client.result.{ListLayersResult, ListModifiersResult, ListStatisticalPeriodsResult, ListThemeDomainsResult} + +class GovernanceDwRemoteClient(clientConfig: DWSClientConfig) extends AbstractDwRemoteClient with DwRemoteClient { + protected override val dwsHttpClient = new DWSHttpClient(clientConfig, "Governance-DataWarehouse-Client") + + override def listLayers(action: ListDwLayerAction): ListLayersResult = { + return execute(action).asInstanceOf[ListLayersResult] + } + + override def listThemeDomains(action: ListDwThemeDomainAction): ListThemeDomainsResult = { + execute(action).asInstanceOf[ListThemeDomainsResult] + } + + override def listModifiers(action: ListDwModifierAction): ListModifiersResult = { + execute(action).asInstanceOf[ListModifiersResult] + } + + override def listStatisticalPeriods(action: ListDwStatisticalPeriodAction): ListStatisticalPeriodsResult = { + execute(action).asInstanceOf[ListStatisticalPeriodsResult] + } +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/RemoteClient.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/RemoteClient.scala new file mode 100644 index 0000000000..150331fa5c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/RemoteClient.scala @@ -0,0 +1,10 @@ +package com.webank.wedatasphere.warehouse.client + +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result + +trait RemoteClient extends java.io.Closeable { + protected def execute(action: Action): Result + + override def close(): scala.Unit +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwLayerAction.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwLayerAction.scala new file mode 100644 index 0000000000..bfd721fb92 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwLayerAction.scala @@ -0,0 +1,55 @@ +package com.webank.wedatasphere.warehouse.client.action + +import org.apache.linkis.httpclient.request.GetAction +import com.webank.wedatasphere.warehouse.client.DwAction + +class ListDwLayerAction() extends GetAction with DwAction { + private var user: String = _ +// private var isAvailable: Boolean = true +// def setIsAvailable(isAvailable: Boolean): Unit = this.isAvailable = isAvailable +// def getIsAvailable: Boolean = this.isAvailable + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-warehouse", "layers", "all") +} + +object ListDwLayerAction { + def builder(): Builder = new Builder + + class Builder private[ListDwLayerAction]() { + private var user: String = _ + private var db: String = _ + private var isAvailable: Boolean = true + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setIsAvailable(isAvailable: Boolean): Builder = { + this.isAvailable = isAvailable + this + } + + def setDb(db: String): Builder = { + this.db = db + this + } + + def build(): ListDwLayerAction = { + val action = new ListDwLayerAction + if (null != user) { + action.setUser(user) + } + if (null != db) { + action.setParameter("db", db); + } + action.setParameter("isAvailable", isAvailable) + action + } + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwModifierAction.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwModifierAction.scala new file mode 100644 index 0000000000..a9b495c5c2 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwModifierAction.scala @@ -0,0 +1,90 @@ +package com.webank.wedatasphere.warehouse.client.action + +import org.apache.linkis.httpclient.request.GetAction +import com.webank.wedatasphere.warehouse.client.DwAction + +class ListDwModifierAction extends GetAction with DwAction { + private var user: String = _ +// private var isAvailable: Boolean = _ +// private var theme: String = _ +// private var layer: String = _ + +// def setIsAvailable(isAvailable: Boolean): Unit = this.isAvailable = isAvailable +// +// def getIsAvailable: Boolean = this.isAvailable +// +// def setTheme(theme: String): Unit = this.theme = theme +// +// def getTheme: String = this.theme +// +// def setLayer(layer: String): Unit = this.layer = layer +// +// def getLayer: String = this.layer + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-warehouse", "modifiers", "all") +} + +object ListDwModifierAction { + def builder(): Builder = new Builder + + class Builder private[ListDwModifierAction]() { + private var user: String = _ + private var name: String = "" + private var layer: String = "" + private var theme: String = "" + private var isAvailable: Boolean = true + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setName(name: String): Builder = { + this.name = name + this + } + + def setLayer(layer: String): Builder = { + this.layer = layer + this + } + + def setTheme(theme: String): Builder = { + this.theme = theme + this + } + + def setIsAvailable(isAvailable: Boolean): Builder = { + this.isAvailable = isAvailable + this + } + + def build(): ListDwModifierAction = { + val action = new ListDwModifierAction +// action.setUser(user) +// action.setParameter("isAvailable", isAvailable) +// action.setParameter("typeName", name) +// action.setParameter("layer", layer) +// action.setParameter("theme", theme) + if (null != user) { + action.setUser(user) + } + action.setParameter("isAvailable", isAvailable) + if (null != name) { + action.setParameter("typeName", name) + } + if (null != layer) { + action.setParameter("layer", layer) + } + if (null != theme) { + action.setParameter("theme", theme) + } + action + } + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwStatisticalPeriodAction.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwStatisticalPeriodAction.scala new file mode 100644 index 0000000000..db69c32bd3 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwStatisticalPeriodAction.scala @@ -0,0 +1,73 @@ +package com.webank.wedatasphere.warehouse.client.action + +import org.apache.linkis.httpclient.request.GetAction +import com.webank.wedatasphere.warehouse.client.DwAction + +class ListDwStatisticalPeriodAction extends GetAction with DwAction { + private var user: String = _ +// private var isAvailable: Boolean = true +// def setIsAvailable(isAvailable: Boolean): Unit = this.isAvailable = isAvailable +// def getIsAvailable: Boolean = this.isAvailable + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-warehouse", "statistical_periods", "all") +} + +object ListDwStatisticalPeriodAction { + def builder(): Builder = new Builder + + class Builder private[ListDwStatisticalPeriodAction]() { + private var user: String = _ + private var name: String = "" + private var layer: String = "" + private var theme: String = "" + private var isAvailable: Boolean = true + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setName(name: String): Builder = { + this.name = name + this + } + + def setLayer(layer: String): Builder = { + this.layer = layer + this + } + + def setTheme(theme: String): Builder = { + this.theme = theme + this + } + + def setIsAvailable(isAvailable: Boolean): Builder = { + this.isAvailable = isAvailable + this + } + + def build(): ListDwStatisticalPeriodAction = { + val action = new ListDwStatisticalPeriodAction + if (null != user) { + action.setUser(user) + } + action.setParameter("isAvailable", isAvailable) + if (null != name) { + action.setParameter("name", name) + } + if (null != layer) { + action.setParameter("layer", layer) + } + if (null != theme) { + action.setParameter("theme", theme) + } + action + } + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwThemeDomainAction.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwThemeDomainAction.scala new file mode 100644 index 0000000000..d040284fb0 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/action/ListDwThemeDomainAction.scala @@ -0,0 +1,46 @@ +package com.webank.wedatasphere.warehouse.client.action + +import org.apache.linkis.httpclient.request.GetAction +import com.webank.wedatasphere.warehouse.client.DwAction + +class ListDwThemeDomainAction extends GetAction with DwAction { + private var user: String = _ +// private var isAvailable: Boolean = true +// def setIsAvailable(isAvailable: Boolean): Unit = this.isAvailable = isAvailable +// def getIsAvailable: Boolean = this.isAvailable + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("data-warehouse", "themedomains", "all") +} + +object ListDwThemeDomainAction { + def builder(): Builder = new Builder + + class Builder private[ListDwThemeDomainAction]() { + private var user: String = _ + private var isAvailable: Boolean = true + + def setUser(user: String): Builder = { + this.user = user + this + } + + def setIsAvailable(isAvailable: Boolean): Builder = { + this.isAvailable = isAvailable + this + } + + def build(): ListDwThemeDomainAction = { + val action = new ListDwThemeDomainAction + if (null != user) { + action.setUser(user) + } + action.setParameter("isAvailable", isAvailable) + action + } + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListLayersResult.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListLayersResult.scala new file mode 100644 index 0000000000..e66892d388 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListLayersResult.scala @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.warehouse.client.result + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.response.DWSResult +import com.webank.wedatasphere.warehouse.domain.DwLayerVO +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult(value = "/api/rest_j/v\\d+/data-warehouse/layers/all") +class ListLayersResult extends DWSResult { + @BeanProperty var list: java.util.List[java.util.Map[String, Any]] = _ + + def getAll: util.List[DwLayerVO] = { + import scala.collection.JavaConverters._ + list.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DwLayerVO]) + }).asJava + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListModifiersResult.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListModifiersResult.scala new file mode 100644 index 0000000000..aefeb646ab --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListModifiersResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.warehouse.client.result + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult +import com.webank.wedatasphere.warehouse.domain.DwModifierVO + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult(value = "/api/rest_j/v\\d+/data-warehouse/modifiers/all") +class ListModifiersResult extends DWSResult { + @BeanProperty var list: java.util.List[java.util.Map[String, Any]] = _ + + def getAll: util.List[DwModifierVO] = { + import scala.collection.JavaConverters._ + list.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DwModifierVO]) + }).asJava + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListStatisticalPeriodsResult.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListStatisticalPeriodsResult.scala new file mode 100644 index 0000000000..1d0f5df0f2 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListStatisticalPeriodsResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.warehouse.client.result + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult +import com.webank.wedatasphere.warehouse.domain.DwStatisticalPeriodVO + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult(value = "/api/rest_j/v\\d+/data-warehouse/statistical_periods/all") +class ListStatisticalPeriodsResult extends DWSResult { + @BeanProperty var list: java.util.List[java.util.Map[String, Any]] = _ + + def getAll: util.List[DwStatisticalPeriodVO] = { + import scala.collection.JavaConverters._ + list.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DwStatisticalPeriodVO]) + }).asJava + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListThemeDomainsResult.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListThemeDomainsResult.scala new file mode 100644 index 0000000000..8424265d04 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/main/scala/com/webank/wedatasphere/warehouse/client/result/ListThemeDomainsResult.scala @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.warehouse.client.result + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult +import com.webank.wedatasphere.warehouse.domain.DwThemeDomainVO + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult(value = "/api/rest_j/v\\d+/data-warehouse/themedomains/all") +class ListThemeDomainsResult extends DWSResult { + @BeanProperty var list: java.util.List[java.util.Map[String, Any]] = _ + + def getAll: util.List[DwThemeDomainVO] = { + import scala.collection.JavaConverters._ + list.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DwThemeDomainVO]) + }).asJava + } + +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/java/com/webank/wedatasphere/warehouse/client/RemoteClientTest.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/java/com/webank/wedatasphere/warehouse/client/RemoteClientTest.java new file mode 100644 index 0000000000..89717b9136 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/java/com/webank/wedatasphere/warehouse/client/RemoteClientTest.java @@ -0,0 +1,51 @@ +package com.webank.wedatasphere.warehouse.client; + +import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy; +import org.apache.linkis.httpclient.dws.config.DWSClientConfig; +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder; +import com.webank.wedatasphere.warehouse.client.action.ListDwLayerAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwModifierAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwStatisticalPeriodAction; +import com.webank.wedatasphere.warehouse.client.action.ListDwThemeDomainAction; +import com.webank.wedatasphere.warehouse.client.result.ListLayersResult; +import com.webank.wedatasphere.warehouse.client.result.ListModifiersResult; +import com.webank.wedatasphere.warehouse.client.result.ListStatisticalPeriodsResult; +import com.webank.wedatasphere.warehouse.client.result.ListThemeDomainsResult; + +import java.util.List; +import java.util.concurrent.TimeUnit; + +public class RemoteClientTest { + + public static void main(String[] args) { + DWSClientConfig clientConfig = ((DWSClientConfigBuilder) (DWSClientConfigBuilder.newBuilder().addServerUrl("http://dss.shineweng.com:8088") + .connectionTimeout(30000).discoveryEnabled(true) + .discoveryFrequency(1, TimeUnit.MINUTES) + .loadbalancerEnabled(true).maxConnectionSize(5) + .retryEnabled(false).readTimeout(30000) + .setAuthenticationStrategy(new StaticAuthenticationStrategy()).setAuthTokenKey("hdfs") + .setAuthTokenValue("hdfs"))).setDWSVersion("v1").build(); + GovernanceDwRemoteClient governanceDwRemoteClient = new GovernanceDwRemoteClient(clientConfig); + + ListDwStatisticalPeriodAction action = new ListDwStatisticalPeriodAction.Builder().setLayer(null).setTheme(null).setUser("hdfs").setIsAvailable(false).build(); + ListStatisticalPeriodsResult listStatisticalPeriodsResult = governanceDwRemoteClient.listStatisticalPeriods(action); + System.out.println(listStatisticalPeriodsResult.getAll().size()); + + ListDwLayerAction listDwLayerAction = new ListDwLayerAction.Builder().setUser("hdfs").setIsAvailable(false).build(); + String url = listDwLayerAction.getURL(); + System.out.println(url); + ListLayersResult listLayersResult = governanceDwRemoteClient.listLayers(listDwLayerAction); + System.out.println(listLayersResult.getAll()); + + ListDwThemeDomainAction listDwThemeDomainAction = new ListDwThemeDomainAction.Builder().setUser("hdfs").setIsAvailable(false).build(); + ListThemeDomainsResult listThemeDomainsResult = governanceDwRemoteClient.listThemeDomains(listDwThemeDomainAction); + System.out.println(listThemeDomainsResult.getList().size()); + + ListDwModifierAction listDwModifierAction = new ListDwModifierAction.Builder().setUser("hdfs").setIsAvailable(true).build(); + ListModifiersResult listModifiersResult = governanceDwRemoteClient.listModifiers(listDwModifierAction); + System.out.println(listModifiersResult.getAll().size()); + + } + + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/scala/com/webank/wedatasphere/warehouse/client/DwLayerRemoteClientTest.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/scala/com/webank/wedatasphere/warehouse/client/DwLayerRemoteClientTest.scala new file mode 100644 index 0000000000..18285736e0 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-client/src/test/scala/com/webank/wedatasphere/warehouse/client/DwLayerRemoteClientTest.scala @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.warehouse.client + +import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy +import org.apache.linkis.httpclient.dws.config.{DWSClientConfig, DWSClientConfigBuilder} +import com.webank.wedatasphere.warehouse.client.action.{ListDwLayerAction, ListDwModifierAction, ListDwThemeDomainAction} + +import java.util.concurrent.TimeUnit + +object DwLayerRemoteClientTest { + val serverUrl: String = s"http://192.168.0.120:9001" + val clientConfig: DWSClientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl(serverUrl) + .connectionTimeout(30000L) + .discoveryEnabled(true) + .discoveryFrequency(1L, TimeUnit.MINUTES) + .loadbalancerEnabled(true) + .maxConnectionSize(5) + .retryEnabled(false) + .readTimeout(30000L) + .setAuthenticationStrategy(new StaticAuthenticationStrategy()) + .setAuthTokenKey("BML-AUTH") + .setAuthTokenValue("BML-AUTH") + .setDWSVersion("v1") + .build() + + val client = new GovernanceDwRemoteClient(clientConfig) + + def main(args: Array[String]): Unit = { + val action = new ListDwLayerAction + action.setUser("hdfs") + val result = client.listLayers(action) + println(result.getAll) + + val action1 = new ListDwThemeDomainAction + val result1 = client.listThemeDomains(action1) + println(result1.getAll) + + val action2 = new ListDwModifierAction + val result2 = client.listModifiers(action2) + println(result2.getAll) + + val action3 = new ListDwThemeDomainAction + val result3 = client.listThemeDomains(action3) + println(result3.getAll) + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/pom.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/pom.xml new file mode 100644 index 0000000000..4cd4351a48 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/pom.xml @@ -0,0 +1,62 @@ + + + 4.0.0 + + dss-datawarehouse-design + com.webank.wedatasphere.dss + 1.2.0 + + + dss-data-warehouse-mybatis + jar + + + 8 + 8 + 3.4.1 + + + + + org.apache.linkis + linkis-module + provided + + + spring-jdbc + org.springframework + ${spring.version} + + + com.baomidou + mybatis-plus-boot-starter + ${mybatis-plus.boot.starter.version} + + + spring-boot-starter + org.springframework.boot + + + spring-boot-autoconfigure + org.springframework.boot + + + spring-beans + org.springframework + + + spring-jdbc + org.springframework + + + + + org.projectlombok + lombok + provided + + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceConfig.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceConfig.java new file mode 100644 index 0000000000..033fb8cff1 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/DataSourceConfig.java @@ -0,0 +1,76 @@ +/* + * Copyright 2019 WeBank + * + * 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 org.apache.linkis.mybatis; + +import org.apache.linkis.common.utils.JavaLog; +import org.apache.linkis.mybatis.conf.MybatisConfiguration; +import org.apache.commons.dbcp.BasicDataSource; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +@Configuration +@ConfigurationProperties +public class DataSourceConfig extends JavaLog { + + private static final Logger LOGGER = LoggerFactory.getLogger(DataSourceConfig.class); + + @Bean(name="dataSource", destroyMethod = "close") + @ConditionalOnMissingBean + public DataSource dataSource(){ + String dbUrl = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_URL.getValue(); + String username = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_USERNAME.getValue(); + String password = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_PASSWORD.getValue(); + String driverClassName = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_DRIVER_CLASS_NAME.getValue(); + int initialSize = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_INITIALSIZE.getValue(); + int minIdle = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_MINIDLE.getValue(); + int maxActive = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_MAXACTIVE.getValue(); + int maxWait = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_MAXWAIT.getValue(); + int timeBetweenEvictionRunsMillis = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_TBERM.getValue(); + int minEvictableIdleTimeMillis = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_MEITM.getValue(); + String validationQuery = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_VALIDATIONQUERY.getValue(); + boolean testWhileIdle = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_TESTWHILEIDLE.getValue(); + boolean testOnBorrow = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_TESTONBORROW.getValue(); + boolean testOnReturn = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_TESTONRETURN.getValue(); + boolean poolPreparedStatements = MybatisConfiguration.BDP_SERVER_MYBATIS_DATASOURCE_POOLPREPAREDSTATEMENTS.getValue(); + BasicDataSource datasource = new BasicDataSource(); + info("Database connection address information(数据库连接地址信息)=" + dbUrl); + datasource.setUrl(dbUrl); + datasource.setUsername(username); + datasource.setPassword(password); + datasource.setDriverClassName(driverClassName); + datasource.setInitialSize(initialSize); + datasource.setMinIdle(minIdle); + datasource.setMaxActive(maxActive); + datasource.setMaxWait(maxWait); + datasource.setTimeBetweenEvictionRunsMillis(timeBetweenEvictionRunsMillis); + datasource.setMinEvictableIdleTimeMillis(minEvictableIdleTimeMillis); + datasource.setValidationQuery(validationQuery); + datasource.setTestWhileIdle(testWhileIdle); + datasource.setTestOnBorrow(testOnBorrow); + datasource.setTestOnReturn(testOnReturn); + datasource.setPoolPreparedStatements(poolPreparedStatements); + datasource.setDefaultAutoCommit(false); + return datasource; + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MyBatisMapperScannerConfig.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MyBatisMapperScannerConfig.java new file mode 100644 index 0000000000..804c562b61 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MyBatisMapperScannerConfig.java @@ -0,0 +1,39 @@ +/* + * Copyright 2019 WeBank + * + * 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 org.apache.linkis.mybatis; + +import org.apache.linkis.mybatis.conf.MybatisConfiguration; +import org.mybatis.spring.mapper.MapperScannerConfigurer; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + + +@Configuration +@AutoConfigureAfter(MybatisConfigurationFactory.class) +public class MyBatisMapperScannerConfig { + @Bean + public MapperScannerConfigurer mapperScannerConfigurer() { + MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer(); + mapperScannerConfigurer.setSqlSessionFactoryBeanName("sqlSessionFactory"); + //Each table corresponds to the XXMapper.java interface type Java file + //每张表对应的XXMapper.java interface类型的Java文件 + mapperScannerConfigurer.setBasePackage(MybatisConfiguration.BDP_SERVER_MYBATIS_BASEPACKAGE.getValue()); + return mapperScannerConfigurer; + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MybatisConfigurationFactory.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MybatisConfigurationFactory.java new file mode 100644 index 0000000000..3f05b2d314 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/MybatisConfigurationFactory.java @@ -0,0 +1,130 @@ +/* + * Copyright 2019 WeBank + * + * 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 org.apache.linkis.mybatis; + +import com.baomidou.mybatisplus.annotation.DbType; +import com.baomidou.mybatisplus.extension.plugins.MybatisPlusInterceptor; +import com.baomidou.mybatisplus.extension.plugins.inner.PaginationInnerInterceptor; +import com.baomidou.mybatisplus.extension.spring.MybatisSqlSessionFactoryBean; +import org.apache.linkis.common.utils.JavaLog; +import org.apache.linkis.mybatis.conf.MybatisConfiguration; +import org.apache.commons.collections.CollectionUtils; +import org.apache.commons.lang3.StringUtils; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.session.SqlSessionFactory; +import org.mybatis.spring.SqlSessionTemplate; +import org.springframework.beans.factory.ObjectProvider; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.boot.autoconfigure.AutoConfigureAfter; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.annotation.Primary; +import org.springframework.core.io.DefaultResourceLoader; +import org.springframework.core.io.Resource; +import org.springframework.core.io.support.PathMatchingResourcePatternResolver; +import org.springframework.jdbc.datasource.DataSourceTransactionManager; +import org.springframework.transaction.PlatformTransactionManager; +import org.springframework.transaction.annotation.EnableTransactionManagement; + +import javax.sql.DataSource; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + + +@Configuration +@ConfigurationProperties +@AutoConfigureAfter(DataSourceConfig.class) +@EnableTransactionManagement +public class MybatisConfigurationFactory extends JavaLog { + + @Autowired + private DataSource dataSource; + // Provide SqlSeesion(提供SqlSeesion) + @Bean(name = "sqlSessionFactory") + @Primary + public MybatisSqlSessionFactoryBean sqlSessionFactory(ObjectProvider interceptorsProvider) { + String typeAliasesPackage = MybatisConfiguration.BDP_SERVER_MYBATIS_TYPEALIASESPACKAGE.getValue(); + //Configure the mapper scan to find all mapper.xml mapping files(配置mapper的扫描,找到所有的mapper.xml映射文件) + String mapperLocations = MybatisConfiguration.BDP_SERVER_MYBATIS_MAPPER_LOCATIONS.getValue(); + //Load the global configuration file(加载全局的配置文件) + String configLocation = MybatisConfiguration.BDP_SERVER_MYBATIS_CONFIGLOCATION.getValue(); + try { + MybatisSqlSessionFactoryBean sessionFactoryBean = new MybatisSqlSessionFactoryBean(); + sessionFactoryBean.setDataSource(dataSource); + + info("Mybatis typeAliasesPackage=" + typeAliasesPackage); + info("Mybatis mapperLocations=" + mapperLocations); + info("Mybatis configLocation=" + configLocation); + // Read configuration(读取配置) + sessionFactoryBean.setTypeAliasesPackage(typeAliasesPackage); + + //Set the location of the mapper.xml file(设置mapper.xml文件所在位置) + if(StringUtils.isNotBlank(mapperLocations)) { + String[] mapperArray = mapperLocations.split(","); + List resources = new ArrayList<>(); + for(String mapperLocation : mapperArray){ + CollectionUtils.addAll(resources,new PathMatchingResourcePatternResolver().getResources(mapperLocation)); + } + sessionFactoryBean.setMapperLocations(resources.toArray(new Resource[0])); + } + /* Resource[] resources = new PathMatchingResourcePatternResolver().getResources(mapperLocations); + sessionFactoryBean.setMapperLocations(resources);*/ +// Set the location of the mybatis-config.xml configuration file(设置mybatis-config.xml配置文件位置) + sessionFactoryBean.setConfigLocation(new DefaultResourceLoader().getResource(configLocation)); + + sessionFactoryBean.setPlugins(interceptorsProvider.getIfAvailable()); + + return sessionFactoryBean; + } catch (IOException e) { + error("mybatis resolver mapper*xml is error",e); + return null; + } catch (Exception e) { + error("mybatis sqlSessionFactoryBean create error",e); + return null; + } + } + + @Bean + @Primary + public SqlSessionTemplate sqlSessionTemplate(SqlSessionFactory sqlSessionFactory) { + return new SqlSessionTemplate(sqlSessionFactory); + } + + //Transaction management(事务管理) + @Bean + @Primary + public PlatformTransactionManager annotationDrivenTransactionManager() { + return new DataSourceTransactionManager(dataSource); + } +// Log the log to be executed (if you don't want to intercept it, comment out this method) +// 将要执行的sql进行日志打印(不想拦截,就把这方法注释掉) +// @Bean +// public SqlPrintInterceptor sqlPrintInterceptor(){ +// return new SqlPrintInterceptor(); +// } + + // 3.4.1 + @Bean + public MybatisPlusInterceptor mybatisPlusInterceptor() { + MybatisPlusInterceptor interceptor = new MybatisPlusInterceptor(); + interceptor.addInnerInterceptor(new PaginationInnerInterceptor(DbType.MYSQL)); + return interceptor; + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java new file mode 100644 index 0000000000..43b91c5d80 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-mybatis/src/main/java/org/apache/linkis/mybatis/conf/MybatisConfiguration.java @@ -0,0 +1,43 @@ +/* + * Copyright 2019 WeBank + * + * 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 org.apache.linkis.mybatis.conf; + +import org.apache.linkis.common.conf.CommonVars; + +public class MybatisConfiguration { + //Mybatis configuration + public static final CommonVars BDP_SERVER_MYBATIS_MAPPER_LOCATIONS = CommonVars.apply("wds.linkis.server.mybatis.mapperLocations", ""); + public static final CommonVars BDP_SERVER_MYBATIS_TYPEALIASESPACKAGE = CommonVars.apply("wds.linkis.server.mybatis.typeAliasesPackage", ""); + public static final CommonVars BDP_SERVER_MYBATIS_CONFIGLOCATION = CommonVars.apply("wds.linkis.server.mybatis.configLocation", "classpath:/mybatis-config.xml"); + public static final CommonVars BDP_SERVER_MYBATIS_BASEPACKAGE = CommonVars.apply("wds.linkis.server.mybatis.BasePackage", ""); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_URL = CommonVars.apply("wds.linkis.server.mybatis.datasource.url", ""); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_USERNAME = CommonVars.apply("wds.linkis.server.mybatis.datasource.username", ""); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_PASSWORD = CommonVars.apply("wds.linkis.server.mybatis.datasource.password", ""); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_DRIVER_CLASS_NAME = CommonVars.apply("wds.linkis.server.mybatis.datasource.driver-class-name", "com.mysql.jdbc.Driver"); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_INITIALSIZE = CommonVars.apply("wds.linkis.server.mybatis.datasource.initialSize", new Integer(1)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_MINIDLE = CommonVars.apply("wds.linkis.server.mybatis.datasource.minIdle", new Integer(1)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_MAXACTIVE = CommonVars.apply("wds.linkis.server.mybatis.datasource.maxActive", new Integer(20)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_MAXWAIT = CommonVars.apply("wds.linkis.server.mybatis.datasource.maxWait", new Integer(6000)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_TBERM = CommonVars.apply("wds.linkis.server.mybatis.datasource.timeBetweenEvictionRunsMillis", new Integer(60000)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_MEITM = CommonVars.apply("wds.linkis.server.mybatis.datasource.minEvictableIdleTimeMillis", new Integer(300000)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_VALIDATIONQUERY = CommonVars.apply("wds.linkis.server.mybatis.datasource.validationQuery", "SELECT 1"); + + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_TESTWHILEIDLE = CommonVars.apply("wds.linkis.server.mybatis.datasource.testWhileIdle", new Boolean(true)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_TESTONBORROW = CommonVars.apply("wds.linkis.server.mybatis.datasource.testOnBorrow", new Boolean(false)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_TESTONRETURN = CommonVars.apply("wds.linkis.server.mybatis.datasource.testOnReturn", new Boolean(false)); + public static final CommonVars BDP_SERVER_MYBATIS_DATASOURCE_POOLPREPAREDSTATEMENTS = CommonVars.apply("wds.linkis.server.mybatis.datasource.poolPreparedStatements", new Boolean(true)); +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/datawarehouse.sql b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/datawarehouse.sql new file mode 100644 index 0000000000..1818a6371c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/datawarehouse.sql @@ -0,0 +1,224 @@ + + +/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; +/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; +/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; +SET NAMES utf8mb4; +/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */; +/*!40101 SET @OLD_SQL_MODE='NO_AUTO_VALUE_ON_ZERO', SQL_MODE='NO_AUTO_VALUE_ON_ZERO' */; +/*!40111 SET @OLD_SQL_NOTES=@@SQL_NOTES, SQL_NOTES=0 */; + + +# 转储表 dss_datawarehouse_layer +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_layer`; + +CREATE TABLE `dss_datawarehouse_layer` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `preset` bit(1) NOT NULL DEFAULT b'0', + `sort` int(4) NOT NULL DEFAULT '1', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `dbs` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '如果为空代表所有的库', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +LOCK TABLES `dss_datawarehouse_layer` WRITE; +/*!40000 ALTER TABLE `dss_datawarehouse_layer` DISABLE KEYS */; + +INSERT INTO `dss_datawarehouse_layer` (`id`, `name`, `en_name`, `owner`, `principal_name`, `is_available`, `preset`, `sort`, `description`, `dbs`, `create_time`, `update_time`, `status`, `lock_version`) +VALUES + (1,'原数据层(ODS)','ods','admin','所有角色',b'1',b'1',10,'由业务系统同步到数据仓库的原始数据,一般不经过加工','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1), + (2,'明细层(DWD)','dwd','admin','所有角色',b'1',b'1',20,'从ods层经过ETL得到的明细数据,表示具体的事实','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1), + (3,'汇总层(DWS)','dws','admin','所有角色',b'1',b'1',30,'由明细数据经过汇总得到的数据,主要由统计维度和指标构成','ALL','2021-09-01 00:00:00','2021-09-01 00:00:00',b'1',1); + +/*!40000 ALTER TABLE `dss_datawarehouse_layer` ENABLE KEYS */; +UNLOCK TABLES; + + +# 转储表 dss_datawarehouse_layer_generalize_rule +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_layer_generalize_rule`; + +CREATE TABLE `dss_datawarehouse_layer_generalize_rule` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `layer_id` bigint(20) NOT NULL, + `regex` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '自动归纳表达式', + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `en_identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_modifier +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_modifier`; + +CREATE TABLE `dss_datawarehouse_modifier` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_type` varchar(64) COLLATE utf8_bin NOT NULL, + `theme_domain_id` bigint(20) DEFAULT NULL, + `layer_id` bigint(20) DEFAULT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_modifier_list +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_modifier_list`; + +CREATE TABLE `dss_datawarehouse_modifier_list` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_statistical_period +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_statistical_period`; + +CREATE TABLE `dss_datawarehouse_statistical_period` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `layer_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `start_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `end_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_table_rule +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_table_rule`; + +CREATE TABLE `dss_datawarehouse_table_rule` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` bigint(20) NOT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `table_name_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `table_props_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `partation_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `column_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_theme +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_theme`; + +CREATE TABLE `dss_datawarehouse_theme` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `parent_theme_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '默认为空,如果不为空则指向父主题', + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + + + +# 转储表 dss_datawarehouse_theme_domain +# ------------------------------------------------------------ + +DROP TABLE IF EXISTS `dss_datawarehouse_theme_domain`; + +CREATE TABLE `dss_datawarehouse_theme_domain` ( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin; + +LOCK TABLES `dss_datawarehouse_theme_domain` WRITE; +/*!40000 ALTER TABLE `dss_datawarehouse_theme_domain` DISABLE KEYS */; + +INSERT INTO `dss_datawarehouse_theme_domain` (`id`, `name`, `en_name`, `owner`, `principal_name`, `is_available`, `sort`, `description`, `create_time`, `update_time`, `status`, `lock_version`) +VALUES + (1,'主题','英文名','负责人','New York',b'1',1,'描述','2021-09-28 13:18:48','2021-09-28 13:18:48',b'1',1); + +/*!40000 ALTER TABLE `dss_datawarehouse_theme_domain` ENABLE KEYS */; +UNLOCK TABLES; + + + +/*!40111 SET SQL_NOTES=@OLD_SQL_NOTES */; +/*!40101 SET SQL_MODE=@OLD_SQL_MODE */; +/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */; +/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; +/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; +/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */; diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/ddl.sql b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/ddl.sql new file mode 100644 index 0000000000..1cfb217f99 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/ddl.sql @@ -0,0 +1,180 @@ +-- governance.dss_datawarehouse_layer definition + +DROP TABLE IF EXISTS `dss_datawarehouse_layer`; +CREATE TABLE `dss_datawarehouse_layer` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `preset` bit(1) NOT NULL DEFAULT b'0', + `sort` int(4) NOT NULL DEFAULT '1', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `dbs` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '如果为空代表所有的库', + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE = InnoDB + AUTO_INCREMENT = 44 + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + + +-- governance.dss_datawarehouse_layer_generalize_rule definition +DROP TABLE IF EXISTS `dss_datawarehouse_layer_generalize_rule`; +CREATE TABLE `dss_datawarehouse_layer_generalize_rule` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `layer_id` bigint(20) NOT NULL, + `regex` varchar(255) COLLATE utf8_bin NOT NULL COMMENT '自动归纳表达式', + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `en_identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + +-- governance.dss_datawarehouse_modifier definition +DROP TABLE IF EXISTS `dss_datawarehouse_modifier`; +CREATE TABLE `dss_datawarehouse_modifier` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_type` varchar(64) COLLATE utf8_bin NOT NULL, + `modifier_type_en` varchar(128) COLLATE utf8_bin DEFAULT NULL, + `theme_domain_id` bigint(20) DEFAULT NULL, + `layer_id` bigint(20) DEFAULT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `theme_area_en` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `layer_area_en` varchar(100) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 25 + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + +-- governance.dss_datawarehouse_modifier_list definition +DROP TABLE IF EXISTS `dss_datawarehouse_modifier_list`; +CREATE TABLE `dss_datawarehouse_modifier_list` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `modifier_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `identifier` varchar(255) COLLATE utf8_bin NOT NULL, + `formula` varchar(255) COLLATE utf8_bin NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`) +) ENGINE = InnoDB + AUTO_INCREMENT = 37 + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + +-- governance.dss_datawarehouse_statistical_period definition +DROP TABLE IF EXISTS `dss_datawarehouse_statistical_period`; +CREATE TABLE `dss_datawarehouse_statistical_period` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `layer_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `start_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `end_time_formula` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE = InnoDB + AUTO_INCREMENT = 23 + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + +-- governance.dss_datawarehouse_table_rule definition +DROP TABLE IF EXISTS `dss_datawarehouse_table_rule`; +CREATE TABLE `dss_datawarehouse_table_rule` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` bigint(20) NOT NULL, + `theme_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names', + `layer_area` varchar(1000) COLLATE utf8_bin NOT NULL COMMENT '空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names', + `table_name_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `table_props_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `partation_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `column_rule` varchar(1000) COLLATE utf8_bin NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + + +-- governance.dss_datawarehouse_theme definition +DROP TABLE IF EXISTS `dss_datawarehouse_theme`; +CREATE TABLE `dss_datawarehouse_theme` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `theme_domain_id` bigint(20) NOT NULL, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `parent_theme_name` varchar(255) COLLATE utf8_bin DEFAULT NULL COMMENT '默认为空,如果不为空则指向父主题', + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE = InnoDB + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; + +-- governance.dss_datawarehouse_theme_domain definition +DROP TABLE IF EXISTS `dss_datawarehouse_theme_domain`; +CREATE TABLE `dss_datawarehouse_theme_domain` +( + `id` bigint(20) NOT NULL AUTO_INCREMENT, + `name` varchar(255) COLLATE utf8_bin NOT NULL, + `en_name` varchar(255) COLLATE utf8_bin NOT NULL, + `owner` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `principal_name` varchar(128) COLLATE utf8_bin DEFAULT NULL COMMENT '授权的名字:userName、roleName', + `is_available` bit(1) NOT NULL, + `sort` int(4) NOT NULL, + `description` varchar(255) COLLATE utf8_bin DEFAULT NULL, + `create_time` datetime NOT NULL, + `update_time` datetime NOT NULL, + `status` bit(1) NOT NULL DEFAULT b'1', + `lock_version` bigint(20) NOT NULL DEFAULT '1', + PRIMARY KEY (`id`), + UNIQUE KEY `name` (`name`) +) ENGINE = InnoDB + AUTO_INCREMENT = 56 + DEFAULT CHARSET = utf8 + COLLATE = utf8_bin; \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/dml.sql b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/dml.sql new file mode 100644 index 0000000000..65493a39d3 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/db/dml.sql @@ -0,0 +1,4 @@ +INSERT INTO `dss_datawarehouse_layer` (name,en_name,owner,principal_name,is_available,preset,sort,description,dbs,create_time,update_time,status,lock_version) VALUES +('原数据层(ODS)','ods','admin','ALL',1,1,10,'由业务系统同步到数据仓库的原始数据,一般不经过加工','ALL','2021-09-01 00:00:00','2021-12-08 11:04:38',1,23), +('明细层(DWD)','dwd','admin','ALL',1,1,20,'从ods层经过ETL得到的明细数据,表示具体的事实','ALL','2021-09-01 00:00:00','2021-11-09 15:44:47',1,8), +('汇总层(DWS)','dws','admin','ALL',1,1,30,'由明细数据经过汇总得到的数据,主要由统计维度和指标构成','ALL','2021-09-01 00:00:00','2021-11-09 15:44:47',1,9); \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/pom.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/pom.xml similarity index 80% rename from dss-apps/dss-data-governance/dss-data-governance-server/pom.xml rename to dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/pom.xml index 325560a690..63f74310ef 100644 --- a/dss-apps/dss-data-governance/dss-data-governance-server/pom.xml +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/pom.xml @@ -2,31 +2,33 @@ + 4.0.0 - dss + dss-datawarehouse-design com.webank.wedatasphere.dss - 1.1.0 - ../../../pom.xml + 1.2.0 - 4.0.0 - dss-data-governance-server + dss-data-warehouse-server + jar - 2.1.0 + 8 + 8 + + com.webank.wedatasphere.dss - dss-data-asset-server - ${dss.version} + dss-data-warehouse-service com.webank.wedatasphere.dss - dss-data-classification-server + dss-common ${dss.version} + provided - org.apache.linkis linkis-module @@ -44,9 +46,8 @@ - com.webank.wedatasphere.dss - dss-common - ${dss.version} + org.projectlombok + lombok provided @@ -111,16 +112,14 @@ **/*.xml - - - - - - - - + + + + + + + + - - \ No newline at end of file diff --git a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/assembly/distribution.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/assembly/distribution.xml similarity index 59% rename from dss-apps/dss-data-governance/dss-data-classification-server/src/main/assembly/distribution.xml rename to dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/assembly/distribution.xml index 46d83d32f8..1080803d72 100644 --- a/dss-apps/dss-data-governance/dss-data-classification-server/src/main/assembly/distribution.xml +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/assembly/distribution.xml @@ -1,31 +1,30 @@ - dss-data-asset-server + dss-data-warehouse-server dir true - dss-data-asset-server + dss-data-warehouse-server @@ -40,7 +39,5 @@ - - diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/MybatisPlusConfig.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/MybatisPlusConfig.java new file mode 100644 index 0000000000..61dd65abb5 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/MybatisPlusConfig.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.warehouse.configuration; + +import com.webank.wedatasphere.warehouse.dao.interceptor.DssWorkspaceNameAutoExtractQueryInterceptor; +import com.webank.wedatasphere.warehouse.dao.interceptor.DssWorkspaceNameAutoTransformUpdateInteceptor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +import javax.sql.DataSource; + +@Configuration +public class MybatisPlusConfig { + + @Bean + public DssWorkspaceNameAutoTransformUpdateInteceptor dssWorkspaceNameAutoTransformUpdateInteceptor( + DataSource dataSource + ) { + return new DssWorkspaceNameAutoTransformUpdateInteceptor(dataSource); + } + + @Bean + public DssWorkspaceNameAutoExtractQueryInterceptor dssWorkspaceNameAutoExtractQueryInterceptor( + DataSource dataSource + ) { + return new DssWorkspaceNameAutoExtractQueryInterceptor(dataSource); + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/WebMvcConfig.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/WebMvcConfig.java new file mode 100644 index 0000000000..e53eb72400 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/configuration/WebMvcConfig.java @@ -0,0 +1,31 @@ +package com.webank.wedatasphere.warehouse.configuration; + +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.context.support.ResourceBundleMessageSource; +import org.springframework.web.servlet.LocaleResolver; +import org.springframework.web.servlet.config.annotation.EnableWebMvc; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; +import org.springframework.web.servlet.i18n.AcceptHeaderLocaleResolver; + +import java.util.Locale; + +@Configuration +@EnableWebMvc +public class WebMvcConfig implements WebMvcConfigurer { + @Bean(name = "messageSource") + public ResourceBundleMessageSource resourceBundleMessageSource() { + ResourceBundleMessageSource resourceBundleMessageSource = new ResourceBundleMessageSource(); + resourceBundleMessageSource.setBasename("i18n/messages"); + resourceBundleMessageSource.setDefaultEncoding("UTF-8"); + resourceBundleMessageSource.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); + return resourceBundleMessageSource; + } + + @Bean + public LocaleResolver localeResolver() { + AcceptHeaderLocaleResolver localeResolver = new AcceptHeaderLocaleResolver(); + localeResolver.setDefaultLocale(Locale.SIMPLIFIED_CHINESE); + return localeResolver; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwDsRestfulApi.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwDsRestfulApi.java new file mode 100644 index 0000000000..128af7d559 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwDsRestfulApi.java @@ -0,0 +1,47 @@ +package com.webank.wedatasphere.warehouse.restful; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.service.DwDsService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; +import javax.servlet.http.HttpServletRequest; + +@RequestMapping(path = "/data-warehouse", produces = {"application/json"}) +@RestController +public class DwDsRestfulApi { + private static final String DEFAULT_LIMIT = "25"; + private static final String DEFAULT_OFFSET = "0"; + private final DwDsService dwDsService; + + + + @Autowired + public DwDsRestfulApi(DwDsService dwDsService) { + this.dwDsService = dwDsService; + } + + // list all hive dbs +// @RequestMapping(value = "/dbs/hive",method = RequestMethod.GET) +// public Message getAllHiveDbs(HttpServletRequest request) throws Exception { +// Message message = this.dwDsService.getAllHiveDbs(request); +// return message; +// } + @RequestMapping(value = "/dbs/hive",method = RequestMethod.GET) + public Message getAllHiveDbs(HttpServletRequest request, @RequestParam(value="limit",defaultValue = DEFAULT_LIMIT) int limit,@RequestParam(value="offset",defaultValue = DEFAULT_OFFSET) int offset) throws Exception { + Message message = this.dwDsService.getAllHiveDbs(request,limit,offset); + return message; + } + + + @RequestMapping(value = "/workspace/{id}/principal_users",method = RequestMethod.GET) + public Message getAllAvailableUsers(HttpServletRequest request, @PathVariable(value = "id") String id) throws Exception { + Message message = this.dwDsService.getPrincipalUsers(request, id); + return message; + } + + @RequestMapping(value = "/workspace/{id}/principal_roles",method = RequestMethod.GET) + public Message getAllAvailableRoles(HttpServletRequest request, @PathVariable(value = "id") String id) throws Exception { + Message message = this.dwDsService.getPrincipalRoles(request, id); + return message; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwLayerRestfulApi.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwLayerRestfulApi.java new file mode 100644 index 0000000000..41c080669b --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwLayerRestfulApi.java @@ -0,0 +1,114 @@ +package com.webank.wedatasphere.warehouse.restful; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.DwLayerCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerUpdateCommand; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwLayerService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RequestMapping(path = "/data-warehouse", produces = {"application/json"}) +@RestController +public class DwLayerRestfulApi { + + private final DwLayerService dwLayerService; + + @Autowired + public DwLayerRestfulApi(DwLayerService dwLayerService) { + this.dwLayerService = dwLayerService; + } + + // list all preset layers + @RequestMapping(value = "/layers/preset",method = RequestMethod.GET) + public Message getAllPresetLayers(HttpServletRequest request) throws DwException { + Message message = this.dwLayerService.getAllPresetLayers(request); + return message; + } + + @RequestMapping(value = "/layers/all",method = RequestMethod.GET) + public Message getAllLayers(HttpServletRequest request, @RequestParam(value = "isAvailable",required = false) Boolean isAvailable, @RequestParam(value = "db",required = false) String db) throws DwException { + Message message = this.dwLayerService.getAllLayers(request, isAvailable, db); + return message; + } + + // query paged custom layers + @RequestMapping(value = "/layers/custom",method = RequestMethod.GET) + public Message queryPagedCustomLayers( + HttpServletRequest request, + @RequestParam(value = "page",required = false) Integer page, + @RequestParam(value = "size",required = false) Integer size, + @RequestParam(value = "name",required = false) String name, + @RequestParam(value = "enabled",required = false) Boolean enabled + )throws DwException { + final DwLayerQueryCommand command = new DwLayerQueryCommand(); + command.setName(name); + command.setEnabled(enabled); + command.setPage(page); + command.setSize(size); + Message message = this.dwLayerService.queryPagedCustomLayers(request, command); + return message; + } + + // create custom layer + @RequestMapping(value = "/layers/custom",method = RequestMethod.POST) + public Message createDwCustomLayer(HttpServletRequest request, @RequestBody DwLayerCreateCommand command) throws DwException { + Message message = this.dwLayerService.createDwCustomLayer(request, command); + return message; + } + + // get layer by id + @RequestMapping(value = "/layers/{id}",method = RequestMethod.GET) + public Message getLayerById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwLayerService.getLayerById(request, id); + return message; + } + + // delete layer + @RequestMapping(value = "/layers/{id}",method = RequestMethod.DELETE) + public Message deleteById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwLayerService.deleteById(request, id); + return message; + } + + // update layer + @RequestMapping(value = "/layers/{id}",method = RequestMethod.PUT) + public Message update( + HttpServletRequest request, + @PathVariable("id") Long id, + @RequestBody DwLayerUpdateCommand command + ) throws DwException { + command.setId(id); + Message message = this.dwLayerService.update(request, command); + return message; + } + + // enable layer + @RequestMapping(value = "/layers/{id}/enable",method = RequestMethod.PUT) + public Message enable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwLayerService.enable(request, id); + return message; + } + + // disable layer + @RequestMapping(value = "/layers/{id}/disable",method = RequestMethod.PUT) + public Message disable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwLayerService.disable(request, id); + return message; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwModifierRestfulApi.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwModifierRestfulApi.java new file mode 100644 index 0000000000..3e3baa4190 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwModifierRestfulApi.java @@ -0,0 +1,119 @@ +package com.webank.wedatasphere.warehouse.restful; + +import com.google.common.base.Strings; +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.*; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwModifierService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RequestMapping(path = "/data-warehouse", produces = {"application/json"}) +@RestController +public class DwModifierRestfulApi { + + private final DwModifierService dwModifierService; + + @Autowired + public DwModifierRestfulApi(DwModifierService dwModifierService) { + this.dwModifierService = dwModifierService; + } + + @RequestMapping(value = "/modifiers/all",method = RequestMethod.GET) + public Message queryAllModifiers( + HttpServletRequest request, + @RequestParam(value = "typeName",required = false) String typeName, + @RequestParam(value = "isAvailable",required = false) Boolean isAvailable, + @RequestParam(value = "theme",required = false) String theme, + @RequestParam(value = "layer",required = false) String layer + )throws DwException { + final DwModifierQueryCommand command = new DwModifierQueryCommand(); + command.setName(typeName); + command.setEnabled(isAvailable); + command.setTheme(theme); + command.setLayer(layer); + Message message = this.dwModifierService.queryAllModifiers(request, command); + return message; + } + + // query paged modifiers + @RequestMapping(value = "/modifiers",method = RequestMethod.GET) + public Message queryPagedDecorations( + HttpServletRequest request, + @RequestParam(value="page",required = false) Integer page, + @RequestParam(value="size",required = false) Integer size, + @RequestParam(value = "name",required = false) String typeName, + @RequestParam(value = "enabled",required = false) String enabled + )throws DwException { + final DwModifierQueryCommand command = new DwModifierQueryCommand(); + command.setName(typeName); + command.setPage(page); + command.setSize(size); + if (!Strings.isNullOrEmpty(enabled)) { + command.setEnabled(Boolean.parseBoolean(enabled)); + } + Message message = this.dwModifierService.queryPage(request, command); + return message; + } + + // create dw decoration word + @RequestMapping(value = "/modifiers",method = RequestMethod.POST) + public Message create(HttpServletRequest request,@RequestBody DwModifierCreateCommand command) throws DwException { + Message message = this.dwModifierService.create(request, command); + return message; + } + + // fetch one decoration details by id + @RequestMapping(value = "/modifiers/{id}",method = RequestMethod.GET) + public Message getById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwModifierService.getById(request, id); + return message; + } + + // remove decoration logic + @RequestMapping(value = "/modifiers/{id}",method = RequestMethod.DELETE) + public Message deleteById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwModifierService.deleteById(request, id); + return message; + } + + // update + @RequestMapping(value = "/modifiers/{id}",method = RequestMethod.PUT) + public Message update( + HttpServletRequest request, + @PathVariable("id") Long id, + @RequestBody DwModifierUpdateCommand command + ) throws DwException { + command.setId(id); + Message message = this.dwModifierService.update(request, command); + return message; + } + + // enable modifier + @RequestMapping(value = "/modifiers/{id}/enable",method = RequestMethod.PUT) + public Message enable( + HttpServletRequest request, + @RequestParam("id") Long id + ) throws DwException { + Message message = this.dwModifierService.enable(request, id); + return message; + } + + // disable modifier + @RequestMapping(value = "/modifiers/{id}/disable",method = RequestMethod.PUT) + public Message disable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwModifierService.disable(request, id); + return message; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwStatisticalPeriodRestfulApi.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwStatisticalPeriodRestfulApi.java new file mode 100644 index 0000000000..7e776b9d98 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwStatisticalPeriodRestfulApi.java @@ -0,0 +1,120 @@ +package com.webank.wedatasphere.warehouse.restful; + +import com.google.common.base.Strings; +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.*; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwStatisticalPeriodService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + +@RequestMapping(path = "/data-warehouse", produces = {"application/json"}) +@RestController +public class DwStatisticalPeriodRestfulApi { + + private final DwStatisticalPeriodService dwStatisticalPeriodService; + + @Autowired + public DwStatisticalPeriodRestfulApi(final DwStatisticalPeriodService dwStatisticalPeriodService) { + this.dwStatisticalPeriodService = dwStatisticalPeriodService; + } + + @RequestMapping(value = "/statistical_periods/all",method = RequestMethod.GET) + public Message queryAll( + HttpServletRequest request, + @RequestParam(value="name",required = false) String name, + @RequestParam(value = "isAvailable",required = false) Boolean isAvailable, + @RequestParam(value = "theme",required = false) String theme, + @RequestParam(value = "layer",required = false) String layer + )throws DwException { + final DwStatisticalPeriodQueryCommand command = new DwStatisticalPeriodQueryCommand(); + command.setName(name); + command.setEnabled(isAvailable); + command.setTheme(theme); + command.setLayer(layer); + Message message = this.dwStatisticalPeriodService.queryAll(request, command); + return message; + } + + // query paged statistical periods + @RequestMapping(value = "/statistical_periods",method = RequestMethod.GET) + public Message queryPagedDecorations( + HttpServletRequest request, + @RequestParam(value="page",required = false) Integer page, + @RequestParam(value="size",required = false) Integer size, + @RequestParam(value="name",required = false) String name, + @RequestParam(value = "enabled",required = false) String enabled + )throws DwException { + final DwStatisticalPeriodQueryCommand command = new DwStatisticalPeriodQueryCommand(); + command.setName(name); + command.setPage(page); + command.setSize(size); + if (!Strings.isNullOrEmpty(enabled)) { + command.setEnabled(Boolean.parseBoolean(enabled)); + } + Message message = this.dwStatisticalPeriodService.queryPage(request, command); + return message; + } + + // create dw statistical_periods + @RequestMapping(value = "/statistical_periods",method = RequestMethod.POST) + public Message create(HttpServletRequest request, @RequestBody DwStatisticalPeriodCreateCommand command) throws DwException { + Message message = this.dwStatisticalPeriodService.create(request, command); + return message; + } + + // fetch one statistical_periods details by id + @RequestMapping(value = "/statistical_periods/{id}",method = RequestMethod.GET) + public Message getById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwStatisticalPeriodService.getById(request, id); + return message; + } + + // remove statistical_periods logic + @RequestMapping(value = "/statistical_periods/{id}",method = RequestMethod.DELETE) + public Message deleteById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwStatisticalPeriodService.deleteById(request, id); + return message; + } + + // update statistical_periods + @RequestMapping(value = "/statistical_periods/{id}",method = RequestMethod.PUT) + public Message update( + HttpServletRequest request, + @PathVariable("id") Long id, + @RequestBody DwStatisticalPeriodUpdateCommand command + ) throws DwException { + command.setId(id); + Message message = this.dwStatisticalPeriodService.update(request, command); + return message; + } + + + // enable statistical_periods + @RequestMapping(value = "/statistical_periods/{id}/enable",method = RequestMethod.PUT) + public Message enable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwStatisticalPeriodService.enable(request, id); + return message; + } + + // disable statistical_periods + @RequestMapping(value = "/statistical_periods/{id}/disable",method = RequestMethod.PUT) + public Message disable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwStatisticalPeriodService.disable(request, id); + return message; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwThemeDomainRestfulApi.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwThemeDomainRestfulApi.java new file mode 100644 index 0000000000..8e8bcef992 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/java/com/webank/wedatasphere/warehouse/restful/DwThemeDomainRestfulApi.java @@ -0,0 +1,112 @@ +package com.webank.wedatasphere.warehouse.restful; +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.*; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwThemeDomainService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.*; + +import javax.servlet.http.HttpServletRequest; + + +@RequestMapping(path = "/data-warehouse", produces = {"application/json"}) +@RestController +public class DwThemeDomainRestfulApi { + + private final DwThemeDomainService dwThemeDomainService; + + @Autowired + public DwThemeDomainRestfulApi(DwThemeDomainService dwThemeDomainService) { + this.dwThemeDomainService = dwThemeDomainService; + } + + // query paged theme domains + @RequestMapping(value = "/themedomains",method = RequestMethod.GET) + public Message queryPagedCustomLayers( + HttpServletRequest request, + @RequestParam(value = "page",required = false) Integer page, + @RequestParam(value="size",required = false) Integer size, + @RequestParam(value="name",required = false) String name, + @RequestParam(value = "enabled",required = false) Boolean enabled + )throws DwException { + final DwThemeDomainQueryCommand command = new DwThemeDomainQueryCommand(); + command.setName(name); + command.setPage(page); + command.setSize(size); + command.setEnabled(enabled); + Message message = this.dwThemeDomainService.queryPage(request, command); + return message; + } + + @RequestMapping(value = "/themedomains/all",method = RequestMethod.GET) + public Message queryAllThemeDomains( + HttpServletRequest request, + @RequestParam(value="name",required = false) String name, + @RequestParam(value = "isAvailable",required = false) Boolean isAvailable + )throws DwException { + final DwThemeDomainQueryCommand command = new DwThemeDomainQueryCommand(); + command.setName(name); + command.setEnabled(isAvailable); + Message message = this.dwThemeDomainService.queryAllThemeDomains(request, command); + return message; + } + + // create theme domain + @RequestMapping(value = "/themedomains",method = RequestMethod.POST) + public Message createDwCustomLayer(HttpServletRequest request, @RequestBody DwThemeDomainCreateCommand command) throws DwException { + Message message = this.dwThemeDomainService.create(request, command); + return message; + } + + // get theme domain by id + @RequestMapping(value = "/themedomains/{id}",method = RequestMethod.GET) + public Message getLayerById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwThemeDomainService.getById(request, id); + return message; + } + + // delete theme domain + @RequestMapping(value = "/themedomains/{id}",method = RequestMethod.DELETE) + public Message deleteById( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwThemeDomainService.deleteById(request, id); + return message; + } + + // update theme domain + @RequestMapping(value = "/themedomains/{id}",method = RequestMethod.PUT) + public Message update( + HttpServletRequest request, + @PathVariable("id") Long id, + @RequestBody DwThemeDomainUpdateCommand command + ) throws DwException { + command.setId(id); + Message message = this.dwThemeDomainService.update(request, command); + return message; + } + + // enable theme domain + @RequestMapping(value = "/themedomains/{id}/enable",method = RequestMethod.PUT) + public Message enable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwThemeDomainService.enable(request, id); + return message; + } + + // disable theme domain + @RequestMapping(value = "/themedomains/{id}/disable",method = RequestMethod.PUT) + public Message disable( + HttpServletRequest request, + @PathVariable("id") Long id + ) throws DwException { + Message message = this.dwThemeDomainService.disable(request, id); + return message; + } +} diff --git a/dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/application-dss.yml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/application-dss.yml similarity index 100% rename from dss-apps/dss-data-governance/dss-data-governance-server/src/main/resources/application-dss.yml rename to dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/application-dss.yml diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss-data-warehouse-server.properties b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss-data-warehouse-server.properties new file mode 100644 index 0000000000..67bbea60cd --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss-data-warehouse-server.properties @@ -0,0 +1,51 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# +spring.server.port=9500 +spring.spring.application.name=dss-data-warehouse-server +wds.linkis.test.mode=true + +wds.linkis.server.mybatis.datasource.url=jdbc:mysql://localhost:3306/governance?useSSL=false&characterEncoding=UTF-8 + +wds.linkis.server.mybatis.datasource.username=root + +***REMOVED***root + +wds.linkis.log.clear=true + +wds.linkis.server.version=v1 + + +## datasource client +wds.datawarehouse.datasource.client.serverurl=http://hdp:8090 +wds.datawarehouse.datasource.client.authtoken.key=hadoop +wds.datawarehouse.datasource.client.authtoken.value=hadoop +wds.datawarehouse.datasource.client.dws.version=v1 + +##restful +wds.linkis.server.restful.scan.packages=com.webank.wedatasphere.warehouse.restful + +wds.linkis.server.mybatis.mapperLocations=classpath*:com/webank/wedatasphere/warehouse/dao/mapper/impl/*.xml + +wds.linkis.server.mybatis.BasePackage=com.webank.wedatasphere.warehouse.dao.mapper + +wds.entity.workspace.name.auto.transform=false + +spring.spring.mvc.servlet.path=/api/rest_j/v1 + + + + diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss.properties b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss.properties new file mode 100644 index 0000000000..9aa8c8e576 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/dss.properties @@ -0,0 +1,37 @@ +# +# Copyright 2019 WeBank +# 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. +# +# + +wds.linkis.gateway.ip=127.0.0.1 +wds.linkis.gateway.port=9001 +wds.linkis.gateway.url=http://127.0.0.1:9001/ +wds.linkis.gateway.wtss.url=http://127.0.0.1:9001/ + +wds.linkis.mysql.is.encrypt=false +wds.linkis.server.mybatis.datasource.url= +wds.linkis.server.mybatis.datasource.username= +***REMOVED*** + +wds.dss.esb.appid= +wds.dss.esb.token= + +wds.dss.appconn.scheduler.job.label=dev + + +wds.linkis.reflect.scan.package=org.apache.linkis,com.webank.wedatasphere.dss +spring.spring.mvc.servlet.path=/api/rest_j/v1 +spring.spring.servlet.multipart.max-file-size=200MB +spring.spring.servlet.multipart.max-request-size=200MB +wds.dss.project.strict.mode=true diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j.properties b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j.properties new file mode 100644 index 0000000000..0807e60877 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j.properties @@ -0,0 +1,37 @@ +# +# Copyright 2019 WeBank +# +# 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. +# +# + +### set log levels ### + +log4j.rootCategory=INFO,console + +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.Threshold=INFO +log4j.appender.console.layout=org.apache.log4j.PatternLayout +#log4j.appender.console.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n +log4j.appender.console.layout.ConversionPattern= %d{ISO8601} %-5p (%t) %p %c{1} - %m%n + + +log4j.appender.com.webank.bdp.ide.core=org.apache.log4j.DailyRollingFileAppender +log4j.appender.com.webank.bdp.ide.core.Threshold=INFO +log4j.additivity.com.webank.bdp.ide.core=false +log4j.appender.com.webank.bdp.ide.core.layout=org.apache.log4j.PatternLayout +log4j.appender.com.webank.bdp.ide.core.Append=true +log4j.appender.com.webank.bdp.ide.core.File=logs/linkis.log +log4j.appender.com.webank.bdp.ide.core.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n + +log4j.logger.org.springframework=INFO diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j2.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j2.xml new file mode 100644 index 0000000000..fe03a3b7cf --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/log4j2.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/mybatis-config.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/mybatis-config.xml new file mode 100644 index 0000000000..0389363102 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/resources/mybatis-config.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/scala/com/webank/wedatasphere/warehouse/DataWarehouseApplication.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/scala/com/webank/wedatasphere/warehouse/DataWarehouseApplication.scala new file mode 100644 index 0000000000..2bac9f1cd6 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-server/src/main/scala/com/webank/wedatasphere/warehouse/DataWarehouseApplication.scala @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.warehouse + +import com.webank.wedatasphere.dss.common.utils.DSSMainHelper +import org.apache.linkis.DataWorkCloudApplication +import org.apache.linkis.common.utils.{Logging, Utils} + +object DataWarehouseApplication extends Logging{ + + val userName: String = System.getProperty("user.name") + val hostName: String = Utils.getComputerName + + def main(args: Array[String]): Unit = { + val serviceName = System.getProperty("serviceName")//ProjectConf.SERVICE_NAME.getValue + DSSMainHelper.formatPropertyFiles(serviceName) + val allArgs = args ++ DSSMainHelper.getExtraSpringOptions + System.setProperty("hostName", hostName) + System.setProperty("userName", userName) + info(s"Ready to start $serviceName with args: ${allArgs.toList}.") + println(s"Test Ready to start $serviceName with args: ${allArgs.toList}.") + DataWorkCloudApplication.main(allArgs) + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/pom.xml b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/pom.xml new file mode 100644 index 0000000000..14f6961a9d --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/pom.xml @@ -0,0 +1,164 @@ + + + 4.0.0 + + dss-datawarehouse-design + com.webank.wedatasphere.dss + 1.2.0 + + + dss-data-warehouse-service + jar + + + 8 + 8 + + + + + com.webank.wedatasphere.dss + dss-governance-dao + + + org.apache.linkis + linkis-mybatis + + + + + + org.apache.linkis + linkis-module + + + + org.apache.linkis + linkis-datasource-client + ${linkis.version} + + + org.apache.linkis + linkis-metadata + + + org.apache.linkis + linkis-publicservice + + + org.apache.linkis + linkis-bml + + + + + + com.webank.wedatasphere.dss + dss-datamodel-center-client + ${dss.version} + + + org.modelmapper + modelmapper + + + org.apache.linkis + linkis-gateway-httpclient-support + + + org.projectlombok + lombok + + + + + + com.webank.wedatasphere.dss + dss-data-assets-client + ${dss.version} + + + org.apache.linkis + linkis-mybatis + + + org.modelmapper + modelmapper + + + org.apache.linkis + linkis-module + + + org.apache.linkis + linkis-gateway-httpclient-support + + + + + + com.webank.wedatasphere.dss + dss-framework-workspace-client + ${dss.version} + + + org.apache.linkis + linkis-gateway-httpclient-support + + + org.projectlombok + lombok + + + + + + org.apache.linkis + linkis-computation-client + ${linkis.version} + + + org.apache.linkis + linkis-gateway-httpclient-support + + + org.apache.linkis + linkis-bml + + + com.google.code.gson + gson + + + + + + + org.projectlombok + lombok + provided + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DataSourceDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DataSourceDTO.java new file mode 100644 index 0000000000..305803ddaa --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DataSourceDTO.java @@ -0,0 +1,115 @@ +package com.webank.wedatasphere.warehouse.client; + +import java.util.Date; + +public class DataSourceDTO { + + private Long id; + private String name; + private String type; + private Long dataSourceTypeId; + private String createIdentify; + private String desc; + private String createUser; + private String labels; + private Long versionId; + private String modifyUser; + private Date modifyTime; + private boolean expire; + + public boolean isExpire() { + return expire; + } + + public void setExpire(boolean expire) { + this.expire = expire; + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getCreateIdentify() { + return createIdentify; + } + + public void setCreateIdentify(String createIdentify) { + this.createIdentify = createIdentify; + } + + public Long getDataSourceTypeId() { + return dataSourceTypeId; + } + + public void setDataSourceTypeId(Long dataSourceTypeId) { + this.dataSourceTypeId = dataSourceTypeId; + } + + public String getDesc() { + return desc; + } + + public void setDesc(String desc) { + this.desc = desc; + } + + public String getCreateUser() { + return createUser; + } + + public void setCreateUser(String createUser) { + this.createUser = createUser; + } + + public String getLabels() { + return labels; + } + + public void setLabels(String labels) { + this.labels = labels; + } + + public Long getVersionId() { + return versionId; + } + + public void setVersionId(Long versionId) { + this.versionId = versionId; + } + + public String getModifyUser() { + return modifyUser; + } + + public void setModifyUser(String modifyUser) { + this.modifyUser = modifyUser; + } + + public Date getModifyTime() { + return modifyTime; + } + + public void setModifyTime(Date modifyTime) { + this.modifyTime = modifyTime; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DwDataSourceConfiguration.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DwDataSourceConfiguration.java new file mode 100644 index 0000000000..eca2f3985c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/client/DwDataSourceConfiguration.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.warehouse.client; + +import org.apache.linkis.common.conf.CommonVars; + +public class DwDataSourceConfiguration { + public static final CommonVars SERVER_URL = CommonVars.apply("wds.datawarehouse.datasource.client.serverurl", ""); + public static final CommonVars CONNECTION_TIMEOUT = CommonVars.apply("wds.datawarehouse.datasource.client.connection.timeout", 30000L); + public static final CommonVars DISCOVERY_ENABLED = CommonVars.apply("wds.datawarehouse.datasource.client.discovery.enabled", false); + public static final CommonVars DISCOVERY_FREQUENCY_PERIOD = CommonVars.apply("wds.datawarehouse.datasource.client.discoveryfrequency.period", 1L); + public static final CommonVars LOAD_BALANCER_ENABLED = CommonVars.apply("wds.datawarehouse.datasource.client.loadbalancer.enabled", true); + public static final CommonVars MAX_CONNECTION_SIZE = CommonVars.apply("wds.datawarehouse.datasource.client.maxconnection.size", 5); + public static final CommonVars RETRY_ENABLED = CommonVars.apply("wds.datawarehouse.datasource.client.retryenabled", false); + public static final CommonVars READ_TIMEOUT = CommonVars.apply("wds.datawarehouse.datasource.client.readtimeout", 30000L); + public static final CommonVars AUTHTOKEN_KEY = CommonVars.apply("wds.datawarehouse.datasource.client.authtoken.key", ""); + public static final CommonVars AUTHTOKEN_VALUE = CommonVars.apply("wds.datawarehouse.datasource.client.authtoken.value", ""); + public static final CommonVars DWS_VERSION = CommonVars.apply("wds.datawarehouse.datasource.client.dws.version", ""); +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerCreateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerCreateCommand.java new file mode 100644 index 0000000000..38e481f9a2 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerCreateCommand.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwLayerCreateCommand { + private String name; + private String enName; + private String owner; + private String principalName; + private String databases; + private String description; + private Integer order; +// private String autoCollectStrategy; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerQueryCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerQueryCommand.java new file mode 100644 index 0000000000..4e5a18e950 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerQueryCommand.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import com.webank.wedatasphere.warehouse.cqe.common.PageCommand; +import lombok.*; + +@Setter +@Getter +@ToString +//@Builder +//@Accessors(chain = true) +public class DwLayerQueryCommand extends PageCommand { + private String name; + private Boolean enabled; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerUpdateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerUpdateCommand.java new file mode 100644 index 0000000000..bda4fb73a1 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwLayerUpdateCommand.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwLayerUpdateCommand { + private Long id; + private String name; + private String enName; + private String databases; + private Integer order; +// private String autoCollectStrategy; + private String owner; + private String description; + private String principalName; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierCreateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierCreateCommand.java new file mode 100644 index 0000000000..4631161649 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierCreateCommand.java @@ -0,0 +1,37 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Setter +@Getter +@ToString +public class DwModifierCreateCommand { + private Long themeDomainId; + + private String themeArea; + + private Long layerId; + + private String layerArea; + + private String typeName; + + private String typeEnName; + + private String description; + + private List list; + + @Setter + @Getter + @ToString + public static class DwModifierCreateListItem { + private String name; + private String identifier; + private String formula; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierQueryCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierQueryCommand.java new file mode 100644 index 0000000000..7e15f3a649 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierQueryCommand.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import com.webank.wedatasphere.warehouse.cqe.common.PageCommand; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwModifierQueryCommand extends PageCommand { + private String name; + private Boolean enabled; + private String theme; + private String layer; +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierUpdateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierUpdateCommand.java new file mode 100644 index 0000000000..03b5fd4708 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwModifierUpdateCommand.java @@ -0,0 +1,39 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Setter +@Getter +@ToString +public class DwModifierUpdateCommand { + private Long id; + + private Long themeDomainId; + + private String themeArea; + + private Long layerId; + + private String layerArea; + + private String typeName; + + private String typeEnName; + + private String description; + + private List list; + + @Setter + @Getter + @ToString + public static class DwModifierUpdateListItem { + private String name; + private String identifier; + private String formula; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodCreateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodCreateCommand.java new file mode 100644 index 0000000000..82ce869e8c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodCreateCommand.java @@ -0,0 +1,20 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwStatisticalPeriodCreateCommand { + private Long themeDomainId; + private Long layerId; + private String name; + private String enName; + private String description; + private String statStartFormula; + private String statEndFormula; + private String principalName; + private String owner; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodQueryCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodQueryCommand.java new file mode 100644 index 0000000000..1a83859c1b --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodQueryCommand.java @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import com.webank.wedatasphere.warehouse.cqe.common.PageCommand; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwStatisticalPeriodQueryCommand extends PageCommand { + private String name; + private Boolean enabled; + private String theme; + private String layer; +} \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodUpdateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodUpdateCommand.java new file mode 100644 index 0000000000..4a08404746 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwStatisticalPeriodUpdateCommand.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwStatisticalPeriodUpdateCommand { + private Long id; + private Long themeDomainId; + private Long layerId; + private String name; + private String enName; + private String description; + private String statStartFormula; + private String statEndFormula; + private String principalName; + private String owner; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainCreateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainCreateCommand.java new file mode 100644 index 0000000000..244cadb553 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainCreateCommand.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwThemeDomainCreateCommand { + private String name; + private String enName; + private String owner; + private String principalName; + private String description; + private Integer sort; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainQueryCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainQueryCommand.java new file mode 100644 index 0000000000..810823f8c4 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainQueryCommand.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import com.webank.wedatasphere.warehouse.cqe.common.PageCommand; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwThemeDomainQueryCommand extends PageCommand { + private String name; + private Boolean enabled; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainUpdateCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainUpdateCommand.java new file mode 100644 index 0000000000..a065e4ad1f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/DwThemeDomainUpdateCommand.java @@ -0,0 +1,19 @@ +package com.webank.wedatasphere.warehouse.cqe; + +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +public class DwThemeDomainUpdateCommand { + private Long id; + private String name; + private String enName; + private String owner; + private String principalName; + private String description; + private Integer sort; +// private String authority; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/common/PageCommand.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/common/PageCommand.java new file mode 100644 index 0000000000..47b1a5a3bf --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/cqe/common/PageCommand.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.warehouse.cqe.common; + + + +import lombok.*; + +@Setter +@Getter +@ToString +@AllArgsConstructor +@NoArgsConstructor +//@Builder +//@Accessors(chain = true) +public class PageCommand { + private Integer page; + private Integer size; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerDTO.java new file mode 100644 index 0000000000..58ff72c5ad --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerDTO.java @@ -0,0 +1,23 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class DwLayerDTO { + private Long id; + private String name; + private String enName; + private Boolean preset; + private String description; + private String principalName; + private String dbs; + private String owner; + private Integer sort; + private boolean referenced; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerListItemDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerListItemDTO.java new file mode 100644 index 0000000000..49d7ba0625 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwLayerListItemDTO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.*; + +import java.util.Date; + +@Data +public class DwLayerListItemDTO { + private Long id; + private String name; + private String enName; + private Boolean preset; + private String description; + private String principalName; + private String dbs; + private Integer sort; + private Boolean isAvailable; + private Date createTime; + private Date updateTime; + private int referenceCount; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierDTO.java new file mode 100644 index 0000000000..c537c6f51c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierDTO.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.List; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class DwModifierDTO { + private Long id; + private String modifierType; + private String modifierTypeEn; + private Long layerId; + private String layerArea; + private Long themeDomainId; + private String themeArea; + private String description; + private List list; + private boolean referenced; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListDTO.java new file mode 100644 index 0000000000..a9b1f3fb45 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListDTO.java @@ -0,0 +1,18 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class DwModifierListDTO { + private Long id; + private Long modifierId; + private String name; + private String identifier; + private String formula; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListItemDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListItemDTO.java new file mode 100644 index 0000000000..805fa84a2f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwModifierListItemDTO.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.*; + +import java.util.Date; +import java.util.List; + +@Data +public class DwModifierListItemDTO { + private Long id; + private String modifierType; + private String modifierTypeEn; + private String layerArea; + private String layerAreaEn; + private String themeArea; + private String themeAreaEn; + private String description; + private Boolean isAvailable; + private Date createTime; + private Date updateTime; + private int referenceCount; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwStatisticalPeriodListItemDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwStatisticalPeriodListItemDTO.java new file mode 100644 index 0000000000..766e15a6ff --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwStatisticalPeriodListItemDTO.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.Data; + +import java.util.Date; + +@Data +public class DwStatisticalPeriodListItemDTO { + private Long id; + private Long themeDomainId; + private Long layerId; + private String name; + private String enName; + private Boolean isAvailable; + private String description; + private String owner; + private String statStartFormula; + private String statEndFormula; + private String principalName; + private Date createTime; + private Date updateTime; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainDTO.java new file mode 100644 index 0000000000..fbbf9e972c --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainDTO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Setter +@Getter +@ToString +@NoArgsConstructor +public class DwThemeDomainDTO { + private Long id; + private String name; + private String enName; + private String owner; + private String principalName; + private Integer sort; + private String description; + private boolean referenced; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainListItemDTO.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainListItemDTO.java new file mode 100644 index 0000000000..c5318735e2 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/DwThemeDomainListItemDTO.java @@ -0,0 +1,21 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.*; + +import java.util.Date; + +@Data +public class DwThemeDomainListItemDTO { + private Long id; + private String name; + private String enName; + private String owner; + private String principalName; + private Integer sort; + private String description; + private Date createTime; + private Date updateTime; + private Boolean preset; + private Boolean isAvailable; + private int referenceCount; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/PageInfo.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/PageInfo.java new file mode 100644 index 0000000000..9e3fb9a5e3 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/dto/PageInfo.java @@ -0,0 +1,17 @@ +package com.webank.wedatasphere.warehouse.dto; + +import lombok.*; + +import java.util.List; + +@Setter +@Getter +@AllArgsConstructor +@NoArgsConstructor +@ToString +public class PageInfo { + private List items; + private Long current; + private Long pageSize; + private Long total; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwException.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwException.java new file mode 100644 index 0000000000..39520dac83 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwException.java @@ -0,0 +1,56 @@ +package com.webank.wedatasphere.warehouse.exception; + +import org.apache.linkis.common.exception.ErrorException; + +public class DwException extends ErrorException { + + public static final Integer ARGUMENT_ERROR = 21101; + public static final Integer BUSINESS_ERROR = 22101; + + private int errorCode; + private Object[] parameters; + + public int getErrorCode() { + return errorCode; + } + + public void setErrorCode(int errorCode) { + this.errorCode = errorCode; + } + + public Object[] getParameters() { + return parameters; + } + + public static DwException argumentReject(String errorMessage, Object... parameters) { + return new DwException(ARGUMENT_ERROR, errorMessage, parameters); + } + + public static DwException argumentReject(String errorMessage) { + return new DwException(ARGUMENT_ERROR, errorMessage); + } + + public static DwException stateReject(String errorMessage) { + return new DwException(BUSINESS_ERROR, errorMessage); + } + + public static DwException stateReject(String errorMessage, Object... parameters) { + return new DwException(BUSINESS_ERROR, errorMessage, parameters); + } + + public DwException(int errorCode, String message) { + super(errorCode, message); + this.errorCode = errorCode; + } + + public DwException(int errorCode, String message, Object... parameters) { + super(errorCode, message); + this.errorCode = errorCode; + this.parameters = parameters; + } + + public DwException(int errorCode, String message, Throwable cause) { + super(errorCode, message); + this.errorCode = errorCode; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwExceptionCode.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwExceptionCode.java new file mode 100644 index 0000000000..569ba6e6ae --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/exception/DwExceptionCode.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.warehouse.exception; + +// 41000 ~ 41999 +public enum DwExceptionCode { + + CREATE_MODEL_TYPE_ERROR(41001), + DELETE_MODEL_TYPE_ERROR(41002), + UPDATE_MODEL_TYPE_ERROR(41003), + GET_AVAILABLE_DBS_ERROR(41004), + GET_PRINCIPAL_USERS_ERROR(41005), + GET_PRINCIPAL_ROLES_ERROR(41006), + ; + + private int code; + + DwExceptionCode(int code) { + this.code = code; + } + + public int getCode() { + return code; + } + + public void setCode(int code) { + this.code = code; + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDomainReferenceAdapter.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDomainReferenceAdapter.java new file mode 100644 index 0000000000..e9339051e3 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDomainReferenceAdapter.java @@ -0,0 +1,237 @@ +package com.webank.wedatasphere.warehouse.service; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.google.common.base.Strings; +import com.webank.wedatasphere.dss.datamodel.center.client.impl.LinkisDatamodelCenterRemoteClient; +import com.webank.wedatasphere.dss.datamodel.center.client.request.CyclesReferenceAction; +import com.webank.wedatasphere.dss.datamodel.center.client.request.LayersReferenceAction; +import com.webank.wedatasphere.dss.datamodel.center.client.request.ModifiersReferenceAction; +import com.webank.wedatasphere.dss.datamodel.center.client.request.ThemesReferenceAction; +import com.webank.wedatasphere.dss.datamodel.center.client.response.CyclesReferenceResult; +import com.webank.wedatasphere.dss.datamodel.center.client.response.LayersReferenceResult; +import com.webank.wedatasphere.dss.datamodel.center.client.response.ModifiersReferenceResult; +import com.webank.wedatasphere.dss.datamodel.center.client.response.ThemesReferenceResult; +import com.webank.wedatasphere.warehouse.LinkisRemoteClientHolder; +import com.webank.wedatasphere.warehouse.dao.domain.DwLayer; +import com.webank.wedatasphere.warehouse.dao.domain.DwModifier; +import com.webank.wedatasphere.warehouse.dao.domain.DwStatisticalPeriod; +import com.webank.wedatasphere.warehouse.dao.domain.DwThemeDomain; +import com.webank.wedatasphere.warehouse.dao.mapper.DwLayerMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwModifierMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwStatisticalPeriodMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwThemeDomainMapper; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.utils.PreconditionUtil; + +import java.util.Optional; + +public interface DwDomainReferenceAdapter { + + DwStatisticalPeriodMapper getDwStatisticalPeriodMapper(); + + DwModifierMapper getDwModifierMapper(); + + DwLayerMapper getDwLayerMapper(); + + DwThemeDomainMapper getDwThemeDomainMapper(); + + default void checkMapper() throws DwException { +// DwLayerMapper dwLayerMapper = getDwLayerMapper(); +// PreconditionUtil.checkState(Optional.ofNullable(dwLayerMapper).isPresent(), DwException.stateReject("dw layer mapper should not be null")); +// +// DwThemeDomainMapper dwThemeDomainMapper = getDwThemeDomainMapper(); +// PreconditionUtil.checkState(Optional.ofNullable(dwThemeDomainMapper).isPresent(), DwException.stateReject("dw theme domain mapper should not be null")); +// +// DwModifierMapper dwModifierMapper = getDwModifierMapper(); +// PreconditionUtil.checkState(Optional.ofNullable(dwModifierMapper).isPresent(), DwException.stateReject("dw modifier mapper should not be null")); +// +// DwStatisticalPeriodMapper dwStatisticalPeriodMapper = getDwStatisticalPeriodMapper(); +// PreconditionUtil.checkState(Optional.ofNullable(dwStatisticalPeriodMapper).isPresent(), DwException.stateReject("dw statistical period mapper should not be null")); + checkLayerMapper(); + + checkThemeDomainMapper(); + + checkModifierMapper(); + + checkStatisticalPeriodMapper(); + } + + default void checkModifierMapper() throws DwException { + DwModifierMapper dwModifierMapper = getDwModifierMapper(); + PreconditionUtil.checkState(Optional.ofNullable(dwModifierMapper).isPresent(), DwException.stateReject("dw modifier mapper should not be null")); + } + + default void checkLayerMapper() throws DwException { + DwLayerMapper dwLayerMapper = getDwLayerMapper(); + PreconditionUtil.checkState(Optional.ofNullable(dwLayerMapper).isPresent(), DwException.stateReject("dw layer mapper should not be null")); + } + + default void checkThemeDomainMapper() throws DwException { + DwThemeDomainMapper dwThemeDomainMapper = getDwThemeDomainMapper(); + PreconditionUtil.checkState(Optional.ofNullable(dwThemeDomainMapper).isPresent(), DwException.stateReject("dw theme domain mapper should not be null")); + } + + default void checkStatisticalPeriodMapper() throws DwException { + DwStatisticalPeriodMapper dwStatisticalPeriodMapper = getDwStatisticalPeriodMapper(); + PreconditionUtil.checkState(Optional.ofNullable(dwStatisticalPeriodMapper).isPresent(), DwException.stateReject("dw statistical period mapper should not be null")); + } + + // get theme reference count + default int getThemeDomainReferenceCount(Long id, String username) throws DwException { + checkThemeDomainMapper(); + + DwThemeDomain themeDomain = getDwThemeDomainMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(themeDomain).isPresent(), DwException.stateReject("dw theme domain should not be null, id = {}", id)); + + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + ThemesReferenceAction themesReferenceAction = new ThemesReferenceAction.Builder().setName(themeDomain.getEnName()).setUser(username).build(); + ThemesReferenceResult themesReferenceResult = dataModelRemoteClient.themesReference(themesReferenceAction); + return themesReferenceResult.getResult(); + } + + // get modifier reference count + default int getModifierReferenceCount(Long id, String username) throws DwException { + checkModifierMapper(); + + DwModifier modifier = getDwModifierMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(modifier).isPresent(), DwException.stateReject("dw modifier should not be null, id = {}", id)); + + if (Strings.isNullOrEmpty(modifier.getModifierTypeEn())) { + return 0; + } + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + ModifiersReferenceAction modifiersReferenceAction = new ModifiersReferenceAction.Builder().setName(modifier.getModifierTypeEn()).setUser(username).build(); + ModifiersReferenceResult modifiersReferenceResult = dataModelRemoteClient.modifiersReference(modifiersReferenceAction); + return modifiersReferenceResult.getResult(); + } + + default int getStatisticalPeriodReferenceCount(Long id, String username) throws DwException { + checkStatisticalPeriodMapper(); + + DwStatisticalPeriod period = getDwStatisticalPeriodMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(period).isPresent(), DwException.stateReject("dw statistical period should not be null, id = {}", id)); + + // check datamodel + if (Strings.isNullOrEmpty(period.getEnName())) { + return 0; + } + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + CyclesReferenceAction cyclesReferenceAction = new CyclesReferenceAction.Builder().setName(period.getEnName()).setUser(username).build(); + CyclesReferenceResult cyclesReferenceResult = dataModelRemoteClient.cyclesReference(cyclesReferenceAction); + return cyclesReferenceResult.getResult(); + } + + default int getLayerReferenceCount(Long id, String username) throws DwException { + checkLayerMapper(); + + DwLayer dwLayer = getDwLayerMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(dwLayer).isPresent(), DwException.stateReject("dw layer should not be null, id = {}", id)); + + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + LayersReferenceAction action = new LayersReferenceAction.Builder().setUser(username).setName(dwLayer.getEnName()).build(); + LayersReferenceResult layersReferenceResult = dataModelRemoteClient.layersReference(action); + return layersReferenceResult.getResult(); + } + + default boolean isModifierInUse(Long id, String username) throws DwException { + checkMapper(); + + DwModifier modifier = getDwModifierMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(modifier).isPresent(), DwException.stateReject("dw modifier should not be null, id = {}", id)); + + // check datamodel + if (!Strings.isNullOrEmpty(modifier.getModifierTypeEn())) { + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + ModifiersReferenceAction modifiersReferenceAction = new ModifiersReferenceAction.Builder().setName(modifier.getModifierTypeEn()).setUser(username).build(); + ModifiersReferenceResult modifiersReferenceResult = dataModelRemoteClient.modifiersReference(modifiersReferenceAction); + int referenceCount = modifiersReferenceResult.getResult(); + return referenceCount > 0; + } + + return false; + } + + default boolean isStatisticalPeriodInUse(Long id, String username) throws DwException { + checkMapper(); + + DwStatisticalPeriod period = getDwStatisticalPeriodMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(period).isPresent(), DwException.stateReject("dw statistical period should not be null, id = {}", id)); + + // check datamodel + if (!Strings.isNullOrEmpty(period.getEnName())) { + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + CyclesReferenceAction cyclesReferenceAction = new CyclesReferenceAction.Builder().setName(period.getEnName()).setUser(username).build(); + CyclesReferenceResult cyclesReferenceResult = dataModelRemoteClient.cyclesReference(cyclesReferenceAction); + int referenceCount = cyclesReferenceResult.getResult(); + return referenceCount > 0; + } + + return false; + } + + default boolean isThemeDomainInUse(Long id, String username) throws DwException { + checkMapper(); + + // 检查修饰词关联数量 + QueryWrapper queryModifierWrapper = new QueryWrapper<>(); + queryModifierWrapper.eq("theme_domain_id", id); + queryModifierWrapper.eq("status", Boolean.TRUE); + queryModifierWrapper.eq("is_available", Boolean.TRUE); + Integer count1 = getDwModifierMapper().selectCount(queryModifierWrapper); + boolean isRelModifier = Optional.ofNullable(count1).orElse(0) > 0; + + // 检查统计周期关联数量 + QueryWrapper statisticalPeriodQueryWrapper = new QueryWrapper<>(); + statisticalPeriodQueryWrapper.eq("theme_domain_id", id); + statisticalPeriodQueryWrapper.eq("status", Boolean.TRUE); + statisticalPeriodQueryWrapper.eq("is_available", Boolean.TRUE); + Integer count2 = getDwStatisticalPeriodMapper().selectCount(statisticalPeriodQueryWrapper); + boolean isRelStatisticalPeriod = Optional.ofNullable(count2).orElse(0) > 0; + + DwThemeDomain themeDomain = getDwThemeDomainMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(themeDomain).isPresent(), DwException.stateReject("dw theme domain should not be null, id = {}", id)); + + // check datamodel + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + ThemesReferenceAction themesReferenceAction = new ThemesReferenceAction.Builder().setName(themeDomain.getEnName()).setUser(username).build(); + ThemesReferenceResult themesReferenceResult = dataModelRemoteClient.themesReference(themesReferenceAction); + int referenceCount = themesReferenceResult.getResult(); + boolean isDataModelReferenced = referenceCount > 0; + +// LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + + return isRelModifier || isRelStatisticalPeriod || isDataModelReferenced; + } + + default boolean isLayerInUse(Long id, String username) throws DwException { + checkMapper(); + + // 检查修饰词关联数量 + QueryWrapper queryModifierWrapper = new QueryWrapper<>(); + queryModifierWrapper.eq("layer_id", id); + queryModifierWrapper.eq("status", Boolean.TRUE); + queryModifierWrapper.eq("is_available", Boolean.TRUE); + Integer count1 = getDwModifierMapper().selectCount(queryModifierWrapper); + boolean isRelModifier = Optional.ofNullable(count1).orElse(0) > 0; + + // 检查统计周期关联数量 + QueryWrapper statisticalPeriodQueryWrapper = new QueryWrapper<>(); + statisticalPeriodQueryWrapper.eq("layer_id", id); + statisticalPeriodQueryWrapper.eq("status", Boolean.TRUE); + statisticalPeriodQueryWrapper.eq("is_available", Boolean.TRUE); + Integer count2 = getDwStatisticalPeriodMapper().selectCount(statisticalPeriodQueryWrapper); + boolean isRelStatisticalPeriod = Optional.ofNullable(count2).orElse(0) > 0; + + DwLayer dwLayer = getDwLayerMapper().selectById(id); + PreconditionUtil.checkState(Optional.ofNullable(dwLayer).isPresent(), DwException.stateReject("dw layer should not be null, id = {}", id)); + + LinkisDatamodelCenterRemoteClient dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient(); + LayersReferenceAction action = new LayersReferenceAction.Builder().setUser(username).setName(dwLayer.getEnName()).build(); + LayersReferenceResult layersReferenceResult = dataModelRemoteClient.layersReference(action); + int referenceCount = layersReferenceResult.getResult(); + boolean isDataModelReferenced = referenceCount > 0; + + return isRelModifier || isRelStatisticalPeriod || isDataModelReferenced; + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDsService.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDsService.java new file mode 100644 index 0000000000..30fc68533f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwDsService.java @@ -0,0 +1,13 @@ +package com.webank.wedatasphere.warehouse.service; + +import org.apache.linkis.server.Message; + +import javax.servlet.http.HttpServletRequest; + +public interface DwDsService { + Message getAllHiveDbs(HttpServletRequest request,Integer limit, Integer offset) throws Exception; + + Message getPrincipalUsers(HttpServletRequest request, String id) throws Exception; + + Message getPrincipalRoles(HttpServletRequest request, String id) throws Exception; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwLayerService.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwLayerService.java new file mode 100644 index 0000000000..226ab3429d --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwLayerService.java @@ -0,0 +1,29 @@ +package com.webank.wedatasphere.warehouse.service; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.DwLayerCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerUpdateCommand; +import com.webank.wedatasphere.warehouse.exception.DwException; + +import javax.servlet.http.HttpServletRequest; + +public interface DwLayerService { + Message createDwCustomLayer(HttpServletRequest request, final DwLayerCreateCommand command) throws DwException; + + Message getLayerById(HttpServletRequest request, final Long id) throws DwException; + + Message getAllPresetLayers(HttpServletRequest request) throws DwException; + + Message queryPagedCustomLayers(HttpServletRequest request, final DwLayerQueryCommand command) throws DwException; + + Message deleteById(HttpServletRequest request, Long id) throws DwException; + + Message update(HttpServletRequest request, DwLayerUpdateCommand command) throws DwException; + + Message enable(HttpServletRequest request, Long id) throws DwException; + + Message disable(HttpServletRequest request, Long id) throws DwException; + + Message getAllLayers(HttpServletRequest request, Boolean isAvailable, String db) throws DwException; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwModifierService.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwModifierService.java new file mode 100644 index 0000000000..849444e99d --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwModifierService.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.warehouse.service; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.DwModifierCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwModifierQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwModifierUpdateCommand; +import com.webank.wedatasphere.warehouse.exception.DwException; + +import javax.servlet.http.HttpServletRequest; + +public interface DwModifierService { + Message queryAllModifiers(HttpServletRequest request, DwModifierQueryCommand command) throws DwException; + + Message queryPage(HttpServletRequest request, DwModifierQueryCommand command) throws DwException; + + Message create(HttpServletRequest request, DwModifierCreateCommand command) throws DwException; + + Message getById(HttpServletRequest request, Long id) throws DwException; + + Message deleteById(HttpServletRequest request, Long id) throws DwException; + + Message update(HttpServletRequest request, DwModifierUpdateCommand command) throws DwException; + + Message enable(HttpServletRequest request, Long id) throws DwException; + + Message disable(HttpServletRequest request, Long id) throws DwException; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwStatisticalPeriodService.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwStatisticalPeriodService.java new file mode 100644 index 0000000000..e6cacb86a1 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwStatisticalPeriodService.java @@ -0,0 +1,27 @@ +package com.webank.wedatasphere.warehouse.service; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodUpdateCommand; +import com.webank.wedatasphere.warehouse.exception.DwException; + +import javax.servlet.http.HttpServletRequest; + +public interface DwStatisticalPeriodService { + Message queryAll(HttpServletRequest request, DwStatisticalPeriodQueryCommand command) throws DwException; + + Message queryPage(HttpServletRequest request, DwStatisticalPeriodQueryCommand command) throws DwException; + + Message create(HttpServletRequest request, DwStatisticalPeriodCreateCommand command) throws DwException; + + Message getById(HttpServletRequest request, Long id) throws DwException; + + Message deleteById(HttpServletRequest request, Long id) throws DwException; + + Message update(HttpServletRequest request, DwStatisticalPeriodUpdateCommand command) throws DwException; + + Message enable(HttpServletRequest request, Long id) throws DwException; + + Message disable(HttpServletRequest request, Long id) throws DwException; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwThemeDomainService.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwThemeDomainService.java new file mode 100644 index 0000000000..772e8348e4 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/DwThemeDomainService.java @@ -0,0 +1,25 @@ +package com.webank.wedatasphere.warehouse.service; + +import org.apache.linkis.server.Message; +import com.webank.wedatasphere.warehouse.cqe.*; +import com.webank.wedatasphere.warehouse.exception.DwException; + +import javax.servlet.http.HttpServletRequest; + +public interface DwThemeDomainService { + Message queryAllThemeDomains(HttpServletRequest request, DwThemeDomainQueryCommand command) throws DwException; + + Message queryPage(HttpServletRequest request, DwThemeDomainQueryCommand command) throws DwException; + + Message create(HttpServletRequest request, DwThemeDomainCreateCommand command) throws DwException; + + Message getById(HttpServletRequest request, Long id) throws DwException; + + Message deleteById(HttpServletRequest request, Long id) throws DwException; + + Message update(HttpServletRequest request, DwThemeDomainUpdateCommand command) throws DwException; + + Message enable(HttpServletRequest request, Long id) throws DwException; + + Message disable(HttpServletRequest request, Long id) throws DwException; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwDsServiceImpl.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwDsServiceImpl.java new file mode 100644 index 0000000000..af15952556 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwDsServiceImpl.java @@ -0,0 +1,83 @@ +package com.webank.wedatasphere.warehouse.service.impl; + +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.SearchHiveDbAction; +import com.webank.wedatasphere.dss.data.governance.response.SearchHiveDbResult; +import com.webank.wedatasphere.dss.framework.workspace.client.WorkSpaceRemoteClient; +import com.webank.wedatasphere.dss.framework.workspace.client.request.GetWorkspaceRolesAction; +import com.webank.wedatasphere.dss.framework.workspace.client.request.GetWorkspaceUsersAction; +import com.webank.wedatasphere.dss.framework.workspace.client.response.GetWorkspaceRolesResult; +import com.webank.wedatasphere.dss.framework.workspace.client.response.GetWorkspaceUsersResult; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import com.webank.wedatasphere.warehouse.LinkisRemoteClientHolder; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.exception.DwExceptionCode; +import com.webank.wedatasphere.warehouse.service.DwDsService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.stereotype.Service; +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; + +@Service +public class DwDsServiceImpl implements DwDsService { + private final static Logger LOGGER = LoggerFactory.getLogger(DwDsServiceImpl.class); + @Override + public Message getAllHiveDbs(HttpServletRequest request,Integer limit, Integer offset) throws Exception { + String userName = SecurityFilter.getLoginUsername(request); + LOGGER.info("listAllDataSources userName:" + userName); + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + SearchHiveDbResult result = dataAssetsRemoteClient.searchHiveDb( + SearchHiveDbAction.builder().setQuery("hive_db").setUser(userName).setOffset(offset).setLimit(limit).build()); + List> results=result.getResult(); + List dbs=new ArrayList<>(); + for (Map map:results){ + dbs.add(map.get("name")); + } + return Message.ok().data("list", dbs); + } + + @Override + public Message getPrincipalUsers(HttpServletRequest request, String workspaceId) throws Exception { + String userName = SecurityFilter.getLoginUsername(request); + LOGGER.info("get Principal users, userName:" + userName); + try { + WorkSpaceRemoteClient client = LinkisRemoteClientHolder.getWorkspaceRemoteClient(); + GetWorkspaceUsersAction action = GetWorkspaceUsersAction.builder().setUser(userName).setWorkspaceId(workspaceId).setPageNow(1).setPageSize(500).build(); + GetWorkspaceUsersResult result = client.getWorkspaceUsers(action); + List> users = result.getWorkspaceUsers(); + return Message.ok().data("list", users); + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.GET_PRINCIPAL_USERS_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.GET_PRINCIPAL_USERS_ERROR.getCode(), e.getMessage()); + } + } + } + + @Override + public Message getPrincipalRoles(HttpServletRequest request, String workspaceId) throws Exception { + String userName = SecurityFilter.getLoginUsername(request); + LOGGER.info("get Principal roles, userName:" + userName); + try { + WorkSpaceRemoteClient client = LinkisRemoteClientHolder.getWorkspaceRemoteClient(); + GetWorkspaceRolesAction action = GetWorkspaceRolesAction.builder().setUser(userName).setWorkspaceId(workspaceId).build(); + GetWorkspaceRolesResult result = client.getWorkspaceRoles(action); + List> roles = result.getWorkspaceRoles(); + return Message.ok().data("list", roles); + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.GET_PRINCIPAL_ROLES_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.GET_PRINCIPAL_ROLES_ERROR.getCode(), e.getMessage()); + } + } + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwLayerServiceImpl.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwLayerServiceImpl.java new file mode 100644 index 0000000000..baaaf8f272 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwLayerServiceImpl.java @@ -0,0 +1,523 @@ +package com.webank.wedatasphere.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.CreateModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.request.DeleteModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.request.UpdateModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.response.CreateModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.DeleteModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.UpdateModelTypeResult; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import com.webank.wedatasphere.warehouse.LinkisRemoteClientHolder; +import com.webank.wedatasphere.warehouse.cqe.DwLayerCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwLayerUpdateCommand; +import com.webank.wedatasphere.warehouse.dao.domain.DwLayer; +import com.webank.wedatasphere.warehouse.dao.mapper.DwModifierMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwStatisticalPeriodMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwThemeDomainMapper; +import com.webank.wedatasphere.warehouse.dto.DwLayerDTO; +import com.webank.wedatasphere.warehouse.dto.DwLayerListItemDTO; +import com.webank.wedatasphere.warehouse.dto.PageInfo; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.dao.mapper.DwLayerMapper; +//import com.webank.wedatasphere.warehouse.mapper.DwLayerModelMapper; +import com.webank.wedatasphere.warehouse.exception.DwExceptionCode; +import com.webank.wedatasphere.warehouse.service.DwDomainReferenceAdapter; +import com.webank.wedatasphere.warehouse.service.DwLayerService; +import com.webank.wedatasphere.warehouse.utils.PreconditionUtil; +import com.webank.wedatasphere.warehouse.utils.RegexUtil; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service +public class DwLayerServiceImpl implements DwLayerService, DwDomainReferenceAdapter { + + private final DwLayerMapper dwLayerMapper; + private final DwThemeDomainMapper dwThemeDomainMapper; + private final DwModifierMapper dwModifierMapper; + private final DwStatisticalPeriodMapper dwStatisticalPeriodMapper; + + @Autowired + public DwLayerServiceImpl(final DwLayerMapper dwLayerMapper, final DwThemeDomainMapper dwThemeDomainMapper, final DwModifierMapper dwModifierMapper, final DwStatisticalPeriodMapper dwStatisticalPeriodMapper) { + this.dwLayerMapper = dwLayerMapper; + this.dwThemeDomainMapper = dwThemeDomainMapper; + this.dwModifierMapper = dwModifierMapper; + this.dwStatisticalPeriodMapper = dwStatisticalPeriodMapper; + } + + @Override + public DwModifierMapper getDwModifierMapper() { + return dwModifierMapper; + } + + @Override + public DwStatisticalPeriodMapper getDwStatisticalPeriodMapper() { + return dwStatisticalPeriodMapper; + } + + @Override + public DwLayerMapper getDwLayerMapper() { + return dwLayerMapper; + } + + @Override + public DwThemeDomainMapper getDwThemeDomainMapper() { + return dwThemeDomainMapper; + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message createDwCustomLayer(HttpServletRequest request, DwLayerCreateCommand command) throws DwException { + String username = SecurityFilter.getLoginUsername(request); +// String username = "hdfs"; + String name = command.getName(); + String enName = command.getEnName(); + String databases = command.getDatabases(); + Integer order = command.getOrder(); +// String autoCollectStrategy = command.getAutoCollectStrategy(); + String owner = command.getOwner(); + String description = command.getDescription(); + String principalName = command.getPrincipalName(); + + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("charge user should not empty")); +// authority = PreconditionUtil.checkStringArgumentNotBlankTrim(authority, DwException.argumentReject("authority should not empty")); + QueryWrapper nameUniqueCheckQuery = new QueryWrapper<>(); + nameUniqueCheckQuery.eq("name", name); + nameUniqueCheckQuery.eq("status", Boolean.TRUE); + DwLayer exist = this.dwLayerMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist), DwException.stateReject("layer name aleardy exists")); + + if (Strings.isBlank(databases)) { + databases = "ALL"; + } + if (Objects.isNull(order)) { + order = 1; + } + +// if (Strings.isBlank(autoCollectStrategy)) { +// autoCollectStrategy = "{}"; +// } + +// String user = "hdfs"; + + Date now = new Date(); + + DwLayer layer = new DwLayer(); + layer.setName(name); + layer.setEnName(enName); + layer.setDescription(description); + layer.setPrincipalName(principalName); + layer.setOwner(owner); + layer.setDbs(databases); +// layer.setAutoCollectStrategy(autoCollectStrategy); + // 设置为 FALSE ,因为是自定义分层 + layer.setPreset(Boolean.FALSE); + layer.setIsAvailable(Boolean.TRUE); +// layer.setCreateUser(user); + layer.setSort(order); + layer.setCreateTime(now); + layer.setUpdateTime(now); + layer.setStatus(Boolean.TRUE); + layer.setLockVersion(1L); + + int insert = this.dwLayerMapper.insert(layer); + PreconditionUtil.checkState(1 == insert, DwException.stateReject("create dw layer failed")); + + // 建立关联 + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + CreateModelTypeAction action = new CreateModelTypeAction.Builder().setType(ClassificationConstant.LAYER).setName(enName).setUser(username).build(); + CreateModelTypeResult result = dataAssetsRemoteClient.createModelType(action); + + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.CREATE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.CREATE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + + + return Message.ok().data("id", layer.getId()); + } + + @Override + public Message getLayerById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwLayer layer = this.dwLayerMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(layer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(layer.getStatus(), DwException.stateReject("layer has been removed")); + +// DwLayerDTO dto = this.dwLayerModelMapper.toDTO(layer); + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isLayerInUse(layer.getId(), username); + + DwLayerDTO dto = new DwLayerDTO(); + BeanUtils.copyProperties(layer, dto); + dto.setReferenced(inUse); + + return Message.ok().data("item", dto); + } + + + @Override + public Message getAllLayers(HttpServletRequest request, Boolean isAvailable, String db) throws DwException { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (!Objects.isNull(isAvailable)) { + queryWrapper.eq("is_available", isAvailable); + } + List records = this.dwLayerMapper.selectList(queryWrapper); + String username = SecurityFilter.getLoginUsername(request); + + List dtos = new ArrayList<>(); + boolean contain; + for (DwLayer record : records) { + contain = true; + if (Strings.isNotBlank(db)) { + if ("all".equalsIgnoreCase(db)) { + // 查询的时候传入的参数 db = all + contain = true; + } else { + // 预置分层所有库都可以用 + if (record.getPreset()) { + contain = true; + } else { + contain = false; + String dbs = record.getDbs(); + if (Strings.isNotBlank(dbs)) { + String[] splitDbs = dbs.split(","); + for (String splitDb : splitDbs) { + // 如果分层可用库选择了所有,则直接添加到查询记录中 + if ("all".equalsIgnoreCase(splitDb)) { + contain = true; + break; + } + // 否则就遍历判断当前查询库是否在当前分层中存在 + if (Objects.equals(splitDb, db)) { + contain = true; + break; + } + } + } + } + } + } + + if (!contain) { + continue; + } + + DwLayerListItemDTO dto = new DwLayerListItemDTO(); + BeanUtils.copyProperties(record, dto); + // get reference count + int layerReferenceCount = getLayerReferenceCount(record.getId(), username); + dto.setReferenceCount(layerReferenceCount); + dtos.add(dto); + } + + return Message.ok().data("list", dtos); + } + + + @Override + public Message getAllPresetLayers(HttpServletRequest request) throws DwException { + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + queryWrapper.eq("preset", Boolean.TRUE); + List records = this.dwLayerMapper.selectList(queryWrapper); +// List dtos = DwLayerModelMapper.INSTANCE.toList(dwLayers); + List dtos = new ArrayList<>(); + + String username = SecurityFilter.getLoginUsername(request); + + for (DwLayer record : records) { + DwLayerListItemDTO dto = new DwLayerListItemDTO(); + BeanUtils.copyProperties(record, dto); + // get reference count + int layerReferenceCount = getLayerReferenceCount(record.getId(), username); + dto.setReferenceCount(layerReferenceCount); + dtos.add(dto); + } + + return Message.ok().data("list", dtos); + } + + @Override + public Message queryPagedCustomLayers(HttpServletRequest request, DwLayerQueryCommand command) throws DwException { + Integer page = command.getPage(); + Integer size = command.getSize(); + String name = command.getName(); + Boolean enabled = command.getEnabled(); + if (Objects.isNull(page)) + page = 1; + + if (Objects.isNull(size)) + size = 10; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + queryWrapper.eq("preset", Boolean.FALSE); + if (!Objects.isNull(enabled)) { + queryWrapper.eq("is_available", enabled); + } + if (Strings.isNotBlank(name)) { + queryWrapper.like("name", name).or().like("en_name", name); + } + + Page queryPage = new Page<>(page, size); + + IPage _page = this.dwLayerMapper.selectPage(queryPage, queryWrapper); + + List records = _page.getRecords(); + +// List list = DwLayerModelMapper.INSTANCE.toList(records); + List list = new ArrayList<>(); + String username = SecurityFilter.getLoginUsername(request); + for (DwLayer record : records) { + DwLayerListItemDTO dto = new DwLayerListItemDTO(); + BeanUtils.copyProperties(record, dto); + // get reference count + int layerReferenceCount = getLayerReferenceCount(record.getId(), username); + dto.setReferenceCount(layerReferenceCount); + + list.add(dto); + + } + + + PageInfo __page = new PageInfo<>(list, _page.getCurrent(), _page.getSize(), _page.getTotal()); + + return Message.ok().data("page", __page); + } + + // TODO 后面需要检查主题域下有没有关联的 Hive 表,才决定是否删除 + @Transactional(rollbackFor = Exception.class) + @Override + public Message deleteById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + DwLayer layer = this.dwLayerMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(layer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(Objects.equals(Boolean.FALSE, layer.getPreset()), DwException.stateReject("preset layer could not be removed")); + + String username = SecurityFilter.getLoginUsername(request); + // check in use + // statistical_period & modifier & data_model client api check + boolean inUse = isLayerInUse(layer.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("layer is in use")); + +// if (Objects.equals(Boolean.FALSE, layer.getStatus())) { +// return Message.ok(); +// } +// layer.setStatus(Boolean.FALSE); +// int i = this.dwLayerMapper.updateById(layer); + int i = this.dwLayerMapper.deleteById(layer); + PreconditionUtil.checkState(1 == i, DwException.stateReject("remove action failed")); + + // 删除关联 + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + DeleteModelTypeAction action = new DeleteModelTypeAction.Builder().setType(ClassificationConstant.LAYER).setName(layer.getEnName()).setUser(username).build(); + DeleteModelTypeResult result = dataAssetsRemoteClient.deleteModelType(action); + + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.DELETE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.DELETE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + + return Message.ok(); + } + + /** + * 更新操作涉及到 预置分层和自定义分层 + * + * 预置分层是不能更新名称的,其它字段的更新和自定义分层一致。 + * 所以针对预置分层,是不需要传递 name 参数的,所以要稍微区分逻辑判断来处理 + * + * 预留分层的 name name_alias charge_user 无法改变 + */ + @Transactional(rollbackFor = Exception.class) + @Override + public Message update(HttpServletRequest request, DwLayerUpdateCommand command) throws DwException { + String username = SecurityFilter.getLoginUsername(request); + // 基本参数校验 + Long id = command.getId(); + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + // 实体校验 + DwLayer layer = this.dwLayerMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(layer), DwException.stateReject("layer not found")); + String orgEnName = layer.getEnName(); + + // 分层类型后的name参数单独校验 + String name = command.getName(); + String enName = command.getEnName(); + String owner = command.getOwner(); + Integer order = command.getOrder(); + String description = command.getDescription(); + String principalName = command.getPrincipalName(); +// authority = PreconditionUtil.checkStringArgumentNotBlankTrim(authority, DwException.argumentReject("authority should not empty")); + String databases = command.getDatabases(); +// String autoCollectStrategy = command.getAutoCollectStrategy(); + if (Strings.isBlank(databases)) { + databases = "ALL"; + } + + if (Objects.isNull(order)) { + order = 1; + } + +// if (Strings.isBlank(autoCollectStrategy)) { +// autoCollectStrategy = "{}"; +// } + + // 预置分层也能修改 +// if (!layer.getPreset()) { + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + + if (!Objects.equals(name, layer.getName()) || !Objects.equals(enName, layer.getEnName())) { + // check name enName if not equal, we should check if in use + // check in use + // statistical_period & modifier & data_model client api check + + boolean inUse = isLayerInUse(layer.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("layer is in use")); + } + + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("owner should not empty")); + // 并且自定义分层在更新名称的时候,名称不能重复 + QueryWrapper nameUniqueCheckQuery = new QueryWrapper<>(); + nameUniqueCheckQuery.eq("name", name); + nameUniqueCheckQuery.ne("id", id); + nameUniqueCheckQuery.eq("status", Boolean.TRUE); + DwLayer exist = this.dwLayerMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist), DwException.stateReject("layer name aleardy exists")); + layer.setName(name); + + // 并且自定义分层在更新名称的时候,name alias不能重复 + QueryWrapper nameAliasUniqueCheckQuery = new QueryWrapper<>(); + nameAliasUniqueCheckQuery.eq("en_name", name); + nameAliasUniqueCheckQuery.ne("id", id); + nameAliasUniqueCheckQuery.eq("status", Boolean.TRUE); + DwLayer nameAliasExist = this.dwLayerMapper.selectOne(nameAliasUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(nameAliasExist), DwException.stateReject("layer en name aleardy exists")); + layer.setEnName(enName); + + layer.setOwner(owner); +// } + +// String user = SecurityFilter.getLoginUsername(request); + + Long oldVersion = layer.getLockVersion(); + + Date now = new Date(); + layer.setDbs(databases); +// layer.set(autoCollectStrategy); + layer.setDescription(description); + layer.setPrincipalName(principalName); + layer.setSort(order); +// layer.setModifyUser(user); + layer.setUpdateTime(now); + layer.setLockVersion(oldVersion + 1); + + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", layer.getId()); + updateWrapper.eq("lock_version", oldVersion); + + int i = this.dwLayerMapper.update(layer, updateWrapper); + + PreconditionUtil.checkState(1 == i, DwException.stateReject("update layer failed")); + + // 更新关联 + if (!Objects.equals(orgEnName, layer.getEnName())) { + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + UpdateModelTypeAction action = new UpdateModelTypeAction.Builder().setType(ClassificationConstant.LAYER).setName(layer.getEnName()).setOrgName(orgEnName).setUser(username).build(); + UpdateModelTypeResult result = dataAssetsRemoteClient.updateModelType(action); + + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.UPDATE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.UPDATE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + } + + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message enable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.TRUE); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message disable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.FALSE); + return Message.ok(); + } + + private void changeEnable(HttpServletRequest request, Long id, Boolean enabled) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwLayer record = this.dwLayerMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("layer has been removed")); + if (Objects.equals(enabled, record.getIsAvailable())) { + return; + } + +// String user = "hdfs"; + Long oldVersion = record.getLockVersion(); +// record.setModifyUser(user); + record.setUpdateTime(new Date()); + record.setIsAvailable(enabled); + record.setLockVersion(oldVersion + 1); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + int update = this.dwLayerMapper.update(record, updateWrapper); + PreconditionUtil.checkState(1 == update, DwException.stateReject(enabled ? "enable" : "disable" + " failed")); + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwModifierServiceImpl.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwModifierServiceImpl.java new file mode 100644 index 0000000000..7374442aac --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwModifierServiceImpl.java @@ -0,0 +1,455 @@ +package com.webank.wedatasphere.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import com.webank.wedatasphere.warehouse.cqe.DwModifierCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwModifierQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwModifierUpdateCommand; +import com.webank.wedatasphere.warehouse.dao.domain.*; +import com.webank.wedatasphere.warehouse.dao.domain.DwLayer; +import com.webank.wedatasphere.warehouse.dao.domain.DwThemeDomain; +import com.webank.wedatasphere.warehouse.dao.mapper.*; +import com.webank.wedatasphere.warehouse.dto.DwModifierDTO; +import com.webank.wedatasphere.warehouse.dto.DwModifierListDTO; +import com.webank.wedatasphere.warehouse.dto.DwModifierListItemDTO; +import com.webank.wedatasphere.warehouse.dto.PageInfo; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwDomainReferenceAdapter; +import com.webank.wedatasphere.warehouse.service.DwModifierService; +import com.webank.wedatasphere.warehouse.utils.PreconditionUtil; +import com.webank.wedatasphere.warehouse.utils.RegexUtil; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@Service +public class DwModifierServiceImpl implements DwModifierService, DwDomainReferenceAdapter { + + private final DwModifierMapper dwModifierMapper; + private final DwModifierListMapper dwModifierListMapper; + private final DwStatisticalPeriodMapper dwStatisticalPeriodMapper; + private final DwLayerMapper dwLayerMapper; + private final DwThemeDomainMapper dwThemeDomainMapper; + + @Autowired + public DwModifierServiceImpl( + DwModifierMapper dwModifierMapper, + DwStatisticalPeriodMapper dwStatisticalPeriodMapper, + DwModifierListMapper dwModifierListMapper, + DwLayerMapper dwLayerMapper, + DwThemeDomainMapper dwThemeDomainMapper + ) { + this.dwModifierMapper = dwModifierMapper; + this.dwStatisticalPeriodMapper = dwStatisticalPeriodMapper; + this.dwModifierListMapper = dwModifierListMapper; + this.dwLayerMapper = dwLayerMapper; + this.dwThemeDomainMapper = dwThemeDomainMapper; + } + + @Override + public DwLayerMapper getDwLayerMapper() { + return dwLayerMapper; + } + + @Override + public DwThemeDomainMapper getDwThemeDomainMapper() { + return dwThemeDomainMapper; + } + + @Override + public DwStatisticalPeriodMapper getDwStatisticalPeriodMapper() { + return this.dwStatisticalPeriodMapper; + } + + @Override + public DwModifierMapper getDwModifierMapper() { + return dwModifierMapper; + } + + @Override + public Message queryAllModifiers(HttpServletRequest request, DwModifierQueryCommand command) throws DwException { + String typeName = command.getName(); + Boolean isAvailable = command.getEnabled(); + String theme = command.getTheme(); + String layer = command.getLayer(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (!Objects.isNull(isAvailable)) { + queryWrapper.eq("is_available", isAvailable); + } + if (Strings.isNotBlank(theme)) { + queryWrapper.eq("theme_area_en", theme); + } + if (Strings.isNotBlank(layer)) { + queryWrapper.eq("layer_area_en", layer); + } + + if (Strings.isNotBlank(typeName)) { + queryWrapper.and(qw -> { + queryWrapper.like("modifier_type", typeName).or().like("modifier_type_en", typeName); + }); + } + List records = this.dwModifierMapper.selectList(queryWrapper); + + List list = new ArrayList<>(); + DwModifierListItemDTO dto; + for (DwModifier modifier : records) { + dto = new DwModifierListItemDTO(); + BeanUtils.copyProperties(modifier, dto); + list.add(dto); + } + return Message.ok().data("list", list); + } + + @Override + public Message queryPage(HttpServletRequest request, DwModifierQueryCommand command) throws DwException { + Integer page = command.getPage(); + Integer size = command.getSize(); + String typeName = command.getName(); + if (Objects.isNull(page)) + page = 1; + + if (Objects.isNull(size)) + size = 10; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (Strings.isNotBlank(typeName)) { + queryWrapper.like("modifier_type", typeName); + } + + if (!Objects.isNull(command.getEnabled())) { + queryWrapper.eq("is_available", command.getEnabled()); + } + + Page queryPage = new Page<>(page, size); + + IPage _page = this.dwModifierMapper.selectPage(queryPage, queryWrapper); + + List records = _page.getRecords(); + + List list = new ArrayList<>(); + DwModifierListItemDTO dto; + String username = SecurityFilter.getLoginUsername(request); + for (DwModifier modifier : records) { + dto = new DwModifierListItemDTO(); + BeanUtils.copyProperties(modifier, dto); + int modifierReferenceCount = getModifierReferenceCount(modifier.getId(), username); + dto.setReferenceCount(modifierReferenceCount); + list.add(dto); + } + +// List list = DwDecorationModelMapper.INSTANCE.toList(records); +// List list = new ArrayList<>(); + + PageInfo __page = new PageInfo<>(list, _page.getCurrent(), _page.getSize(), _page.getTotal()); + + return Message.ok().data("page", __page); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message create(HttpServletRequest request, DwModifierCreateCommand command) throws DwException { + Long themeDomainId = command.getThemeDomainId(); + Long layerId = command.getLayerId(); + String typeName = command.getTypeName(); + String typeEnName = command.getTypeEnName(); + +// String typeNameAlias = command.getTypeNameAlias(); +// String decorationList = command.getDecorationList(); + String description = command.getDescription(); + + PreconditionUtil.checkArgument(!Objects.isNull(themeDomainId), DwException.argumentReject("theme domain id should not empty")); + PreconditionUtil.checkArgument(!Objects.isNull(layerId), DwException.argumentReject("layer id should not empty")); + typeName = PreconditionUtil.checkStringArgumentNotBlankTrim(typeName, DwException.argumentReject("type name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(typeName), DwException.argumentReject("type name must be digitg, chinese and underline")); + typeEnName = PreconditionUtil.checkStringArgumentNotBlankTrim(typeEnName, DwException.argumentReject("type en name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(typeEnName), DwException.argumentReject("type en name must be digitg, alpha and underline")); +// typeNameAlias = PreconditionUtil.checkStringArgumentNotBlankTrim(typeNameAlias, DwException.argumentReject("typeNameAlias should not empty")); + + // 验证 主题域 分层是否存在 + QueryWrapper layerQueryWrapper = new QueryWrapper<>(); + layerQueryWrapper.eq("id", layerId); + layerQueryWrapper.eq("status", Boolean.TRUE); + DwLayer dwLayer = this.dwLayerMapper.selectOne(layerQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwLayer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(dwLayer.getIsAvailable(), DwException.stateReject("layer disabled")); + + QueryWrapper themeDomainQueryWrapper = new QueryWrapper<>(); + themeDomainQueryWrapper.eq("id", themeDomainId); + themeDomainQueryWrapper.eq("status", Boolean.TRUE); + DwThemeDomain dwThemeDomain = this.dwThemeDomainMapper.selectOne(themeDomainQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwThemeDomain), DwException.stateReject("theme domain not found")); + + // typeName 唯一性检测 + QueryWrapper nameUniqueCheckQuery = new QueryWrapper<>(); + nameUniqueCheckQuery.eq("modifier_type", typeName); + nameUniqueCheckQuery.eq("status", Boolean.TRUE); + DwModifier exist = this.dwModifierMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist), DwException.stateReject("modifier type name aleardy exists")); + + // typeNameEn 唯一性检测 + QueryWrapper nameAliasUniqueCheckQuery = new QueryWrapper<>(); + nameAliasUniqueCheckQuery.eq("modifier_type_en", typeEnName); + nameAliasUniqueCheckQuery.eq("status", Boolean.TRUE); + DwModifier exist2 = this.dwModifierMapper.selectOne(nameAliasUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist2), DwException.stateReject("modifier type en name aleardy exists")); + + Date now = new Date(); + + DwModifier record = new DwModifier(); + record.setThemeDomainId(dwThemeDomain.getId()); + record.setThemeArea(dwThemeDomain.getName()); + record.setThemeAreaEn(dwThemeDomain.getEnName()); + record.setLayerId(dwLayer.getId()); + record.setLayerArea(dwLayer.getName()); + record.setLayerAreaEn(dwLayer.getEnName()); + record.setModifierType(typeName); + record.setModifierTypeEn(typeEnName); + record.setDescription(description); + record.setIsAvailable(Boolean.TRUE); + record.setCreateTime(now); + record.setUpdateTime(now); + record.setStatus(Boolean.TRUE); + record.setLockVersion(1L); + + int insert = this.dwModifierMapper.insert(record); + PreconditionUtil.checkState(1 == insert, DwException.stateReject("create dw modifier failed")); + + // 新增修饰词列表信息 + List list = command.getList(); + if (!Objects.isNull(list) && !list.isEmpty()) { + for (DwModifierCreateCommand.DwModifierCreateListItem item : list) { + String name = item.getName(); + String identifier = item.getIdentifier(); + String formula = item.getFormula(); + if (Strings.isBlank(name) || Strings.isBlank(identifier) || Strings.isBlank(formula)) { + continue; + } + + DwModifierList m = new DwModifierList(); + m.setModifierId(record.getId()); + m.setName(name); + m.setIdentifier(identifier); + m.setFormula(formula); + m.setCreateTime(now); + m.setUpdateTime(now); + this.dwModifierListMapper.insert(m); + } + } + + return Message.ok().data("id", record.getId()); + } + + @Override + public Message getById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwModifier record = this.dwModifierMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("modifier not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("modifier has been removed")); + + DwModifierDTO dto = new DwModifierDTO(); +// DwModifierDTO dto = this.dwModifierModelMapper.toDTO(record); + BeanUtils.copyProperties(record, dto); + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isModifierInUse(record.getId(), username); + dto.setReferenced(inUse); + + QueryWrapper dwModifierListQueryWrapper = new QueryWrapper<>(); + dwModifierListQueryWrapper.eq("modifier_id", record.getId()); + List dwModifierLists = this.dwModifierListMapper.selectList(dwModifierListQueryWrapper); + + List dwModifierListDTOs = new ArrayList<>(); + for (DwModifierList item : dwModifierLists) { + DwModifierListDTO dwModifierListDTO = new DwModifierListDTO();/*this.dwModifierListModelMapper.toListItem(item);*/ + BeanUtils.copyProperties(item, dwModifierListDTO); + dwModifierListDTOs.add(dwModifierListDTO); + } + + dto.setList(dwModifierListDTOs); + + return Message.ok().data("item", dto); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message deleteById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + DwModifier record = this.dwModifierMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("modifier not found")); + + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isModifierInUse(record.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("modifier is in use, id = {}, name = {}", record.getId(), record.getModifierType())); + +// if (Objects.equals(Boolean.FALSE, record.getStatus())) { +// return Message.ok(); +// } +// record.setStatus(Boolean.FALSE); +// int i = this.dwModifierMapper.updateById(record); + int i = this.dwModifierMapper.deleteById(record); + PreconditionUtil.checkState(1 == i, DwException.stateReject("remove action failed")); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message update(HttpServletRequest request, DwModifierUpdateCommand command) throws DwException { + Long id = command.getId(); + Long themeDomainId = command.getThemeDomainId(); + Long layerId = command.getLayerId(); + String typeName = command.getTypeName(); + String typeEnName = command.getTypeEnName(); + String description = command.getDescription(); + + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not empty")); + PreconditionUtil.checkArgument(!Objects.isNull(themeDomainId), DwException.argumentReject("theme domain id should not empty")); + PreconditionUtil.checkArgument(!Objects.isNull(layerId), DwException.argumentReject("layer id should not empty")); +// typeName = PreconditionUtil.checkStringArgumentNotBlankTrim(typeName, DwException.argumentReject("modifier type name should not empty")); + typeName = PreconditionUtil.checkStringArgumentNotBlankTrim(typeName, DwException.argumentReject("type name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(typeName), DwException.argumentReject("type name must be digitg, chinese and underline")); + + typeEnName = PreconditionUtil.checkStringArgumentNotBlankTrim(typeEnName, DwException.argumentReject("type en name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(typeEnName), DwException.argumentReject("type en name must be digitg, alpha and underline")); + // 验证 主题域 分层是否存在 + QueryWrapper layerQueryWrapper = new QueryWrapper<>(); + layerQueryWrapper.eq("id", layerId); + layerQueryWrapper.eq("status", Boolean.TRUE); + DwLayer dwLayer = this.dwLayerMapper.selectOne(layerQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwLayer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(dwLayer.getIsAvailable(), DwException.stateReject("layer disabled")); + + QueryWrapper themeDomainQueryWrapper = new QueryWrapper<>(); + themeDomainQueryWrapper.eq("id", themeDomainId); + themeDomainQueryWrapper.eq("status", Boolean.TRUE); + DwThemeDomain dwThemeDomain = this.dwThemeDomainMapper.selectOne(themeDomainQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwThemeDomain), DwException.stateReject("theme domain not found")); + + // 实体校验 + DwModifier record = this.dwModifierMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("modifier not found")); +// String orgName = record.getModifierTypeEn(); + + // typeName 唯一性检测 + QueryWrapper nameUniqueCheckQuery = new QueryWrapper<>(); + nameUniqueCheckQuery.eq("modifier_type", typeName); + nameUniqueCheckQuery.ne("id", id); + nameUniqueCheckQuery.eq("status", Boolean.TRUE); + DwModifier exist = this.dwModifierMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist), DwException.stateReject("modifier type name aleardy exists")); + // typeNameAlias 唯一性检测 + QueryWrapper nameAliasUniqueCheckQuery = new QueryWrapper<>(); + nameAliasUniqueCheckQuery.eq("modifier_type_en", typeEnName); + nameAliasUniqueCheckQuery.ne("id", id); + nameAliasUniqueCheckQuery.eq("status", Boolean.TRUE); + DwModifier exist2 = this.dwModifierMapper.selectOne(nameAliasUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist2), DwException.stateReject("modifier type en name aleardy exists")); + + Long oldVersion = record.getLockVersion(); + + Date now = new Date(); + +// record.setSubjectDomainId(dwThemeDomain.getId()); +// record.setLayerId(dwLayer.getId()); + record.setModifierType(typeName); + record.setThemeDomainId(dwThemeDomain.getId()); + record.setThemeArea(dwThemeDomain.getName()); + record.setLayerId(dwLayer.getId()); + record.setLayerArea(dwLayer.getName()); + record.setDescription(description); +// record.setModifyUser(user); + record.setUpdateTime(now); + record.setLockVersion(oldVersion + 1); + + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + + int i = this.dwModifierMapper.update(record, updateWrapper); + PreconditionUtil.checkState(1 == i, DwException.stateReject("update modifier failed")); + + // 更新修饰词列表信息 + List list = command.getList(); + if (!Objects.isNull(list) && !list.isEmpty()) { + // 如果不为空,先清空某个 modifier 下的关联修饰词 + QueryWrapper dwModifierListQueryWrapper = new QueryWrapper<>(); + dwModifierListQueryWrapper.eq("modifier_id", record.getId()); + this.dwModifierListMapper.delete(dwModifierListQueryWrapper); + + // 删除后再新增 + for (DwModifierUpdateCommand.DwModifierUpdateListItem item : list) { + String name = item.getName(); + String identifier = item.getIdentifier(); + String formula = item.getFormula(); + if (Strings.isBlank(name) || Strings.isBlank(identifier) || Strings.isBlank(formula)) { + continue; + } + + DwModifierList m = new DwModifierList(); + m.setModifierId(record.getId()); + m.setName(name); + m.setIdentifier(identifier); + m.setFormula(formula); + m.setCreateTime(now); + m.setUpdateTime(now); + this.dwModifierListMapper.insert(m); + } + } else { + QueryWrapper dwModifierListQueryWrapper = new QueryWrapper<>(); + dwModifierListQueryWrapper.eq("modifier_id", record.getId()); + this.dwModifierListMapper.delete(dwModifierListQueryWrapper); + } + + + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message enable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.TRUE); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message disable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.FALSE); + return Message.ok(); + } + + private void changeEnable(HttpServletRequest request, Long id, Boolean enabled) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwModifier record = this.dwModifierMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("modifier not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("modifier has been removed")); + if (Objects.equals(enabled, record.getIsAvailable())) { + return; + } + + Long oldVersion = record.getLockVersion(); + record.setUpdateTime(new Date()); + record.setIsAvailable(enabled); + record.setLockVersion(oldVersion + 1); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + int update = this.dwModifierMapper.update(record, updateWrapper); + PreconditionUtil.checkState(1 == update, DwException.stateReject(enabled ? "enable" : "disable" + " failed")); + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwStatisticalPeriodServiceImpl.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwStatisticalPeriodServiceImpl.java new file mode 100644 index 0000000000..7a36ee0899 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwStatisticalPeriodServiceImpl.java @@ -0,0 +1,446 @@ +package com.webank.wedatasphere.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwStatisticalPeriodUpdateCommand; +import com.webank.wedatasphere.warehouse.dao.domain.DwLayer; +import com.webank.wedatasphere.warehouse.dao.domain.DwStatisticalPeriod; +import com.webank.wedatasphere.warehouse.dao.domain.DwThemeDomain; +import com.webank.wedatasphere.warehouse.dao.mapper.DwLayerMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwModifierMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwStatisticalPeriodMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwThemeDomainMapper; +import com.webank.wedatasphere.warehouse.dao.vo.DwStatisticalPeriodVo; +import com.webank.wedatasphere.warehouse.dto.PageInfo; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.service.DwDomainReferenceAdapter; +import com.webank.wedatasphere.warehouse.service.DwStatisticalPeriodService; +import com.webank.wedatasphere.warehouse.utils.PreconditionUtil; +import com.webank.wedatasphere.warehouse.utils.RegexUtil; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.*; + +@Service +public class DwStatisticalPeriodServiceImpl implements DwStatisticalPeriodService, DwDomainReferenceAdapter { + + private final DwLayerMapper dwLayerMapper; + private final DwThemeDomainMapper dwThemeDomainMapper; + private final DwStatisticalPeriodMapper dwStatisticalPeriodMapper; + private final DwModifierMapper dwModifierMapper; + + @Autowired + public DwStatisticalPeriodServiceImpl( + final DwStatisticalPeriodMapper dwStatisticalPeriodMapper, + final DwLayerMapper dwLayerMapper, + final DwThemeDomainMapper dwThemeDomainMapper, + final DwModifierMapper dwModifierMapper + + ) { + this.dwStatisticalPeriodMapper = dwStatisticalPeriodMapper; + this.dwLayerMapper = dwLayerMapper; + this.dwThemeDomainMapper = dwThemeDomainMapper; + this.dwModifierMapper = dwModifierMapper; + } + + @Override + public DwLayerMapper getDwLayerMapper() { + return dwLayerMapper; + } + + @Override + public DwThemeDomainMapper getDwThemeDomainMapper() { + return dwThemeDomainMapper; + } + + @Override + public DwModifierMapper getDwModifierMapper() { + return dwModifierMapper; + } + + @Override + public DwStatisticalPeriodMapper getDwStatisticalPeriodMapper() { + return dwStatisticalPeriodMapper; + } + + @Override + public Message queryAll(HttpServletRequest request, DwStatisticalPeriodQueryCommand command) throws DwException { + String name = command.getName(); + Boolean enabled = command.getEnabled(); + String layer = command.getLayer(); + String theme = command.getTheme(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (!Objects.isNull(enabled)) { + queryWrapper.eq("is_available", enabled); + } + + if (Strings.isNotBlank(layer)) { + Optional layerOptional = this.dwLayerMapper.findByName(layer); + layerOptional.ifPresent(dwLayer -> queryWrapper.eq("layer_id", dwLayer.getId())); + } + + if (Strings.isNotBlank(theme)) { + Optional themeOptional = this.dwThemeDomainMapper.findByName(theme); + themeOptional.ifPresent(dwThemeDomain -> queryWrapper.eq("theme_domain_id", dwThemeDomain.getId())); + } + + if (Strings.isNotBlank(name)) { + queryWrapper.and(qw -> { + qw.like("name", name).or().like("en_name", name); + }); + } + + List recs = this.dwStatisticalPeriodMapper.selectList(queryWrapper); + + List records = new ArrayList<>(); + for (DwStatisticalPeriod rec : recs) { + DwStatisticalPeriodVo vo = new DwStatisticalPeriodVo(); + vo.setId(rec.getId()); + vo.setName(rec.getName()); + vo.setEnName(rec.getEnName()); + vo.setDescription(rec.getDescription()); + vo.setOwner(rec.getOwner()); + vo.setStatus(rec.getStatus()); + vo.setCreateTime(rec.getCreateTime()); + vo.setUpdateTime(rec.getUpdateTime()); + vo.setPrincipalName(rec.getPrincipalName()); + vo.setStartTimeFormula(rec.getStartTimeFormula()); + vo.setEndTimeFormula(rec.getEndTimeFormula()); + vo.setLayerId(rec.getLayerId()); + vo.setThemeDomainId(rec.getThemeDomainId()); + vo.setIsAvailable(rec.getIsAvailable()); + DwLayer dwLayer = this.dwLayerMapper.selectById(rec.getLayerId()); + Optional.ofNullable(dwLayer).ifPresent(layerBean -> vo.setLayerArea(layerBean.getName())); + + DwThemeDomain dwThemeDomain = dwThemeDomainMapper.selectById(rec.getThemeDomainId()); + Optional.ofNullable(dwThemeDomain).ifPresent(themeBean -> vo.setThemeArea(themeBean.getName())); + + records.add(vo); + } + +// List records = this.dwStatisticalPeriodMapper.selectItems(queryWrapper); + return Message.ok().data("list", records); + } + + @Override + public Message queryPage(HttpServletRequest request, DwStatisticalPeriodQueryCommand command) throws DwException { + Integer page = command.getPage(); + Integer size = command.getSize(); + String name = command.getName(); + if (Objects.isNull(page)) + page = 1; + + if (Objects.isNull(size)) + size = 10; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (!Objects.isNull(command.getEnabled())) { + queryWrapper.eq("is_available", command.getEnabled()); + } + + if (Strings.isNotBlank(name)) { + queryWrapper.and(qw -> { + qw.like("name", name).or().like("en_name", name); + }); + } + + Page queryPage = new Page<>(page, size); + +// IPage _page = this.dwStatisticalPeriodMapper.selectPageItems(queryPage, queryWrapper); +// IPage _page = this.dwStatisticalPeriodMapper.selectPageItems(queryPage, params); + Page _page = this.dwStatisticalPeriodMapper.selectPage(queryPage, queryWrapper); + List recs = _page.getRecords(); + List records = new ArrayList<>(); + String username = SecurityFilter.getLoginUsername(request); + for (DwStatisticalPeriod rec : recs) { + DwStatisticalPeriodVo vo = new DwStatisticalPeriodVo(); + vo.setId(rec.getId()); + vo.setName(rec.getName()); + vo.setEnName(rec.getEnName()); + vo.setDescription(rec.getDescription()); + vo.setOwner(rec.getOwner()); + vo.setStatus(rec.getStatus()); + vo.setCreateTime(rec.getCreateTime()); + vo.setUpdateTime(rec.getUpdateTime()); + vo.setPrincipalName(rec.getPrincipalName()); + vo.setStartTimeFormula(rec.getStartTimeFormula()); + vo.setEndTimeFormula(rec.getEndTimeFormula()); + vo.setLayerId(rec.getLayerId()); + vo.setThemeDomainId(rec.getThemeDomainId()); + vo.setIsAvailable(rec.getIsAvailable()); + // 单独查询 + DwLayer dwLayer = this.dwLayerMapper.selectById(rec.getLayerId()); + Optional.ofNullable(dwLayer).ifPresent(layer -> { + vo.setLayerArea(layer.getName()); + vo.setLayerAreaEn(layer.getEnName()); + }); + DwThemeDomain dwThemeDomain = dwThemeDomainMapper.selectById(rec.getThemeDomainId()); + Optional.ofNullable(dwThemeDomain).ifPresent(theme -> { + vo.setThemeArea(theme.getName()); + vo.setThemeAreaEn(theme.getEnName()); + }); + int statisticalPeriodReferenceCount = getStatisticalPeriodReferenceCount(rec.getId(), username); + vo.setReferenceCount(statisticalPeriodReferenceCount); + records.add(vo); + } + + PageInfo __page = new PageInfo<>(records, _page.getCurrent(), _page.getSize(), _page.getTotal()); + + return Message.ok().data("page", __page); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message create(HttpServletRequest request, DwStatisticalPeriodCreateCommand command) throws DwException { + String name = command.getName(); + String enName = command.getEnName(); + String principalName = command.getPrincipalName(); + String owner = command.getOwner(); + String description = command.getDescription(); + Long themeDomainId = command.getThemeDomainId(); + Long layerId = command.getLayerId(); + String statStartFormula = command.getStatStartFormula(); + String statEndFormula = command.getStatEndFormula(); + + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("owner should not empty")); + statStartFormula = PreconditionUtil.checkStringArgumentNotBlankTrim(statStartFormula, DwException.argumentReject("stat start formula should not empty")); + statEndFormula = PreconditionUtil.checkStringArgumentNotBlankTrim(statEndFormula, DwException.argumentReject("stat end formula should not empty")); + PreconditionUtil.checkState(!Objects.isNull(layerId), DwException.argumentReject("layer id not empty")); + PreconditionUtil.checkState(!Objects.isNull(themeDomainId), DwException.argumentReject("theme domain id not empty")); + + // 验证 主题域 分层是否存在 + QueryWrapper layerQueryWrapper = new QueryWrapper<>(); + layerQueryWrapper.eq("id", layerId); + layerQueryWrapper.eq("status", Boolean.TRUE); + DwLayer dwLayer = this.dwLayerMapper.selectOne(layerQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwLayer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(dwLayer.getIsAvailable(), DwException.stateReject("layer disabled")); + + QueryWrapper themeDomainQueryWrapper = new QueryWrapper<>(); + themeDomainQueryWrapper.eq("id", themeDomainId); + themeDomainQueryWrapper.eq("status", Boolean.TRUE); + DwThemeDomain dwThemeDomain = this.dwThemeDomainMapper.selectOne(themeDomainQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwThemeDomain), DwException.stateReject("theme domain not found")); + + Date now = new Date(); + + DwStatisticalPeriod record = new DwStatisticalPeriod(); + record.setName(name); + record.setEnName(enName); + record.setThemeDomainId(themeDomainId); + record.setLayerId(layerId); + record.setDescription(description); + record.setPrincipalName(principalName); + record.setStartTimeFormula(statStartFormula); + record.setEndTimeFormula(statEndFormula); + record.setOwner(owner); + record.setIsAvailable(Boolean.TRUE); + record.setCreateTime(now); + record.setUpdateTime(now); + record.setStatus(Boolean.TRUE); + record.setLockVersion(1L); + + int insert = this.dwStatisticalPeriodMapper.insert(record); + PreconditionUtil.checkState(1 == insert, DwException.stateReject("create statistical period failed")); + + return Message.ok().data("id", record.getId()); + } + + @Override + public Message getById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwStatisticalPeriod period = this.dwStatisticalPeriodMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(period), DwException.stateReject("statistical period not found")); + PreconditionUtil.checkState(period.getStatus(), DwException.stateReject("statistical period has been removed")); + + DwStatisticalPeriodVo record = new DwStatisticalPeriodVo(); + record.setId(period.getId()); + record.setName(period.getName()); + record.setEnName(period.getEnName()); + record.setDescription(period.getDescription()); + record.setOwner(period.getOwner()); + record.setStatus(period.getStatus()); + record.setCreateTime(period.getCreateTime()); + record.setUpdateTime(period.getUpdateTime()); + record.setPrincipalName(period.getPrincipalName()); + record.setStartTimeFormula(period.getStartTimeFormula()); + record.setEndTimeFormula(period.getEndTimeFormula()); + record.setLayerId(period.getLayerId()); + record.setThemeDomainId(period.getThemeDomainId()); + record.setIsAvailable(period.getIsAvailable()); + // 单独查询 + Optional.ofNullable(period.getLayerId()).ifPresent(lid -> { + DwLayer dwLayer = this.dwLayerMapper.selectById(lid); + Optional.ofNullable(dwLayer).ifPresent(layer -> { + record.setLayerArea(layer.getName()); + }); + }); + + Optional.ofNullable(period.getThemeDomainId()).ifPresent(tid -> { + DwThemeDomain dwThemeDomain = dwThemeDomainMapper.selectById(tid); + Optional.ofNullable(dwThemeDomain).ifPresent(theme -> { + record.setThemeArea(theme.getName()); + }); + }); + // 应用查询 + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isStatisticalPeriodInUse(record.getId(), username); + record.setReferenced(inUse); + return Message.ok().data("item", record); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message deleteById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + DwStatisticalPeriod record = this.dwStatisticalPeriodMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("statistical period not found")); + + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isStatisticalPeriodInUse(record.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("statistical period is in use, id = {}, name = {}", record.getId(), record.getName())); + +// if (Objects.equals(Boolean.FALSE, record.getStatus())) { +// return Message.ok(); +// } +// Long oldLockVersion = record.getLockVersion(); +// QueryWrapper updateWrapper = new QueryWrapper<>(); +// updateWrapper.eq("lock_version", oldLockVersion); +// updateWrapper.eq("id", record.getId()); +// +// DwStatisticalPeriod updateBean = new DwStatisticalPeriod(); +// updateBean.setLockVersion(oldLockVersion + 1); +// updateBean.setStatus(Boolean.FALSE); +// +// int i = this.dwStatisticalPeriodMapper.update(updateBean, updateWrapper); + int i = this.dwStatisticalPeriodMapper.deleteById(record); + PreconditionUtil.checkState(1 == i, DwException.stateReject("remove action failed")); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message update(HttpServletRequest request, DwStatisticalPeriodUpdateCommand command) throws DwException { + Long id = command.getId(); + String name = command.getName(); + String enName = command.getEnName(); + String principalName = command.getPrincipalName(); + String owner = command.getOwner(); + String description = command.getDescription(); + Long themeDomainId = command.getThemeDomainId(); + Long layerId = command.getLayerId(); + String statStartFormula = command.getStatStartFormula(); + String statEndFormula = command.getStatEndFormula(); + + PreconditionUtil.checkState(!Objects.isNull(id), DwException.argumentReject("id not empty")); + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("owner should not empty")); + statStartFormula = PreconditionUtil.checkStringArgumentNotBlankTrim(statStartFormula, DwException.argumentReject("stat start formula should not empty")); + statEndFormula = PreconditionUtil.checkStringArgumentNotBlankTrim(statEndFormula, DwException.argumentReject("stat end formula should not empty")); + PreconditionUtil.checkState(!Objects.isNull(layerId), DwException.argumentReject("layer id not empty")); + PreconditionUtil.checkState(!Objects.isNull(themeDomainId), DwException.argumentReject("theme domain id not empty")); + + QueryWrapper statisticalPeriodQueryWrapper = new QueryWrapper<>(); + statisticalPeriodQueryWrapper.eq("id", id); + statisticalPeriodQueryWrapper.eq("status", Boolean.TRUE); + DwStatisticalPeriod record = this.dwStatisticalPeriodMapper.selectOne(statisticalPeriodQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("period not found")); + PreconditionUtil.checkState(record.getIsAvailable(), DwException.stateReject("period disabled")); + + // 验证 主题域 分层是否存在 + QueryWrapper layerQueryWrapper = new QueryWrapper<>(); + layerQueryWrapper.eq("id", layerId); + layerQueryWrapper.eq("status", Boolean.TRUE); + DwLayer dwLayer = this.dwLayerMapper.selectOne(layerQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwLayer), DwException.stateReject("layer not found")); + PreconditionUtil.checkState(dwLayer.getIsAvailable(), DwException.stateReject("layer disabled")); + + QueryWrapper themeDomainQueryWrapper = new QueryWrapper<>(); + themeDomainQueryWrapper.eq("id", themeDomainId); + themeDomainQueryWrapper.eq("status", Boolean.TRUE); + DwThemeDomain dwThemeDomain = this.dwThemeDomainMapper.selectOne(themeDomainQueryWrapper); + PreconditionUtil.checkState(!Objects.isNull(dwThemeDomain), DwException.stateReject("theme domain not found")); + + Date now = new Date(); + Long oldLockVersion = record.getLockVersion(); + + QueryWrapper updateWrapper = new QueryWrapper<>(); + updateWrapper.eq("lock_version", oldLockVersion); + updateWrapper.eq("id", record.getId()); + + record.setName(name); + record.setEnName(enName); + record.setThemeDomainId(themeDomainId); + record.setLayerId(layerId); + record.setDescription(description); + record.setPrincipalName(principalName); + record.setStartTimeFormula(statStartFormula); + record.setEndTimeFormula(statEndFormula); + record.setOwner(owner); + record.setUpdateTime(now); + record.setLockVersion(oldLockVersion + 1); + + int update = this.dwStatisticalPeriodMapper.update(record, updateWrapper); + PreconditionUtil.checkState(1 == update, DwException.stateReject("update statistical period failed")); + + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message enable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.TRUE); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message disable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.FALSE); + return Message.ok(); + } + + private void changeEnable(HttpServletRequest request, Long id, Boolean enabled) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwStatisticalPeriod record = this.dwStatisticalPeriodMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("statistical period not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("statistical period has been removed")); + if (Objects.equals(enabled, record.getIsAvailable())) { + return; + } + + Long oldVersion = record.getLockVersion(); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + + DwStatisticalPeriod updateBean = new DwStatisticalPeriod(); + updateBean.setIsAvailable(enabled); + updateBean.setUpdateTime(new Date()); + updateBean.setLockVersion(oldVersion + 1); + + int update = this.dwStatisticalPeriodMapper.update(updateBean, updateWrapper); + PreconditionUtil.checkState(1 == update, DwException.stateReject(enabled ? "enable" : "disable" + " failed")); + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwThemeDomainServiceImpl.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwThemeDomainServiceImpl.java new file mode 100644 index 0000000000..e613e416ee --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/service/impl/DwThemeDomainServiceImpl.java @@ -0,0 +1,431 @@ +package com.webank.wedatasphere.warehouse.service.impl; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.extension.plugins.pagination.Page; +import com.webank.wedatasphere.dss.data.governance.entity.ClassificationConstant; +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient; +import com.webank.wedatasphere.dss.data.governance.request.CreateModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.request.DeleteModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.request.UpdateModelTypeAction; +import com.webank.wedatasphere.dss.data.governance.response.CreateModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.DeleteModelTypeResult; +import com.webank.wedatasphere.dss.data.governance.response.UpdateModelTypeResult; +import org.apache.linkis.common.exception.ErrorException; +import org.apache.linkis.server.Message; +import org.apache.linkis.server.security.SecurityFilter; +import com.webank.wedatasphere.warehouse.LinkisRemoteClientHolder; +import com.webank.wedatasphere.warehouse.cqe.DwThemeDomainCreateCommand; +import com.webank.wedatasphere.warehouse.cqe.DwThemeDomainQueryCommand; +import com.webank.wedatasphere.warehouse.cqe.DwThemeDomainUpdateCommand; +import com.webank.wedatasphere.warehouse.dao.domain.DwThemeDomain; +import com.webank.wedatasphere.warehouse.dao.mapper.DwLayerMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwModifierMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwStatisticalPeriodMapper; +import com.webank.wedatasphere.warehouse.dao.mapper.DwThemeDomainMapper; +import com.webank.wedatasphere.warehouse.dto.DwThemeDomainDTO; +import com.webank.wedatasphere.warehouse.dto.DwThemeDomainListItemDTO; +import com.webank.wedatasphere.warehouse.dto.PageInfo; +import com.webank.wedatasphere.warehouse.exception.DwException; +import com.webank.wedatasphere.warehouse.exception.DwExceptionCode; +import com.webank.wedatasphere.warehouse.service.DwDomainReferenceAdapter; +import com.webank.wedatasphere.warehouse.service.DwThemeDomainService; +import com.webank.wedatasphere.warehouse.utils.PreconditionUtil; +import com.webank.wedatasphere.warehouse.utils.RegexUtil; +import org.apache.logging.log4j.util.Strings; +import org.springframework.beans.BeanUtils; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import javax.servlet.http.HttpServletRequest; +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.Objects; + +@Service +public class DwThemeDomainServiceImpl implements DwThemeDomainService, DwDomainReferenceAdapter { + + private final DwLayerMapper dwLayerMapper; + private final DwThemeDomainMapper dwThemeDomainMapper; + private final DwModifierMapper dwModifierMapper; + private final DwStatisticalPeriodMapper dwStatisticalPeriodMapper; + + @Autowired + public DwThemeDomainServiceImpl(final DwLayerMapper dwLayerMapper, final DwThemeDomainMapper dwThemeDomainMapper, final DwModifierMapper dwModifierMapper, final DwStatisticalPeriodMapper dwStatisticalPeriodMapper) { + this.dwLayerMapper = dwLayerMapper; + this.dwThemeDomainMapper = dwThemeDomainMapper; + this.dwModifierMapper = dwModifierMapper; + this.dwStatisticalPeriodMapper = dwStatisticalPeriodMapper; + } + + @Override + public DwLayerMapper getDwLayerMapper() { + return dwLayerMapper; + } + + @Override + public DwThemeDomainMapper getDwThemeDomainMapper() { + return dwThemeDomainMapper; + } + + @Override + public DwModifierMapper getDwModifierMapper() { + return dwModifierMapper; + } + + @Override + public DwStatisticalPeriodMapper getDwStatisticalPeriodMapper() { + return dwStatisticalPeriodMapper; + } + + @Override + public Message queryAllThemeDomains(HttpServletRequest request, DwThemeDomainQueryCommand command) throws DwException { + String name = command.getName(); + Boolean enabled = command.getEnabled(); + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (!Objects.isNull(enabled)) { + queryWrapper.eq("is_available", enabled); + } + if (Strings.isNotBlank(name)) { + queryWrapper.and(qw -> { + qw.like("name", name).or().like("en_name", name); + }); + } + + List records = this.dwThemeDomainMapper.selectList(queryWrapper); + + List list = new ArrayList<>(); + for (DwThemeDomain domain : records) { + DwThemeDomainListItemDTO dwThemeDomainListItemDTO = new DwThemeDomainListItemDTO(); + BeanUtils.copyProperties(domain, dwThemeDomainListItemDTO); + list.add(dwThemeDomainListItemDTO); + } + + return Message.ok().data("list", list); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message queryPage(HttpServletRequest request, DwThemeDomainQueryCommand command) throws DwException { + Integer page = command.getPage(); + Integer size = command.getSize(); + String name = command.getName(); + Boolean enabled = command.getEnabled(); + if (Objects.isNull(page)) + page = 1; + + if (Objects.isNull(size)) + size = 10; + + QueryWrapper queryWrapper = new QueryWrapper<>(); + queryWrapper.eq("status", Boolean.TRUE); + if (Objects.nonNull(enabled)) { + queryWrapper.eq("is_available", enabled); + } + if (Strings.isNotBlank(name)) { + queryWrapper.and(qw -> { + qw.like("name", name).or().like("en_name", name); + }); + } + Page queryPage = new Page<>(page, size); + + IPage _page = this.dwThemeDomainMapper.selectPage(queryPage, queryWrapper); + + List records = _page.getRecords(); + List list = new ArrayList<>(); + String username = SecurityFilter.getLoginUsername(request); + for (DwThemeDomain domain : records) { + DwThemeDomainListItemDTO dwThemeDomainListItemDTO = new DwThemeDomainListItemDTO();/*= this.dwThemeDomainModelMapper.toListItem(domain)*/; + BeanUtils.copyProperties(domain, dwThemeDomainListItemDTO); + + int themeDomainReferenceCount = getThemeDomainReferenceCount(domain.getId(), username); + dwThemeDomainListItemDTO.setReferenceCount(themeDomainReferenceCount); + + list.add(dwThemeDomainListItemDTO); + } + + PageInfo __page = new PageInfo<>(list, _page.getCurrent(), _page.getSize(), _page.getTotal()); + + return Message.ok().data("page", __page); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message create(HttpServletRequest request, DwThemeDomainCreateCommand command) throws DwException { + String username = SecurityFilter.getLoginUsername(request); +// String username = "hdfs"; + String name = command.getName(); + String enName = command.getEnName(); + String principalName = command.getPrincipalName(); + String owner = command.getOwner(); + Integer sort = command.getSort(); + String description = command.getDescription(); +// String authority = command.getAuthority(); + +// name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); +// enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("en name should not empty")); + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("owner should not empty")); +// authority = PreconditionUtil.checkStringArgumentNotBlankTrim(authority, DwException.argumentReject("authority should not empty")); + + if (Objects.isNull(sort)) { + sort = 1; + } + +// if (Strings.isBlank(availableRoles)) { +// availableRoles = "ALL"; +// } + +// String user = "hdfs"; + + Date now = new Date(); + + DwThemeDomain record = new DwThemeDomain(); + record.setName(name); + record.setEnName(enName); + record.setDescription(description); + record.setPrincipalName(principalName); +// record.setAvailableRoles(availableRoles); + record.setOwner(owner); + record.setIsAvailable(Boolean.TRUE); +// record.setCreateUser(user); + record.setSort(sort); + record.setCreateTime(now); + record.setUpdateTime(now); + record.setStatus(Boolean.TRUE); + record.setLockVersion(1L); + + int insert = this.dwThemeDomainMapper.insert(record); + PreconditionUtil.checkState(1 == insert, DwException.stateReject("create dw theme domain failed")); + + // 建立关联 + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + CreateModelTypeAction action = new CreateModelTypeAction.Builder().setType(ClassificationConstant.THEME).setName(enName).setUser(username).build(); + CreateModelTypeResult result = dataAssetsRemoteClient.createModelType(action); + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.CREATE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.CREATE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + + return Message.ok().data("id", record.getId()); + } + + @Override + public Message getById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwThemeDomain record = this.dwThemeDomainMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("theme domain not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("theme domain has been removed")); + +// DwThemeDomainDTO dto = this.dwThemeDomainModelMapper.toDTO(record); + String username = SecurityFilter.getLoginUsername(request); + boolean inUse = isThemeDomainInUse(record.getId(), username); + DwThemeDomainDTO dto = new DwThemeDomainDTO(); + BeanUtils.copyProperties(record, dto); + dto.setReferenced(inUse); + + return Message.ok().data("item", dto); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message deleteById(HttpServletRequest request, Long id) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + DwThemeDomain record = this.dwThemeDomainMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("theme domain not found")); + + String username = SecurityFilter.getLoginUsername(request); + + // check in use + // statistical_period & modifier & data_model client api check + boolean inUse = isThemeDomainInUse(record.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("theme domain is in use")); + +// if (Objects.equals(Boolean.FALSE, record.getStatus())) { +// return Message.ok(); +// } +// record.setStatus(Boolean.FALSE); +// int i = this.dwThemeDomainMapper.updateById(record); + // physical delete, because of name unique + int i = this.dwThemeDomainMapper.deleteById(record); + PreconditionUtil.checkState(1 == i, DwException.stateReject("remove action failed")); + + // 删除关联 + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + DeleteModelTypeAction action = new DeleteModelTypeAction.Builder().setType(ClassificationConstant.THEME).setName(record.getEnName()).setUser(username).build(); + DeleteModelTypeResult result = dataAssetsRemoteClient.deleteModelType(action); + + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.DELETE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.DELETE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message update(HttpServletRequest request, DwThemeDomainUpdateCommand command) throws DwException { + String username = SecurityFilter.getLoginUsername(request); + // 基本参数校验 + Long id = command.getId(); + String name = command.getName(); + String enName = command.getEnName(); + String owner = command.getOwner(); + Integer sort = command.getSort(); + String principalName = command.getPrincipalName(); +// String authority = command.getAuthority(); + String description = command.getDescription(); + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); +// name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); +// enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("en name should not empty")); + name = PreconditionUtil.checkStringArgumentNotBlankTrim(name, DwException.argumentReject("name should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkCnName(name), DwException.argumentReject("name must be digitg, chinese and underline")); + enName = PreconditionUtil.checkStringArgumentNotBlankTrim(enName, DwException.argumentReject("name alias should not empty")); + PreconditionUtil.checkArgument(RegexUtil.checkEnName(enName), DwException.argumentReject("name must be digit, alpha and underline")); + owner = PreconditionUtil.checkStringArgumentNotBlankTrim(owner, DwException.argumentReject("owner should not empty")); +// authority = PreconditionUtil.checkStringArgumentNotBlankTrim(authority, DwException.argumentReject("authority should not empty")); + +// if (Strings.isBlank(principalName)) { +// principalName = "ALL"; +// } + + if (Objects.isNull(sort)) { + sort = 1; + } + + // 实体校验 + DwThemeDomain record = this.dwThemeDomainMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("theme domain not found")); + PreconditionUtil.checkState(record.getIsAvailable(), DwException.stateReject("theme domain is unAvailable")); + + String orgName = record.getEnName(); + + // if name enName not equal to database attribute, we should check domain if in use + if (!Objects.equals(name, record.getName()) || !Objects.equals(enName, record.getEnName())) { + // check in use + // statistical_period & modifier & data_model client api check + + boolean inUse = isThemeDomainInUse(record.getId(), username); + PreconditionUtil.checkState(!inUse, DwException.stateReject("theme domain is in use")); + } + + // name 唯一性检测 + QueryWrapper nameUniqueCheckQuery = new QueryWrapper<>(); + nameUniqueCheckQuery.eq("name", name); + nameUniqueCheckQuery.ne("id", id); + nameUniqueCheckQuery.eq("status", Boolean.TRUE); + DwThemeDomain exist = this.dwThemeDomainMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(exist), DwException.stateReject("theme domain name aleardy exists")); + + // name alias 唯一性检测 + QueryWrapper nameAliasUniqueCheckQuery = new QueryWrapper<>(); + nameAliasUniqueCheckQuery.eq("en_name", enName); + nameAliasUniqueCheckQuery.ne("id", id); + nameAliasUniqueCheckQuery.eq("status", Boolean.TRUE); + DwThemeDomain nameAliasExist = this.dwThemeDomainMapper.selectOne(nameUniqueCheckQuery); + PreconditionUtil.checkState(Objects.isNull(nameAliasExist), DwException.stateReject("theme domain en name aleardy exists")); + + Long oldVersion = record.getLockVersion(); + + Date now = new Date(); + record.setName(name); + record.setEnName(enName); + record.setDescription(description); + record.setPrincipalName(principalName); + record.setOwner(owner); + record.setSort(sort); + record.setUpdateTime(now); + record.setLockVersion(oldVersion + 1); + + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + + int i = this.dwThemeDomainMapper.update(record, updateWrapper); + + PreconditionUtil.checkState(1 == i, DwException.stateReject("update theme domain failed")); + + // 如果英文名称有改动,则更新关联 + if (!Objects.equals(orgName, record.getEnName())) { + try { + LinkisDataAssetsRemoteClient dataAssetsRemoteClient = LinkisRemoteClientHolder.getDataAssetsRemoteClient(); + UpdateModelTypeAction action = new UpdateModelTypeAction.Builder().setType(ClassificationConstant.THEME).setName(record.getEnName()).setOrgName(orgName).setUser(username).build(); + UpdateModelTypeResult result = dataAssetsRemoteClient.updateModelType(action); + + if (result.getStatus() != 0) { + throw new DwException(result.getStatus(), result.getMessage()); + } + } catch (Exception e) { + if (e instanceof ErrorException) { + ErrorException ee = (ErrorException) e; + throw new DwException(DwExceptionCode.UPDATE_MODEL_TYPE_ERROR.getCode(), e.getMessage(), ee.getIp(), ee.getPort(), ee.getServiceKind()); + } else { + throw new DwException(DwExceptionCode.UPDATE_MODEL_TYPE_ERROR.getCode(), e.getMessage()); + } + } + } + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message enable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.TRUE); + return Message.ok(); + } + + @Transactional(rollbackFor = Exception.class) + @Override + public Message disable(HttpServletRequest request, Long id) throws DwException { + changeEnable(request, id, Boolean.FALSE); + return Message.ok(); + } + + private void changeEnable(HttpServletRequest request, Long id, Boolean enabled) throws DwException { + PreconditionUtil.checkArgument(!Objects.isNull(id), DwException.argumentReject("id should not be null")); + + DwThemeDomain record = this.dwThemeDomainMapper.selectById(id); + PreconditionUtil.checkState(!Objects.isNull(record), DwException.stateReject("theme domain not found")); + PreconditionUtil.checkState(record.getStatus(), DwException.stateReject("theme domain has been removed")); + if (Objects.equals(enabled, record.getIsAvailable())) { + return; + } + + Long oldVersion = record.getLockVersion(); + record.setUpdateTime(new Date()); + record.setIsAvailable(enabled); + record.setLockVersion(oldVersion + 1); + UpdateWrapper updateWrapper = new UpdateWrapper<>(); + updateWrapper.eq("id", record.getId()); + updateWrapper.eq("lock_version", oldVersion); + int update = this.dwThemeDomainMapper.update(record, updateWrapper); + PreconditionUtil.checkState(1 == update, DwException.stateReject(enabled ? "enable" : "disable" + " failed")); + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/PreconditionUtil.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/PreconditionUtil.java new file mode 100644 index 0000000000..6b96d9e5c1 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/PreconditionUtil.java @@ -0,0 +1,84 @@ +package com.webank.wedatasphere.warehouse.utils; + +import com.google.common.base.Strings; +import com.webank.wedatasphere.warehouse.exception.DwException; + +import javax.annotation.Nullable; + +public class PreconditionUtil { + + private PreconditionUtil() {} + + public static void checkState(boolean condition, DwException e) throws DwException { + if (!condition) { + throw e; + } + } + + public static void checkState(boolean condition, @Nullable String errorMessageTemplate, @Nullable Object... errorMessageArgs) throws DwException { + if (!condition) { + throw new DwException(DwException.BUSINESS_ERROR, format(errorMessageTemplate, errorMessageArgs)); + } + } + + public static void checkArgument(boolean condition, DwException e) throws DwException { + if (!condition) { + throw e; + } + } + + public static void checkArgument(boolean condition, @Nullable String errorMessageTemplate, @Nullable Object... errorMessageArgs) throws DwException { + if (!condition) { + throw new DwException(DwException.BUSINESS_ERROR, format(errorMessageTemplate, errorMessageArgs)); + } + } + + public static void checkStringArgumentNotBlank(String argument, DwException e) throws DwException { + if (Strings.isNullOrEmpty(argument)) { + throw e; + } + } + + // 检查字符串参数,成功则返回 trim() 后的字符串,否则抛出异常 + public static String checkStringArgumentNotBlankTrim(String argument, DwException e) throws DwException { + if (Strings.isNullOrEmpty(argument)) { + throw e; + } + return argument.trim(); + } + + private static String format(@Nullable String template, @Nullable Object... args) throws DwException { + int numArgs = args == null ? 0 : args.length; + template = String.valueOf(template); + StringBuilder builder = new StringBuilder(template.length() + 16 * numArgs); + int templateStart = 0; + + int i; + int placeholderStart; + for(i = 0; i < numArgs; templateStart = placeholderStart + 2) { + placeholderStart = template.indexOf("%s", templateStart); + if (placeholderStart == -1) { + break; + } + + builder.append(template.substring(templateStart, placeholderStart)); + builder.append(args[i++]); + } + + builder.append(template.substring(templateStart)); + if (i < numArgs) { + builder.append(" ["); + builder.append(args[i++]); + + while(i < numArgs) { + builder.append(", "); + builder.append(args[i++]); + } + + builder.append(']'); + } + + return builder.toString(); + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/RegexUtil.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/RegexUtil.java new file mode 100644 index 0000000000..2edaf7eddf --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/java/com/webank/wedatasphere/warehouse/utils/RegexUtil.java @@ -0,0 +1,30 @@ +package com.webank.wedatasphere.warehouse.utils; + +import java.util.Objects; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +public class RegexUtil { + + private static final String REGEX_EN_NAME = "^\\w+$"; + private static final String REGEX_CN_NAME = "^[\\u4E00-\\u9FA50-9_]+$"; + private static final Pattern enNamePattern = Pattern.compile(REGEX_EN_NAME); + private static final Pattern cnNamePattern = Pattern.compile(REGEX_CN_NAME); + + public static boolean checkEnName(String source) { + if (Objects.isNull(source)) { + return false; + } + + return enNamePattern.matcher(source).find(); + } + + public static boolean checkCnName(String source) { + if (Objects.isNull(source)) { + return false; + } + + return cnNamePattern.matcher(source).find(); + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/scala/com/webank/wedatasphere/warehouse/LinkisRemoteClientHolder.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/scala/com/webank/wedatasphere/warehouse/LinkisRemoteClientHolder.scala new file mode 100644 index 0000000000..876c67b740 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/main/scala/com/webank/wedatasphere/warehouse/LinkisRemoteClientHolder.scala @@ -0,0 +1,72 @@ +package com.webank.wedatasphere.warehouse + +import com.webank.wedatasphere.dss.data.governance.impl.LinkisDataAssetsRemoteClient +import com.webank.wedatasphere.dss.datamodel.center.client.impl.LinkisDatamodelCenterRemoteClient +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient +import org.apache.linkis.datasource.client.impl.{LinkisDataSourceRemoteClient, LinkisMetaDataRemoteClient} +import org.apache.linkis.httpclient.dws.authentication.TokenAuthenticationStrategy +import org.apache.linkis.httpclient.dws.config.{DWSClientConfig, DWSClientConfigBuilder} +import com.webank.wedatasphere.warehouse.client.DwDataSourceConfiguration + +import java.lang +import java.util.concurrent.TimeUnit + +object LinkisRemoteClientHolder { + //Linkis Datasource Client Config + val serverUrl: String = DwDataSourceConfiguration.SERVER_URL.getValue + val connectionTimeout: lang.Long = DwDataSourceConfiguration.CONNECTION_TIMEOUT.getValue + val discoveryEnabled: lang.Boolean = DwDataSourceConfiguration.DISCOVERY_ENABLED.getValue + val discoveryFrequencyPeriod: lang.Long = DwDataSourceConfiguration.DISCOVERY_FREQUENCY_PERIOD.getValue + val loadbalancerEnabled: lang.Boolean = DwDataSourceConfiguration.LOAD_BALANCER_ENABLED.getValue + val maxConnectionSize: Integer = DwDataSourceConfiguration.MAX_CONNECTION_SIZE.getValue + val retryEnabled: lang.Boolean = DwDataSourceConfiguration.RETRY_ENABLED.getValue + val readTimeout: lang.Long = DwDataSourceConfiguration.READ_TIMEOUT.getValue + val authTokenKey: String = DwDataSourceConfiguration.AUTHTOKEN_KEY.getValue + val authTokenValue: String = DwDataSourceConfiguration.AUTHTOKEN_VALUE.getValue + val dwsVersion: String = DwDataSourceConfiguration.DWS_VERSION.getValue + + val clientConfig: DWSClientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl(serverUrl) + .connectionTimeout(connectionTimeout) + .discoveryEnabled(discoveryEnabled) + .discoveryFrequency(discoveryFrequencyPeriod, TimeUnit.MINUTES) + .loadbalancerEnabled(loadbalancerEnabled) + .maxConnectionSize(maxConnectionSize) + .retryEnabled(retryEnabled) + .readTimeout(readTimeout) + .setAuthenticationStrategy(new TokenAuthenticationStrategy()) + .setAuthTokenKey(authTokenKey) + .setAuthTokenValue(authTokenValue) + .setDWSVersion(dwsVersion) + .build() + + val dataSourceClient = new LinkisDataSourceRemoteClient(clientConfig) + + val metadataSourceRemoteClient = new LinkisMetaDataRemoteClient(clientConfig) + + var dataModelRemoteClient = new LinkisDatamodelCenterRemoteClient(clientConfig) + + var dataAssetsRemoteClient = new LinkisDataAssetsRemoteClient(clientConfig) + + var workspaceRemoteClient = new LinkisWorkSpaceRemoteClient(clientConfig) + + def getWorkspaceRemoteClient: LinkisWorkSpaceRemoteClient = { + workspaceRemoteClient + } + + def getLinkisDataSourceRemoteClient: LinkisDataSourceRemoteClient = { + dataSourceClient + } + + def getDataModelRemoteClient: LinkisDatamodelCenterRemoteClient = { + dataModelRemoteClient + } + + def getDataAssetsRemoteClient: LinkisDataAssetsRemoteClient = { + dataAssetsRemoteClient + } + + def getMetadataSourceRemoteClient: LinkisMetaDataRemoteClient = { + metadataSourceRemoteClient + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/java/com/webank/wedatasphere/warehouse/RemoteClientTest.java b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/java/com/webank/wedatasphere/warehouse/RemoteClientTest.java new file mode 100644 index 0000000000..43a0dccd91 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/java/com/webank/wedatasphere/warehouse/RemoteClientTest.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.warehouse; + + + +public class RemoteClientTest { + + + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/scala/com/webank/wedatasphere/warehouse/DwLayerRemoteClientTest.scala b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/scala/com/webank/wedatasphere/warehouse/DwLayerRemoteClientTest.scala new file mode 100644 index 0000000000..d2dcf3c9e0 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-data-warehouse-service/src/test/scala/com/webank/wedatasphere/warehouse/DwLayerRemoteClientTest.scala @@ -0,0 +1,54 @@ +package com.webank.wedatasphere.warehouse + +import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy +import org.apache.linkis.httpclient.dws.config.{DWSClientConfig, DWSClientConfigBuilder} +import java.util.concurrent.TimeUnit + +import com.webank.wedatasphere.dss.datamodel.center.client.impl.LinkisDatamodelCenterRemoteClient +import com.webank.wedatasphere.dss.datamodel.center.client.request.LayersReferenceAction +import com.webank.wedatasphere.dss.datamodel.center.client.response.LayersReferenceResult +import org.apache.linkis.datasource.client.impl.LinkisMetaDataRemoteClient + +object DwLayerRemoteClientTest { + + + def main(args: Array[String]): Unit = { + val clientCfg: DWSClientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl("http://192.168.0.120:9001") + .connectionTimeout(30000) + .discoveryEnabled(true) + .loadbalancerEnabled(true) + .maxConnectionSize(5) + .retryEnabled(false) + .readTimeout(30000) + .setAuthenticationStrategy(new StaticAuthenticationStrategy()) + .setAuthTokenKey("ws") + .setAuthTokenValue("***REMOVED***") + .setDWSVersion("v1") + .build(); + +// val dataModelRemoteClient = LinkisRemoteClientHolder.getDataModelRemoteClient +// val action = new LayersReferenceAction.Builder().setUser(username).setName(dwLayer.getEnName).build +// val layersReferenceResult = dataModelRemoteClient.layersReference(action) + + val client = new LinkisDatamodelCenterRemoteClient(clientCfg); + val action = new LayersReferenceAction; + action.setUser("hadoop") + action.setParameter("name","test") + val result = client.layersReference(action); + +// +// val action1 = new ListDwThemeDomainAction +// val result1 = client.listThemeDomains(action1) +// println(result1.getAll) +// +// val action2 = new ListDwModifierAction +// val result2 = client.listModifiers(action2) +// println(result2.getAll) +// +// val action3 = new ListDwThemeDomainAction +// val result3 = client.listThemeDomains(action3) +// println(result3.getAll) + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/pom.xml b/dss-apps/dss-datawarehouse-design/dss-governance-dao/pom.xml new file mode 100644 index 0000000000..93010c2cfd --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/pom.xml @@ -0,0 +1,75 @@ + + + 4.0.0 + + dss-datawarehouse-design + com.webank.wedatasphere.dss + 1.2.0 + + + dss-governance-dao + jar + + + 8 + 8 + + + + + org.apache.linkis + linkis-module + provided + + + com.webank.wedatasphere.dss + dss-data-warehouse-mybatis + ${dss.version} + + + + org.apache.linkis + linkis-mybatis + + + + commons-beanutils + commons-beanutils + 1.9.4 + + + + org.projectlombok + lombok + provided + + + + mysql + mysql-connector-java + 5.1.49 + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + ${project.artifactId}-${project.version} + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayer.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayer.java new file mode 100644 index 0000000000..b172094b08 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayer.java @@ -0,0 +1,72 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.interceptor.NameAttachWorkspaceTrans; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import lombok.*; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@Getter +@Setter +@ToString +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("dss_datawarehouse_layer") +public class DwLayer extends DssWorkspaceEntity { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @NameAttachWorkspaceTrans + private String name; + + @TableField(value = "en_name") + private String enName; + + private String description; + + // 授权的角色 + @TableField(value = "principal_name") + private String principalName; + + // 是否预置主题 + private Boolean preset; + + @TableField(value = "is_available") + private Boolean isAvailable; + + // 为空代表所有库 + @TableField(value = "dbs") + private String dbs; + + // 负责人 + private String owner; + + private Integer sort; + + // 创建人 +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + + private Boolean status; + + @TableField(value = "lock_version") + private Long lockVersion; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayerGeneralizeRule.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayerGeneralizeRule.java new file mode 100644 index 0000000000..7be9976c83 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwLayerGeneralizeRule.java @@ -0,0 +1,56 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@TableName("dss_datawarehouse_layer_generalize_rule") +public class DwLayerGeneralizeRule extends DssWorkspaceEntity { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @TableField(value = "layer_id") + private Long layerId; + + // 自动归纳表达式 + private String regex; + + private String identifier; + + @TableField(value = "en_identifier") + private String enIdentifier; + + @TableField(value = "desc") + private String description; + +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + + private Boolean status; + + @TableField(value = "lock_version") + private Long lockVersion; + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifier.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifier.java new file mode 100644 index 0000000000..6b59e389af --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifier.java @@ -0,0 +1,76 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import lombok.*; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@Getter +@Setter +@ToString +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("dss_datawarehouse_modifier") +public class DwModifier extends DssWorkspaceEntity { + + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @TableField(value = "modifier_type") + private String modifierType; + + @TableField(value = "modifier_type_en") + private String modifierTypeEn; + + @TableField(value = "theme_domain_id") + private Long themeDomainId; + + // 空:代表所有,如果是逗号分隔的字符串则代表对应的theme的names + @TableField(value = "theme_area") + private String themeArea; + + @TableField(value = "theme_area_en") + private String themeAreaEn; + + @TableField(value = "layer_id") + private Long layerId; + + // 空:代表所有,如果是逗号分隔的字符串则代表对应的layer的names + @TableField(value = "layer_area") + private String layerArea; + + @TableField(value = "layer_area_en") + private String layerAreaEn; + + private String description; + + @TableField(value = "is_available") + private Boolean isAvailable; + +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + + private Boolean status; + + @TableField(value = "lock_version") + private Long lockVersion; + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifierList.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifierList.java new file mode 100644 index 0000000000..3b712ec740 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwModifierList.java @@ -0,0 +1,45 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@TableName("dss_datawarehouse_modifier_list") +public class DwModifierList extends DssWorkspaceEntity { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @TableField(value = "modifier_id") + private Long modifierId; + + private String name; + + private String identifier; + + private String formula; + +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwStatisticalPeriod.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwStatisticalPeriod.java new file mode 100644 index 0000000000..eb80cc082a --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwStatisticalPeriod.java @@ -0,0 +1,77 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import com.webank.wedatasphere.warehouse.dao.interceptor.NameAttachWorkspaceTrans; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +import java.util.Date; + +@Getter +@Setter +@ToString +@NoArgsConstructor +@TableName("dss_datawarehouse_statistical_period") +public class DwStatisticalPeriod extends DssWorkspaceEntity { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @TableField(value = "theme_domain_id") + private Long themeDomainId; + +// @TableField(value = "theme_area") +// private String themeArea; + + @TableField(value = "layer_id") + private Long layerId; + +// @TableField(value = "layer_area") +// private String layerArea; + + @NameAttachWorkspaceTrans + private String name; + + @TableField(value = "en_name") + private String enName; + + private String description; + + @TableField(value = "start_time_formula") + private String startTimeFormula; + + @TableField(value = "end_time_formula") + private String endTimeFormula; + + // 授权的名字:userName、roleName + @TableField(value = "principal_name") + private String principalName; + + @TableField(value = "is_available") + private Boolean isAvailable; + + // 负责人 + private String owner; + +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + + private Boolean status; + + @TableField(value = "lock_version") + private Long lockVersion; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwThemeDomain.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwThemeDomain.java new file mode 100644 index 0000000000..53943da675 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/DwThemeDomain.java @@ -0,0 +1,64 @@ +package com.webank.wedatasphere.warehouse.dao.domain; + +import com.baomidou.mybatisplus.annotation.IdType; +import com.baomidou.mybatisplus.annotation.TableField; +import com.baomidou.mybatisplus.annotation.TableId; +import com.baomidou.mybatisplus.annotation.TableName; +import com.webank.wedatasphere.warehouse.dao.interceptor.NameAttachWorkspaceTrans; +import com.webank.wedatasphere.warehouse.dao.domain.common.DssWorkspaceEntity; +import lombok.*; +import lombok.experimental.Accessors; + +import java.util.Date; + +@Data +@Getter +@Setter +@ToString +@Builder +@AllArgsConstructor +@NoArgsConstructor +@EqualsAndHashCode(callSuper = false) +@Accessors(chain = true) +@TableName("dss_datawarehouse_theme_domain") +public class DwThemeDomain extends DssWorkspaceEntity { + @TableId(value = "id", type = IdType.AUTO) + private Long id; + + @NameAttachWorkspaceTrans + private String name; + + @TableField(value = "en_name") + private String enName; + + private String description; + + @TableField(value = "is_available") + private Boolean isAvailable; + + // 可用角色,授权角色 + @TableField(value = "principal_name") + private String principalName; + + @TableField(value = "owner") + private String owner; + + private Integer sort; + +// @TableField(value = "create_user") +// private String createUser; + + @TableField(value = "create_time") + private Date createTime; + +// @TableField(value = "modify_user") +// private String modifyUser; + + @TableField(value = "update_time") + private Date updateTime; + + private Boolean status; + + @TableField(value = "lock_version") + private Long lockVersion; +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/common/DssWorkspaceEntity.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/common/DssWorkspaceEntity.java new file mode 100644 index 0000000000..0f3173da8b --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/domain/common/DssWorkspaceEntity.java @@ -0,0 +1,7 @@ +package com.webank.wedatasphere.warehouse.dao.domain.common; + +import java.io.Serializable; + +public class DssWorkspaceEntity implements Serializable { + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAdapter.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAdapter.java new file mode 100644 index 0000000000..fde7435ef5 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAdapter.java @@ -0,0 +1,14 @@ +package com.webank.wedatasphere.warehouse.dao.interceptor; + +import org.apache.linkis.common.conf.CommonVars; + +public class DssWorkspaceNameAdapter { + + public static final CommonVars BDP_ENTITY_WORKSPACE_NAME_AUTO_TRANSFORM = CommonVars.apply("wds.entity.workspace.name.auto.transform", "false"); + + public String getWorkspaceName() { + // TODO 真正获取当前用户线程的工作空间名称 + return "workspaceName"; + } + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoExtractQueryInterceptor.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoExtractQueryInterceptor.java new file mode 100644 index 0000000000..20696b0f22 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoExtractQueryInterceptor.java @@ -0,0 +1,91 @@ +package com.webank.wedatasphere.warehouse.dao.interceptor; + + +import lombok.AllArgsConstructor; +import org.apache.ibatis.executor.resultset.DefaultResultSetHandler; +import org.apache.ibatis.executor.resultset.ResultSetHandler; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.ResultMap; +import org.apache.ibatis.plugin.*; +import org.apache.ibatis.reflection.MetaObject; +import org.apache.ibatis.reflection.SystemMetaObject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.beans.BeanUtils; + +import javax.sql.DataSource; +import java.beans.PropertyDescriptor; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.sql.Statement; +import java.util.*; + +@AllArgsConstructor +@Intercepts({ + @Signature(type = ResultSetHandler.class, method = "handleResultSets", args = {Statement.class}) +}) +public class DssWorkspaceNameAutoExtractQueryInterceptor /*extends AbstractSqlParserHandler*/ implements Interceptor { + private static final Logger logger = LoggerFactory.getLogger(DssWorkspaceNameAutoExtractQueryInterceptor.class); + private static final DssWorkspaceNameAdapter dssWorkspaceNameAdapter = new DssWorkspaceNameAdapter(); + private final DataSource dataSource; + private Object extract(Object object) throws InvocationTargetException, IllegalAccessException { + Field[] fields = object.getClass().getDeclaredFields(); + for (Field field : fields) { + NameAttachWorkspaceTrans confidential = field.getAnnotation(NameAttachWorkspaceTrans.class); + if (confidential==null){ + continue; + } + PropertyDescriptor ps = BeanUtils.getPropertyDescriptor(object.getClass(), field.getName()); + if (ps == null || ps.getReadMethod() == null || ps.getWriteMethod() == null) { + continue; + } + Object value = ps.getReadMethod().invoke(object); + if (value != null) { + if (value instanceof String) { + String fieldValue = (String) value; + if (fieldValue.contains(".") && fieldValue.contains(dssWorkspaceNameAdapter.getWorkspaceName())) { + String[] split = fieldValue.split("\\."); + if (split.length == 2) { + ps.getWriteMethod().invoke(object, split[1]); +// resultMap.put(colName, split[1]); + } + } + } + } + } + return object; + } + + @Override + public Object intercept(Invocation invocation) throws Throwable { + String flag = DssWorkspaceNameAdapter.BDP_ENTITY_WORKSPACE_NAME_AUTO_TRANSFORM.getValue(); + if ("false".equalsIgnoreCase(flag)) { + return invocation.proceed(); + } + + logger.info("use mybatis interceptor to handle name field [transform workspace.name ??]"); + + DefaultResultSetHandler defaultResultSetHandler = (DefaultResultSetHandler) invocation.getTarget(); + MetaObject metaObject = SystemMetaObject.forObject(defaultResultSetHandler); + MappedStatement mappedStatement = (MappedStatement) metaObject.getValue("mappedStatement"); + List resultMaps = mappedStatement.getResultMaps(); + + if (resultMaps == null || resultMaps.isEmpty()) { + return invocation.proceed(); + } + + Object result = invocation.proceed(); + if (result instanceof Collection) { + Collection objList= (Collection) result; + List resultList=new ArrayList<>(); + for (Object obj : objList) { + resultList.add(extract(obj)); + } + return resultList; + }else { + return extract(result); + } + } + + +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoTransformUpdateInteceptor.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoTransformUpdateInteceptor.java new file mode 100644 index 0000000000..8d7d277593 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/DssWorkspaceNameAutoTransformUpdateInteceptor.java @@ -0,0 +1,81 @@ +package com.webank.wedatasphere.warehouse.dao.interceptor; + +import com.baomidou.mybatisplus.extension.handlers.AbstractSqlParserHandler; +import lombok.AllArgsConstructor; +import org.apache.ibatis.binding.MapperMethod; +import org.apache.ibatis.executor.Executor; +import org.apache.ibatis.mapping.MappedStatement; +import org.apache.ibatis.mapping.SqlCommandType; +import org.apache.ibatis.plugin.Interceptor; +import org.apache.ibatis.plugin.Intercepts; +import org.apache.ibatis.plugin.Invocation; +import org.apache.ibatis.plugin.Signature; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.sql.DataSource; +import java.lang.reflect.Field; +import java.lang.reflect.InvocationTargetException; +import java.util.Objects; + +@AllArgsConstructor +@Intercepts({ + @Signature(type = Executor.class, method = "update", args = {MappedStatement.class, Object.class}) +}) +public class DssWorkspaceNameAutoTransformUpdateInteceptor extends AbstractSqlParserHandler implements Interceptor { + private static final Logger logger = LoggerFactory.getLogger(DssWorkspaceNameAutoTransformUpdateInteceptor.class); + private static final DssWorkspaceNameAdapter dssWorkspaceNameAdapter = new DssWorkspaceNameAdapter(); + private final DataSource dataSource; + @Override + public Object intercept(Invocation invocation) throws Throwable { + String flag = DssWorkspaceNameAdapter.BDP_ENTITY_WORKSPACE_NAME_AUTO_TRANSFORM.getValue(); + if ("false".equalsIgnoreCase(flag)) { + return invocation.proceed(); + } + + logger.info("use mybatis interceptor to handle name field [transform workspace.name ??]"); + + MappedStatement mappedStatement = (MappedStatement)invocation.getArgs()[0]; + SqlCommandType sqlCommandType = mappedStatement.getSqlCommandType(); + + if (sqlCommandType == SqlCommandType.DELETE) { + return invocation.proceed(); + } + + Object parameter = invocation.getArgs()[1]; + + if (parameter instanceof MapperMethod.ParamMap) { + MapperMethod.ParamMap inParams = (MapperMethod.ParamMap) parameter; + Object et = inParams.get("et"); + + Field[] declaredFields = et.getClass().getDeclaredFields(); + for (Field field : declaredFields) { + if (field.getAnnotation(NameAttachWorkspaceTrans.class) != null) { + field.setAccessible(true); + String finalName = null; + Object origVal = field.get(et); + if (!Objects.isNull(origVal) && origVal instanceof String) { + finalName = dssWorkspaceNameAdapter.getWorkspaceName()+"."+origVal; + } + field.set(et, finalName); + field.setAccessible(false); + } + } + } else { + Field[] declaredFields = parameter.getClass().getDeclaredFields(); + for (Field field : declaredFields) { + if (field.getAnnotation(NameAttachWorkspaceTrans.class) != null) { + field.setAccessible(true); + String finalName = ""; + Object origVal = field.get(parameter); + if (origVal instanceof String) { + finalName = dssWorkspaceNameAdapter.getWorkspaceName()+"."+origVal; + } + field.set(parameter, finalName); + field.setAccessible(false); + } + } + } + return invocation.proceed(); + } +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/NameAttachWorkspaceTrans.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/NameAttachWorkspaceTrans.java new file mode 100644 index 0000000000..1cc014c96f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/interceptor/NameAttachWorkspaceTrans.java @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.warehouse.dao.interceptor; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Retention(RetentionPolicy.RUNTIME) +@Target({ ElementType.FIELD }) +public @interface NameAttachWorkspaceTrans { +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwLayerMapper.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwLayerMapper.java new file mode 100644 index 0000000000..a768ffbfd0 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwLayerMapper.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.warehouse.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.warehouse.dao.domain.DwLayer; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.Optional; + +@Mapper +public interface DwLayerMapper extends BaseMapper { + @Select("select * from dss_datawarehouse_layer where name = #{layer} or en_name = #{layer}") + Optional findByName(@Param("layer") String layer); +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierListMapper.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierListMapper.java new file mode 100644 index 0000000000..5000e80c8b --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierListMapper.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.warehouse.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.warehouse.dao.domain.DwModifierList; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DwModifierListMapper extends BaseMapper { +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierMapper.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierMapper.java new file mode 100644 index 0000000000..06375b9815 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwModifierMapper.java @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.warehouse.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.warehouse.dao.domain.DwModifier; +import org.apache.ibatis.annotations.Mapper; + +@Mapper +public interface DwModifierMapper extends BaseMapper { +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwStatisticalPeriodMapper.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwStatisticalPeriodMapper.java new file mode 100644 index 0000000000..3155a13543 --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwStatisticalPeriodMapper.java @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.warehouse.dao.mapper; + +import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.baomidou.mybatisplus.core.metadata.IPage; +import com.baomidou.mybatisplus.core.toolkit.Constants; +import com.webank.wedatasphere.warehouse.dao.domain.DwStatisticalPeriod; +import com.webank.wedatasphere.warehouse.dao.vo.DwStatisticalPeriodVo; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; + +import java.util.List; +import java.util.Map; + +@Mapper +public interface DwStatisticalPeriodMapper extends BaseMapper { + IPage selectPageItems(IPage queryPage, Map params); + + List selectItems(@Param(Constants.WRAPPER) QueryWrapper queryWrapper); + + DwStatisticalPeriodVo selectItemById(@Param(value = "id") Long id); +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwThemeDomainMapper.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwThemeDomainMapper.java new file mode 100644 index 0000000000..314f3a2ddd --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/DwThemeDomainMapper.java @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.warehouse.dao.mapper; + +import com.baomidou.mybatisplus.core.mapper.BaseMapper; +import com.webank.wedatasphere.warehouse.dao.domain.DwThemeDomain; +import org.apache.ibatis.annotations.Mapper; +import org.apache.ibatis.annotations.Param; +import org.apache.ibatis.annotations.Select; + +import java.util.Optional; + +@Mapper +public interface DwThemeDomainMapper extends BaseMapper { + @Select("select * from dss_datawarehouse_theme_domain where name = #{theme} or en_name = #{theme}") + Optional findByName(@Param("theme") String theme); +} diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/impl/DwStatisticalPeriodMapper.xml b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/impl/DwStatisticalPeriodMapper.xml new file mode 100644 index 0000000000..6da9cecc5a --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/mapper/impl/DwStatisticalPeriodMapper.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/vo/DwStatisticalPeriodVo.java b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/vo/DwStatisticalPeriodVo.java new file mode 100644 index 0000000000..0b18c34b9f --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/dss-governance-dao/src/main/java/com/webank/wedatasphere/warehouse/dao/vo/DwStatisticalPeriodVo.java @@ -0,0 +1,60 @@ +package com.webank.wedatasphere.warehouse.dao.vo; + +import com.webank.wedatasphere.warehouse.dao.interceptor.NameAttachWorkspaceTrans; +import lombok.Getter; +import lombok.Setter; +import lombok.ToString; + +import java.io.Serializable; +import java.util.Date; + + +// 不要使用继承,否则 SQL 拦截器 ResultSetHandler 无法获取到父类的 private 字段来转换 +@Setter +@Getter +@ToString +public class DwStatisticalPeriodVo implements Serializable { + private Long id; + + private Long themeDomainId; + + private Long layerId; + + @NameAttachWorkspaceTrans + private String name; + + private String enName; + + private String description; + + private String startTimeFormula; + + private String endTimeFormula; + + private String principalName; + + private Boolean isAvailable; + + private String owner; + + private Date createTime; + + private Date updateTime; + + // 自定义字段 + @NameAttachWorkspaceTrans + private String themeArea; + + private String themeAreaEn; + + @NameAttachWorkspaceTrans + private String layerArea; + + private String layerAreaEn; + + transient private Boolean status; + + private boolean referenced; + + private int referenceCount; +} diff --git a/dss-apps/dss-datawarehouse-design/pom.xml b/dss-apps/dss-datawarehouse-design/pom.xml new file mode 100644 index 0000000000..58a97a180d --- /dev/null +++ b/dss-apps/dss-datawarehouse-design/pom.xml @@ -0,0 +1,154 @@ + + + + dss + com.webank.wedatasphere.dss + 1.2.0 + ../../pom.xml + + 4.0.0 + + dss-datawarehouse-design + pom + + + UTF-8 + 2.16 + 2.22.2 + 2.22.2 + + + + dss-data-warehouse-server + dss-data-warehouse-service + dss-data-warehouse-mybatis + dss-data-warehouse-client + dss-governance-dao + + + + + + + com.webank.wedatasphere.dss + dss-governance-dao + ${project.version} + + + + com.webank.wedatasphere.dss + dss-data-warehouse-service + ${project.version} + + + + + org.scala-lang + scala-library + ${scala.version} + + + org.scala-lang + scala-compiler + ${scala.version} + + + org.scala-lang + scala-reflect + ${scala.version} + + + org.scala-lang + scalap + ${scala.version} + + + org.apache.commons + commons-lang3 + ${commons.lang3.version} + + + org.apache.linkis + linkis-mybatis + ${linkis.version} + + + org.apache.linkis + linkis-httpclient + ${linkis.version} + + + org.apache.linkis + linkis-gateway-httpclient-support + ${linkis.version} + + + org.apache.linkis + linkis-module + + + org.springframework.boot + spring-boot-starter-tomcat + + + hibernate-validator + org.hibernate.validator + + + ${linkis.version} + + + org.apache.linkis + linkis-common + ${linkis.version} + + + + org.apache.linkis + linkis-protocol + ${linkis.version} + + + + com.google.code.gson + gson + ${gson.version} + + + com.fasterxml.jackson.core + jackson-databind + ${fasterxml.jackson.version} + + + org.codehaus.jackson + jackson-mapper-asl + ${org.codehaus.jackson.version} + + + org.apache.commons + commons-math3 + ${commons.math.version} + + + xstream + com.thoughtworks.xstream + ${xstream.version} + + + + org.apache.linkis + linkis-datasource-client + ${linkis.version} + + + + org.projectlombok + lombok + 1.18.20 + + + + + \ No newline at end of file diff --git a/dss-apps/dss-scriptis-server/pom.xml b/dss-apps/dss-scriptis-server/pom.xml index e20f95a2ba..3fd29b3eaf 100644 --- a/dss-apps/dss-scriptis-server/pom.xml +++ b/dss-apps/dss-scriptis-server/pom.xml @@ -22,7 +22,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../pom.xml diff --git a/dss-apps/dss-user-guide/dss-user-guide-server/pom.xml b/dss-apps/dss-user-guide/dss-user-guide-server/pom.xml index 536285f7b7..6736fcfb91 100644 --- a/dss-apps/dss-user-guide/dss-user-guide-server/pom.xml +++ b/dss-apps/dss-user-guide/dss-user-guide-server/pom.xml @@ -5,7 +5,7 @@ dss-user-guide com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-apps/dss-user-guide/dss-user-guide-server/src/main/resources/log4j.properties b/dss-apps/dss-user-guide/dss-user-guide-server/src/main/resources/log4j.properties index f88f949da0..d9fced6922 100644 --- a/dss-apps/dss-user-guide/dss-user-guide-server/src/main/resources/log4j.properties +++ b/dss-apps/dss-user-guide/dss-user-guide-server/src/main/resources/log4j.properties @@ -32,7 +32,7 @@ log4j.appender.com.webank.bdp.ide.core.Threshold=INFO log4j.additivity.com.webank.bdp.ide.core=false log4j.appender.com.webank.bdp.ide.core.layout=org.apache.log4j.PatternLayout log4j.appender.com.webank.bdp.ide.core.Append=true -log4j.appender.com.webank.bdp.ide.core.File=logs/dss-data-governance-server.log +log4j.appender.com.webank.bdp.ide.core.File=logs/dss-guide-server.log log4j.appender.com.webank.bdp.ide.core.layout.ConversionPattern= %d{ISO8601} %-5p (%t) [%F:%M(%L)] - %m%n log4j.logger.org.springframework=INFO \ No newline at end of file diff --git a/dss-apps/dss-user-guide/pom.xml b/dss-apps/dss-user-guide/pom.xml index add0edc73f..6a312b5a53 100644 --- a/dss-apps/dss-user-guide/pom.xml +++ b/dss-apps/dss-user-guide/pom.xml @@ -5,7 +5,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-commons/dss-common/pom.xml b/dss-commons/dss-common/pom.xml index 52bf212443..a9830d87fa 100644 --- a/dss-commons/dss-common/pom.xml +++ b/dss-commons/dss-common/pom.xml @@ -22,7 +22,7 @@ dss-commons com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 dss-common diff --git a/dss-commons/dss-contextservice/pom.xml b/dss-commons/dss-contextservice/pom.xml index c5efa0d39f..925be6d98a 100644 --- a/dss-commons/dss-contextservice/pom.xml +++ b/dss-commons/dss-contextservice/pom.xml @@ -21,7 +21,7 @@ dss-commons com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 dss-contextservice diff --git a/dss-commons/dss-sender-service/pom.xml b/dss-commons/dss-sender-service/pom.xml index c1821e74cd..8ce926c8e4 100644 --- a/dss-commons/dss-sender-service/pom.xml +++ b/dss-commons/dss-sender-service/pom.xml @@ -21,7 +21,7 @@ dss-commons com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-commons/pom.xml b/dss-commons/pom.xml index 261b4e3208..87790cab64 100644 --- a/dss-commons/pom.xml +++ b/dss-commons/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/dss-appconn-framework/pom.xml b/dss-framework/dss-appconn-framework/pom.xml index 127e632745..0302df81a5 100644 --- a/dss-framework/dss-appconn-framework/pom.xml +++ b/dss-framework/dss-appconn-framework/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/dss-framework-admin-service/pom.xml b/dss-framework/dss-framework-admin-service/pom.xml index 1df35e9313..88ef210486 100644 --- a/dss-framework/dss-framework-admin-service/pom.xml +++ b/dss-framework/dss-framework-admin-service/pom.xml @@ -4,7 +4,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 diff --git a/dss-framework/dss-framework-common/pom.xml b/dss-framework/dss-framework-common/pom.xml index ab291d3e46..86f5e2f112 100644 --- a/dss-framework/dss-framework-common/pom.xml +++ b/dss-framework/dss-framework-common/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/dss-framework-orchestrator-server/pom.xml b/dss-framework/dss-framework-orchestrator-server/pom.xml index 17282a2228..947f2c654c 100644 --- a/dss-framework/dss-framework-orchestrator-server/pom.xml +++ b/dss-framework/dss-framework-orchestrator-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/dss-framework-project-server/pom.xml b/dss-framework/dss-framework-project-server/pom.xml index 448fbd28c8..6d40eb5a1d 100644 --- a/dss-framework/dss-framework-project-server/pom.xml +++ b/dss-framework/dss-framework-project-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/dss-framework-workspace-client/pom.xml b/dss-framework/dss-framework-workspace-client/pom.xml new file mode 100644 index 0000000000..d976d03f43 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/pom.xml @@ -0,0 +1,56 @@ + + + + dss + com.webank.wedatasphere.dss + 1.2.0 + + 4.0.0 + + dss-framework-workspace-client + + + 8 + 8 + + + + + org.apache.linkis + linkis-gateway-httpclient-support + ${linkis.version} + + + org.projectlombok + lombok + 1.18.16 + compile + + + + + + + org.apache.maven.plugins + maven-deploy-plugin + + + + net.alchim31.maven + scala-maven-plugin + + + org.apache.maven.plugins + maven-jar-plugin + + + + + src/main/resources + + + ${project.artifactId}-${project.version} + + \ No newline at end of file diff --git a/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceRole.java b/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceRole.java new file mode 100644 index 0000000000..e55424cf09 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceRole.java @@ -0,0 +1,45 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.entity; + +import java.io.Serializable; + +public class DSSWorkspaceRole implements Serializable { + private static final long serialVersionUID=1L; + + private int roleId; + private String roleName; + private String roleFrontName; + + + public int getRoleId() { + return roleId; + } + + public void setRoleId(int roleId) { + this.roleId = roleId; + } + + public String getRoleName() { + return roleName; + } + + public void setRoleName(String roleName) { + this.roleName = roleName; + } + + public String getRoleFrontName() { + return roleFrontName; + } + + public void setRoleFrontName(String roleFrontName) { + this.roleFrontName = roleFrontName; + } + + @Override + public String toString() { + return "DSSWorkspaceRole{" + + "roleId=" + roleId + + ", roleName='" + roleName + '\'' + + ", roleFrontName='" + roleFrontName + '\'' + + '}'; + } +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceUser.java b/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceUser.java new file mode 100644 index 0000000000..739233d233 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/java/com/webank/wedatasphere/dss/framework/workspace/client/entity/DSSWorkspaceUser.java @@ -0,0 +1,78 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.entity; + + + +import java.io.Serializable; +import java.util.Date; +import java.util.List; + + +public class DSSWorkspaceUser implements Serializable { + private int id; + private String name; + private List roles; + private String department; + private String office; + private String creator; + private Date joinTime; + + public DSSWorkspaceUser() { + } + + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public List getRoles() { + return roles; + } + + public void setRoles(List roles) { + this.roles = roles; + } + + public String getDepartment() { + return department; + } + + public void setDepartment(String department) { + this.department = department; + } + + public String getOffice() { + return office; + } + + public void setOffice(String office) { + this.office = office; + } + + public String getCreator() { + return creator; + } + + public void setCreator(String creator) { + this.creator = creator; + } + + public Date getJoinTime() { + return joinTime; + } + + public void setJoinTime(Date joinTime) { + this.joinTime = joinTime; + } +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/AbstractRemoteClient.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/AbstractRemoteClient.scala new file mode 100644 index 0000000000..9e6e318ee7 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/AbstractRemoteClient.scala @@ -0,0 +1,15 @@ +package com.webank.wedatasphere.dss.framework.workspace.client + +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result + +abstract class AbstractRemoteClient extends RemoteClient{ + protected val dwsHttpClient:DWSHttpClient + + override def execute(action: Action): Result = action match { + case action: Action => dwsHttpClient.execute(action) + } + + override def close(): Unit = dwsHttpClient.close() +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/RemoteClient.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/RemoteClient.scala new file mode 100644 index 0000000000..26a8f863ac --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/RemoteClient.scala @@ -0,0 +1,11 @@ +package com.webank.wedatasphere.dss.framework.workspace.client + +import org.apache.linkis.httpclient.request.Action +import org.apache.linkis.httpclient.response.Result +import java.io.Closeable + +trait RemoteClient extends Closeable{ + protected def execute(action: Action): Result + + override def close(): Unit +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClient.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClient.scala new file mode 100644 index 0000000000..fc331606ee --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClient.scala @@ -0,0 +1,9 @@ +package com.webank.wedatasphere.dss.framework.workspace.client + +import com.webank.wedatasphere.dss.framework.workspace.client.request.{GetWorkspaceRolesAction, GetWorkspaceUsersAction} +import com.webank.wedatasphere.dss.framework.workspace.client.response.{GetWorkspaceRolesResult, GetWorkspaceUsersResult} + +trait WorkSpaceRemoteClient extends RemoteClient { + def getWorkspaceUsers(action: GetWorkspaceUsersAction): GetWorkspaceUsersResult + def getWorkspaceRoles(action: GetWorkspaceRolesAction): GetWorkspaceRolesResult +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/exception/WorkSpaceClientBuilderException.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/exception/WorkSpaceClientBuilderException.scala new file mode 100644 index 0000000000..1fa7b9a4bd --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/exception/WorkSpaceClientBuilderException.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.exception + +import org.apache.linkis.common.exception.ErrorException + +class WorkSpaceClientBuilderException(errorDesc: String) extends ErrorException(60022, errorDesc) diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/impl/LinkisWorkSpaceRemoteClient.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/impl/LinkisWorkSpaceRemoteClient.scala new file mode 100644 index 0000000000..e517c9d8df --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/impl/LinkisWorkSpaceRemoteClient.scala @@ -0,0 +1,16 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.impl + +import com.webank.wedatasphere.dss.framework.workspace.client.request.{GetWorkspaceRolesAction, GetWorkspaceUsersAction} +import com.webank.wedatasphere.dss.framework.workspace.client.response.{GetWorkspaceRolesResult, GetWorkspaceUsersResult} +import com.webank.wedatasphere.dss.framework.workspace.client.{AbstractRemoteClient, WorkSpaceRemoteClient} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.config.DWSClientConfig + +class LinkisWorkSpaceRemoteClient(clientConfig: DWSClientConfig) extends AbstractRemoteClient with WorkSpaceRemoteClient { + override protected val dwsHttpClient: DWSHttpClient = new DWSHttpClient(clientConfig, "WorkSpace-Client") + + override def getWorkspaceUsers(action: GetWorkspaceUsersAction): GetWorkspaceUsersResult = execute(action).asInstanceOf[GetWorkspaceUsersResult] + + override def getWorkspaceRoles(action: GetWorkspaceRolesAction): GetWorkspaceRolesResult = execute(action).asInstanceOf[GetWorkspaceRolesResult] + +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceRolesAction.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceRolesAction.scala new file mode 100644 index 0000000000..feb3c01e42 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceRolesAction.scala @@ -0,0 +1,42 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.request + +import com.webank.wedatasphere.dss.framework.workspace.client.exception.WorkSpaceClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetWorkspaceRolesAction extends GetAction with WorkSpaceAction{ + + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("dss", "framework","workspace", "getWorkspaceRoles") +} +object GetWorkspaceRolesAction{ + def builder(): Builder = new Builder + + class Builder private[GetWorkspaceRolesAction]() { + private var workspaceId:String = _ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setWorkspaceId(workspaceId:String): Builder = { + this.workspaceId = workspaceId + this + } + + def build(): GetWorkspaceRolesAction = { + val action = new GetWorkspaceRolesAction + if(workspaceId == null) throw new WorkSpaceClientBuilderException("workspaceId is needed!") + action.setParameter("workspaceId",workspaceId) + action.setUser(user) + action + } + } +} + + diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceUsersAction.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceUsersAction.scala new file mode 100644 index 0000000000..081ae714bd --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/GetWorkspaceUsersAction.scala @@ -0,0 +1,78 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.request + +import com.webank.wedatasphere.dss.framework.workspace.client.exception.WorkSpaceClientBuilderException +import org.apache.linkis.httpclient.request.GetAction + +class GetWorkspaceUsersAction extends GetAction with WorkSpaceAction{ + private var user:String = _ + + override def setUser(user: String): Unit = this.user = user + + override def getUser: String = this.user + + override def suffixURLs: Array[String] = Array("dss", "framework","workspace", "getWorkspaceUsers") +} +object GetWorkspaceUsersAction{ + def builder(): Builder = new Builder + + class Builder private[GetWorkspaceUsersAction]() { + private var workspaceId:String = _ + private var pageNow:Integer=_ + private var pageSize:Integer=_ + private var department:String=_ + private var username:String=_ + private var roleName:String=_ + private var user: String = _ + + def setUser(user: String): Builder ={ + this.user = user + this + } + def setWorkspaceId(workspaceId:String): Builder = { + this.workspaceId = workspaceId + this + } + + def setPageNow(pageNow:Integer): Builder ={ + this.pageNow = pageNow + this + } + + def setPageSize(pageSize:Integer):Builder={ + this.pageSize = pageSize + this + } + + def setDepartment(department:String): Builder ={ + this.department = department + this + } + + def setRoleName(roleName:String):Builder={ + this.roleName = roleName + this + } + + def setUsername(username:String):Builder={ + this.username = username + this + } + + def build(): GetWorkspaceUsersAction = { + val action = new GetWorkspaceUsersAction + if(workspaceId == null) throw new WorkSpaceClientBuilderException("workspaceId is needed!") + if(user == null) throw new WorkSpaceClientBuilderException("user is needed!") + if(pageNow == null) pageNow = 1 + if(pageSize == null) pageSize = 10 + action.setUser(user) + action.setParameter("workspaceId",workspaceId) + action.setParameter("pageNow",pageNow) + action.setParameter("pageSize",pageSize) + if(department != null) action.setParameter("department",department) + if(roleName != null) action.setParameter("roleName",roleName) + if(username != null) action.setParameter("username",username) + + action + } + } +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/WorkSpaceAction.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/WorkSpaceAction.scala new file mode 100644 index 0000000000..0be7262a59 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/request/WorkSpaceAction.scala @@ -0,0 +1,5 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.request + +import org.apache.linkis.httpclient.dws.request.DWSHttpAction + +trait WorkSpaceAction extends DWSHttpAction with org.apache.linkis.httpclient.request.UserAction diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceRolesResult.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceRolesResult.scala new file mode 100644 index 0000000000..687998f611 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceRolesResult.scala @@ -0,0 +1,22 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.response + +import com.webank.wedatasphere.dss.framework.workspace.client.entity.DSSWorkspaceRole +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/dss/framework/workspace/getWorkspaceRoles") +class GetWorkspaceRolesResult extends DWSResult{ + @BeanProperty var workspaceRoles:util.List[java.util.Map[String, Any]] = _ + + def getWorkspaceRoleList:util.List[DSSWorkspaceRole]={ + import scala.collection.JavaConverters._ + workspaceRoles.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DSSWorkspaceRole]) + }).asJava + } +} diff --git a/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceUsersResult.scala b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceUsersResult.scala new file mode 100644 index 0000000000..6c068e8887 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/main/scala/com/webank/wedatasphere/dss/framework/workspace/client/response/GetWorkspaceUsersResult.scala @@ -0,0 +1,32 @@ +package com.webank.wedatasphere.dss.framework.workspace.client.response + +import com.webank.wedatasphere.dss.framework.workspace.client.entity.{DSSWorkspaceRole, DSSWorkspaceUser} +import org.apache.linkis.httpclient.dws.DWSHttpClient +import org.apache.linkis.httpclient.dws.annotation.DWSHttpMessageResult +import org.apache.linkis.httpclient.dws.response.DWSResult + +import java.util +import scala.beans.BeanProperty + +@DWSHttpMessageResult("/api/rest_j/v\\d+/dss/framework/workspace/getWorkspaceUsers") +class GetWorkspaceUsersResult extends DWSResult{ + @BeanProperty var roles:util.List[java.util.Map[String, Any]] = _ + @BeanProperty var workspaceUsers:util.List[java.util.Map[String, Any]] = _ + @BeanProperty var total:Long = _ + + def getWorkspaceRoleList:util.List[DSSWorkspaceRole]={ + import scala.collection.JavaConverters._ + roles.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DSSWorkspaceRole]) + }).asJava + } + + def getWorkspaceUserList:util.List[DSSWorkspaceUser]={ + import scala.collection.JavaConverters._ + workspaceUsers.asScala.map(x=>{ + val str = DWSHttpClient.jacksonJson.writeValueAsString(x) + DWSHttpClient.jacksonJson.readValue(str, classOf[DSSWorkspaceUser]) + }).asJava + } +} diff --git a/dss-framework/dss-framework-workspace-client/src/test/java/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClientTest.scala b/dss-framework/dss-framework-workspace-client/src/test/java/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClientTest.scala new file mode 100644 index 0000000000..76363881f7 --- /dev/null +++ b/dss-framework/dss-framework-workspace-client/src/test/java/com/webank/wedatasphere/dss/framework/workspace/client/WorkSpaceRemoteClientTest.scala @@ -0,0 +1,40 @@ +package com.webank.wedatasphere.dss.framework.workspace.client + +import com.webank.wedatasphere.dss.framework.workspace.client.impl.LinkisWorkSpaceRemoteClient +import com.webank.wedatasphere.dss.framework.workspace.client.request.{GetWorkspaceRolesAction, GetWorkspaceUsersAction} +import org.apache.linkis.httpclient.dws.authentication.StaticAuthenticationStrategy +import org.apache.linkis.httpclient.dws.config.DWSClientConfigBuilder + +import java.util.concurrent.TimeUnit + +object WorkSpaceRemoteClientTest { + def main(args: Array[String]): Unit = { + val clientConfig = DWSClientConfigBuilder.newBuilder() + .addServerUrl("http://localhost:8088") + .connectionTimeout(30000) + .discoveryEnabled(false) + .discoveryFrequency(1,TimeUnit.MINUTES) + .loadbalancerEnabled(true) + .maxConnectionSize(5) + .retryEnabled(false) + .readTimeout(30000) + .setAuthenticationStrategy(new StaticAuthenticationStrategy()) + .setAuthTokenKey("hdfs") + .setAuthTokenValue("hdfs") + .setDWSVersion("v1") + .build() + + val workSpaceRemoteClient = new LinkisWorkSpaceRemoteClient(clientConfig) + + val workspaceRoles = workSpaceRemoteClient.getWorkspaceRoles(GetWorkspaceRolesAction.builder().setUser("hdfs").setWorkspaceId("224").build()) + println(workspaceRoles.getWorkspaceRoleList) + + + val workspaceUsersResult = workSpaceRemoteClient.getWorkspaceUsers(GetWorkspaceUsersAction.builder().setUser("hdfs").setWorkspaceId("224").build()) + println(workspaceUsersResult.total) + println(workspaceUsersResult.getWorkspaceUserList) + println(workspaceUsersResult.getWorkspaceRoleList) + } + + +} diff --git a/dss-framework/dss-framework-workspace-server/pom.xml b/dss-framework/dss-framework-workspace-server/pom.xml index 18c3a4e425..a66a963d79 100644 --- a/dss-framework/dss-framework-workspace-server/pom.xml +++ b/dss-framework/dss-framework-workspace-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/framework-plugins/dss-framework-migrate-server/pom.xml b/dss-framework/framework-plugins/dss-framework-migrate-server/pom.xml index e1094bb93b..2ba05f94d3 100644 --- a/dss-framework/framework-plugins/dss-framework-migrate-server/pom.xml +++ b/dss-framework/framework-plugins/dss-framework-migrate-server/pom.xml @@ -5,7 +5,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/framework-plugins/dss-framework-orchestrator-publish/pom.xml b/dss-framework/framework-plugins/dss-framework-orchestrator-publish/pom.xml index b053d680c2..f3d2c06490 100644 --- a/dss-framework/framework-plugins/dss-framework-orchestrator-publish/pom.xml +++ b/dss-framework/framework-plugins/dss-framework-orchestrator-publish/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-framework/pom.xml b/dss-framework/pom.xml index fd44f4da9b..d119da9be0 100644 --- a/dss-framework/pom.xml +++ b/dss-framework/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 @@ -32,6 +32,7 @@ dss-framework-common dss-appconn-framework dss-framework-workspace-server + dss-framework-workspace-client framework-plugins/dss-framework-orchestrator-publish dss-framework-orchestrator-server dss-framework-project-server diff --git a/dss-orchestrator/dss-orchestrator-common/pom.xml b/dss-orchestrator/dss-orchestrator-common/pom.xml index 55c9175eec..1cf21569d8 100644 --- a/dss-orchestrator/dss-orchestrator-common/pom.xml +++ b/dss-orchestrator/dss-orchestrator-common/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/dss-orchestrator-conversion-standard/pom.xml b/dss-orchestrator/dss-orchestrator-conversion-standard/pom.xml index 8892111099..f813915202 100644 --- a/dss-orchestrator/dss-orchestrator-conversion-standard/pom.xml +++ b/dss-orchestrator/dss-orchestrator-conversion-standard/pom.xml @@ -21,7 +21,7 @@ dss-orchestrator com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/dss-orchestrator-core/pom.xml b/dss-orchestrator/dss-orchestrator-core/pom.xml index 2459cbeafa..309aaceb02 100644 --- a/dss-orchestrator/dss-orchestrator-core/pom.xml +++ b/dss-orchestrator/dss-orchestrator-core/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/dss-orchestrator-db/pom.xml b/dss-orchestrator/dss-orchestrator-db/pom.xml index 087bd71102..f9349db66b 100644 --- a/dss-orchestrator/dss-orchestrator-db/pom.xml +++ b/dss-orchestrator/dss-orchestrator-db/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/dss-orchestrator-loader/pom.xml b/dss-orchestrator/dss-orchestrator-loader/pom.xml index 92289f1507..d6658e5095 100644 --- a/dss-orchestrator/dss-orchestrator-loader/pom.xml +++ b/dss-orchestrator/dss-orchestrator-loader/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-server/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-server/pom.xml index 8e219d9802..7e790fd9c3 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-server/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-flow-execution-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/pom.xml index 9dfc41992e..0fd50d9225 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/pom.xml @@ -23,7 +23,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 dss-linkis-node-execution diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl/LinkisNodeExecutionImpl.java b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl/LinkisNodeExecutionImpl.java index 9615f5c112..93d978dcb0 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl/LinkisNodeExecutionImpl.java +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/execution/impl/LinkisNodeExecutionImpl.java @@ -29,6 +29,7 @@ import com.webank.wedatasphere.dss.linkis.node.execution.service.impl.BuildJobActionImpl; import com.webank.wedatasphere.dss.linkis.node.execution.utils.LinkisJobExecutionUtils; import com.webank.wedatasphere.dss.linkis.node.execution.utils.LinkisUjesClientUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.linkis.common.exception.LinkisException; import org.apache.linkis.common.utils.Utils; import org.apache.linkis.ujes.client.UJESClient; @@ -39,7 +40,6 @@ import org.apache.linkis.ujes.client.response.JobInfoResult; import org.apache.linkis.ujes.client.response.JobLogResult; import org.apache.linkis.ujes.client.response.OpenLogResult; -import org.apache.commons.lang.StringUtils; import scala.tools.nsc.settings.Final; import java.text.MessageFormat; @@ -49,7 +49,6 @@ import java.util.List; import java.util.Map; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; public class LinkisNodeExecutionImpl implements LinkisNodeExecution , LinkisExecutionListener { diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/job/Builder.java b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/job/Builder.java index 384c2bf685..e6a224a7a8 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/job/Builder.java +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/job/Builder.java @@ -23,7 +23,7 @@ import com.webank.wedatasphere.dss.linkis.node.execution.utils.LinkisJobExecutionUtils; import com.webank.wedatasphere.dss.linkis.node.execution.utils.LinkisUjesClientUtils; import org.apache.commons.io.IOUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.linkis.common.utils.JsonUtils; import org.apache.linkis.httpclient.dws.DWSHttpClient; import org.apache.linkis.httpclient.dws.config.DWSClientConfig; diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/parser/CodeParser.java b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/parser/CodeParser.java index cecc1cf17d..78a4bca414 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/parser/CodeParser.java +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/parser/CodeParser.java @@ -35,7 +35,7 @@ import java.util.Optional; import java.util.regex.Matcher; import java.util.regex.Pattern; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; public class CodeParser implements JobParser { diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/service/impl/BuildJobActionImpl.java b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/service/impl/BuildJobActionImpl.java index 956d03d0ff..3692ad228d 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/service/impl/BuildJobActionImpl.java +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/service/impl/BuildJobActionImpl.java @@ -22,8 +22,8 @@ import com.webank.wedatasphere.dss.linkis.node.execution.job.Job; import com.webank.wedatasphere.dss.linkis.node.execution.job.LinkisJob; import com.webank.wedatasphere.dss.linkis.node.execution.service.BuildJobAction; -import org.apache.commons.lang.SerializationUtils; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.SerializationUtils; +import org.apache.commons.lang3.StringUtils; import org.apache.linkis.manager.label.constant.LabelKeyConstant; import org.apache.linkis.manager.label.entity.engine.EngineTypeLabel; import org.apache.linkis.manager.label.utils.EngineTypeLabelCreator; diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/utils/LinkisJobExecutionUtils.java b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/utils/LinkisJobExecutionUtils.java index e91264b720..4af58571ae 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/utils/LinkisJobExecutionUtils.java +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-linkis-node-execution/src/main/java/com/webank/wedatasphere/dss/linkis/node/execution/utils/LinkisJobExecutionUtils.java @@ -21,7 +21,7 @@ import com.google.gson.reflect.TypeToken; import com.webank.wedatasphere.dss.linkis.node.execution.conf.LinkisJobExecutionConfiguration; import com.webank.wedatasphere.dss.linkis.node.execution.entity.BMLResource; -import org.apache.commons.lang.StringUtils; +import org.apache.commons.lang3.StringUtils; import java.util.*; diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-common/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-common/pom.xml index 022bba31dc..3d36734366 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-common/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-common/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-conversion-standard/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-conversion-standard/pom.xml index 6cac24c2e5..f26cfbf21e 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-conversion-standard/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-conversion-standard/pom.xml @@ -21,7 +21,7 @@ dss-workflow com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-sdk/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-sdk/pom.xml index 3e532bfc78..b2a99f8029 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-sdk/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-sdk/pom.xml @@ -21,7 +21,7 @@ dss-workflow com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-server/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-server/pom.xml index a95fd26c09..c07cab804a 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-server/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/dss-workflow-server/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/orchestrators/dss-workflow/pom.xml b/dss-orchestrator/orchestrators/dss-workflow/pom.xml index b87dfdafbb..822d0c55f3 100644 --- a/dss-orchestrator/orchestrators/dss-workflow/pom.xml +++ b/dss-orchestrator/orchestrators/dss-workflow/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-orchestrator/pom.xml b/dss-orchestrator/pom.xml index 1d21be5ec2..372174ea3f 100644 --- a/dss-orchestrator/pom.xml +++ b/dss-orchestrator/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/dss-standard/development-standard/development-process-standard-execution/pom.xml b/dss-standard/development-standard/development-process-standard-execution/pom.xml index d55b235ab5..84f3362a15 100644 --- a/dss-standard/development-standard/development-process-standard-execution/pom.xml +++ b/dss-standard/development-standard/development-process-standard-execution/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/development-standard/development-process-standard/pom.xml b/dss-standard/development-standard/development-process-standard/pom.xml index a888755eb1..a9c17fcbf6 100644 --- a/dss-standard/development-standard/development-process-standard/pom.xml +++ b/dss-standard/development-standard/development-process-standard/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/dss-standard-common/pom.xml b/dss-standard/dss-standard-common/pom.xml index 097f36bf7b..97ac580137 100644 --- a/dss-standard/dss-standard-common/pom.xml +++ b/dss-standard/dss-standard-common/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../pom.xml 4.0.0 diff --git a/dss-standard/pom.xml b/dss-standard/pom.xml index 93f56fb61c..d9904a6be7 100644 --- a/dss-standard/pom.xml +++ b/dss-standard/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../pom.xml 4.0.0 diff --git a/dss-standard/sso-standard/origin-sso-integration-standard/pom.xml b/dss-standard/sso-standard/origin-sso-integration-standard/pom.xml index b96673340c..4b3499a43b 100644 --- a/dss-standard/sso-standard/origin-sso-integration-standard/pom.xml +++ b/dss-standard/sso-standard/origin-sso-integration-standard/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/sso-standard/spring-origin-sso-integration-plugin/pom.xml b/dss-standard/sso-standard/spring-origin-sso-integration-plugin/pom.xml index 45330b20cc..74d55af70f 100644 --- a/dss-standard/sso-standard/spring-origin-sso-integration-plugin/pom.xml +++ b/dss-standard/sso-standard/spring-origin-sso-integration-plugin/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/sso-standard/sso-integration-standard/pom.xml b/dss-standard/sso-standard/sso-integration-standard/pom.xml index ada37e4d17..7352c15301 100644 --- a/dss-standard/sso-standard/sso-integration-standard/pom.xml +++ b/dss-standard/sso-standard/sso-integration-standard/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/structure-standard/dss-project-plugin/pom.xml b/dss-standard/structure-standard/dss-project-plugin/pom.xml index 4981de5947..758910d37b 100644 --- a/dss-standard/structure-standard/dss-project-plugin/pom.xml +++ b/dss-standard/structure-standard/dss-project-plugin/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/structure-standard/dss-role-plugin/pom.xml b/dss-standard/structure-standard/dss-role-plugin/pom.xml index 3eafad7d53..d589ff9992 100644 --- a/dss-standard/structure-standard/dss-role-plugin/pom.xml +++ b/dss-standard/structure-standard/dss-role-plugin/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/structure-standard/dss-structure-integration-standard/pom.xml b/dss-standard/structure-standard/dss-structure-integration-standard/pom.xml index bb3a6e7f6c..e12d68e992 100644 --- a/dss-standard/structure-standard/dss-structure-integration-standard/pom.xml +++ b/dss-standard/structure-standard/dss-structure-integration-standard/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/dss-standard/structure-standard/spring-origin-dss-project-plugin/pom.xml b/dss-standard/structure-standard/spring-origin-dss-project-plugin/pom.xml index 6cca04af33..44a3738630 100644 --- a/dss-standard/structure-standard/spring-origin-dss-project-plugin/pom.xml +++ b/dss-standard/structure-standard/spring-origin-dss-project-plugin/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../../pom.xml 4.0.0 diff --git a/k8s/build.info b/k8s/build.info index 6d2222074d..bc8ca84000 100644 --- a/k8s/build.info +++ b/k8s/build.info @@ -4,5 +4,7 @@ dss-framework-orchestrator-server dss-framework-project-server dss-workflow-server dss-data-api-server -dss-data-governance-server dss-guide-server +dss-data-assets-server +dss-data-warehouse-server +dss-datamodel-center-server \ No newline at end of file diff --git a/k8s/dockerfile/dss-data-assets-server.Dockerfile b/k8s/dockerfile/dss-data-assets-server.Dockerfile new file mode 100644 index 0000000000..6d13e2d450 --- /dev/null +++ b/k8s/dockerfile/dss-data-assets-server.Dockerfile @@ -0,0 +1,9 @@ +FROM base:1.0.0 + +WORKDIR /opt/dss + +COPY lib/dss-commons /opt/dss/dss-commons/ +COPY lib/dss-dataasset-management/dss-data-assets-server /opt/dss/dss-data-assets-server/lib/ +COPY sbin/k8s/dss-data-assets-server.sh /opt/dss/dss-data-assets-server/bin/startup.sh + +ENTRYPOINT ["bash","dss-data-assets-server/bin/startup.sh"] \ No newline at end of file diff --git a/k8s/dockerfile/dss-data-governance-server.Dockerfile b/k8s/dockerfile/dss-data-governance-server.Dockerfile deleted file mode 100644 index 0c71449219..0000000000 --- a/k8s/dockerfile/dss-data-governance-server.Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -FROM base:1.0.0 - -WORKDIR /opt/dss - -COPY lib/dss-commons /opt/dss/dss-commons/ -COPY lib/dss-data-governance/dss-data-governance-server /opt/dss/dss-data-governance-server/lib/ -COPY sbin/k8s/dss-data-governance-server.sh /opt/dss/dss-data-governance-server/bin/startup.sh - -ENTRYPOINT ["bash","dss-data-governance-server/bin/startup.sh"] \ No newline at end of file diff --git a/k8s/dockerfile/dss-data-warehouse-server.Dockerfile b/k8s/dockerfile/dss-data-warehouse-server.Dockerfile new file mode 100644 index 0000000000..a7169375e0 --- /dev/null +++ b/k8s/dockerfile/dss-data-warehouse-server.Dockerfile @@ -0,0 +1,9 @@ +FROM base:1.0.0 + +WORKDIR /opt/dss + +COPY lib/dss-commons /opt/dss/dss-commons/ +COPY lib/dss-datawarehouse-design/dss-data-warehouse-server /opt/dss/dss-data-warehouse-server/lib/ +COPY sbin/k8s/dss-data-warehouse-server.sh /opt/dss/dss-data-warehouse-server/bin/startup.sh + +ENTRYPOINT ["bash","dss-data-warehouse-server/bin/startup.sh"] \ No newline at end of file diff --git a/k8s/dockerfile/dss-datamodel-center-server.Dockerfile b/k8s/dockerfile/dss-datamodel-center-server.Dockerfile new file mode 100644 index 0000000000..a7169375e0 --- /dev/null +++ b/k8s/dockerfile/dss-datamodel-center-server.Dockerfile @@ -0,0 +1,9 @@ +FROM base:1.0.0 + +WORKDIR /opt/dss + +COPY lib/dss-commons /opt/dss/dss-commons/ +COPY lib/dss-datawarehouse-design/dss-data-warehouse-server /opt/dss/dss-data-warehouse-server/lib/ +COPY sbin/k8s/dss-data-warehouse-server.sh /opt/dss/dss-data-warehouse-server/bin/startup.sh + +ENTRYPOINT ["bash","dss-data-warehouse-server/bin/startup.sh"] \ No newline at end of file diff --git a/plugins/azkaban/linkis-jobtype/pom.xml b/plugins/azkaban/linkis-jobtype/pom.xml index 692606e66f..2ef99796c6 100644 --- a/plugins/azkaban/linkis-jobtype/pom.xml +++ b/plugins/azkaban/linkis-jobtype/pom.xml @@ -22,7 +22,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 linkis-jobtype diff --git a/plugins/dolphinscheduler/dolphinscheduler-prod-metrics/pom.xml b/plugins/dolphinscheduler/dolphinscheduler-prod-metrics/pom.xml index 87dac1a4a4..385c9e33e9 100644 --- a/plugins/dolphinscheduler/dolphinscheduler-prod-metrics/pom.xml +++ b/plugins/dolphinscheduler/dolphinscheduler-prod-metrics/pom.xml @@ -22,7 +22,7 @@ dss-plugin-dolphinscheduler com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/plugins/dolphinscheduler/dss-dolphinscheduler-client/pom.xml b/plugins/dolphinscheduler/dss-dolphinscheduler-client/pom.xml index 26d0cd1d94..db68ec3086 100644 --- a/plugins/dolphinscheduler/dss-dolphinscheduler-client/pom.xml +++ b/plugins/dolphinscheduler/dss-dolphinscheduler-client/pom.xml @@ -22,7 +22,7 @@ dss-plugin-dolphinscheduler com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/DSSDolphinSchedulerClient.scala b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/DSSDolphinSchedulerClient.scala index becb1d3bb4..d17c047c08 100644 --- a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/DSSDolphinSchedulerClient.scala +++ b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/DSSDolphinSchedulerClient.scala @@ -9,7 +9,7 @@ import com.webank.wedatasphere.dss.linkis.node.execution.listener.LinkisExecutio import com.webank.wedatasphere.dss.linkis.node.execution.log.LinkisJobExecutionLog import com.webank.wedatasphere.dss.plugins.dolphinscheduler.linkis.client.conf.LinkisJobTypeConf import com.webank.wedatasphere.dss.plugins.dolphinscheduler.linkis.client.job.DolphinSchedulerJobBuilder -import org.apache.commons.lang.StringUtils +import org.apache.commons.lang3.StringUtils import org.apache.linkis.common.conf.CommonVars import org.apache.linkis.common.utils.{Logging, Utils} diff --git a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerAppConnLinkisJob.scala b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerAppConnLinkisJob.scala index 1ad4ac52e0..3f9a232713 100644 --- a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerAppConnLinkisJob.scala +++ b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerAppConnLinkisJob.scala @@ -4,7 +4,8 @@ import com.webank.wedatasphere.dss.linkis.node.execution.job.AbstractAppConnLink import com.webank.wedatasphere.dss.plugins.dolphinscheduler.linkis.client.conf.LinkisJobTypeConf class DolphinSchedulerAppConnLinkisJob extends AbstractAppConnLinkisJob { - override def getSubmitUser: String = if (getJobProps.get(LinkisJobTypeConf.FLOW_SUBMIT_USER).isEmpty) getJobProps.get(LinkisJobTypeConf.PROXY_USER) else getJobProps.get(LinkisJobTypeConf.FLOW_SUBMIT_USER) + override def getSubmitUser: String = if (getJobProps.get(LinkisJobTypeConf.FLOW_SUBMIT_USER) == null + || getJobProps.get(LinkisJobTypeConf.FLOW_SUBMIT_USER).isEmpty) getJobProps.get(LinkisJobTypeConf.PROXY_USER) else getJobProps.get(LinkisJobTypeConf.FLOW_SUBMIT_USER) override def getUser: String = getJobProps.get(LinkisJobTypeConf.PROXY_USER) diff --git a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerJobBuilder.scala b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerJobBuilder.scala index 89c2dd2d91..054b62dcaa 100644 --- a/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerJobBuilder.scala +++ b/plugins/dolphinscheduler/dss-dolphinscheduler-client/src/main/scala/com/webank/wedatasphere/dss/plugins/dolphinscheduler/linkis/client/job/DolphinSchedulerJobBuilder.scala @@ -8,7 +8,7 @@ import com.webank.wedatasphere.dss.linkis.node.execution.entity.BMLResource import com.webank.wedatasphere.dss.linkis.node.execution.job.{Builder, CommonLinkisJob, Job, LinkisJob} import com.webank.wedatasphere.dss.linkis.node.execution.utils.LinkisJobExecutionUtils import com.webank.wedatasphere.dss.plugins.dolphinscheduler.linkis.client.conf.LinkisJobTypeConf -import org.apache.commons.lang.StringUtils +import org.apache.commons.lang3.StringUtils import org.apache.linkis.common.utils.JsonUtils import scala.collection.JavaConverters._ diff --git a/plugins/dolphinscheduler/dss-dolphinscheduler-token/pom.xml b/plugins/dolphinscheduler/dss-dolphinscheduler-token/pom.xml index 338f5c8d38..d03727c848 100644 --- a/plugins/dolphinscheduler/dss-dolphinscheduler-token/pom.xml +++ b/plugins/dolphinscheduler/dss-dolphinscheduler-token/pom.xml @@ -22,7 +22,7 @@ dss-plugin-dolphinscheduler com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/plugins/dolphinscheduler/pom.xml b/plugins/dolphinscheduler/pom.xml index 8e763b3710..1c308145e2 100644 --- a/plugins/dolphinscheduler/pom.xml +++ b/plugins/dolphinscheduler/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 ../../pom.xml 4.0.0 diff --git a/plugins/linkis/dss-gateway-support/pom.xml b/plugins/linkis/dss-gateway-support/pom.xml index cbe8ccafa5..662cc701d2 100644 --- a/plugins/linkis/dss-gateway-support/pom.xml +++ b/plugins/linkis/dss-gateway-support/pom.xml @@ -21,7 +21,7 @@ dss com.webank.wedatasphere.dss - 1.1.0 + 1.2.0 4.0.0 diff --git a/pom.xml b/pom.xml index 7e828f04f2..e8007834cb 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ pom com.webank.wedatasphere.dss dss - 1.1.0 + 1.2.0 dss-commons @@ -34,6 +34,10 @@ dss-apps/dss-apiservice-server dss-apps/dss-scriptis-server dss-apps/dss-user-guide + dss-apps/dss-data-api + dss-apps/dss-dataasset-management + dss-apps/dss-datamodel-center + dss-apps/dss-datawarehouse-design plugins/azkaban/linkis-jobtype plugins/linkis/dss-gateway-support assembly @@ -41,8 +45,8 @@ - 1.1.0 - 1.1.1 + 1.2.0 + 1.2.0 2.11.12 1.8 3.3.3 diff --git a/sbin/common.sh b/sbin/common.sh index 1fde094935..131036c780 100644 --- a/sbin/common.sh +++ b/sbin/common.sh @@ -175,13 +175,17 @@ function setServerName(){ SERVER_NAME=dss-flow-execution-server elif [[ $PROJECT_NAME == *"data-api"* ]]; then SERVER_NAME=dss-data-api-server - elif [[ $PROJECT_NAME == *"governance"* ]]; then - SERVER_NAME=dss-data-governance-server + elif [[ $PROJECT_NAME == *"datamodel"* ]]; then + SERVER_NAME=dss-datamodel-center-server + elif [[ $PROJECT_NAME == *"data-warehouse"* ]]; then + SERVER_NAME=dss-data-warehouse-server + elif [[ $PROJECT_NAME == *"data-assets"* ]]; then + SERVER_NAME=dss-data-assets-server elif [[ $PROJECT_NAME == *"guide"* ]]; then SERVER_NAME=dss-guide-server else echo "please input: sh dss-daemon.sh [start,restart,stop] [server name]; for example : sh dss-daemon.sh restart project " - echo "server name : project、orchestrator、apiservice、scriptis、workflow、execution、data-api、governance、guide" + echo "server name : project、orchestrator、apiservice、scriptis、workflow、execution、data-api、guide、datamodel、data-warehouse、data-assets" exit 1 fi } diff --git a/sbin/dss-daemon.sh b/sbin/dss-daemon.sh index 6f60feed8c..e992b69836 100644 --- a/sbin/dss-daemon.sh +++ b/sbin/dss-daemon.sh @@ -53,4 +53,4 @@ case $COMMAND in print_usage exit 2 ;; -esac \ No newline at end of file +esac diff --git a/sbin/dss-start-all.sh b/sbin/dss-start-all.sh index dea17d6322..1ba74e02fb 100644 --- a/sbin/dss-start-all.sh +++ b/sbin/dss-start-all.sh @@ -123,8 +123,16 @@ function startDssProject(){ SERVER_IP=$DSS_DATA_API_SERVER_INSTALL_IP startApp - SERVER_NAME=dss-data-governance-server - SERVER_IP=$DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP + SERVER_NAME=dss-data-assets-server + SERVER_IP=$DSS_DATA_ASSETS_SERVER_INSTALL_IP + startApp + + SERVER_NAME=dss-datamodel-center-server + SERVER_IP=$DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP + startApp + + SERVER_NAME=dss-data-warehouse-server + SERVER_IP=$DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP startApp SERVER_NAME=dss-guide-server @@ -170,6 +178,18 @@ function checkDssService(){ SERVER_IP=$DSS_DATA_API_SERVER_INSTALL_IP checkServer + SERVER_NAME=dss-data-assets-server + SERVER_IP=$DSS_DATA_ASSETS_SERVER_INSTALL_IP + checkServer + + SERVER_NAME=dss-datamodel-center-server + SERVER_IP=$DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP + checkServer + + SERVER_NAME=dss-data-warehouse-server + SERVER_IP=$DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP + checkServer + SERVER_NAME=dss-guide-server SERVER_IP=$DSS_GUIDE_SERVER_INSTALL_IP checkServer @@ -178,4 +198,4 @@ function checkDssService(){ startDssProject -checkDssService \ No newline at end of file +checkDssService diff --git a/sbin/dss-stop-all.sh b/sbin/dss-stop-all.sh index 55c5c806bd..3e8d9bed6f 100644 --- a/sbin/dss-stop-all.sh +++ b/sbin/dss-stop-all.sh @@ -79,8 +79,16 @@ function stopDssProject(){ SERVER_IP=$DSS_DATA_API_SERVER_INSTALL_IP stopApp - SERVER_NAME=dss-data-governance-server - SERVER_IP=$DSS_DATA_GOVERNANCE_SERVER_INSTALL_IP + SERVER_NAME=dss-data-assets-server + SERVER_IP=$DSS_DATA_ASSETS_SERVER_INSTALL_IP + stopApp + + SERVER_NAME=dss-datamodel-center-server + SERVER_IP=$DSS_DATAMODEL_CENTER_SERVER_INSTALL_IP + stopApp + + SERVER_NAME=dss-data-warehouse-server + SERVER_IP=$DSS_DATA_WAREHOUSE_SERVER_INSTALL_IP stopApp SERVER_NAME=dss-guide-server @@ -88,4 +96,4 @@ function stopDssProject(){ stopApp } -stopDssProject \ No newline at end of file +stopDssProject diff --git a/sbin/ext/dss-data-api-server b/sbin/ext/dss-data-api-server index 4f9010b9bf..e6204486c6 100644 --- a/sbin/ext/dss-data-api-server +++ b/sbin/ext/dss-data-api-server @@ -56,7 +56,7 @@ if [ ! -r "$DSS_COMMONS_LIB" ] ; then fi ## server lib -export SERVER_LIB=$DSS_HOME/lib/dss-data-api/$SERVER_SUFFIX +export SERVER_LIB=$DSS_HOME/lib/dss-apps/$SERVER_SUFFIX if [ ! -r "$SERVER_LIB" ] ; then diff --git a/sbin/ext/dss-data-governance-server b/sbin/ext/dss-data-assets-server similarity index 92% rename from sbin/ext/dss-data-governance-server rename to sbin/ext/dss-data-assets-server index 8b259fe749..d0bf91b7ac 100644 --- a/sbin/ext/dss-data-governance-server +++ b/sbin/ext/dss-data-assets-server @@ -17,7 +17,7 @@ if [ "$DSS_CONF_DIR" = "" ]; then export DSS_CONF_DIR=$DSS_HOME/conf fi -SERVER_SUFFIX="dss-data-governance-server" +SERVER_SUFFIX="dss-data-assets-server" ## set log if [ "$DSS_LOG_DIR" = "" ]; then export DSS_LOG_DIR="$DSS_HOME/logs" @@ -43,7 +43,7 @@ then export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx$SERVER_HEAP_SIZE -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/$SERVER_SUFFIX.gc $DEBUG_CMD" fi -export SERVER_CLASS=com.webank.wedatasphere.dss.data.governance.DSSDataGovernanceApplication +export SERVER_CLASS=com.webank.wedatasphere.dss.data.governance.DataAssetsApplication ## conf dir export SERVER_CONF_PATH=$DSS_CONF_DIR:$DSS_CONF_DIR/$SERVER_SUFFIX @@ -58,7 +58,7 @@ if [ ! -r "$DSS_COMMONS_LIB" ] ; then fi ## server lib -export SERVER_LIB=$DSS_HOME/lib/dss-data-governance/$SERVER_SUFFIX +export SERVER_LIB=$DSS_HOME/lib/dss-apps/$SERVER_SUFFIX if [ ! -r "$SERVER_LIB" ] ; then diff --git a/sbin/ext/dss-data-warehouse-server b/sbin/ext/dss-data-warehouse-server new file mode 100644 index 0000000000..a07426faaf --- /dev/null +++ b/sbin/ext/dss-data-warehouse-server @@ -0,0 +1,85 @@ +#!/bin/bash +# +# description: ecm start cmd +# +# get log directory +cd `dirname $0` +cd .. +INSTALL_HOME=`pwd` + +# set DSS_HOME +if [ "$DSS_HOME" = "" ]; then + export DSS_HOME=$INSTALL_HOME +fi + +# set DSS_CONF_DIR +if [ "$DSS_CONF_DIR" = "" ]; then + export DSS_CONF_DIR=$DSS_HOME/conf +fi + +SERVER_SUFFIX="dss-data-warehouse-server" +## set log +if [ "$DSS_LOG_DIR" = "" ]; then + export DSS_LOG_DIR="$DSS_HOME/logs" +fi +export SERVER_LOG_PATH=$DSS_LOG_DIR +if [ ! -w "$SERVER_LOG_PATH" ] ; then + mkdir -p "$SERVER_LOG_PATH" +fi + +if test -z "$SERVER_HEAP_SIZE" +then + export SERVER_HEAP_SIZE="512M" +fi + +DEBUG_PORT= +if [ "$DEBUG_PORT" ]; +then + export DEBUG_CMD="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$DEBUG_PORT" +fi + +if test -z "$SERVER_JAVA_OPTS" +then + export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx$SERVER_HEAP_SIZE -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/$SERVER_SUFFIX.gc $DEBUG_CMD" +fi + +export SERVER_CLASS=com.webank.wedatasphere.warehouse.DataWarehouseApplication + +## conf dir +export SERVER_CONF_PATH=$DSS_CONF_DIR:$DSS_CONF_DIR/$SERVER_SUFFIX + +## commons lib +export DSS_COMMONS_LIB="$DSS_HOME/lib/dss-commons" + + +if [ ! -r "$DSS_COMMONS_LIB" ] ; then + echo "dss commons lib not exists $DSS_COMMONS_LIB" + exit 1 +fi + +## server lib +export SERVER_LIB=$DSS_HOME/lib/dss-apps/$SERVER_SUFFIX + + +if [ ! -r "$SERVER_LIB" ] ; then + echo "server lib not exists $SERVER_LIB" + exit 1 +fi + +export SERVER_PID=$DSS_HOME/pid/${SERVER_SUFFIX}.pid +## set class path +export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$DSS_COMMONS_LIB/*:$SERVER_LIB/* + +nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS 2>&1 > $SERVER_LOG_PATH/$SERVER_SUFFIX.out & +pid=$! + +sleep 2 +if [[ -z "${pid}" ]]; then + echo "server $SERVER_SUFFIX start failed!" + exit 1 +else + echo "server $SERVER_SUFFIX start succeeded!" + echo $pid > $SERVER_PID + sleep 1 +fi +exit 1 diff --git a/sbin/ext/dss-datamodel-center-server b/sbin/ext/dss-datamodel-center-server new file mode 100644 index 0000000000..baa48fdad2 --- /dev/null +++ b/sbin/ext/dss-datamodel-center-server @@ -0,0 +1,85 @@ +#!/bin/bash +# +# description: ecm start cmd +# +# get log directory +cd `dirname $0` +cd .. +INSTALL_HOME=`pwd` + +# set DSS_HOME +if [ "$DSS_HOME" = "" ]; then + export DSS_HOME=$INSTALL_HOME +fi + +# set DSS_CONF_DIR +if [ "$DSS_CONF_DIR" = "" ]; then + export DSS_CONF_DIR=$DSS_HOME/conf +fi + +SERVER_SUFFIX="dss-datamodel-center-server" +## set log +if [ "$DSS_LOG_DIR" = "" ]; then + export DSS_LOG_DIR="$DSS_HOME/logs" +fi +export SERVER_LOG_PATH=$DSS_LOG_DIR +if [ ! -w "$SERVER_LOG_PATH" ] ; then + mkdir -p "$SERVER_LOG_PATH" +fi + +if test -z "$SERVER_HEAP_SIZE" +then + export SERVER_HEAP_SIZE="512M" +fi + +DEBUG_PORT= +if [ "$DEBUG_PORT" ]; +then + export DEBUG_CMD="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=$DEBUG_PORT" +fi + +if test -z "$SERVER_JAVA_OPTS" +then + export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx$SERVER_HEAP_SIZE -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/$SERVER_SUFFIX.gc $DEBUG_CMD" +fi + +export SERVER_CLASS=com.webank.wedatasphere.dss.datamodel.DataModelApplication + +## conf dir +export SERVER_CONF_PATH=$DSS_CONF_DIR:$DSS_CONF_DIR/$SERVER_SUFFIX + +## commons lib +export DSS_COMMONS_LIB="$DSS_HOME/lib/dss-commons" + + +if [ ! -r "$DSS_COMMONS_LIB" ] ; then + echo "dss commons lib not exists $DSS_COMMONS_LIB" + exit 1 +fi + +## server lib +export SERVER_LIB=$DSS_HOME/lib/dss-apps/$SERVER_SUFFIX + + +if [ ! -r "$SERVER_LIB" ] ; then + echo "server lib not exists $SERVER_LIB" + exit 1 +fi + +export SERVER_PID=$DSS_HOME/pid/${SERVER_SUFFIX}.pid +## set class path +export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$DSS_COMMONS_LIB/*:$SERVER_LIB/* + +nohup java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS 2>&1 > $SERVER_LOG_PATH/$SERVER_SUFFIX.out & +pid=$! + +sleep 2 +if [[ -z "${pid}" ]]; then + echo "server $SERVER_SUFFIX start failed!" + exit 1 +else + echo "server $SERVER_SUFFIX start succeeded!" + echo $pid > $SERVER_PID + sleep 1 +fi +exit 1 diff --git a/sbin/k8s/dss-data-assets-server.sh b/sbin/k8s/dss-data-assets-server.sh new file mode 100644 index 0000000000..7e9beb56c9 --- /dev/null +++ b/sbin/k8s/dss-data-assets-server.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +SERVER_SUFFIX="dss-data-assets-server" + + +export SERVER_CONF_PATH=/opt/dss/$SERVER_SUFFIX/conf +export SERVER_LOG_PATH=/opt/dss/$SERVER_SUFFIX/logs + +if [ ! -w "$SERVER_LOG_PATH" ] ; then + mkdir -p "$SERVER_LOG_PATH" +fi + +export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx512M -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/linkis.log" + +export SERVER_CLASS=com.webank.wedatasphere.dss.data.governance.DataAssetsApplication + + +export DSS_COMMONS_LIB=/opt/dss/dss-commons + +export SERVER_LIB=/opt/dss/$SERVER_SUFFIX/lib + + +export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$DSS_COMMONS_LIB/*:$SERVER_LIB/* + +java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS \ No newline at end of file diff --git a/sbin/k8s/dss-data-governance-server.sh b/sbin/k8s/dss-data-warehouse-server.sh similarity index 79% rename from sbin/k8s/dss-data-governance-server.sh rename to sbin/k8s/dss-data-warehouse-server.sh index 76aca5370c..c23d290b51 100644 --- a/sbin/k8s/dss-data-governance-server.sh +++ b/sbin/k8s/dss-data-warehouse-server.sh @@ -1,6 +1,6 @@ #!/bin/bash -SERVER_SUFFIX="dss-data-governance-server" +SERVER_SUFFIX="dss-data-warehouse-server" export SERVER_CONF_PATH=/opt/dss/$SERVER_SUFFIX/conf @@ -12,7 +12,7 @@ fi export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx2048M -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/linkis.log" -export SERVER_CLASS=com.webank.wedatasphere.dss.data.governance.DSSDataGovernanceApplication +export SERVER_CLASS=com.webank.wedatasphere.warehouse.DataWarehouseApplication export DSS_COMMONS_LIB=/opt/dss/dss-commons diff --git a/sbin/k8s/dss-datamodel-center-server.sh b/sbin/k8s/dss-datamodel-center-server.sh new file mode 100644 index 0000000000..a0621cfff1 --- /dev/null +++ b/sbin/k8s/dss-datamodel-center-server.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +SERVER_SUFFIX="dss-datamodel-center-server" + + +export SERVER_CONF_PATH=/opt/dss/$SERVER_SUFFIX/conf +export SERVER_LOG_PATH=/opt/dss/$SERVER_SUFFIX/logs + +if [ ! -w "$SERVER_LOG_PATH" ] ; then + mkdir -p "$SERVER_LOG_PATH" +fi + +export SERVER_JAVA_OPTS="-DserviceName=$SERVER_SUFFIX -Xmx512M -XX:+UseG1GC -Xloggc:$SERVER_LOG_PATH/linkis.log" + +export SERVER_CLASS=com.webank.wedatasphere.dss.datamodel.DataModelApplication + + +export DSS_COMMONS_LIB=/opt/dss/dss-commons + +export SERVER_LIB=/opt/dss/$SERVER_SUFFIX/lib + + +export SERVER_CLASS_PATH=$SERVER_CONF_PATH:$DSS_COMMONS_LIB/*:$SERVER_LIB/* + +java $SERVER_JAVA_OPTS -cp $SERVER_CLASS_PATH $SERVER_CLASS \ No newline at end of file diff --git a/web/README-DEV.md b/web/README-DEV.md index 75d4c5b09e..05f0b3e8e0 100644 --- a/web/README-DEV.md +++ b/web/README-DEV.md @@ -1,4 +1,4 @@ -### 1.1.0版本说明 +### 1.2.0版本说明 - 前端工程管理方面达到目录结构清晰,方便维护及迭代开发 - 可选模块构建,产出不同用户的应用 diff --git a/web/config.json b/web/config.json index f5974b96f6..1ebe2e7f49 100644 --- a/web/config.json +++ b/web/config.json @@ -48,6 +48,30 @@ "zh-CN": "dataGovernance/i18n/zh.json" } }, + "dataAssetManage": { + "routes": "dataAssetManage/router", + "module": "dataAssetManage/module", + "i18n": { + "en": "dataAssetManage/i18n/en.json", + "zh-CN": "dataAssetManage/i18n/zh.json" + } + }, + "dataModelCenter": { + "routes": "dataModelCenter/router", + "module": "dataModelCenter/module", + "i18n": { + "en": "dataModelCenter/i18n/en.json", + "zh-CN": "dataModelCenter/i18n/zh.json" + } + }, + "dataWarehouseDesign": { + "routes": "dataWarehouseDesign/router", + "module": "dataWarehouseDesign/module", + "i18n": { + "en": "dataWarehouseDesign/i18n/en.json", + "zh-CN": "dataWarehouseDesign/i18n/zh.json" + } + }, "dolphinScheduler": { "routes": "dolphinScheduler/router", "module": "dolphinScheduler/module", @@ -58,14 +82,6 @@ } }, "exts": { - "dss-plugin-open": { - "module": "exts/open-source/index.js", - "i18n": { - "en": "exts/open-source/i18n/en.json", - "zh-CN": "exts/open-source/i18n/zh.json" - }, - "options": null - } }, "conf": { "app_name": "DataSphere Studio", diff --git a/web/package-lock.json b/web/package-lock.json index 1795531264..456505edd3 100644 --- a/web/package-lock.json +++ b/web/package-lock.json @@ -1,8 +1,27975 @@ { "name": "dataspherestudio", "version": "1.1.4", - "lockfileVersion": 1, + "lockfileVersion": 2, "requires": true, + "packages": { + "": { + "name": "dataspherestudio", + "version": "1.1.4", + "dependencies": { + "@antv/g6": "^4.5.3", + "@riophae/vue-treeselect": "0.4.0", + "axios": "0.21.1", + "babel-polyfill": "6.26.0", + "bootstrap": "^3.4.1", + "butterfly-dag": "4.1.23", + "clipboard": "^2.0.8", + "core-js": "2.6.11", + "d3": "3.5.17", + "dayjs": "1.10.7", + "dexie": "2.0.4", + "dt-sql-parser": "1.2.1", + "echarts": "^4.1.0", + "eslint": "6.8.0", + "eslint-plugin-vue": "6.2.2", + "highlight.js": "9.18.3", + "iview": "3.5.4", + "jquery": "3.6.0", + "jsencrypt": "^3.2.1", + "lodash": "4.17.20", + "mavon-editor": "2.10.4", + "md5": "2.3.0", + "moment": "2.29.1", + "moment-timezone": "^0.5.34", + "monaco-editor": "0.19.3", + "qs": "6.9.4", + "reconnecting-websocket": "4.4.0", + "sql-formatter": "2.3.3", + "svgo": "1.3.0", + "vue": "2.6.12", + "vue-i18n": "8.22.1", + "vue-router": "3.4.8", + "vuedraggable": "2.24.3", + "vuescroll": "4.16.1", + "webpack": "^4.46.0", + "worker-loader": "2.0.0" + }, + "devDependencies": { + "@kazupon/vue-i18n-loader": "0.4.1", + "@vue/cli-plugin-babel": "3.12.1", + "@vue/cli-plugin-eslint": "3.12.1", + "@vue/cli-service": "3.12.1", + "@vue/eslint-config-standard": "4.0.0", + "archiver": "3.1.1", + "babel-eslint": "10.1.0", + "copy-webpack-plugin": "4.6.0", + "csp-html-webpack-plugin": "4.0.0", + "filemanager-webpack-plugin": "2.0.5", + "husky": "1.3.1", + "lerna": "^4.0.0", + "less-loader": "6.1.0", + "lint-staged": "8.2.1", + "monaco-editor-webpack-plugin": "1.8.2", + "node-sass": "4.14.1", + "patch-package": "6.2.2", + "sass-loader": "7.3.1", + "speed-measure-webpack-plugin": "1.5.0", + "svg-sprite-loader": "5.0.0", + "vue-cli-plugin-mockjs": "0.1.3", + "vue-template-compiler": "2.6.12", + "webpack-virtual-modules": "0.3.2" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/@ampproject/remapping/-/remapping-2.1.2.tgz", + "integrity": "sha512-hoyByceqwKirw7w3Z7gnIIZC3Wx3J484Y3L/cMpXFbr7d9ZQj2mODrirNzcJa+SM3UlpWXYvKV4RlRpFXlWgXg==", + "dev": true, + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "dependencies": { + "tinycolor2": "^1.4.1" + } + }, + "node_modules/@antv/algorithm": { + "version": "0.1.24", + "resolved": "https://registry.npmmirror.com/@antv/algorithm/-/algorithm-0.1.24.tgz", + "integrity": "sha512-zAv/YNDKYrHHKJKCn6RBKoNo9/298/qY6J5SSGglIIUfwJXN6wyRyTmNPfmkE/9t6/7XK9PYvK/6esQnwFawwQ==", + "dependencies": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/dom-util": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@antv/dom-util/-/dom-util-2.0.4.tgz", + "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "dependencies": { + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/event-emitter": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz", + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + }, + "node_modules/@antv/g-base": { + "version": "0.5.11", + "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.11.tgz", + "integrity": "sha512-10Hkq7XksVCqxZZrPkd6HTU9tb/+2meCVEMy/edhS4I/sokhcgC9m3fQP5bE8rA3EVKwELE7MJHZ98BEpVFqvQ==", + "dependencies": { + "@antv/event-emitter": "^0.1.1", + "@antv/g-math": "^0.1.6", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.13", + "@types/d3-timer": "^2.0.0", + "d3-ease": "^1.0.5", + "d3-interpolate": "^1.3.2", + "d3-timer": "^1.0.9", + "detect-browser": "^5.1.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-base/node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-base/node_modules/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + }, + "node_modules/@antv/g-canvas": { + "version": "0.5.12", + "resolved": "https://registry.npmmirror.com/@antv/g-canvas/-/g-canvas-0.5.12.tgz", + "integrity": "sha512-iJ/muwwqCCNONVlPIzv/7OL5iLguaKRj2BxNMytUO3TWwamM+kHkiyYEOkS0dPn9h/hBsHYlLUluSVz2Fp6/bw==", + "dependencies": { + "@antv/g-base": "^0.5.3", + "@antv/g-math": "^0.1.6", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-canvas/node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-math": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/@antv/g-math/-/g-math-0.1.7.tgz", + "integrity": "sha512-xGyXaloD1ynfp7gS4VuV+MjSptZIwHvLHr8ekXJSFAeWPYLu84yOW2wOZHDdp1bzDAIuRv6xDBW58YGHrWsFcA==", + "dependencies": { + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0" + } + }, + "node_modules/@antv/g-svg": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-svg/-/g-svg-0.5.6.tgz", + "integrity": "sha512-Xve1EUGk4HMbl2nq4ozR4QLh6GyoZ8Xw/+9kHYI4B5P2lIUQU95MuRsaLFfW5NNpZDx85ZeH97tqEmC9L96E7A==", + "dependencies": { + "@antv/g-base": "^0.5.3", + "@antv/g-math": "^0.1.6", + "@antv/util": "~2.0.0", + "detect-browser": "^5.0.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g-webgpu": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu/-/g-webgpu-0.5.5.tgz", + "integrity": "sha512-TxtBniINFq1jFGEPo46xjJfrbJbUqkFd5wmsRs3tcg/7J7xoldOP1kEadpI3AJG9knMYdE92VpILw1VPd6DgzQ==", + "dependencies": { + "@antv/g-webgpu-core": "^0.5.5", + "@antv/g-webgpu-engine": "^0.5.5", + "@webgpu/types": "^0.0.31", + "gl-matrix": "^3.1.0", + "gl-vec2": "^1.3.0", + "hammerjs": "^2.0.8", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "polyline-miter-util": "^1.0.1", + "polyline-normals": "^2.0.2", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13" + } + }, + "node_modules/@antv/g-webgpu-core": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu-core/-/g-webgpu-core-0.5.6.tgz", + "integrity": "sha512-DPiH3GkAUiT0Q+LAKeImpI+IOQ/gP2w6HstYKivpFIpBPIvZ/9equM3icVrn1iDfDkZANVXQ1PppcO3xBv1ZTw==", + "dependencies": { + "eventemitter3": "^4.0.0", + "gl-matrix": "^3.1.0", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13" + } + }, + "node_modules/@antv/g-webgpu-engine": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu-engine/-/g-webgpu-engine-0.5.6.tgz", + "integrity": "sha512-D311qYUefdEFwLayutIHqucrAY3cAGH3BdnXS37nq+0nsglrHcNP0Ab1YTinn9RihLoY3yXFTLzrYkJHJbZXDg==", + "dependencies": { + "@antv/g-webgpu-core": "^0.5.6", + "@webgpu/glslang": "^0.0.15", + "@webgpu/types": "^0.0.31", + "gl-matrix": "^3.1.0", + "hammerjs": "^2.0.8", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13", + "regl": "^1.3.11" + } + }, + "node_modules/@antv/g6": { + "version": "4.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.6.15.tgz", + "integrity": "sha512-sbtVPZxGHBNnkLynd4GAQAheDDZ/xUdPAJxxLO7LiMmaZcyNlk0ApV5d8G8IdiBFvJ6+mhaF+kot3LMyvsEx+g==", + "dependencies": { + "@antv/g6-pc": "0.6.15" + } + }, + "node_modules/@antv/g6-core": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.6.15.tgz", + "integrity": "sha512-klE4bLcY9dcByl9J97tN2IBEJcXFroyEJRG55l99IXd7ujh+DGnPEmKMX1BdnCiDqLZ9GJybRG5g6DqX6e7BbQ==", + "dependencies": { + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-math": "^0.1.1", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "ml-matrix": "^6.5.0", + "tslib": "^2.1.0" + } + }, + "node_modules/@antv/g6-core/node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g6-element": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.6.15.tgz", + "integrity": "sha512-8bUSCRMQVK9bh64V+jZRKpLapPVlrLdzC429uodg5wk9l3hugcSdanX6LAuLmy0p5Y4lXSyF2UsmWdx8t1qfcg==", + "dependencies": { + "@antv/g-base": "^0.5.1", + "@antv/g6-core": "0.6.15", + "@antv/util": "~2.0.5" + } + }, + "node_modules/@antv/g6-pc": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.6.15.tgz", + "integrity": "sha512-BqfFD5XiLfRhBt0QygdynUidz4T6azg0GnAzYsEkuKkye7qvaLL46xtfp9+Lqw/aUkBsjXUcEeJjoIPrx0Ehig==", + "dependencies": { + "@ant-design/colors": "^4.0.5", + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-math": "^0.1.1", + "@antv/g-svg": "^0.5.1", + "@antv/g6-core": "0.6.15", + "@antv/g6-element": "0.6.15", + "@antv/g6-plugin": "0.6.15", + "@antv/hierarchy": "^0.6.7", + "@antv/layout": "^0.2.5", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "color": "^3.1.3", + "d3-force": "^2.0.1", + "dagre": "^0.8.5", + "insert-css": "^2.0.0", + "ml-matrix": "^6.5.0" + } + }, + "node_modules/@antv/g6-pc/node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/g6-plugin": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.6.15.tgz", + "integrity": "sha512-LaXYEzaW3qkcAdwRrrhRItbsRKmtN6Orb0UCTRYSw0W8UOO4p4w5Tk05I7TME/VzPfMn9bXB+rD4aZofFzBYoA==", + "dependencies": { + "@antv/dom-util": "^2.0.2", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-svg": "^0.5.2", + "@antv/g6-core": "0.6.15", + "@antv/g6-element": "0.6.15", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/scale": "^0.3.4", + "@antv/util": "^2.0.9", + "insert-css": "^2.0.0" + } + }, + "node_modules/@antv/g6-plugin/node_modules/@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/graphlib": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@antv/graphlib/-/graphlib-1.2.0.tgz", + "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + }, + "node_modules/@antv/hierarchy": { + "version": "0.6.8", + "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.8.tgz", + "integrity": "sha512-wVzUl+pxny5gyGJ2mkWx8IiEypX6bnMHgr/NILgbxY6shoy0Vf4FhZpI3CY8Ez7bQT6js8fMkB2NymPW7d7i8A==", + "dependencies": { + "@antv/util": "^2.0.7" + } + }, + "node_modules/@antv/layout": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.2.5.tgz", + "integrity": "sha512-YezISSc5wp88QLvytS2mm/3sFvJYTafIWEvjvp4DIIfIkt8fzZZSJHXJVky3VIqGwbkmD278lMWQQmQ8W1EWEA==", + "dependencies": { + "@antv/g-webgpu": "0.5.5", + "@antv/graphlib": "^1.0.0", + "d3-force": "^2.0.1", + "dagre-compound": "^0.0.11", + "ml-matrix": "^6.5.0" + } + }, + "node_modules/@antv/matrix-util": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.0.4.tgz", + "integrity": "sha512-BAPyu6dUliHcQ7fm9hZSGKqkwcjEDVLVAstlHULLvcMZvANHeLXgHEgV7JqcAV/GIhIz8aZChIlzM1ZboiXpYQ==", + "dependencies": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.3.0", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/path-util": { + "version": "2.0.15", + "resolved": "https://registry.npmmirror.com/@antv/path-util/-/path-util-2.0.15.tgz", + "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", + "dependencies": { + "@antv/matrix-util": "^3.0.4", + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "node_modules/@antv/scale": { + "version": "0.3.18", + "resolved": "https://registry.npmmirror.com/@antv/scale/-/scale-0.3.18.tgz", + "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "dependencies": { + "@antv/util": "~2.0.3", + "fecha": "~4.2.0", + "tslib": "^2.0.0" + } + }, + "node_modules/@antv/util": { + "version": "2.0.17", + "resolved": "https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz", + "integrity": "sha512-o6I9hi5CIUvLGDhth0RxNSFDRwXeywmt6ExR4+RmVAzIi48ps6HUy+svxOCayvrPBN37uE6TAc2KDofRo0nK9Q==", + "dependencies": { + "csstype": "^3.0.8", + "tslib": "^2.0.3" + } + }, + "node_modules/@babel/code-frame": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz", + "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", + "dependencies": { + "@babel/highlight": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/compat-data": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/compat-data/-/compat-data-7.17.7.tgz", + "integrity": "sha512-p8pdE6j0a29TNGebNm7NzYZWB3xVZJBZ7XGs42uAKzQo8VQ3F0By/cQCtUEABwIqw5zo6WA4NbmxsfzADzMKnQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/core/-/core-7.17.9.tgz", + "integrity": "sha512-5ug+SfZCpDAkVp9SFIZAzlW18rlzsOcJGaetCjkySnrXXDUw9AR8cDUm1iByTmdWM6yxX6/zycaV76w3YTF2gw==", + "dev": true, + "dependencies": { + "@ampproject/remapping": "^2.1.0", + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helpers": "^7.17.9", + "@babel/parser": "^7.17.9", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/core/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/core/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@babel/core/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/core/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/generator": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/generator/-/generator-7.17.9.tgz", + "integrity": "sha512-rAdDousTwxbIxbz5I7GEQ3lUip+xVCXooZNbsydCWs3xA7ZsYOv+CFRdzGxRX78BmQHu9B1Eso59AOZQOJDEdQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-annotate-as-pure": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.16.7.tgz", + "integrity": "sha512-s6t2w/IPQVTAET1HitoowRGXooX8mCgtuP5195wD/QJPV6wYjpujCGF7JuMODVX2ZAJOf1GT6DT9MHEZvLOFSw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.16.7.tgz", + "integrity": "sha512-C6FdbRaxYjwVu/geKW4ZeQ0Q31AftgRcdSnZ5/jsH6BzCJbtvXvhpfkbkThYSuutZA7nCXpPR6AD9zd1dprMkA==", + "dev": true, + "dependencies": { + "@babel/helper-explode-assignable-expression": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-compilation-targets": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.17.7.tgz", + "integrity": "sha512-UFzlz2jjd8kroj0hmCFV5zr+tQPi1dpC2cRsDV/3IEW8bJfCPrPpmcSN6ZS8RqIq4LXcmpipCQFPddyFA5Yc7w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-validator-option": "^7.16.7", + "browserslist": "^4.17.5", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-compilation-targets/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-create-class-features-plugin": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.17.9.tgz", + "integrity": "sha512-kUjip3gruz6AJKOq5i3nC6CoCEEF/oHH3cp6tOZhB+IyyyPyW0g1Gfsxn3mkk6S08pIA2y8GQh609v9G/5sHVQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-member-expression-to-functions": "^7.17.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-create-regexp-features-plugin": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.17.0.tgz", + "integrity": "sha512-awO2So99wG6KnlE+TPs6rn83gCz5WlEePJDTnLEqbchMVrBeAujURVphRdigsk094VhvZehFoNOihSlcBjwsXA==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "regexpu-core": "^5.0.1" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.1.tgz", + "integrity": "sha512-J9hGMpJQmtWmj46B3kBHmL38UhJGhYX7eqkcq+2gsstyYt341HmPeWspihX43yVRA0mS+8GGk2Gckc7bY/HCmA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "peerDependencies": { + "@babel/core": "^7.4.0-0" + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/helper-define-polyfill-provider/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/helper-environment-visitor": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.16.7.tgz", + "integrity": "sha512-SLLb0AAn6PkUeAfKJCCOl9e1R53pQlGAfc4y4XuMRZfqeMYLE0dM1LMhqbGAlGQY0lfw5/ohoYWAe9V1yibRag==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-explode-assignable-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.16.7.tgz", + "integrity": "sha512-KyUenhWMC8VrxzkGP0Jizjo4/Zx+1nNZhgocs+gLzyZyB8SHidhoq9KK/8Ato4anhwsivfkBLftky7gvzbZMtQ==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-function-name": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/helper-function-name/-/helper-function-name-7.17.9.tgz", + "integrity": "sha512-7cRisGlVtiVqZ0MW0/yFB4atgpGLWEHUVYnb448hZK4x+vih0YO5UoS11XIYtZYqHd0dIPMdUSv8q5K4LdMnIg==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-hoist-variables": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.16.7.tgz", + "integrity": "sha512-m04d/0Op34H5v7pbZw6pSKP7weA6lsMvfiIAMeIvkY/R4xQtBSMFEigu9QTZ2qB/9l22vsxtM8a+Q8CzD255fg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-member-expression-to-functions": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.17.7.tgz", + "integrity": "sha512-thxXgnQ8qQ11W2wVUObIqDL4p148VMxkt5T/qpN5k2fboRyzFGFmKsTGViquyM5QHKUy48OZoca8kw4ajaDPyw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-imports": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-imports/-/helper-module-imports-7.16.7.tgz", + "integrity": "sha512-LVtS6TqjJHFc+nYeITRo6VLXve70xmq7wPhWTqDJusJEgGmkAACWwMiTNrvfoQo6hEhFwAIixNkvB0jPXDL8Wg==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-module-transforms": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-module-transforms/-/helper-module-transforms-7.17.7.tgz", + "integrity": "sha512-VmZD99F3gNTYB7fJRDTi+u6l/zxY0BE6OIxPSU7a50s6ZUQkHwSDmV92FfM+oCG0pZRVojGYhkR8I0OGeCVREw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.3", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-optimise-call-expression": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.16.7.tgz", + "integrity": "sha512-EtgBhg7rd/JcnpZFXpBy0ze1YRfdm7BnBX4uKMBd3ixa3RGAE002JZB66FJyNH7g0F38U05pXmA5P8cBh7z+1w==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-plugin-utils": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.16.7.tgz", + "integrity": "sha512-Qg3Nk7ZxpgMrsox6HreY1ZNKdBq7K72tDSliA6dCl5f007jR4ne8iD5UzuNnCJH2xBf2BEEVGr+/OL6Gdp7RxA==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-remap-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.16.8.tgz", + "integrity": "sha512-fm0gH7Flb8H51LqJHy3HJ3wnE1+qtYR2A99K06ahwrawLdOFsCEWjZOrYricXJHoPSudNKxrMBUPEIPxiIIvBw==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-wrap-function": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-replace-supers": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-replace-supers/-/helper-replace-supers-7.16.7.tgz", + "integrity": "sha512-y9vsWilTNaVnVh6xiJfABzsNpgDPKev9HnAgz6Gb1p6UUwf9NepdlsV7VXGCftJM+jqD5f7JIEubcpLjZj5dBw==", + "dev": true, + "dependencies": { + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-member-expression-to-functions": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/traverse": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-simple-access": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-simple-access/-/helper-simple-access-7.17.7.tgz", + "integrity": "sha512-txyMCGroZ96i+Pxr3Je3lzEJjqwaRC9buMUgtomcrLe5Nd0+fk1h0LLA+ixUF5OW7AhHuQ7Es1WcQJZmZsz2XA==", + "dev": true, + "dependencies": { + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.16.0", + "resolved": "https://registry.npmmirror.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.16.0.tgz", + "integrity": "sha512-+il1gTy0oHwUsBQZyJvukbB4vPMdcYBrFHa0Uc4AizLxbq6BOYC51Rv4tWocX9BLBDLZ4kc6qUFpQ6HRgL+3zw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-split-export-declaration": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.16.7.tgz", + "integrity": "sha512-xbWoy/PFoxSWazIToT9Sif+jJTlrMcndIsaOKvTA6u7QEo7ilkRZpjew18/W3c7nm8fXdUDXh02VXTbZ0pGDNw==", + "dev": true, + "dependencies": { + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-validator-option": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/helper-validator-option/-/helper-validator-option-7.16.7.tgz", + "integrity": "sha512-TRtenOuRUVo9oIQGPC5G9DgK4743cdxvtOw0weQNpZXaS16SCBi5MNjZF8vba3ETURjZpTbVn7Vvcf2eAwFozQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helper-wrap-function": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/helper-wrap-function/-/helper-wrap-function-7.16.8.tgz", + "integrity": "sha512-8RpyRVIAW1RcDDGTA+GpPAwV22wXCfKOoM9bet6TLkGIFTkRQSkH1nMQ5Yet4MpoXe1ZwHPVtNasc2w0uZMqnw==", + "dev": true, + "dependencies": { + "@babel/helper-function-name": "^7.16.7", + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.16.8", + "@babel/types": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/helpers": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/helpers/-/helpers-7.17.9.tgz", + "integrity": "sha512-cPCt915ShDWUEzEp3+UNRktO2n6v49l5RSnG9M5pS24hA+2FAc5si+Pn1i4VVbQQ+jh+bIZhPFQOJOzbrOYY1Q==", + "dev": true, + "dependencies": { + "@babel/template": "^7.16.7", + "@babel/traverse": "^7.17.9", + "@babel/types": "^7.17.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/highlight": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.9.tgz", + "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/parser": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/parser/-/parser-7.17.9.tgz", + "integrity": "sha512-vqUSBLP8dQHFPdPi9bc5GK9vRkYHJ49fsZdtoJ8EQ8ibpwk5rPKfvNIwChB0KVXcIjcepEBBd2VHC5r9Gy8ueg==", + "dev": true, + "bin": { + "parser": "bin/babel-parser.js" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/plugin-proposal-async-generator-functions": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.16.8.tgz", + "integrity": "sha512-71YHIvMuiuqWJQkebWJtdhQTfd4Q4mF76q2IX37uZPkG9+olBxsX+rH1vkhFto4UeJZ9dPY2s+mDvhDm1u2BGQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8", + "@babel/plugin-syntax-async-generators": "^7.8.4" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-class-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.16.7.tgz", + "integrity": "sha512-IobU0Xme31ewjYOShSIqd/ZGM/r/cuOz2z0MDbNrhF5FW+ZVgi0f2lyeoj9KFPDOAqsYxmLWZte1WOwlvY9aww==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-decorators": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.17.9.tgz", + "integrity": "sha512-EfH2LZ/vPa2wuPwJ26j+kYRkaubf89UlwxKXtxqEm57HrgSEYDB8t4swFP+p8LcI9yiP9ZRJJjo/58hS6BnaDA==", + "dev": true, + "dependencies": { + "@babel/helper-create-class-features-plugin": "^7.17.9", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/plugin-syntax-decorators": "^7.17.0", + "charcodes": "^0.2.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-json-strings": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.16.7.tgz", + "integrity": "sha512-lNZ3EEggsGY78JavgbHsK9u5P3pQaW7k4axlgFLYkMd7UBsiNahCITShLjNQschPyjtO6dADrL24757IdhBrsQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-json-strings": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-object-rest-spread": { + "version": "7.17.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.17.3.tgz", + "integrity": "sha512-yuL5iQA/TbZn+RGAfxQXfi7CNLmKi1f8zInn4IgobuCWcAb7i+zj4TYzQ9l8cEzVyJ89PDGuqxK1xZpUDISesw==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.17.0", + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-optional-catch-binding": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.16.7.tgz", + "integrity": "sha512-eMOH/L4OvWSZAE1VkHbr1vckLG1WUcHGJSLqqQwl2GaUqG6QjddvrOaTUMNYiv77H5IKPMZ9U9P7EaHwvAShfA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-proposal-unicode-property-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.16.7.tgz", + "integrity": "sha512-QRK0YI/40VLhNVGIjRNAAQkEHws0cswSdFFjpFyt943YmJIU1da9uW63Iu6NFV6CxTZW5eTDCrwZUstBWgp/Rg==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-decorators": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.17.0.tgz", + "integrity": "sha512-qWe85yCXsvDEluNP0OyeQjH63DlhAR3W7K9BxxU1MvbDb48tgBG+Ao6IJJ6smPDrrVzSQZrbF6donpkFBMcs3A==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-jsx": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.16.7.tgz", + "integrity": "sha512-Esxmk7YjA8QysKeT3VhTXvF6y77f/a91SIs4pWb4H2eWGQkCKFgQaG6hdoEVZtGsrAcb2K5BW66XsOErD4WU3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmmirror.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.8.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-arrow-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.16.7.tgz", + "integrity": "sha512-9ffkFFMbvzTvv+7dTp/66xvZAWASuPD5Tl9LK3Z9vhOmANo6j94rik+5YMBt4CwHVMWLWpMsriIc2zsa3WW3xQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-async-to-generator": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.16.8.tgz", + "integrity": "sha512-MtmUmTJQHCnyJVrScNzNlofQJ3dLFuobYn3mwOTKHnSCMtbNsqvF71GQmJfFjdrXSsAA7iysFmYWw4bXZ20hOg==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-remap-async-to-generator": "^7.16.8" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoped-functions": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.16.7.tgz", + "integrity": "sha512-JUuzlzmF40Z9cXyytcbZEZKckgrQzChbQJw/5PuEHYeqzCsvebDx0K0jWnIIVcmmDOAVctCgnYs0pMcrYj2zJg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-block-scoping": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.16.7.tgz", + "integrity": "sha512-ObZev2nxVAYA4bhyusELdo9hb3H+A56bxH3FZMbEImZFiEDYVHXQSJ1hQKFlDnlt8G9bBrCZ5ZpURZUrV4G5qQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-classes": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.16.7.tgz", + "integrity": "sha512-WY7og38SFAGYRe64BrjKf8OrE6ulEHtr5jEYaZMwox9KebgqPi67Zqz8K53EKk1fFEJgm96r32rkKZ3qA2nCWQ==", + "dev": true, + "dependencies": { + "@babel/helper-annotate-as-pure": "^7.16.7", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-optimise-call-expression": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-computed-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.16.7.tgz", + "integrity": "sha512-gN72G9bcmenVILj//sv1zLNaPyYcOzUho2lIJBMh/iakJ9ygCo/hEF9cpGb61SCMEDxbbyBoVQxrt+bWKu5KGw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-destructuring": { + "version": "7.17.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.17.7.tgz", + "integrity": "sha512-XVh0r5yq9sLR4vZ6eVZe8FKfIcSgaTBxVBRSYokRj2qksf6QerYnTxz9/GTuKTH/n/HwLP7t6gtlybHetJ/6hQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-dotall-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.16.7.tgz", + "integrity": "sha512-Lyttaao2SjZF6Pf4vk1dVKv8YypMpomAbygW+mU5cYP3S5cWTfCJjG8xV6CFdzGFlfWK81IjL9viiTvpb6G7gQ==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-duplicate-keys": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.16.7.tgz", + "integrity": "sha512-03DvpbRfvWIXyK0/6QiR1KMTWeT6OcQ7tbhjrXyFS02kjuX/mu5Bvnh5SDSWHxyawit2g5aWhKwI86EE7GUnTw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-exponentiation-operator": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.16.7.tgz", + "integrity": "sha512-8UYLSlyLgRixQvlYH3J2ekXFHDFLQutdy7FfFAMm3CPZ6q9wHCwnUyiXpQCe3gVVnQlHc5nsuiEVziteRNTXEA==", + "dev": true, + "dependencies": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-for-of": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.16.7.tgz", + "integrity": "sha512-/QZm9W92Ptpw7sjI9Nx1mbcsWz33+l8kuMIQnDwgQBG5s3fAfQvkRjQ7NqXhtNcKOnPkdICmUHyCaWW06HCsqg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-function-name": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.16.7.tgz", + "integrity": "sha512-SU/C68YVwTRxqWj5kgsbKINakGag0KTgq9f2iZEXdStoAbOzLHEBRYzImmA6yFo8YZhJVflvXmIHUO7GWHmxxA==", + "dev": true, + "dependencies": { + "@babel/helper-compilation-targets": "^7.16.7", + "@babel/helper-function-name": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.16.7.tgz", + "integrity": "sha512-6tH8RTpTWI0s2sV6uq3e/C9wPo4PTqqZps4uF0kzQ9/xPLFQtipynvmT1g/dOfEJ+0EQsHhkQ/zyRId8J2b8zQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-amd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.16.7.tgz", + "integrity": "sha512-KaaEtgBL7FKYwjJ/teH63oAmE3lP34N3kshz8mm4VMAw7U3PxjVwwUmxEFksbgsNUaO3wId9R2AVQYSEGRa2+g==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-commonjs": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.17.9.tgz", + "integrity": "sha512-2TBFd/r2I6VlYn0YRTz2JdazS+FoUuQ2rIFHoAxtyP/0G3D82SBLaRq9rnUkpqlLg03Byfl/+M32mpxjO6KaPw==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-simple-access": "^7.17.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-systemjs": { + "version": "7.17.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.17.8.tgz", + "integrity": "sha512-39reIkMTUVagzgA5x88zDYXPCMT6lcaRKs1+S9K6NKBPErbgO/w/kP8GlNQTC87b412ZTlmNgr3k2JrWgHH+Bw==", + "dev": true, + "dependencies": { + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-module-transforms": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-validator-identifier": "^7.16.7", + "babel-plugin-dynamic-import-node": "^2.3.3" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-modules-umd": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.16.7.tgz", + "integrity": "sha512-EMh7uolsC8O4xhudF2F6wedbSHm1HHZ0C6aJ7K67zcDNidMzVcxWdGr+htW9n21klm+bOn+Rx4CBsAntZd3rEQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-transforms": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.16.8", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.16.8.tgz", + "integrity": "sha512-j3Jw+n5PvpmhRR+mrgIh04puSANCk/T/UA3m3P1MjJkhlK906+ApHhDIqBQDdOgL/r1UYpz4GNclTXxyZrYGSw==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0" + } + }, + "node_modules/@babel/plugin-transform-new-target": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.16.7.tgz", + "integrity": "sha512-xiLDzWNMfKoGOpc6t3U+etCE2yRnn3SM09BXqWPIZOBpL2gvVrBWUKnsJx0K/ADi5F5YC5f8APFfWrz25TdlGg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-object-super": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.16.7.tgz", + "integrity": "sha512-14J1feiQVWaGvRxj2WjyMuXS2jsBkgB3MdSN5HuC2G5nRspa5RK9COcs82Pwy5BuGcjb+fYaUj94mYcOj7rCvw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-replace-supers": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-parameters": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.16.7.tgz", + "integrity": "sha512-AT3MufQ7zZEhU2hwOA11axBnExW0Lszu4RL/tAlUJBuNoRak+wehQW8h6KcXOcgjY42fHtDxswuMhMjFEuv/aw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-regenerator": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.17.9.tgz", + "integrity": "sha512-Lc2TfbxR1HOyn/c6b4Y/b6NHoTb67n/IoWLxTu4kC7h4KQnWlhCq2S8Tx0t2SVvv5Uu87Hs+6JEJ5kt2tYGylQ==", + "dev": true, + "dependencies": { + "regenerator-transform": "^0.15.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.17.0.tgz", + "integrity": "sha512-fr7zPWnKXNc1xoHfrIU9mN/4XKX4VLZ45Q+oMhfsYIaHvg7mHgmhfOy/ckRWqDK7XF3QDigRpkh5DKq6+clE8A==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7", + "babel-plugin-polyfill-corejs2": "^0.3.0", + "babel-plugin-polyfill-corejs3": "^0.5.0", + "babel-plugin-polyfill-regenerator": "^0.3.0", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-runtime/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@babel/plugin-transform-shorthand-properties": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.16.7.tgz", + "integrity": "sha512-hah2+FEnoRoATdIb05IOXf+4GzXYTq75TVhIn1PewihbpyrNWUt2JbudKQOETWw6QpLe+AIUpJ5MVLYTQbeeUg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-spread": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.16.7.tgz", + "integrity": "sha512-+pjJpgAngb53L0iaA5gU/1MLXJIfXcYepLgXB3esVRf4fqmj8f2cxM3/FKaHsZms08hFQJkFccEWuIpm429TXg==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.16.0" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-sticky-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.16.7.tgz", + "integrity": "sha512-NJa0Bd/87QV5NZZzTuZG5BPJjLYadeSZ9fO6oOUoL4iQx+9EEuw/eEM92SrsT19Yc2jgB1u1hsjqDtH02c3Drw==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-template-literals": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.16.7.tgz", + "integrity": "sha512-VwbkDDUeenlIjmfNeDX/V0aWrQH2QiVyJtwymVQSzItFDTpxfyJh3EVaQiS0rIN/CqbLGr0VcGmuwyTdZtdIsA==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-typeof-symbol": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.16.7.tgz", + "integrity": "sha512-p2rOixCKRJzpg9JB4gjnG4gjWkWa89ZoYUnl9snJ1cWIcTH/hvxZqfO+WjG6T8DRBpctEol5jw1O5rA8gkCokQ==", + "dev": true, + "dependencies": { + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/plugin-transform-unicode-regex": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.16.7.tgz", + "integrity": "sha512-oC5tYYKw56HO75KZVLQ+R/Nl3Hro9kf8iG0hXoaHP7tjAyCpvqBiSNe6vGrZni1Z6MggmUOC6A7VP7AVmw225Q==", + "dev": true, + "dependencies": { + "@babel/helper-create-regexp-features-plugin": "^7.16.7", + "@babel/helper-plugin-utils": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/preset-env": { + "version": "7.3.4", + "resolved": "https://registry.npmmirror.com/@babel/preset-env/-/preset-env-7.3.4.tgz", + "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-async-generator-functions": "^7.2.0", + "@babel/plugin-proposal-json-strings": "^7.2.0", + "@babel/plugin-proposal-object-rest-spread": "^7.3.4", + "@babel/plugin-proposal-optional-catch-binding": "^7.2.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.2.0", + "@babel/plugin-syntax-async-generators": "^7.2.0", + "@babel/plugin-syntax-json-strings": "^7.2.0", + "@babel/plugin-syntax-object-rest-spread": "^7.2.0", + "@babel/plugin-syntax-optional-catch-binding": "^7.2.0", + "@babel/plugin-transform-arrow-functions": "^7.2.0", + "@babel/plugin-transform-async-to-generator": "^7.3.4", + "@babel/plugin-transform-block-scoped-functions": "^7.2.0", + "@babel/plugin-transform-block-scoping": "^7.3.4", + "@babel/plugin-transform-classes": "^7.3.4", + "@babel/plugin-transform-computed-properties": "^7.2.0", + "@babel/plugin-transform-destructuring": "^7.2.0", + "@babel/plugin-transform-dotall-regex": "^7.2.0", + "@babel/plugin-transform-duplicate-keys": "^7.2.0", + "@babel/plugin-transform-exponentiation-operator": "^7.2.0", + "@babel/plugin-transform-for-of": "^7.2.0", + "@babel/plugin-transform-function-name": "^7.2.0", + "@babel/plugin-transform-literals": "^7.2.0", + "@babel/plugin-transform-modules-amd": "^7.2.0", + "@babel/plugin-transform-modules-commonjs": "^7.2.0", + "@babel/plugin-transform-modules-systemjs": "^7.3.4", + "@babel/plugin-transform-modules-umd": "^7.2.0", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.3.0", + "@babel/plugin-transform-new-target": "^7.0.0", + "@babel/plugin-transform-object-super": "^7.2.0", + "@babel/plugin-transform-parameters": "^7.2.0", + "@babel/plugin-transform-regenerator": "^7.3.4", + "@babel/plugin-transform-shorthand-properties": "^7.2.0", + "@babel/plugin-transform-spread": "^7.2.0", + "@babel/plugin-transform-sticky-regex": "^7.2.0", + "@babel/plugin-transform-template-literals": "^7.2.0", + "@babel/plugin-transform-typeof-symbol": "^7.2.0", + "@babel/plugin-transform-unicode-regex": "^7.2.0", + "browserslist": "^4.3.4", + "invariant": "^2.2.2", + "js-levenshtein": "^1.1.3", + "semver": "^5.3.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz", + "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/runtime-corejs2": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/runtime-corejs2/-/runtime-corejs2-7.17.9.tgz", + "integrity": "sha512-+QThIsnjVY12uURTvmnW33risFZ7ulq6OWw0VJL08UwiYiWVp9PM63s+W1L2ppajYyKAYKb7afcGYSHzA0k04Q==", + "dev": true, + "dependencies": { + "core-js": "^2.6.5", + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/template": { + "version": "7.16.7", + "resolved": "https://registry.npmmirror.com/@babel/template/-/template-7.16.7.tgz", + "integrity": "sha512-I8j/x8kHUrbYRTUxXrrMbfCa7jxkE7tZre39x3kjr9hvI82cK1FfqLygotcWN5kdPGWcLdWMHpSBavse5tWw3w==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/parser": "^7.16.7", + "@babel/types": "^7.16.7" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse": { + "version": "7.17.9", + "resolved": "https://registry.npmmirror.com/@babel/traverse/-/traverse-7.17.9.tgz", + "integrity": "sha512-PQO8sDIJ8SIwipTPiR71kJQCKQYB5NGImbOviK8K+kg5xkNSYXLBupuX9QhatFowrsvo9Hj8WgArg3W7ijNAQw==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.16.7", + "@babel/generator": "^7.17.9", + "@babel/helper-environment-visitor": "^7.16.7", + "@babel/helper-function-name": "^7.17.9", + "@babel/helper-hoist-variables": "^7.16.7", + "@babel/helper-split-export-declaration": "^7.16.7", + "@babel/parser": "^7.17.9", + "@babel/types": "^7.17.0", + "debug": "^4.1.0", + "globals": "^11.1.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@babel/traverse/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@babel/traverse/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@babel/types": { + "version": "7.17.0", + "resolved": "https://registry.npmmirror.com/@babel/types/-/types-7.17.0.tgz", + "integrity": "sha512-TmKSNO4D5rzhL5bjWFcVHHLETzfQ/AmbKpKPOSjlP0WoHZ6L911fgoOKY4Alp/emzG4cHJdyN49zpgkbXFEHHw==", + "dev": true, + "dependencies": { + "@babel/helper-validator-identifier": "^7.16.7", + "to-fast-properties": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@gar/promisify": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@gar/promisify/-/promisify-1.1.3.tgz", + "integrity": "sha512-k2Ty1JcVojjJFwrg/ThKi2ujJ7XNLYaFGNB/bWT9wGR+oSMJHMa5w+CUq6p/pVrKeNNgA7pCqEcjSnHVoqJQFw==", + "dev": true + }, + "node_modules/@hapi/address": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "deprecated": "Moved to 'npm install @sideway/address'", + "dev": true + }, + "node_modules/@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/hoek": { + "version": "8.5.1", + "resolved": "https://registry.npmmirror.com/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true + }, + "node_modules/@hapi/joi": { + "version": "15.1.1", + "resolved": "https://registry.npmmirror.com/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", + "deprecated": "Switch to 'npm install joi'", + "dev": true, + "dependencies": { + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" + } + }, + "node_modules/@hapi/topo": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", + "deprecated": "This version has been deprecated and is no longer supported or maintained", + "dev": true, + "dependencies": { + "@hapi/hoek": "^8.3.0" + } + }, + "node_modules/@hutson/parse-repository-url": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/@hutson/parse-repository-url/-/parse-repository-url-3.0.2.tgz", + "integrity": "sha512-H9XAx3hc0BQHY6l+IFSWHDySypcXsvsuLhgYLUGywmJ5pswRVQJUHpOsobnLYp2ZUaUlKiKDrgWWhosOwAEM8Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@intervolga/optimize-cssnano-plugin": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/@intervolga/optimize-cssnano-plugin/-/optimize-cssnano-plugin-1.0.6.tgz", + "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", + "dev": true, + "dependencies": { + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/@jridgewell/resolve-uri/-/resolve-uri-3.0.6.tgz", + "integrity": "sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "resolved": "https://registry.npmmirror.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.11.tgz", + "integrity": "sha512-Fg32GrJo61m+VqYSdRSjRXMjQ06j8YIYfcTqndLYVAaHmroZHLJZCydsWBOTDqXS2v+mjxohBWEMfg97GXmYQg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmmirror.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@kazupon/vue-i18n-loader": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/@kazupon/vue-i18n-loader/-/vue-i18n-loader-0.4.1.tgz", + "integrity": "sha512-hVznmhnyoUKozGY7pwq/UtPL76UDzb+aiN2YksZZIzCY/MkEqih0MSyEmTGw7+HVWzJRPAlDyoRNR4tWKmkCRw==", + "deprecated": "WARNING: If you would like to use @kazupon/vue-i18n-loader that is released new features and bug fixes, you need to install @intlify/vue-i18n-loader.", + "dev": true, + "dependencies": { + "js-yaml": "^3.13.1", + "json5": "^2.1.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@kazupon/vue-i18n-loader/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/add": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/add/-/add-4.0.0.tgz", + "integrity": "sha512-cpmAH1iS3k8JBxNvnMqrGTTjbY/ZAiKa1ChJzFevMYY3eeqbvhsBKnBcxjRXtdrJ6bd3dCQM+ZtK+0i682Fhng==", + "dev": true, + "dependencies": { + "@lerna/bootstrap": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "npm-package-arg": "^8.1.0", + "p-map": "^4.0.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/add/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/add/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/add/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/add/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/bootstrap": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/bootstrap/-/bootstrap-4.0.0.tgz", + "integrity": "sha512-RkS7UbeM2vu+kJnHzxNRCLvoOP9yGNgkzRdy4UV2hNalD7EP41bLvRVOwRYQ7fhc2QcbhnKNdOBihYRL0LcKtw==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/has-npm-version": "4.0.0", + "@lerna/npm-install": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "get-port": "^5.1.1", + "multimatch": "^5.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1", + "read-package-tree": "^5.3.1", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/bootstrap/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/bootstrap/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/bootstrap/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/bootstrap/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/changed": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/changed/-/changed-4.0.0.tgz", + "integrity": "sha512-cD+KuPRp6qiPOD+BO6S6SN5cARspIaWSOqGBpGnYzLb4uWT8Vk4JzKyYtc8ym1DIwyoFXHosXt8+GDAgR8QrgQ==", + "dev": true, + "dependencies": { + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/check-working-tree": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/check-working-tree/-/check-working-tree-4.0.0.tgz", + "integrity": "sha512-/++bxM43jYJCshBiKP5cRlCTwSJdRSxVmcDAXM+1oUewlZJVSVlnks5eO0uLxokVFvLhHlC5kHMc7gbVFPHv6Q==", + "dev": true, + "dependencies": { + "@lerna/collect-uncommitted": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/validation-error": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/child-process": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/child-process/-/child-process-4.0.0.tgz", + "integrity": "sha512-XtCnmCT9eyVsUUHx6y/CTBYdV9g2Cr/VxyseTWBgfIur92/YKClfEtJTbOh94jRT62hlKLqSvux/UhxXVh613Q==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0", + "execa": "^5.0.0", + "strong-log-transformer": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/child-process/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/child-process/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lerna/child-process/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/child-process/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/child-process/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/child-process/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/child-process/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@lerna/child-process/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/child-process/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/child-process/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/child-process/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/clean": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/clean/-/clean-4.0.0.tgz", + "integrity": "sha512-uugG2iN9k45ITx2jtd8nEOoAtca8hNlDCUM0N3lFgU/b1mEQYAPRkqr1qs4FLRl/Y50ZJ41wUz1eazS+d/0osA==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/rimraf-dir": "4.0.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0", + "p-waterfall": "^2.1.1" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/clean/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/cli": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/cli/-/cli-4.0.0.tgz", + "integrity": "sha512-Neaw3GzFrwZiRZv2g7g6NwFjs3er1vhraIniEs0jjVLPMNC4eata0na3GfE5yibkM/9d3gZdmihhZdZ3EBdvYA==", + "dev": true, + "dependencies": { + "@lerna/global-options": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2", + "yargs": "^16.2.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/collect-uncommitted": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/collect-uncommitted/-/collect-uncommitted-4.0.0.tgz", + "integrity": "sha512-ufSTfHZzbx69YNj7KXQ3o66V4RC76ffOjwLX0q/ab//61bObJ41n03SiQEhSlmpP+gmFbTJ3/7pTe04AHX9m/g==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "chalk": "^4.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/collect-uncommitted/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/collect-uncommitted/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/collect-uncommitted/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lerna/collect-uncommitted/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/collect-uncommitted/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/collect-uncommitted/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/collect-updates": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/collect-updates/-/collect-updates-4.0.0.tgz", + "integrity": "sha512-bnNGpaj4zuxsEkyaCZLka9s7nMs58uZoxrRIPJ+nrmrZYp1V5rrd+7/NYTuunOhY2ug1sTBvTAxj3NZQ+JKnOw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/collect-updates/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/command/-/command-4.0.0.tgz", + "integrity": "sha512-LM9g3rt5FsPNFqIHUeRwWXLNHJ5NKzOwmVKZ8anSp4e1SPrv2HNc1V02/9QyDDZK/w+5POXH5lxZUI1CHaOK/A==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/project": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/write-log-file": "4.0.0", + "clone-deep": "^4.0.1", + "dedent": "^0.7.0", + "execa": "^5.0.0", + "is-ci": "^2.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/command/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/@lerna/command/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/command/node_modules/execa": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/execa/-/execa-5.1.1.tgz", + "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/command/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/command/node_modules/human-signals": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-2.1.0.tgz", + "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", + "dev": true, + "engines": { + "node": ">=10.17.0" + } + }, + "node_modules/@lerna/command/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/@lerna/command/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/command/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/command/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/command/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/conventional-commits": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/conventional-commits/-/conventional-commits-4.0.0.tgz", + "integrity": "sha512-CSUQRjJHFrH8eBn7+wegZLV3OrNc0Y1FehYfYGhjLE2SIfpCL4bmfu/ViYuHh9YjwHaA+4SX6d3hR+xkeseKmw==", + "dev": true, + "dependencies": { + "@lerna/validation-error": "4.0.0", + "conventional-changelog-angular": "^5.0.12", + "conventional-changelog-core": "^4.2.2", + "conventional-recommended-bump": "^6.1.0", + "fs-extra": "^9.1.0", + "get-stream": "^6.0.0", + "lodash.template": "^4.5.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/conventional-commits/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/create": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/create/-/create-4.0.0.tgz", + "integrity": "sha512-mVOB1niKByEUfxlbKTM1UNECWAjwUdiioIbRQZEeEabtjCL69r9rscIsjlGyhGWCfsdAG5wfq4t47nlDXdLLag==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "globby": "^11.0.2", + "init-package-json": "^2.0.2", + "npm-package-arg": "^8.1.0", + "p-reduce": "^2.1.0", + "pacote": "^11.2.6", + "pify": "^5.0.0", + "semver": "^7.3.4", + "slash": "^3.0.0", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0", + "whatwg-url": "^8.4.0", + "yargs-parser": "20.2.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/create-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/create-symlink/-/create-symlink-4.0.0.tgz", + "integrity": "sha512-I0phtKJJdafUiDwm7BBlEUOtogmu8+taxq6PtIrxZbllV9hWg59qkpuIsiFp+no7nfRVuaasNYHwNUhDAVQBig==", + "dev": true, + "dependencies": { + "cmd-shim": "^4.1.0", + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/create-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/create-symlink/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/create/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/create/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@lerna/create/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@lerna/create/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@lerna/create/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/create/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@lerna/create/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/create/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/create/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@lerna/create/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/create/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/create/node_modules/yargs-parser": { + "version": "20.2.4", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.4.tgz", + "integrity": "sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/describe-ref": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/describe-ref/-/describe-ref-4.0.0.tgz", + "integrity": "sha512-eTU5+xC4C5Gcgz+Ey4Qiw9nV2B4JJbMulsYJMW8QjGcGh8zudib7Sduj6urgZXUYNyhYpRs+teci9M2J8u+UvQ==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/diff/-/diff-4.0.0.tgz", + "integrity": "sha512-jYPKprQVg41+MUMxx6cwtqsNm0Yxx9GDEwdiPLwcUTFx+/qKCEwifKNJ1oGIPBxyEHX2PFCOjkK39lHoj2qiag==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/exec": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/exec/-/exec-4.0.0.tgz", + "integrity": "sha512-VGXtL/b/JfY84NB98VWZpIExfhLOzy0ozm/0XaS4a2SmkAJc5CeUfrhvHxxkxiTBLkU+iVQUyYEoAT0ulQ8PCw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/exec/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/filter-options": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/filter-options/-/filter-options-4.0.0.tgz", + "integrity": "sha512-vV2ANOeZhOqM0rzXnYcFFCJ/kBWy/3OA58irXih9AMTAlQLymWAK0akWybl++sUJ4HB9Hx12TOqaXbYS2NM5uw==", + "dev": true, + "dependencies": { + "@lerna/collect-updates": "4.0.0", + "@lerna/filter-packages": "4.0.0", + "dedent": "^0.7.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/filter-packages": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/filter-packages/-/filter-packages-4.0.0.tgz", + "integrity": "sha512-+4AJIkK7iIiOaqCiVTYJxh/I9qikk4XjNQLhE3kixaqgMuHl1NQ99qXRR0OZqAWB9mh8Z1HA9bM5K1HZLBTOqA==", + "dev": true, + "dependencies": { + "@lerna/validation-error": "4.0.0", + "multimatch": "^5.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/get-npm-exec-opts": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/get-npm-exec-opts/-/get-npm-exec-opts-4.0.0.tgz", + "integrity": "sha512-yvmkerU31CTWS2c7DvmAWmZVeclPBqI7gPVr5VATUKNWJ/zmVcU4PqbYoLu92I9Qc4gY1TuUplMNdNuZTSL7IQ==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/get-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/get-packed/-/get-packed-4.0.0.tgz", + "integrity": "sha512-rfWONRsEIGyPJTxFzC8ECb3ZbsDXJbfqWYyeeQQDrJRPnEJErlltRLPLgC2QWbxFgFPsoDLeQmFHJnf0iDfd8w==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/get-packed/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/get-packed/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/get-packed/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/get-packed/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/get-packed/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/get-packed/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/get-packed/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/get-packed/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/get-packed/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/get-packed/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/get-packed/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/github-client": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/github-client/-/github-client-4.0.0.tgz", + "integrity": "sha512-2jhsldZtTKXYUBnOm23Lb0Fx8G4qfSXF9y7UpyUgWUj+YZYd+cFxSuorwQIgk5P4XXrtVhsUesIsli+BYSThiw==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@octokit/plugin-enterprise-rest": "^6.0.1", + "@octokit/rest": "^18.1.0", + "git-url-parse": "^11.4.4", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/gitlab-client": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/gitlab-client/-/gitlab-client-4.0.0.tgz", + "integrity": "sha512-OMUpGSkeDWFf7BxGHlkbb35T7YHqVFCwBPSIR6wRsszY8PAzCYahtH3IaJzEJyUg6vmZsNl0FSr3pdA2skhxqA==", + "dev": true, + "dependencies": { + "node-fetch": "^2.6.1", + "npmlog": "^4.1.2", + "whatwg-url": "^8.4.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/global-options": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/global-options/-/global-options-4.0.0.tgz", + "integrity": "sha512-TRMR8afAHxuYBHK7F++Ogop2a82xQjoGna1dvPOY6ltj/pEx59pdgcJfYcynYqMkFIk8bhLJJN9/ndIfX29FTQ==", + "dev": true, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/has-npm-version": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/has-npm-version/-/has-npm-version-4.0.0.tgz", + "integrity": "sha512-LQ3U6XFH8ZmLCsvsgq1zNDqka0Xzjq5ibVN+igAI5ccRWNaUsE/OcmsyMr50xAtNQMYMzmpw5GVLAivT2/YzCg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/has-npm-version/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/has-npm-version/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/has-npm-version/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/import": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/import/-/import-4.0.0.tgz", + "integrity": "sha512-FaIhd+4aiBousKNqC7TX1Uhe97eNKf5/SC7c5WZANVWtC7aBWdmswwDt3usrzCNpj6/Wwr9EtEbYROzxKH8ffg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/validation-error": "4.0.0", + "dedent": "^0.7.0", + "fs-extra": "^9.1.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/import/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/import/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/import/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/info": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/info/-/info-4.0.0.tgz", + "integrity": "sha512-8Uboa12kaCSZEn4XRfPz5KU9XXoexSPS4oeYGj76s2UQb1O1GdnEyfjyNWoUl1KlJ2i/8nxUskpXIftoFYH0/Q==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/output": "4.0.0", + "envinfo": "^7.7.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/init": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/init/-/init-4.0.0.tgz", + "integrity": "sha512-wY6kygop0BCXupzWj5eLvTUqdR7vIAm0OgyV9WHpMYQGfs1V22jhztt8mtjCloD/O0nEe4tJhdG62XU5aYmPNQ==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/command": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/init/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/init/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/init/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/init/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/link": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/link/-/link-4.0.0.tgz", + "integrity": "sha512-KlvPi7XTAcVOByfaLlOeYOfkkDcd+bejpHMCd1KcArcFTwijOwXOVi24DYomIeHvy6HsX/IUquJ4PPUJIeB4+w==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/package-graph": "4.0.0", + "@lerna/symlink-dependencies": "4.0.0", + "p-map": "^4.0.0", + "slash": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/link/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/link/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/list": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/list/-/list-4.0.0.tgz", + "integrity": "sha512-L2B5m3P+U4Bif5PultR4TI+KtW+SArwq1i75QZ78mRYxPc0U/piau1DbLOmwrdqr99wzM49t0Dlvl6twd7GHFg==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/listable": "4.0.0", + "@lerna/output": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/listable": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/listable/-/listable-4.0.0.tgz", + "integrity": "sha512-/rPOSDKsOHs5/PBLINZOkRIX1joOXUXEtyUs5DHLM8q6/RP668x/1lFhw6Dx7/U+L0+tbkpGtZ1Yt0LewCLgeQ==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "4.0.0", + "chalk": "^4.1.0", + "columnify": "^1.5.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/listable/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/listable/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/listable/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lerna/listable/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/listable/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/listable/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/log-packed": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/log-packed/-/log-packed-4.0.0.tgz", + "integrity": "sha512-+dpCiWbdzgMAtpajLToy9PO713IHoE6GV/aizXycAyA07QlqnkpaBNZ8DW84gHdM1j79TWockGJo9PybVhrrZQ==", + "dev": true, + "dependencies": { + "byte-size": "^7.0.0", + "columnify": "^1.5.4", + "has-unicode": "^2.0.1", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-conf": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/npm-conf/-/npm-conf-4.0.0.tgz", + "integrity": "sha512-uS7H02yQNq3oejgjxAxqq/jhwGEE0W0ntr8vM3EfpCW1F/wZruwQw+7bleJQ9vUBjmdXST//tk8mXzr5+JXCfw==", + "dev": true, + "dependencies": { + "config-chain": "^1.1.12", + "pify": "^5.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-conf/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/npm-dist-tag/-/npm-dist-tag-4.0.0.tgz", + "integrity": "sha512-F20sg28FMYTgXqEQihgoqSfwmq+Id3zT23CnOwD+XQMPSy9IzyLf1fFVH319vXIw6NF6Pgs4JZN2Qty6/CQXGw==", + "dev": true, + "dependencies": { + "@lerna/otplease": "4.0.0", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@lerna/npm-dist-tag/node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/npm-dist-tag/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/npm-install": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/npm-install/-/npm-install-4.0.0.tgz", + "integrity": "sha512-aKNxq2j3bCH3eXl3Fmu4D54s/YLL9WSwV8W7X2O25r98wzrO38AUN6AB9EtmAx+LV/SP15et7Yueg9vSaanRWg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "fs-extra": "^9.1.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "signal-exit": "^3.0.3", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-install/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-install/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/npm-install/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/npm-publish": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/npm-publish/-/npm-publish-4.0.0.tgz", + "integrity": "sha512-vQb7yAPRo5G5r77DRjHITc9piR9gvEKWrmfCH7wkfBnGWEqu7n8/4bFQ7lhnkujvc8RXOsYpvbMQkNfkYibD/w==", + "dev": true, + "dependencies": { + "@lerna/otplease": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmpublish": "^4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "pify": "^5.0.0", + "read-package-json": "^3.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/npm-publish/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/pify": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-5.0.0.tgz", + "integrity": "sha512-eW/gHNMlxdSP6dmG6uJip6FXN0EQBwm2clYYd8Wul42Cwu/DK8HEftzsapcNdYe2MfLiIwZqsDk2RDEsTE79hA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/read-package-json": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/read-package-json/-/read-package-json-3.0.1.tgz", + "integrity": "sha512-aLcPqxovhJTVJcsnROuuzQvv6oziQx4zd3JvG0vGCL5MjTONUc4uJ90zCBC6R7W7oUKBNoR/F8pkyfVwlbxqng==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/npm-publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/npm-publish/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/npm-run-script": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/npm-run-script/-/npm-run-script-4.0.0.tgz", + "integrity": "sha512-Jmyh9/IwXJjOXqKfIgtxi0bxi1pUeKe5bD3S81tkcy+kyng/GNj9WSqD5ZggoNP2NP//s4CLDAtUYLdP7CU9rA==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "@lerna/get-npm-exec-opts": "4.0.0", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/otplease": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/otplease/-/otplease-4.0.0.tgz", + "integrity": "sha512-Sgzbqdk1GH4psNiT6hk+BhjOfIr/5KhGBk86CEfHNJTk9BK4aZYyJD4lpDbDdMjIV4g03G7pYoqHzH765T4fxw==", + "dev": true, + "dependencies": { + "@lerna/prompt": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/output": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/output/-/output-4.0.0.tgz", + "integrity": "sha512-Un1sHtO1AD7buDQrpnaYTi2EG6sLF+KOPEAMxeUYG5qG3khTs2Zgzq5WE3dt2N/bKh7naESt20JjIW6tBELP0w==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/pack-directory": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/pack-directory/-/pack-directory-4.0.0.tgz", + "integrity": "sha512-NJrmZNmBHS+5aM+T8N6FVbaKFScVqKlQFJNY2k7nsJ/uklNKsLLl6VhTQBPwMTbf6Tf7l6bcKzpy7aePuq9UiQ==", + "dev": true, + "dependencies": { + "@lerna/get-packed": "4.0.0", + "@lerna/package": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "npm-packlist": "^2.1.4", + "npmlog": "^4.1.2", + "tar": "^6.1.0", + "temp-write": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/pack-directory/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/pack-directory/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/pack-directory/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/pack-directory/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/pack-directory/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/pack-directory/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/pack-directory/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/package": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/package/-/package-4.0.0.tgz", + "integrity": "sha512-l0M/izok6FlyyitxiQKr+gZLVFnvxRQdNhzmQ6nRnN9dvBJWn+IxxpM+cLqGACatTnyo9LDzNTOj2Db3+s0s8Q==", + "dev": true, + "dependencies": { + "load-json-file": "^6.2.0", + "npm-package-arg": "^8.1.0", + "write-pkg": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/package-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/package-graph/-/package-graph-4.0.0.tgz", + "integrity": "sha512-QED2ZCTkfXMKFoTGoccwUzjHtZMSf3UKX14A4/kYyBms9xfFsesCZ6SLI5YeySEgcul8iuIWfQFZqRw+Qrjraw==", + "dev": true, + "dependencies": { + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/validation-error": "4.0.0", + "npm-package-arg": "^8.1.0", + "npmlog": "^4.1.2", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/package-graph/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/package-graph/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/package-graph/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/prerelease-id-from-version": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/prerelease-id-from-version/-/prerelease-id-from-version-4.0.0.tgz", + "integrity": "sha512-GQqguzETdsYRxOSmdFZ6zDBXDErIETWOqomLERRY54f4p+tk4aJjoVdd9xKwehC9TBfIFvlRbL1V9uQGHh1opg==", + "dev": true, + "dependencies": { + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/prerelease-id-from-version/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/prerelease-id-from-version/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/prerelease-id-from-version/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/profiler": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/profiler/-/profiler-4.0.0.tgz", + "integrity": "sha512-/BaEbqnVh1LgW/+qz8wCuI+obzi5/vRE8nlhjPzdEzdmWmZXuCKyWSEzAyHOJWw1ntwMiww5dZHhFQABuoFz9Q==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "upath": "^2.0.1" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/profiler/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/profiler/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/profiler/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/profiler/node_modules/upath": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/upath/-/upath-2.0.1.tgz", + "integrity": "sha512-1uEe95xksV1O0CYKXo8vQvN1JEbtJp7lb7C5U9HMsIp6IVwntkH/oNUzyVNQSd4S1sYk2FpSSW44FqMc8qee5w==", + "dev": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/@lerna/project": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/project/-/project-4.0.0.tgz", + "integrity": "sha512-o0MlVbDkD5qRPkFKlBZsXZjoNTWPyuL58564nSfZJ6JYNmgAptnWPB2dQlAc7HWRZkmnC2fCkEdoU+jioPavbg==", + "dev": true, + "dependencies": { + "@lerna/package": "4.0.0", + "@lerna/validation-error": "4.0.0", + "cosmiconfig": "^7.0.0", + "dedent": "^0.7.0", + "dot-prop": "^6.0.1", + "glob-parent": "^5.1.1", + "globby": "^11.0.2", + "load-json-file": "^6.2.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "resolve-from": "^5.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/project/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/project/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/cosmiconfig": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-7.0.1.tgz", + "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", + "dev": true, + "dependencies": { + "@types/parse-json": "^4.0.0", + "import-fresh": "^3.2.1", + "parse-json": "^5.0.0", + "path-type": "^4.0.0", + "yaml": "^1.10.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/project/node_modules/dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "dependencies": { + "path-type": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/dot-prop": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-6.0.1.tgz", + "integrity": "sha512-tE7ztYzXHIeyvc7N+hR3oi7FIbf/NIjVP9hmAt3yMXzrQ072/fpjGLx2GxNxGxUl5V73MEqYzioOMoVhGMJ5cA==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/project/node_modules/fast-glob": { + "version": "3.2.11", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-3.2.11.tgz", + "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/@lerna/project/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "dev": true, + "dependencies": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.2.9", + "ignore": "^5.2.0", + "merge2": "^1.4.1", + "slash": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/project/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/@lerna/project/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/project/node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@lerna/project/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/@lerna/project/node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dev": true, + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/@lerna/project/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/project/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/project/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/@lerna/prompt": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/prompt/-/prompt-4.0.0.tgz", + "integrity": "sha512-4Ig46oCH1TH5M7YyTt53fT6TuaKMgqUUaqdgxvp6HP6jtdak6+amcsqB8YGz2eQnw/sdxunx84DfI9XpoLj4bQ==", + "dev": true, + "dependencies": { + "inquirer": "^7.3.3", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/prompt/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dev": true, + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/prompt/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", + "dev": true + }, + "node_modules/@lerna/prompt/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dev": true, + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "dev": true, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/prompt/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lerna/prompt/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/prompt/node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dev": true, + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@lerna/prompt/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dev": true, + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@lerna/prompt/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/prompt/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", + "dev": true + }, + "node_modules/@lerna/prompt/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@lerna/prompt/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dev": true, + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/prompt/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/publish/-/publish-4.0.0.tgz", + "integrity": "sha512-K8jpqjHrChH22qtkytA5GRKIVFEtqBF6JWj1I8dWZtHs4Jywn8yB1jQ3BAMLhqmDJjWJtRck0KXhQQKzDK2UPg==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/describe-ref": "4.0.0", + "@lerna/log-packed": "4.0.0", + "@lerna/npm-conf": "4.0.0", + "@lerna/npm-dist-tag": "4.0.0", + "@lerna/npm-publish": "4.0.0", + "@lerna/otplease": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/pack-directory": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/pulse-till-done": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "@lerna/version": "4.0.0", + "fs-extra": "^9.1.0", + "libnpmaccess": "^4.0.1", + "npm-package-arg": "^8.1.0", + "npm-registry-fetch": "^9.0.0", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "pacote": "^11.2.6", + "semver": "^7.3.4" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/publish/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/publish/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@lerna/publish/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/publish/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/publish/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/make-fetch-happen": { + "version": "8.0.14", + "resolved": "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-8.0.14.tgz", + "integrity": "sha512-EsS89h6l4vbfJEtBZnENTOFk8mCRpY5ru36Xe5bcX1KYIli2mkSHqoFsp5O1wMDvTJJzxe/4THpCTtygjeeGWQ==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.0.5", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^5.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/publish/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/publish/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/publish/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@lerna/publish/node_modules/npm-registry-fetch": { + "version": "9.0.0", + "resolved": "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-9.0.0.tgz", + "integrity": "sha512-PuFYYtnQ8IyVl6ib9d3PepeehcUeHN9IO5N/iCRhyg9tStQcqGQBRVHmfmMWPDERU3KwZoHFvbJ4FPXPspvzbA==", + "dev": true, + "dependencies": { + "@npmcli/ci-detect": "^1.0.0", + "lru-cache": "^6.0.0", + "make-fetch-happen": "^8.0.9", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@lerna/publish/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/publish/node_modules/socks-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-5.0.1.tgz", + "integrity": "sha512-vZdmnjb9a2Tz6WEQVIurybSwElwPxMZaIc7PzqbJTrezcKNznv6giT7J7tZDZ1BojVaa1jvO/UiUdhDVB0ACoQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "4", + "socks": "^2.3.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@lerna/publish/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@lerna/publish/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@lerna/publish/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/publish/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/pulse-till-done": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/pulse-till-done/-/pulse-till-done-4.0.0.tgz", + "integrity": "sha512-Frb4F7QGckaybRhbF7aosLsJ5e9WuH7h0KUkjlzSByVycxY91UZgaEIVjS2oN9wQLrheLMHl6SiFY0/Pvo0Cxg==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/query-graph": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/query-graph/-/query-graph-4.0.0.tgz", + "integrity": "sha512-YlP6yI3tM4WbBmL9GCmNDoeQyzcyg1e4W96y/PKMZa5GbyUvkS2+Jc2kwPD+5KcXou3wQZxSPzR3Te5OenaDdg==", + "dev": true, + "dependencies": { + "@lerna/package-graph": "4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/resolve-symlink": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/resolve-symlink/-/resolve-symlink-4.0.0.tgz", + "integrity": "sha512-RtX8VEUzqT+uLSCohx8zgmjc6zjyRlh6i/helxtZTMmc4+6O4FS9q5LJas2uGO2wKvBlhcD6siibGt7dIC3xZA==", + "dev": true, + "dependencies": { + "fs-extra": "^9.1.0", + "npmlog": "^4.1.2", + "read-cmd-shim": "^2.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/resolve-symlink/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/resolve-symlink/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/resolve-symlink/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/rimraf-dir": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/rimraf-dir/-/rimraf-dir-4.0.0.tgz", + "integrity": "sha512-QNH9ABWk9mcMJh2/muD9iYWBk1oQd40y6oH+f3wwmVGKYU5YJD//+zMiBI13jxZRtwBx0vmBZzkBkK1dR11cBg==", + "dev": true, + "dependencies": { + "@lerna/child-process": "4.0.0", + "npmlog": "^4.1.2", + "path-exists": "^4.0.0", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/rimraf-dir/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/rimraf-dir/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@lerna/run": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/run/-/run-4.0.0.tgz", + "integrity": "sha512-9giulCOzlMPzcZS/6Eov6pxE9gNTyaXk0Man+iCIdGJNMrCnW7Dme0Z229WWP/UoxDKg71F2tMsVVGDiRd8fFQ==", + "dev": true, + "dependencies": { + "@lerna/command": "4.0.0", + "@lerna/filter-options": "4.0.0", + "@lerna/npm-run-script": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/profiler": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/timer": "4.0.0", + "@lerna/validation-error": "4.0.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run-lifecycle": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/run-lifecycle/-/run-lifecycle-4.0.0.tgz", + "integrity": "sha512-IwxxsajjCQQEJAeAaxF8QdEixfI7eLKNm4GHhXHrgBu185JcwScFZrj9Bs+PFKxwb+gNLR4iI5rpUdY8Y0UdGQ==", + "dev": true, + "dependencies": { + "@lerna/npm-conf": "4.0.0", + "npm-lifecycle": "^3.1.5", + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run-topologically": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/run-topologically/-/run-topologically-4.0.0.tgz", + "integrity": "sha512-EVZw9hGwo+5yp+VL94+NXRYisqgAlj0jWKWtAIynDCpghRxCE5GMO3xrQLmQgqkpUl9ZxQFpICgYv5DW4DksQA==", + "dev": true, + "dependencies": { + "@lerna/query-graph": "4.0.0", + "p-queue": "^6.6.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/run/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-binary": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/symlink-binary/-/symlink-binary-4.0.0.tgz", + "integrity": "sha512-zualodWC4q1QQc1pkz969hcFeWXOsVYZC5AWVtAPTDfLl+TwM7eG/O6oP+Rr3fFowspxo6b1TQ6sYfDV6HXNWA==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "4.0.0", + "@lerna/package": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-binary/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/symlink-dependencies": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/symlink-dependencies/-/symlink-dependencies-4.0.0.tgz", + "integrity": "sha512-BABo0MjeUHNAe2FNGty1eantWp8u83BHSeIMPDxNq0MuW2K3CiQRaeWT3EGPAzXpGt0+hVzBrA6+OT0GPn7Yuw==", + "dev": true, + "dependencies": { + "@lerna/create-symlink": "4.0.0", + "@lerna/resolve-symlink": "4.0.0", + "@lerna/symlink-binary": "4.0.0", + "fs-extra": "^9.1.0", + "p-map": "^4.0.0", + "p-map-series": "^2.1.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "dependencies": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/symlink-dependencies/node_modules/universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, + "node_modules/@lerna/timer": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/timer/-/timer-4.0.0.tgz", + "integrity": "sha512-WFsnlaE7SdOvjuyd05oKt8Leg3ENHICnvX3uYKKdByA+S3g+TCz38JsNs7OUZVt+ba63nC2nbXDlUnuT2Xbsfg==", + "dev": true, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/validation-error": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/validation-error/-/validation-error-4.0.0.tgz", + "integrity": "sha512-1rBOM5/koiVWlRi3V6dB863E1YzJS8v41UtsHgMr6gB2ncJ2LsQtMKlJpi3voqcgh41H8UsPXR58RrrpPpufyw==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/version": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/version/-/version-4.0.0.tgz", + "integrity": "sha512-otUgiqs5W9zGWJZSCCMRV/2Zm2A9q9JwSDS7s/tlKq4mWCYriWo7+wsHEA/nPTMDyYyBO5oyZDj+3X50KDUzeA==", + "dev": true, + "dependencies": { + "@lerna/check-working-tree": "4.0.0", + "@lerna/child-process": "4.0.0", + "@lerna/collect-updates": "4.0.0", + "@lerna/command": "4.0.0", + "@lerna/conventional-commits": "4.0.0", + "@lerna/github-client": "4.0.0", + "@lerna/gitlab-client": "4.0.0", + "@lerna/output": "4.0.0", + "@lerna/prerelease-id-from-version": "4.0.0", + "@lerna/prompt": "4.0.0", + "@lerna/run-lifecycle": "4.0.0", + "@lerna/run-topologically": "4.0.0", + "@lerna/validation-error": "4.0.0", + "chalk": "^4.1.0", + "dedent": "^0.7.0", + "load-json-file": "^6.2.0", + "minimatch": "^3.0.4", + "npmlog": "^4.1.2", + "p-map": "^4.0.0", + "p-pipe": "^3.1.0", + "p-reduce": "^2.1.0", + "p-waterfall": "^2.1.1", + "semver": "^7.3.4", + "slash": "^3.0.0", + "temp-write": "^4.0.0", + "write-json-file": "^4.3.0" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/version/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/version/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/version/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@lerna/version/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@lerna/version/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/version/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/version/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/version/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@lerna/version/node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/version/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@lerna/version/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@lerna/write-log-file": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@lerna/write-log-file/-/write-log-file-4.0.0.tgz", + "integrity": "sha512-XRG5BloiArpXRakcnPHmEHJp+4AtnhRtpDIHSghmXD5EichI1uD73J7FgPp30mm2pDRq3FdqB0NbwSEsJ9xFQg==", + "dev": true, + "dependencies": { + "npmlog": "^4.1.2", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/@lerna/write-log-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "dependencies": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.scandir/node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmmirror.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/ci-detect": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/@npmcli/ci-detect/-/ci-detect-1.4.0.tgz", + "integrity": "sha512-3BGrt6FLjqM6br5AhWRKTr3u5GIVkjRYeAFrMp3HjnfICrg4xOrVRwFavKT6tsp++bq5dluL5t8ME/Nha/6c1Q==", + "dev": true + }, + "node_modules/@npmcli/fs": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/@npmcli/fs/-/fs-1.1.1.tgz", + "integrity": "sha512-8KG5RD0GVP4ydEzRn/I4BNDuxDtqVbOdm8675T49OIG/NGhaK0pjPX7ZcDlvKYbA+ulvVK3ztfcF4uBdOxuJbQ==", + "dev": true, + "dependencies": { + "@gar/promisify": "^1.0.1", + "semver": "^7.3.5" + } + }, + "node_modules/@npmcli/fs/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/fs/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@npmcli/git": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@npmcli/git/-/git-2.1.0.tgz", + "integrity": "sha512-/hBFX/QG1b+N7PZBFs0bi+evgRZcK9nWBxQKZkGoXUT5hJSwl5c4d7y8/hm+NQZRPhQ67RzFaj5UM9YeyKoryw==", + "dev": true, + "dependencies": { + "@npmcli/promise-spawn": "^1.3.2", + "lru-cache": "^6.0.0", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^6.1.1", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + } + }, + "node_modules/@npmcli/git/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/git/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/git/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/@npmcli/installed-package-contents/-/installed-package-contents-1.0.7.tgz", + "integrity": "sha512-9rufe0wnJusCQoLpV9ZPKIVP55itrM5BxOXs10DmdbRfgWtHy1LDyskbwRnBghuB0PrF7pNPOqREVtpz4HqzKw==", + "dev": true, + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/move-file": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@npmcli/move-file/-/move-file-1.1.2.tgz", + "integrity": "sha512-1SUf/Cg2GzGDyaf15aR9St9TWlb+XvbZXWpDx8YKs7MLzMH/BCeopv+y9vzrzgkfykCGuWOlSu3mZhj2+FQcrg==", + "dev": true, + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/move-file/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@npmcli/node-gyp": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/@npmcli/node-gyp/-/node-gyp-1.0.3.tgz", + "integrity": "sha512-fnkhw+fmX65kiLqk6E3BFLXNC26rUhK90zVwe2yncPliVT/Qos3xjhTLE59Df8KnPlcwIERXKVlU1bXoUQ+liA==", + "dev": true + }, + "node_modules/@npmcli/promise-spawn": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/@npmcli/promise-spawn/-/promise-spawn-1.3.2.tgz", + "integrity": "sha512-QyAGYo/Fbj4MXeGdJcFzZ+FkDkomfRBrPM+9QYJSg+PxgAUL+LU3FneQk37rKR2/zjqkCV1BLHccX98wRXG3Sg==", + "dev": true, + "dependencies": { + "infer-owner": "^1.0.4" + } + }, + "node_modules/@npmcli/run-script": { + "version": "1.8.6", + "resolved": "https://registry.npmmirror.com/@npmcli/run-script/-/run-script-1.8.6.tgz", + "integrity": "sha512-e42bVZnC6VluBZBAFEr3YrdqSspG3bgilyg4nSLBJ7TRGNCzxHa92XAHxQBLYg0BmgwO4b2mf3h/l5EkEWRn3g==", + "dev": true, + "dependencies": { + "@npmcli/node-gyp": "^1.0.2", + "@npmcli/promise-spawn": "^1.3.2", + "node-gyp": "^7.1.0", + "read-package-json-fast": "^2.0.1" + } + }, + "node_modules/@npmcli/run-script/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/run-script/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@npmcli/run-script/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/run-script/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmmirror.com/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 10.12.0" + } + }, + "node_modules/@npmcli/run-script/node_modules/nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/@npmcli/run-script/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/@npmcli/run-script/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@npmcli/run-script/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/@npmcli/run-script/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@npmcli/run-script/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/@octokit/auth-token": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/@octokit/auth-token/-/auth-token-2.5.0.tgz", + "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3" + } + }, + "node_modules/@octokit/core": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/@octokit/core/-/core-3.6.0.tgz", + "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmmirror.com/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/endpoint/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/graphql": { + "version": "4.8.0", + "resolved": "https://registry.npmmirror.com/@octokit/graphql/-/graphql-4.8.0.tgz", + "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", + "dev": true, + "dependencies": { + "@octokit/request": "^5.6.0", + "@octokit/types": "^6.0.3", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/openapi-types": { + "version": "11.2.0", + "resolved": "https://registry.npmmirror.com/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", + "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", + "dev": true + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/@octokit/plugin-enterprise-rest/-/plugin-enterprise-rest-6.0.1.tgz", + "integrity": "sha512-93uGjlhUD+iNg1iWhUENAtJata6w5nE+V4urXOAlIXdco6xNZtUSfYY8dzp3Udy74aqO/B5UZL80x/YMa5PKRw==", + "dev": true + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "2.17.0", + "resolved": "https://registry.npmmirror.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", + "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0" + }, + "peerDependencies": { + "@octokit/core": ">=2" + } + }, + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "5.13.0", + "resolved": "https://registry.npmmirror.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", + "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.34.0", + "deprecation": "^2.3.1" + }, + "peerDependencies": { + "@octokit/core": ">=3" + } + }, + "node_modules/@octokit/request": { + "version": "5.6.3", + "resolved": "https://registry.npmmirror.com/@octokit/request/-/request-5.6.3.tgz", + "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", + "dev": true, + "dependencies": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "node_modules/@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "node_modules/@octokit/request/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@octokit/rest": { + "version": "18.12.0", + "resolved": "https://registry.npmmirror.com/@octokit/rest/-/rest-18.12.0.tgz", + "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", + "dev": true, + "dependencies": { + "@octokit/core": "^3.5.1", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "node_modules/@octokit/types": { + "version": "6.34.0", + "resolved": "https://registry.npmmirror.com/@octokit/types/-/types-6.34.0.tgz", + "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", + "dev": true, + "dependencies": { + "@octokit/openapi-types": "^11.2.0" + } + }, + "node_modules/@probe.gl/env": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.5.0.tgz", + "integrity": "sha512-YdlpZZshhyYxvWDBmZ5RIW2pTR14Pw4p9czMlt/v7F6HbFzWfAdmH7q6xVwFRYxUpQLwhWensWyv4aFysiWl4g==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@probe.gl/log": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.5.0.tgz", + "integrity": "sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0" + } + }, + "node_modules/@probe.gl/stats": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.5.0.tgz", + "integrity": "sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@riophae/vue-treeselect": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@riophae/vue-treeselect/-/vue-treeselect-0.4.0.tgz", + "integrity": "sha512-J4atYmBqXQmiPFK/0B5sXKjtnGc21mBJEiyKIDZwk0Q9XuynVFX6IJ4EpaLmUgL5Tve7HAS7wkiGGSti6Uaxcg==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "easings-css": "^1.0.0", + "fuzzysearch": "^1.0.3", + "is-promise": "^2.1.0", + "lodash": "^4.0.0", + "material-colors": "^1.2.6", + "watch-size": "^2.0.0" + }, + "peerDependencies": { + "vue": "^2.2.0" + } + }, + "node_modules/@samverschueren/stream-to-observable": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", + "integrity": "sha512-c/qwwcHyafOQuVQJj0IlBjf5yYgBI7YPJ77k4fOJYesb41jio65eaJODRUmfYKhTOFBrIZ66kgvGPlNbjuoRdQ==", + "dev": true, + "dependencies": { + "any-observable": "^0.3.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependenciesMeta": { + "rxjs": { + "optional": true + }, + "zen-observable": { + "optional": true + } + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/@soda/friendly-errors-webpack-plugin/-/friendly-errors-webpack-plugin-1.8.1.tgz", + "integrity": "sha512-h2ooWqP8XuFqTXT+NyAFbrArzfQA7R6HTezADrvD9Re8fxMLTPPniLdqVTdDaO0eIoLaAwKT+d6w+5GeTk7Vbg==", + "dev": true, + "dependencies": { + "chalk": "^3.0.0", + "error-stack-parser": "^2.0.6", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8.0.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@soda/friendly-errors-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/@tootallnate/once": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@tootallnate/once/-/once-1.1.2.tgz", + "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/@types/d3-timer": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-2.0.1.tgz", + "integrity": "sha512-TF8aoF5cHcLO7W7403blM7L1T+6NF3XMyN3fxyUolq2uOcFeicG/khQg/dGxiCJWoAcmYulYN7LYSRKO54IXaA==" + }, + "node_modules/@types/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==", + "dev": true, + "dependencies": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.11", + "resolved": "https://registry.npmmirror.com/@types/json-schema/-/json-schema-7.0.11.tgz", + "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", + "dev": true + }, + "node_modules/@types/json5": { + "version": "0.0.29", + "resolved": "https://registry.npmmirror.com/@types/json5/-/json5-0.0.29.tgz", + "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", + "dev": true + }, + "node_modules/@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmmirror.com/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "node_modules/@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "node_modules/@types/node": { + "version": "17.0.27", + "resolved": "https://registry.npmmirror.com/@types/node/-/node-17.0.27.tgz", + "integrity": "sha512-4/Ke7bbWOasuT3kceBZFGakP1dYN2XFd8v2l9bqF2LNWrmeU07JLpp56aEeG6+Q3olqO5TvXpW0yaiYnZJ5CXg==", + "dev": true + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", + "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", + "dev": true + }, + "node_modules/@types/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@types/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", + "dev": true + }, + "node_modules/@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmmirror.com/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==" + }, + "node_modules/@vue/babel-helper-vue-jsx-merge-props": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.2.1.tgz", + "integrity": "sha512-QOi5OW45e2R20VygMSNhyQHvpdUwQZqGPc748JLGCYEy+yp8fNFNdbNIGAgZmi9e+2JHPd6i6idRuqivyicIkA==", + "dev": true + }, + "node_modules/@vue/babel-plugin-transform-vue-jsx": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.2.1.tgz", + "integrity": "sha512-HJuqwACYehQwh1fNT8f4kyzqlNMpBuUK4rSiSES5D4QsYncv5fxFsLyrxFPG2ksO7t5WP+Vgix6tt6yKClwPzA==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-preset-app": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz", + "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==", + "dev": true, + "dependencies": { + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-proposal-class-properties": "^7.0.0", + "@babel/plugin-proposal-decorators": "^7.1.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.0.0", + "@babel/plugin-transform-runtime": "^7.4.0", + "@babel/preset-env": "^7.0.0 < 7.4.0", + "@babel/runtime": "^7.0.0", + "@babel/runtime-corejs2": "^7.2.0", + "@vue/babel-preset-jsx": "^1.0.0", + "babel-plugin-dynamic-import-node": "^2.2.0", + "babel-plugin-module-resolver": "3.2.0", + "core-js": "^2.6.5" + } + }, + "node_modules/@vue/babel-preset-jsx": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-preset-jsx/-/babel-preset-jsx-1.2.4.tgz", + "integrity": "sha512-oRVnmN2a77bYDJzeGSt92AuHXbkIxbf/XXSE3klINnh9AXBmVS1DGa1f0d+dDYpLfsAKElMnqKTQfKn7obcL4w==", + "dev": true, + "dependencies": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "@vue/babel-sugar-composition-api-inject-h": "^1.2.1", + "@vue/babel-sugar-composition-api-render-instance": "^1.2.4", + "@vue/babel-sugar-functional-vue": "^1.2.2", + "@vue/babel-sugar-inject-h": "^1.2.2", + "@vue/babel-sugar-v-model": "^1.2.3", + "@vue/babel-sugar-v-on": "^1.2.3" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-inject-h": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.2.1.tgz", + "integrity": "sha512-4B3L5Z2G+7s+9Bwbf+zPIifkFNcKth7fQwekVbnOA3cr3Pq71q71goWr97sk4/yyzH8phfe5ODVzEjX7HU7ItQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-composition-api-render-instance": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.2.4.tgz", + "integrity": "sha512-joha4PZznQMsxQYXtR3MnTgCASC9u3zt9KfBxIeuI5g2gscpTsSKRDzWQt4aqNIpx6cv8On7/m6zmmovlNsG7Q==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-functional-vue": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.2.2.tgz", + "integrity": "sha512-JvbgGn1bjCLByIAU1VOoepHQ1vFsroSA/QkzdiSs657V79q6OwEWLCQtQnEXD/rLTA8rRit4rMOhFpbjRFm82w==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-inject-h": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.2.2.tgz", + "integrity": "sha512-y8vTo00oRkzQTgufeotjCLPAvlhnpSkcHFEp60+LJUwygGcd5Chrpn5480AQp/thrxVm8m2ifAk0LyFel9oCnw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-model": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.2.3.tgz", + "integrity": "sha512-A2jxx87mySr/ulAsSSyYE8un6SIH0NWHiLaCWpodPCVOlQVODCaSpiR4+IMsmBr73haG+oeCuSvMOM+ttWUqRQ==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.2.1", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/babel-sugar-v-on": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.2.3.tgz", + "integrity": "sha512-kt12VJdz/37D3N3eglBywV8GStKNUhNrsxChXIV+o0MwVXORYuhDTHJRKPgLJRb/EY3vM2aRFQdxJBp9CLikjw==", + "dev": true, + "dependencies": { + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.2.1", + "camelcase": "^5.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/@vue/cli-overlay": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz", + "integrity": "sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==", + "dev": true + }, + "node_modules/@vue/cli-plugin-babel": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz", + "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==", + "dev": true, + "dependencies": { + "@babel/core": "^7.0.0", + "@vue/babel-preset-app": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "babel-loader": "^8.0.5", + "webpack": "^4.0.0" + } + }, + "node_modules/@vue/cli-plugin-eslint": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", + "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", + "dev": true, + "dependencies": { + "@vue/cli-shared-utils": "^3.12.1", + "babel-eslint": "^10.0.1", + "eslint-loader": "^2.1.2", + "globby": "^9.2.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" + }, + "optionalDependencies": { + "eslint": "^4.19.1", + "eslint-plugin-vue": "^4.7.1" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dev": true, + "optional": true, + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "optional": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint": { + "version": "4.19.1", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-4.19.1.tgz", + "integrity": "sha512-bT3/1x1EbZB7phzYu7vCr1v3ONuzDtX8WjuM9c0iYxe+cq+pwcKEoQjl7zd3RpC6YOLgnSy3cTN58M2jcoPDIQ==", + "dev": true, + "optional": true, + "dependencies": { + "ajv": "^5.3.0", + "babel-code-frame": "^6.22.0", + "chalk": "^2.1.0", + "concat-stream": "^1.6.0", + "cross-spawn": "^5.1.0", + "debug": "^3.1.0", + "doctrine": "^2.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.4", + "esquery": "^1.0.0", + "esutils": "^2.0.2", + "file-entry-cache": "^2.0.0", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.0.1", + "ignore": "^3.3.3", + "imurmurhash": "^0.1.4", + "inquirer": "^3.0.6", + "is-resolvable": "^1.0.0", + "js-yaml": "^3.9.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.4", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "pluralize": "^7.0.0", + "progress": "^2.0.0", + "regexpp": "^1.0.1", + "require-uncached": "^1.0.3", + "semver": "^5.3.0", + "strip-ansi": "^4.0.0", + "strip-json-comments": "~2.0.1", + "table": "4.0.2", + "text-table": "~0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-plugin-vue": { + "version": "4.7.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-4.7.1.tgz", + "integrity": "sha512-esETKhVMI7Vdli70Wt4bvAwnZBJeM0pxVX9Yb0wWKxdCJc2EADalVYK/q2FzMw8oKN0wPMdqVCKS8kmR89recA==", + "dev": true, + "optional": true, + "dependencies": { + "vue-eslint-parser": "^2.0.3" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^3.18.0 || ^4.0.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", + "dev": true, + "optional": true + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", + "dev": true, + "optional": true + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "optional": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/@vue/cli-plugin-eslint/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true, + "optional": true + }, + "node_modules/@vue/cli-service": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/cli-service/-/cli-service-3.12.1.tgz", + "integrity": "sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==", + "dev": true, + "dependencies": { + "@intervolga/optimize-cssnano-plugin": "^1.0.5", + "@soda/friendly-errors-webpack-plugin": "^1.7.1", + "@vue/cli-overlay": "^3.12.1", + "@vue/cli-shared-utils": "^3.12.1", + "@vue/component-compiler-utils": "^3.0.0", + "@vue/preload-webpack-plugin": "^1.1.0", + "@vue/web-component-wrapper": "^1.2.0", + "acorn": "^6.1.1", + "acorn-walk": "^6.1.1", + "address": "^1.0.3", + "autoprefixer": "^9.5.1", + "browserslist": "^4.5.4", + "cache-loader": "^2.0.1", + "case-sensitive-paths-webpack-plugin": "^2.2.0", + "chalk": "^2.4.2", + "cli-highlight": "^2.1.0", + "clipboardy": "^2.0.0", + "cliui": "^5.0.0", + "copy-webpack-plugin": "^4.6.0", + "css-loader": "^1.0.1", + "cssnano": "^4.1.10", + "current-script-polyfill": "^1.0.0", + "debug": "^4.1.1", + "default-gateway": "^5.0.2", + "dotenv": "^7.0.0", + "dotenv-expand": "^5.1.0", + "escape-string-regexp": "^1.0.5", + "file-loader": "^3.0.1", + "fs-extra": "^7.0.1", + "globby": "^9.2.0", + "hash-sum": "^1.0.2", + "html-webpack-plugin": "^3.2.0", + "launch-editor-middleware": "^2.2.1", + "lodash.defaultsdeep": "^4.6.1", + "lodash.mapvalues": "^4.6.0", + "lodash.transform": "^4.6.0", + "mini-css-extract-plugin": "^0.8.0", + "minimist": "^1.2.0", + "ora": "^3.4.0", + "portfinder": "^1.0.20", + "postcss-loader": "^3.0.0", + "read-pkg": "^5.0.0", + "semver": "^6.0.0", + "slash": "^2.0.0", + "source-map-url": "^0.4.0", + "ssri": "^6.0.1", + "string.prototype.padend": "^3.0.0", + "terser-webpack-plugin": "^1.2.3", + "thread-loader": "^2.1.2", + "url-loader": "^1.1.2", + "vue-loader": "^15.7.0", + "webpack": "^4.0.0", + "webpack-bundle-analyzer": "^3.3.0", + "webpack-chain": "^4.11.0", + "webpack-dev-server": "^3.4.1", + "webpack-merge": "^4.2.1" + }, + "bin": { + "vue-cli-service": "bin/vue-cli-service.js" + }, + "engines": { + "node": ">=8" + }, + "peerDependencies": { + "vue-template-compiler": "^2.0.0" + } + }, + "node_modules/@vue/cli-service/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/@vue/cli-service/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/@vue/cli-service/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/cli-shared-utils": { + "version": "3.12.1", + "resolved": "https://registry.npmmirror.com/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", + "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", + "dev": true, + "dependencies": { + "@hapi/joi": "^15.0.1", + "chalk": "^2.4.1", + "execa": "^1.0.0", + "launch-editor": "^2.2.1", + "lru-cache": "^5.1.1", + "node-ipc": "^9.1.1", + "open": "^6.3.0", + "ora": "^3.4.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.7", + "semver": "^6.0.0", + "string.prototype.padstart": "^3.0.0" + } + }, + "node_modules/@vue/cli-shared-utils/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "dependencies": { + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.36", + "postcss-selector-parser": "^6.0.2", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + }, + "optionalDependencies": { + "prettier": "^1.18.2 || ^2.0.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@vue/component-compiler-utils/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/@vue/eslint-config-standard": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/@vue/eslint-config-standard/-/eslint-config-standard-4.0.0.tgz", + "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==", + "dev": true, + "dependencies": { + "eslint-config-standard": "^12.0.0", + "eslint-plugin-import": "^2.14.0", + "eslint-plugin-node": "^8.0.0", + "eslint-plugin-promise": "^4.0.1", + "eslint-plugin-standard": "^4.0.0" + } + }, + "node_modules/@vue/preload-webpack-plugin": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", + "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", + "dev": true, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "html-webpack-plugin": ">=2.26.0", + "webpack": ">=4.0.0" + } + }, + "node_modules/@vue/web-component-wrapper": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/@vue/web-component-wrapper/-/web-component-wrapper-1.3.0.tgz", + "integrity": "sha512-Iu8Tbg3f+emIIMmI2ycSI8QcEuAUgPTgHwesDU1eKMLE4YC/c/sFbGc70QgMq31ijRftV0R7vCm9co6rldCeOA==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dependencies": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==" + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==" + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==" + }, + "node_modules/@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dependencies": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==" + }, + "node_modules/@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==" + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "node_modules/@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dependencies": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "node_modules/@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dependencies": { + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==" + }, + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "node_modules/@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webgpu/glslang": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/@webgpu/glslang/-/glslang-0.0.15.tgz", + "integrity": "sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q==" + }, + "node_modules/@webgpu/types": { + "version": "0.0.31", + "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.0.31.tgz", + "integrity": "sha512-cvvCMSZBT4VsRNtt0lI6XQqvOIIWw6+NRUtnPUMDVDgsI4pCZColz3qzF5QcP9wIYOHEc3jssIBse8UWONKhlQ==" + }, + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", + "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==" + }, + "node_modules/@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==" + }, + "node_modules/@yarnpkg/lockfile": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz", + "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", + "dev": true + }, + "node_modules/abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dev": true, + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-jsx": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-3.0.1.tgz", + "integrity": "sha512-AU7pnZkguthwBjKgCg6998ByQNIMjbuDQZ8bb78QAFZwPfmKia8AIzgY/gWgqCjnht8JLdXmB4YxA0KaV60ncQ==", + "dev": true, + "optional": true, + "dependencies": { + "acorn": "^3.0.4" + } + }, + "node_modules/acorn-jsx/node_modules/acorn": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-3.3.0.tgz", + "integrity": "sha512-OLUyIIZ7mF5oaAUT1w0TFqQS81q3saT46x8t7ukpPjMNk+nbs4ZHhs7ToV8EWnLYLepjETXd4XaCE4uxkMeqUw==", + "dev": true, + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/add-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/add-stream/-/add-stream-1.0.0.tgz", + "integrity": "sha512-qQLMr+8o0WC4FZGQTcJiKBVC59JylcPSrTtk6usvmIDFUOCKegapy1VHQwRbFMOFyb/inzUVqHs+eMYKDM1YeQ==", + "dev": true + }, + "node_modules/address": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "dependencies": { + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/agent-base/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agent-base/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/agentkeepalive": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/agentkeepalive/-/agentkeepalive-4.2.1.tgz", + "integrity": "sha512-Zn4cw2NEqd+9fiSVWMscnjyQ1a8Yfoc5oBajLeo5w+YBHgDUcEBY2hS4YpTz6iN5f/2zQiktcuM6tS8x1p9dpA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "depd": "^1.1.2", + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" + } + }, + "node_modules/agentkeepalive/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/agentkeepalive/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/agentkeepalive/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/aggregate-error": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/aggregate-error/-/aggregate-error-3.1.0.tgz", + "integrity": "sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==", + "dev": true, + "dependencies": { + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "node_modules/ajv-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "peerDependencies": { + "ajv": ">=5.0.0" + } + }, + "node_modules/ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "peerDependencies": { + "ajv": "^6.9.1" + } + }, + "node_modules/alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha512-0FcBfdcmaumGPQ0qPn7Q5qTgz/ooXgIyp1rf8ik5bGX8mpE2YHjC0P/eyQvxu1GURYQgq9ozf2mteQ5ZD9YiyQ==", + "dev": true + }, + "node_modules/amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", + "dev": true, + "engines": { + "node": ">=0.4.2" + } + }, + "node_modules/ansi-colors": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/ansi-colors/-/ansi-colors-3.2.4.tgz", + "integrity": "sha512-hHUXGagefjN2iRrID63xckIvotOXOojhQKWIPUZ4mNUZ9nLZW+7FMNoE1lOkEhNWYsx/7ysGIuJYCiMAA9FnrA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-escapes": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz", + "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", + "dev": true, + "engines": [ + "node >= 0.8.0" + ], + "bin": { + "ansi-html": "bin/ansi-html" + } + }, + "node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/any-observable": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/any-observable/-/any-observable-0.3.0.tgz", + "integrity": "sha512-/FQM1EDkTsf63Ub2C6O7GuYFDsSXUwsaZDurV0np41ocwq0jthUAYCmhBX9f+KwlaCgIuWyr/4WlUQUBfKfZog==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "optional": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==" + }, + "node_modules/arch": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/arch/-/arch-2.2.0.tgz", + "integrity": "sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ==", + "dev": true + }, + "node_modules/archiver": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/archiver/-/archiver-3.1.1.tgz", + "integrity": "sha512-5Hxxcig7gw5Jod/8Gq0OneVgLYET+oNHcxgWItq4TbhOzRLKNAFUb9edAftiMKXvXfCB0vbGrJdZDNq0dWMsxg==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "async": "^2.6.3", + "buffer-crc32": "^0.2.1", + "glob": "^7.1.4", + "readable-stream": "^3.4.0", + "tar-stream": "^2.1.0", + "zip-stream": "^2.1.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, + "dependencies": { + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/archiver/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/are-we-there-yet": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", + "dev": true, + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-differ": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/array-differ/-/array-differ-3.0.0.tgz", + "integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==", + "dev": true + }, + "node_modules/array-ify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/array-ify/-/array-ify-1.0.0.tgz", + "integrity": "sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==", + "dev": true + }, + "node_modules/array-includes": { + "version": "3.1.4", + "resolved": "https://registry.npmmirror.com/array-includes/-/array-includes-3.1.4.tgz", + "integrity": "sha512-ZTNSQkmWumEbiHO2GF4GmWxYVTiQyJy2XOTa15sdQSrvKn7l+180egQMqlrMOUMCyLMD7pmyQe4mMDUT6Behrw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/array-union": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-1.0.2.tgz", + "integrity": "sha512-Dxr6QJj/RdU/hCaBjOfxW+q6lyuVE6JFWIrAUpuOOhoJJoQ99cUn3igRaHVB5P9WrgFVN0FfArM3x0cueOU8ng==", + "dev": true, + "dependencies": { + "array-uniq": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha512-MNha4BWQ6JbwhFhj03YK552f7cb3AzoE8SzeljgChvL1dl3IcvggXVz1DilzySZkCja+CXuZbdW7yATchWn8/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array.prototype.flat": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/array.prototype.flat/-/array.prototype.flat-1.3.0.tgz", + "integrity": "sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.2", + "es-shim-unscopables": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/arrify": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, + "node_modules/asn1": { + "version": "0.2.6", + "resolved": "https://registry.npmmirror.com/asn1/-/asn1-0.2.6.tgz", + "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", + "dev": true, + "dependencies": { + "safer-buffer": "~2.1.0" + } + }, + "node_modules/asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmmirror.com/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dependencies": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/asn1.js/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/assert": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dependencies": { + "object-assign": "^4.1.1", + "util": "0.10.3" + } + }, + "node_modules/assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/assert/node_modules/inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha512-8nWq2nLTAwd02jTqJExUYFSD/fKq6VH9Y/oG2accc/kdI0V98Bag8d5a4gi3XHz73rDWa2PvTtvcWYquKqSENA==" + }, + "node_modules/assert/node_modules/util": { + "version": "0.10.3", + "resolved": "https://registry.npmmirror.com/util/-/util-0.10.3.tgz", + "integrity": "sha512-5KiHfsmkqacuKjkRkdV7SsfDJ2EGiPsK92s2MhNSY0craxjTdKTtqKsJaCWp4LW33ZZ0OPUv1WO/TFvNQRiQxQ==", + "dependencies": { + "inherits": "2.0.1" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "engines": { + "node": ">=4" + } + }, + "node_modules/async": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", + "dev": true, + "dependencies": { + "lodash": "^4.17.14" + } + }, + "node_modules/async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "devOptional": true + }, + "node_modules/async-foreach": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/async-foreach/-/async-foreach-0.1.3.tgz", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "node_modules/async-validator": { + "version": "1.12.2", + "resolved": "https://registry.npmmirror.com/async-validator/-/async-validator-1.12.2.tgz", + "integrity": "sha512-57EETfCPFiB7M4QscvQzWSGNsmtkjjzZv318SK1CBlstk+hycV72ocjriMOOM48HjvmoAoJGpJNjC7Z76RlnZA==" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true + }, + "node_modules/at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/atob": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "bin": { + "atob": "bin/atob.js" + }, + "engines": { + "node": ">= 4.5.0" + } + }, + "node_modules/autoprefixer": { + "version": "9.8.8", + "resolved": "https://registry.npmmirror.com/autoprefixer/-/autoprefixer-9.8.8.tgz", + "integrity": "sha512-eM9d/swFopRt5gdJ7jrpCwgvEMIayITpojhkkSMRsFHYuH5bkSQ4p/9qTEHtmNudUZh22Tehu7I6CxAW0IXTKA==", + "dev": true, + "dependencies": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "picocolors": "^0.2.1", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + } + }, + "node_modules/autoprefixer/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmmirror.com/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "node_modules/axios": { + "version": "0.21.1", + "resolved": "https://registry.npmmirror.com/axios/-/axios-0.21.1.tgz", + "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "dependencies": { + "follow-redirects": "^1.10.0" + } + }, + "node_modules/babel-code-frame": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz", + "integrity": "sha512-XqYMR2dfdGMW+hd0IUZ2PwK+fGeFkOxZJ0wY+JaQAHzt1Zx8LcvpiZD2NiGkEG8qx0CfkAOr5xt76d1e8vG90g==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/js-tokens": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-3.0.2.tgz", + "integrity": "sha512-RjTcuD4xjtthQkaWH7dFlH85L+QaVtSoOyGdZ3g6HFhS9dFNDfLyqgm2NFe2X6cQpeFmt0452FJjFG5UameExg==", + "dev": true + }, + "node_modules/babel-code-frame/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/babel-code-frame/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmmirror.com/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "deprecated": "babel-eslint is now @babel/eslint-parser. This package will no longer receive updates.", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">= 4.12.1" + } + }, + "node_modules/babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, + "node_modules/babel-loader": { + "version": "8.2.5", + "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz", + "integrity": "sha512-OSiFfH89LrEMiWd4pLNqGz4CwJDtbs2ZVc+iGu2HrkRfPxId9F2anQj38IxWpmRfsUY0aBZYi1EFcd3mhtRMLQ==", + "dev": true, + "dependencies": { + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" + } + }, + "node_modules/babel-loader/node_modules/find-cache-dir": { + "version": "3.3.2", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-3.3.2.tgz", + "integrity": "sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/babel-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/babel-loader/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/babel-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/babel-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "dependencies": { + "object.assign": "^4.1.0" + } + }, + "node_modules/babel-plugin-module-resolver": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/babel-plugin-module-resolver/-/babel-plugin-module-resolver-3.2.0.tgz", + "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", + "dev": true, + "dependencies": { + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.1.tgz", + "integrity": "sha512-v7/T6EQcNfVLfcN2X8Lulb7DjprieyLWJK/zOWH5DUYcAgex9sP3h25Q+DLsX9TloXe3y1O8l2q2Jv9q8UVB9w==", + "dev": true, + "dependencies": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.3.1", + "semver": "^6.1.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-corejs2/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/babel-plugin-polyfill-corejs3": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.5.2.tgz", + "integrity": "sha512-G3uJih0XWiID451fpeFaYGVuxHEjzKTHtc9uGFEjR6hHrvNzeS/PX+LLLcetJcytsB5m4j+K3o/EpXJNb/5IEQ==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1", + "core-js-compat": "^3.21.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-plugin-polyfill-regenerator": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.3.1.tgz", + "integrity": "sha512-Y2B06tvgHYt1x0yz17jGkGeeMr5FeKUu+ASJ+N6nB5lQ8Dapfg42i0OVrf8PNGJ3zKL4A23snMi1IRwrqqND7A==", + "dev": true, + "dependencies": { + "@babel/helper-define-polyfill-provider": "^0.3.1" + }, + "peerDependencies": { + "@babel/core": "^7.0.0-0" + } + }, + "node_modules/babel-polyfill": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-polyfill/-/babel-polyfill-6.26.0.tgz", + "integrity": "sha512-F2rZGQnAdaHWQ8YAoeRbukc7HS9QgdgeyJ0rQDd485v9opwuPvjpPFcOOT/WmkKTdgy9ESgSPXDcTNpzrGr6iQ==", + "dependencies": { + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "regenerator-runtime": "^0.10.5" + } + }, + "node_modules/babel-polyfill/node_modules/regenerator-runtime": { + "version": "0.10.5", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.10.5.tgz", + "integrity": "sha512-02YopEIhAgiBHWeoTiA8aitHDt8z6w+rQqNuIftlM+ZtvSl/brTouaU7DW6GO/cHtvxJvS4Hwv2ibKdxIRi24w==" + }, + "node_modules/babel-runtime": { + "version": "6.26.0", + "resolved": "https://registry.npmmirror.com/babel-runtime/-/babel-runtime-6.26.0.tgz", + "integrity": "sha512-ITKNuq2wKlW1fJg9sSW52eepoYgZBggvOAHC0u/CYu/qxQ9EVzThCgR69BnSXLHjy2f7SY5zaQ4yt7H9ZVxY2g==", + "dependencies": { + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" + } + }, + "node_modules/babel-runtime/node_modules/regenerator-runtime": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz", + "integrity": "sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg==" + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base": { + "version": "0.11.2", + "resolved": "https://registry.npmmirror.com/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dependencies": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" + }, + "node_modules/batch": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/batch/-/batch-0.6.1.tgz", + "integrity": "sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==", + "dev": true + }, + "node_modules/batch-processor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/batch-processor/-/batch-processor-1.0.0.tgz", + "integrity": "sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==" + }, + "node_modules/bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", + "dev": true, + "dependencies": { + "tweetnacl": "^0.14.3" + } + }, + "node_modules/before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "node_modules/bfj": { + "version": "6.1.2", + "resolved": "https://registry.npmmirror.com/bfj/-/bfj-6.1.2.tgz", + "integrity": "sha512-BmBJa4Lip6BPRINSZ0BPEIfB1wUY/9rwbwvIHQA1KjX9om29B6id0wnWXq7m3bn5JrUVjeOTnVuhPT1FiHwPGw==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.5", + "check-types": "^8.0.3", + "hoopy": "^0.1.4", + "tryer": "^1.0.1" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/big.js": { + "version": "5.2.2", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-5.2.2.tgz", + "integrity": "sha512-vyL2OymJxmarO8gxMr0mhChsO9QGwhynfuu4+MHTAW6czfq9humCB7rKpUjDd9YUiDPU4mzpyupFSvOClAwbmQ==", + "engines": { + "node": "*" + } + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "optional": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, + "node_modules/bl": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "dependencies": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + } + }, + "node_modules/bl/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/bl/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/block-stream": { + "version": "0.0.9", + "resolved": "https://registry.npmmirror.com/block-stream/-/block-stream-0.0.9.tgz", + "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", + "dev": true, + "dependencies": { + "inherits": "~2.0.0" + }, + "engines": { + "node": "0.4 || >=0.5.8" + } + }, + "node_modules/bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmmirror.com/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==" + }, + "node_modules/bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==" + }, + "node_modules/body-parser": { + "version": "1.20.0", + "resolved": "https://registry.npmmirror.com/body-parser/-/body-parser-1.20.0.tgz", + "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.10.3", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/body-parser/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/bonjour": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/bonjour/-/bonjour-3.5.0.tgz", + "integrity": "sha512-RaVTblr+OnEli0r/ud8InrU7D+G0y6aJhlxaLa6Pwty4+xoxboF1BsUI45tujvRpbj9dQVoglChqonGAsjEBYg==", + "dev": true, + "dependencies": { + "array-flatten": "^2.1.0", + "deep-equal": "^1.0.1", + "dns-equal": "^1.0.0", + "dns-txt": "^2.0.2", + "multicast-dns": "^6.0.1", + "multicast-dns-service-types": "^1.1.0" + } + }, + "node_modules/bonjour/node_modules/array-flatten": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/array-flatten/-/array-flatten-2.1.2.tgz", + "integrity": "sha512-hNfzcOV8W4NdualtqBFPyVO+54DSJuZGY9qT4pRroB6S9e3iiido2ISIC5h9R2sPJ8H3FHCIiEnsv1lPXO3KtQ==", + "dev": true + }, + "node_modules/boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" + }, + "node_modules/bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==" + }, + "node_modules/browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dependencies": { + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/browserify-cipher": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dependencies": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "node_modules/browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dependencies": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dependencies": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "node_modules/browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dependencies": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + } + }, + "node_modules/browserify-sign/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/browserify-sign/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/browserify-zlib": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dependencies": { + "pako": "~1.0.5" + } + }, + "node_modules/browserslist": { + "version": "4.20.3", + "resolved": "https://registry.npmmirror.com/browserslist/-/browserslist-4.20.3.tgz", + "integrity": "sha512-NBhymBQl1zM0Y5dQT/O+xiLP9/rzOIQdKM/eMJBAq7yBgaB6krIYLGejrwVYnSHZdqjscB1SPuAjHwxjvN6Wdg==", + "dev": true, + "dependencies": { + "caniuse-lite": "^1.0.30001332", + "electron-to-chromium": "^1.4.118", + "escalade": "^3.1.1", + "node-releases": "^2.0.3", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "4.9.2", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-4.9.2.tgz", + "integrity": "sha512-xq+q3SRMOxGivLhBNaUdC64hDTQwejJ+H0T/NB1XMtTVEwNTrfFF3gAxiyW0Bu/xWEGhjVKgUcMhCrUy2+uCWg==", + "dependencies": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmmirror.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/buffer-indexof": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/buffer-indexof/-/buffer-indexof-1.1.1.tgz", + "integrity": "sha512-4/rOEg86jivtPTeOUUT61jJO1Ya1TrR/OkqCSZDyq84WJh3LuuiphBYJN+fm5xufIk4XAFcEwte/8WzC8If/1g==", + "dev": true + }, + "node_modules/buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==" + }, + "node_modules/builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==" + }, + "node_modules/builtins": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/builtins/-/builtins-1.0.3.tgz", + "integrity": "sha512-uYBjakWipfaO/bXI7E8rq6kpwHRZK5cNYrUv2OzZSI/FvmdMyXJ2tG9dKcjEC5YHmHpUAwsargWIZNWdxb/bnQ==", + "dev": true + }, + "node_modules/butterfly-dag": { + "version": "4.1.23", + "resolved": "https://registry.npmmirror.com/butterfly-dag/-/butterfly-dag-4.1.23.tgz", + "integrity": "sha512-8B7HI5sexTQx9Wexy7pOSVwyMxzKmQxnmz6S7gWzzRuP6O/8Luny4edzkUjnnREE5PBplxK+c6PSJKrny901mQ==", + "dependencies": { + "@antv/hierarchy": "~0.6.4", + "@antv/matrix-util": "^3.0.4", + "d3-force": "~2.1.1", + "dagre": "~0.8.5", + "dom-to-image": "~2.6.0", + "eventemitter3": "4.0.7", + "ml-matrix": "^6.5.0" + }, + "peerDependencies": { + "jquery": ">=2.0.0", + "lodash": ">=4.0.0" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/byline/-/byline-5.0.0.tgz", + "integrity": "sha512-s6webAy+R4SR8XVuJWt2V2rGvhnrhxN+9S15GNuTK3wKPOXFF6RNc+8ug2XhH+2s4f+uudG4kUVYmYOQWL2g0Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/byte-size": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/byte-size/-/byte-size-7.0.1.tgz", + "integrity": "sha512-crQdqyCwhokxwV1UyDzLZanhkugAgft7vt0qbbdt60C6Zf3CAiGmtUCylbtYwrU6loOUw3euGrNtW1J651ot1A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dependencies": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "node_modules/cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dependencies": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cache-loader": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/cache-loader/-/cache-loader-2.0.1.tgz", + "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.0", + "normalize-path": "^3.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dependencies": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, + "node_modules/call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha512-wCyFsDQkKPwwF8BDwOiWNx/9K45L/hvggQiDbve+viMNMQnWhrlYIuBk09offfwCRtCO9P6XwUttufzU11WCVw==", + "dev": true + }, + "node_modules/caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha512-JuG3qI4QOftFsZyOn1qq87fq5grLIyk1JYd5lJmdA+fG7aQ9pA/i3JIJGcO3q0MrRcHlOt1U+ZeHW8Dq9axALQ==", + "dev": true, + "dependencies": { + "callsites": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-callsite/node_modules/callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha512-ksWePWBloaWPxJYQ8TL0JHvtci6G5QTKwQ95RcWAa/lzoAKuAOflGdAK92hpHXjkwb8zLxoLNUoNYZgVsaJzvQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caller-path": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-0.1.0.tgz", + "integrity": "sha512-UJiE1otjXPF5/x+T3zTnSFiTOEmJoGTD9HmBoxnCUwho61a2eSNn/VwtwuIBDAo2SEOv1AJ7ARI5gCmohFLu/g==", + "dev": true, + "optional": true, + "dependencies": { + "callsites": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/callsites": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-0.2.0.tgz", + "integrity": "sha512-Zv4Dns9IbXXmPkgRRUjAaJQgfN4xX5p6+RQFhWUqscdvvK2xK/ZL8b3IXIJsj+4sD+f24NwnWy2BY8AJ82JB0A==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/camel-case": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/camel-case/-/camel-case-3.0.0.tgz", + "integrity": "sha512-+MbKztAYHXPr1jNTSKQF52VpcFjwY5RkR7fxksV8Doo4KAYc5Fl4UJRgthBbTmEx8C54DqahhbLJkDwjI3PI/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0", + "upper-case": "^1.1.1" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", + "dev": true, + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001332", + "resolved": "https://registry.npmmirror.com/caniuse-lite/-/caniuse-lite-1.0.30001332.tgz", + "integrity": "sha512-10T30NYOEQtN6C11YGg411yebhvpnC6Z102+B95eAsN0oB6KUs01ivE8u+G6FMIRtIrVlYXhL+LUwQ3/hXwDWw==", + "dev": true + }, + "node_modules/case-sensitive-paths-webpack-plugin": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/case-sensitive-paths-webpack-plugin/-/case-sensitive-paths-webpack-plugin-2.4.0.tgz", + "integrity": "sha512-roIFONhcxog0JSSWbvVAh3OocukmSgpqOH6YpMkCvav/ySIV3JKg4Dc8vYtQjYi/UxpNE36r/9v+VqTQqgkYmw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", + "dev": true + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/charcodes": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/charcodes/-/charcodes-0.2.0.tgz", + "integrity": "sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/chardet": { + "version": "0.4.2", + "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.4.2.tgz", + "integrity": "sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==", + "dev": true, + "optional": true + }, + "node_modules/charenc": { + "version": "0.0.2", + "resolved": "https://registry.npmmirror.com/charenc/-/charenc-0.0.2.tgz", + "integrity": "sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==", + "engines": { + "node": "*" + } + }, + "node_modules/check-types": { + "version": "8.0.3", + "resolved": "https://registry.npmmirror.com/check-types/-/check-types-8.0.3.tgz", + "integrity": "sha512-YpeKZngUmG65rLudJ4taU7VLkOCTMhNl/u4ctNC56LQS/zJTyNH0Lrtwm1tfTsbLlwvlfsA2d1c8vCf/Kh2KwQ==", + "dev": true + }, + "node_modules/cheerio": { + "version": "1.0.0-rc.10", + "resolved": "https://registry.npmmirror.com/cheerio/-/cheerio-1.0.0-rc.10.tgz", + "integrity": "sha512-g0J0q/O6mW8z5zxQ3A8E8J1hUgp4SMOvEoW/x84OwyHKe/Zccz83PVT4y5Crcr530FV6NgmKI1qvGTKVl9XXVw==", + "dev": true, + "dependencies": { + "cheerio-select": "^1.5.0", + "dom-serializer": "^1.3.2", + "domhandler": "^4.2.0", + "htmlparser2": "^6.1.0", + "parse5": "^6.0.1", + "parse5-htmlparser2-tree-adapter": "^6.0.1", + "tslib": "^2.2.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cheerio-select": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/cheerio-select/-/cheerio-select-1.6.0.tgz", + "integrity": "sha512-eq0GdBvxVFbqWgmCm7M3XGs1I8oLy/nExUnh6oLqmBditPO9AqQJrkslDpMun/hZ0yyTs8L0m85OHp4ho6Qm9g==", + "dev": true, + "dependencies": { + "css-select": "^4.3.0", + "css-what": "^6.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.3.1", + "domutils": "^2.8.0" + } + }, + "node_modules/cheerio-select/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "node_modules/cheerio-select/node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cheerio-select/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/cheerio-select/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/cheerio-select/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/cheerio-select/node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/cheerio/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/cheerio/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/cheerio/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "optional": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "optional": true, + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "optional": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chokidar/node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "optional": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/chokidar/node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "optional": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==" + }, + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/chrome-trace-event/-/chrome-trace-event-1.0.3.tgz", + "integrity": "sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/ci-info": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-1.6.0.tgz", + "integrity": "sha512-vsGdkwSCDpWmP80ncATX7iea5DWQemg1UgCW5J8tqjU3lYw4FBYuj89J0CTVomA7BEfvSZd84GmHko+MxFQU2A==", + "dev": true + }, + "node_modules/cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/circular-json": { + "version": "0.3.3", + "resolved": "https://registry.npmmirror.com/circular-json/-/circular-json-0.3.3.tgz", + "integrity": "sha512-UZK3NBx2Mca+b5LsG7bY183pHWt5Y1xts4P3Pz7ENTwGVnJOUWbRb3ocjvX7hx9tq/yTAdclXm9sZ38gNuem4A==", + "deprecated": "CircularJSON is in maintenance only, flatted is its successor.", + "dev": true, + "optional": true + }, + "node_modules/class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dependencies": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/class-utils/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-css": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/clean-css/-/clean-css-4.2.4.tgz", + "integrity": "sha512-EJUDT7nDVFDvaQgAo2G/PJvxmp1o/c6iXLbswsBbUFXi1Nr+AjA2cKmfbKDMjMvzEe75g3P6JkaDDAKk96A85A==", + "dev": true, + "dependencies": { + "source-map": "~0.6.0" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/clean-css/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/clean-stack": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/clean-stack/-/clean-stack-2.2.0.tgz", + "integrity": "sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-cursor": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-2.1.0.tgz", + "integrity": "sha512-8lgKz8LmCRYZZQDpRyT2m5rKJ08TnU4tR9FFFW2rxpxR1FzWi4PQ/NfyODchAatHaUgnSPVcx/R5w6NuTBzFiw==", + "dev": true, + "dependencies": { + "restore-cursor": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cli-highlight": { + "version": "2.1.11", + "resolved": "https://registry.npmmirror.com/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", + "dev": true, + "dependencies": { + "chalk": "^4.0.0", + "highlight.js": "^10.7.1", + "mz": "^2.4.0", + "parse5": "^5.1.1", + "parse5-htmlparser2-tree-adapter": "^6.0.0", + "yargs": "^16.0.0" + }, + "bin": { + "highlight": "bin/highlight" + }, + "engines": { + "node": ">=8.0.0", + "npm": ">=5.0.0" + } + }, + "node_modules/cli-highlight/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/cli-highlight/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/cli-highlight/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/cli-highlight/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-highlight/node_modules/highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/cli-highlight/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cli-spinners": { + "version": "2.6.1", + "resolved": "https://registry.npmmirror.com/cli-spinners/-/cli-spinners-2.6.1.tgz", + "integrity": "sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/cli-truncate": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/cli-truncate/-/cli-truncate-0.2.1.tgz", + "integrity": "sha512-f4r4yJnbT++qUPI9NR4XLDLq41gQ+uqnPItWG0F5ZkehuNiTTa3EY0S4AqTSUOeJ7/zU41oWPQSNkW5BqPL9bg==", + "dev": true, + "dependencies": { + "slice-ansi": "0.0.4", + "string-width": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/slice-ansi": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-0.0.4.tgz", + "integrity": "sha512-up04hB2hR92PgjpyU3y/eg91yIBILyjVY26NvvciY3EVVPjybkMszMpXQ9QAkcS3I5rtJBDLoTxxg+qvW8c7rw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-truncate/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cli-width": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-2.2.1.tgz", + "integrity": "sha512-GRMWDxpOB6Dgk2E5Uo+3eEBvtOOlimMmpbFiKuLFnQzYDavtLFY3K5ona41jgN/WdRZtG7utuVSVTL4HbZHGkw==", + "dev": true, + "optional": true + }, + "node_modules/clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "dependencies": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, + "node_modules/clipboardy": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", + "integrity": "sha512-mKhiIL2DrQIsuXMgBgnfEHOZOryC7kY7YO//TN6c63wlEm3NG5tz+YgY5rVi29KCmq/QQjKYvM7a19+MDOTHOQ==", + "dev": true, + "dependencies": { + "arch": "^2.1.1", + "execa": "^1.0.0", + "is-wsl": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/clipboardy/node_modules/is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "dependencies": { + "is-docker": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "dependencies": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/clone": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/clone/-/clone-1.0.4.tgz", + "integrity": "sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/clone-deep": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/cmd-shim": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/cmd-shim/-/cmd-shim-4.1.0.tgz", + "integrity": "sha512-lb9L7EM4I/ZRVuljLPEtUJOP+xiQVknZ4ZMpMgEp4JzNldPb27HU03hi6K1/6CoIuit/Zm/LQXySErFeXxDprw==", + "dev": true, + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/co": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/co/-/co-4.6.0.tgz", + "integrity": "sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==", + "dev": true, + "optional": true, + "engines": { + "iojs": ">= 1.0.0", + "node": ">= 0.12.0" + } + }, + "node_modules/coa": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dependencies": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha512-RpAVKQA5T63xEj6/giIbUEtZwJ4UFIc3ZtvEkiaUERylqe8xb5IvqcgOurZLahv93CLKfxcw5YI+DZcUBRyLXA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha512-lNkKvzEeMBBjUGHZ+q6z9pSJla0KWAQPvtzhEV9+iGyQYG+pBpl7xKDhxoNSOZH2hhv0v5k0y2yAM4o4SjoSkw==", + "dependencies": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/color": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", + "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", + "dependencies": { + "color-convert": "^1.9.3", + "color-string": "^1.6.0" + } + }, + "node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/color-string": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", + "dependencies": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "node_modules/columnify": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/columnify/-/columnify-1.6.0.tgz", + "integrity": "sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q==", + "dev": true, + "dependencies": { + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/columnify/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/columnify/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/combined-stream": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, + "dependencies": { + "delayed-stream": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/commander": { + "version": "2.20.3", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==" + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/compare-func/-/compare-func-2.0.0.tgz", + "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", + "dev": true, + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" + } + }, + "node_modules/component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==" + }, + "node_modules/compress-commons": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/compress-commons/-/compress-commons-2.1.1.tgz", + "integrity": "sha512-eVw6n7CnEMFzc3duyFVrQEuY1BlHR3rYsSztyG32ibGMW722i3C6IizEGMFmfMU+A+fALvBIwxN3czffTcdA+Q==", + "dev": true, + "dependencies": { + "buffer-crc32": "^0.2.13", + "crc32-stream": "^3.0.1", + "normalize-path": "^3.0.0", + "readable-stream": "^2.3.6" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmmirror.com/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "dependencies": { + "mime-db": ">= 1.43.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/compression": { + "version": "1.7.4", + "resolved": "https://registry.npmmirror.com/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "dependencies": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/compression/node_modules/bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha512-pMhOfFDPiv9t5jjIXkHosWmkSyQbvsgEVNkz0ERHbuLh2T/7j4Mqqpz523Fe8MVY89KC6Sh/QfS2sM+SjgFDcw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==" + }, + "node_modules/concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "engines": [ + "node >= 0.8" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/config-chain": { + "version": "1.1.13", + "resolved": "https://registry.npmmirror.com/config-chain/-/config-chain-1.1.13.tgz", + "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.4", + "proto-list": "~1.2.1" + } + }, + "node_modules/connect-history-api-fallback": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/connect-history-api-fallback/-/connect-history-api-fallback-1.6.0.tgz", + "integrity": "sha512-e54B99q/OUoH64zYYRf3HBP5z24G38h5D3qXu23JGRoigpX5Ss4r9ZnDk3g0Z8uQC2x2lPaJ+UlWBc1ZWBWdLg==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==" + }, + "node_modules/console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", + "dev": true + }, + "node_modules/consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmmirror.com/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "dependencies": { + "bluebird": "^3.1.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==" + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmmirror.com/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dev": true, + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-disposition/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/conventional-changelog-angular": { + "version": "5.0.13", + "resolved": "https://registry.npmmirror.com/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", + "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", + "dev": true, + "dependencies": { + "compare-func": "^2.0.0", + "q": "^1.5.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core": { + "version": "4.2.4", + "resolved": "https://registry.npmmirror.com/conventional-changelog-core/-/conventional-changelog-core-4.2.4.tgz", + "integrity": "sha512-gDVS+zVJHE2v4SLc6B0sLsPiloR0ygU7HaDW14aNJE1v4SlqJPILPl/aJC7YdtRE4CybBf8gDwObBvKha8Xlyg==", + "dev": true, + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-changelog-core/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-core/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/conventional-changelog-core/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/conventional-changelog-preset-loader/-/conventional-changelog-preset-loader-2.3.4.tgz", + "integrity": "sha512-GEKRWkrSAZeTq5+YjUZOYxdHq+ci4dNwHvpaBC3+ENalzFWuCWa9EZXSuZBpkr72sMdKB+1fyDV4takK1Lf58g==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", + "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", + "dev": true, + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-changelog-writer/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/conventional-changelog-writer/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/conventional-commits-filter": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", + "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", + "dev": true, + "dependencies": { + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser": { + "version": "3.2.4", + "resolved": "https://registry.npmmirror.com/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", + "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", + "dev": true, + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-commits-parser/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/conventional-commits-parser/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/conventional-recommended-bump/-/conventional-recommended-bump-6.1.0.tgz", + "integrity": "sha512-uiApbSiNGM/kkdL9GTOLAqC4hbptObFo4wW2QRyHsKciGAfQuLU1ShZ1BIVI/+K2BE/W1AWYQMCXAsv4dyKPaw==", + "dev": true, + "dependencies": { + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" + }, + "bin": { + "conventional-recommended-bump": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/conventional-recommended-bump/node_modules/concat-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/concat-stream/-/concat-stream-2.0.0.tgz", + "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", + "dev": true, + "engines": [ + "node >= 6.0" + ], + "dependencies": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" + } + }, + "node_modules/conventional-recommended-bump/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.1" + } + }, + "node_modules/cookie": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==", + "dev": true + }, + "node_modules/copy-anything": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/copy-anything/-/copy-anything-2.0.6.tgz", + "integrity": "sha512-1j20GZTsvKNkc4BY3NpMOM8tt///wY3FpIzozTOFO2ffuZcV61nojHXVKIy3WM+7ADCy5FVhdZYHYDdgTU0yJw==", + "dev": true, + "dependencies": { + "is-what": "^3.14.1" + } + }, + "node_modules/copy-concurrently": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz", + "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", + "dependencies": { + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" + } + }, + "node_modules/copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha512-XgZ0pFcakEUlbwQEVNg3+QAis1FyTL3Qel9FYy8pSkQqoG3PNoT0bOCQtOXcOkur21r2Eq2kI+IE+gsmAEVlYw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/copy-webpack-plugin/-/copy-webpack-plugin-4.6.0.tgz", + "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", + "dev": true, + "dependencies": { + "cacache": "^10.0.4", + "find-cache-dir": "^1.0.0", + "globby": "^7.1.1", + "is-glob": "^4.0.0", + "loader-utils": "^1.1.0", + "minimatch": "^3.0.4", + "p-limit": "^1.0.0", + "serialize-javascript": "^1.4.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/cacache": { + "version": "10.0.4", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.1", + "chownr": "^1.0.1", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "lru-cache": "^4.1.1", + "mississippi": "^2.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.2", + "ssri": "^5.2.4", + "unique-filename": "^1.1.0", + "y18n": "^4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-cache-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-1.0.0.tgz", + "integrity": "sha512-46TFiBOzX7xq/PcSWfFwkyjpemdRnMe31UQF+os0y+1W3k95f6R4SEt02Hj4p3X0Mir9gfrkmOtshFidS0VPUg==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/globby": { + "version": "7.1.1", + "resolved": "https://registry.npmmirror.com/globby/-/globby-7.1.1.tgz", + "integrity": "sha512-yANWAN2DUcBtuus5Cpd+SKROzXHs2iVXFZt/Ykrfz6SAXqacLX25NZpltE+39ceMexYF4TtEadjuSTw8+3wX4g==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "dir-glob": "^2.0.0", + "glob": "^7.1.2", + "ignore": "^3.3.5", + "pify": "^3.0.0", + "slash": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/copy-webpack-plugin/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/mississippi": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha512-ojakdnUgL5pzJYWw2AIDEupaQCX5OPbM688ZevubICjdIX01PRSYKqm33fJoCOJBRseYCTUlQRnBNX+Pchaejw==", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/copy-webpack-plugin/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/copy-webpack-plugin/node_modules/serialize-javascript": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-1.9.1.tgz", + "integrity": "sha512-0Vb/54WJ6k5v8sSWN09S0ora+Hnr+cX40r9F170nT+mSkaxltoE/7R3OrIdBSUv1OoiobH1QoWQbCnAO+e8J1A==", + "dev": true + }, + "node_modules/copy-webpack-plugin/node_modules/slash": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-1.0.0.tgz", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/copy-webpack-plugin/node_modules/ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.1" + } + }, + "node_modules/copy-webpack-plugin/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/core-js": { + "version": "2.6.11", + "resolved": "https://registry.npmmirror.com/core-js/-/core-js-2.6.11.tgz", + "integrity": "sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg==", + "deprecated": "core-js@<3.23.3 is no longer maintained and not recommended for usage due to the number of issues. Because of the V8 engine whims, feature detection in old core-js versions could cause a slowdown up to 100x even if nothing is polyfilled. Some versions have web compatibility issues. Please, upgrade your dependencies to the actual version of core-js.", + "hasInstallScript": true + }, + "node_modules/core-js-compat": { + "version": "3.22.2", + "resolved": "https://registry.npmmirror.com/core-js-compat/-/core-js-compat-3.22.2.tgz", + "integrity": "sha512-Fns9lU06ZJ07pdfmPMu7OnkIKGPKDzXKIiuGlSvHHapwqMUF2QnnsWwtueFZtSyZEilP0o6iUeHQwpn7LxtLUw==", + "dev": true, + "dependencies": { + "browserslist": "^4.20.2", + "semver": "7.0.0" + } + }, + "node_modules/core-js-compat/node_modules/semver": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/core-util-is": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.3.tgz", + "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==" + }, + "node_modules/cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", + "dev": true, + "dependencies": { + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cpx": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/cpx/-/cpx-1.5.0.tgz", + "integrity": "sha512-jHTjZhsbg9xWgsP2vuNW2jnnzBX+p4T+vNI9Lbjzs1n4KhOfa22bQppiFYLsWQKd8TzmL5aSP/Me3yfsCwXbDA==", + "dev": true, + "dependencies": { + "babel-runtime": "^6.9.2", + "chokidar": "^1.6.0", + "duplexer": "^0.1.1", + "glob": "^7.0.5", + "glob2base": "^0.0.12", + "minimatch": "^3.0.2", + "mkdirp": "^0.5.1", + "resolve": "^1.1.7", + "safe-buffer": "^5.0.1", + "shell-quote": "^1.6.1", + "subarg": "^1.0.0" + }, + "bin": { + "cpx": "bin/index.js" + } + }, + "node_modules/cpx/node_modules/anymatch": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-1.3.2.tgz", + "integrity": "sha512-0XNayC8lTHQ2OI8aljNCN3sSx6hsr/1+rlcDAotXJR7C1oZZHCNsfpbKwMjRA3Uqb5tF1Rae2oloTr4xpq+WjA==", + "dev": true, + "dependencies": { + "micromatch": "^2.1.5", + "normalize-path": "^2.0.0" + } + }, + "node_modules/cpx/node_modules/arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/braces": { + "version": "1.8.5", + "resolved": "https://registry.npmmirror.com/braces/-/braces-1.8.5.tgz", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", + "dev": true, + "dependencies": { + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/chokidar": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-1.7.0.tgz", + "integrity": "sha512-mk8fAWcRUOxY7btlLtitj3A45jOwSAxH4tOFOoEGbVsl6cL6pPMWUy7dwZ/canfj3QEdP6FHSnf/l1c6/WkzVg==", + "deprecated": "Chokidar 2 will break on node v14+. Upgrade to chokidar 3 with 15x less dependencies.", + "dev": true, + "dependencies": { + "anymatch": "^1.3.0", + "async-each": "^1.0.0", + "glob-parent": "^2.0.0", + "inherits": "^2.0.1", + "is-binary-path": "^1.0.0", + "is-glob": "^2.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.0.0" + }, + "optionalDependencies": { + "fsevents": "^1.0.0" + } + }, + "node_modules/cpx/node_modules/expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", + "dev": true, + "dependencies": { + "is-posix-bracket": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/cpx/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/cpx/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", + "dev": true, + "dependencies": { + "arr-diff": "^2.0.0", + "array-unique": "^0.2.1", + "braces": "^1.8.2", + "expand-brackets": "^0.1.4", + "extglob": "^0.3.1", + "filename-regex": "^2.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.1", + "kind-of": "^3.0.2", + "normalize-path": "^2.0.1", + "object.omit": "^2.0.0", + "parse-glob": "^3.0.4", + "regex-cache": "^0.4.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha512-YVIQ82gZPGBebQV/a8dar4AitzCQs0jjXwMPZllpXMaGjXPYVUawSxQrRsjhjupyVxEvbHgUmIhKVlND+j02kA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha512-SleRWjh9JUud2wH1hPs9rZBZ33H6T9HOiL0uwGnGx9FpE6wKGyfWugmbkEOIs6qWrZhg0LWeLziLrEwQJhs5mQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/braces": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "dependencies": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/braces/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dev": true, + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dev": true, + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/expand-brackets/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cpx/node_modules/readdirp/node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/crc": { + "version": "3.8.0", + "resolved": "https://registry.npmmirror.com/crc/-/crc-3.8.0.tgz", + "integrity": "sha512-iX3mfgcTMIq3ZKLIsVFAbv7+Mc10kxabAGQb8HvjA1o3T1PIYprbakQ65d3I+2HGHt6nSKkM9PYjgoJO2KcFBQ==", + "dev": true, + "dependencies": { + "buffer": "^5.1.0" + } + }, + "node_modules/crc/node_modules/buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "node_modules/crc32-stream": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/crc32-stream/-/crc32-stream-3.0.1.tgz", + "integrity": "sha512-mctvpXlbzsvK+6z8kJwSJ5crm7yBwrQMTybJzMw1O4lLGJqjlDCXY2Zw7KheiA6XBEcBmfLx1D88mjRGVJtY9w==", + "dev": true, + "dependencies": { + "crc": "^3.4.4", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6.9.0" + } + }, + "node_modules/crc32-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmmirror.com/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dependencies": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + } + }, + "node_modules/create-ecdh/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dependencies": { + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" + } + }, + "node_modules/create-hmac": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dependencies": { + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "node_modules/cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dependencies": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + }, + "engines": { + "node": ">=4.8" + } + }, + "node_modules/crypt": { + "version": "0.0.2", + "resolved": "https://registry.npmmirror.com/crypt/-/crypt-0.0.2.tgz", + "integrity": "sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==", + "engines": { + "node": "*" + } + }, + "node_modules/crypto-browserify": { + "version": "3.12.0", + "resolved": "https://registry.npmmirror.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dependencies": { + "browserify-cipher": "^1.0.0", + "browserify-sign": "^4.0.0", + "create-ecdh": "^4.0.0", + "create-hash": "^1.1.0", + "create-hmac": "^1.1.0", + "diffie-hellman": "^5.0.0", + "inherits": "^2.0.1", + "pbkdf2": "^3.0.3", + "public-encrypt": "^4.0.0", + "randombytes": "^2.0.0", + "randomfill": "^1.0.3" + }, + "engines": { + "node": "*" + } + }, + "node_modules/csp-html-webpack-plugin": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/csp-html-webpack-plugin/-/csp-html-webpack-plugin-4.0.0.tgz", + "integrity": "sha512-1YqQefNG0SrZisysThlly2bgs4Ab/W91xOM17S8wd+6vTo3E0OdL+y4IAR0MKpthRluNGzFB3QhPqdOhkXAExg==", + "dev": true, + "dependencies": { + "cheerio": "^1.0.0-rc.3", + "lodash": "^4.17.15", + "memory-fs": "^0.5.0" + }, + "peerDependencies": { + "html-webpack-plugin": "^2 || ^3 || ^4", + "webpack": "^2 || ^3 || ^4" + } + }, + "node_modules/csp-html-webpack-plugin/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/css-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmmirror.com/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha512-zj5D7X1U2h2zsXOAM8EyUREBnnts6H+Jm+d1M2DbiQQcUtnqgQsMrdo8JW9R80YFUmIdBZeMu5wvYM7hcgWP/Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "engines": { + "node": ">4" + } + }, + "node_modules/css-loader": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/css-loader/-/css-loader-1.0.1.tgz", + "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", + "dev": true, + "dependencies": { + "babel-code-frame": "^6.26.0", + "css-selector-tokenizer": "^0.7.0", + "icss-utils": "^2.1.0", + "loader-utils": "^1.0.2", + "lodash": "^4.17.11", + "postcss": "^6.0.23", + "postcss-modules-extract-imports": "^1.2.0", + "postcss-modules-local-by-default": "^1.2.0", + "postcss-modules-scope": "^1.1.0", + "postcss-modules-values": "^1.3.0", + "postcss-value-parser": "^3.3.0", + "source-list-map": "^2.0.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/css-loader/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/css-loader/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/css-loader/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-select": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "node_modules/css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==" + }, + "node_modules/css-selector-tokenizer": { + "version": "0.7.3", + "resolved": "https://registry.npmmirror.com/css-selector-tokenizer/-/css-selector-tokenizer-0.7.3.tgz", + "integrity": "sha512-jWQv3oCEL5kMErj4wRnK/OPoBi0D+P1FR2cDCKYPaMeD2eW3/mttav8HT4hT1CKopiJI/psEULjkClhvJo4Lvg==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "fastparse": "^1.1.2" + } + }, + "node_modules/css-tree": { + "version": "1.0.0-alpha.33", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.33.tgz", + "integrity": "sha512-SPt57bh5nQnpsTBsx/IXbO14sRc9xXu5MtMAVuo0BaQQmyf0NupNPPSoMaqiAF5tDFafYsTkfeH4Q/HCKXkg4w==", + "dependencies": { + "mdn-data": "2.0.4", + "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/css-what": { + "version": "3.4.2", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmmirror.com/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, + "node_modules/cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "dependencies": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha512-6RIcwmV3/cBMG8Aj5gucQRsJb4vv4I4rn6YjPbVWd5+Pn/fuG+YseGvXGk00XLkoZkaj31QOD7vMUpNPC4FIuw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha512-JPMZ1TSMRUPVIqEalIBNoBtAYbi8okvcFns4O0YIhcdGebeYZK7dMyHJiQ6GqNBA9kE0Hym4Aqym5rPdsV/4Cw==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/csso": { + "version": "3.5.1", + "resolved": "https://registry.npmmirror.com/csso/-/csso-3.5.1.tgz", + "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "dependencies": { + "css-tree": "1.0.0-alpha.29" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csso/node_modules/css-tree": { + "version": "1.0.0-alpha.29", + "resolved": "https://registry.npmmirror.com/css-tree/-/css-tree-1.0.0-alpha.29.tgz", + "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "dependencies": { + "mdn-data": "~1.1.0", + "source-map": "^0.5.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/csso/node_modules/mdn-data": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-1.1.4.tgz", + "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==" + }, + "node_modules/csstype": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/csstype/-/csstype-3.0.11.tgz", + "integrity": "sha512-sa6P2wJ+CAbgyy4KFssIb/JNMLxFvKF1pCYCSXS8ZMuqZnMsrxqI2E5sPyoTpxoPU/gVZMzr2zjOfg8GIZOMsw==" + }, + "node_modules/current-script-polyfill": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/current-script-polyfill/-/current-script-polyfill-1.0.0.tgz", + "integrity": "sha512-qv8s+G47V6Hq+g2kRE5th+ASzzrL7b6l+tap1DHKK25ZQJv3yIFhH96XaQ7NGL+zRW3t/RDbweJf/dJDe5Z5KA==", + "dev": true + }, + "node_modules/currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, + "dependencies": { + "array-find-index": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/cyclist": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" + }, + "node_modules/d3": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/d3/-/d3-3.5.17.tgz", + "integrity": "sha512-yFk/2idb8OHPKkbAL8QaOaqENNoMhIaSHZerk3oQsECwkObkCpJyjYwCe+OHiq6UEdhe1m8ZGARRRO3ljFjlKg==" + }, + "node_modules/d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, + "node_modules/d3-dispatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz", + "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" + }, + "node_modules/d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, + "node_modules/d3-force": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/d3-force/-/d3-force-2.1.1.tgz", + "integrity": "sha512-nAuHEzBqMvpFVMf9OX75d00OxvOXdxY+xECIXjW6Gv8BRrXu6gAWbv/9XKrvfJ5i5DCokDW7RYE50LRoK092ew==", + "dependencies": { + "d3-dispatch": "1 - 2", + "d3-quadtree": "1 - 2", + "d3-timer": "1 - 2" + } + }, + "node_modules/d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "dependencies": { + "d3-color": "1" + } + }, + "node_modules/d3-quadtree": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz", + "integrity": "sha512-b0Ed2t1UUalJpc3qXzKi+cPGxeXRr4KU9YSlocN74aTzp6R/Ud43t79yLLqxHRWZfsvWXmbDWPpoENK1K539xw==" + }, + "node_modules/d3-timer": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-2.0.0.tgz", + "integrity": "sha512-TO4VLh0/420Y/9dO3+f9abDEFYeCUr2WZRlxJvbp4HPTQcSylXNiL6yZa9FIUvV1yRiFufl1bszTCLDqv9PWNA==" + }, + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmmirror.com/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } + }, + "node_modules/dagre-compound": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/dagre-compound/-/dagre-compound-0.0.11.tgz", + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "dagre": "^0.8.5" + } + }, + "node_modules/dargs": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz", + "integrity": "sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/date-fns": { + "version": "1.30.1", + "resolved": "https://registry.npmmirror.com/date-fns/-/date-fns-1.30.1.tgz", + "integrity": "sha512-hBSVCvSmWC+QypYObzwGOd9wqdDpOt+0wl0KbU+R+uuZBS1jN8VsD1ss3irQDknRj5NvxiTF6oj/nDRnN/UQNw==", + "dev": true + }, + "node_modules/dateformat": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, + "node_modules/de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha512-e/1zu3xH5MQryN2zdVaF0OrdNLUbvWxzMbi+iNA6Bky7l1RoP8a2fIbRocyHclXt/arDrrR6lL3TqFD9pMQTsg==", + "dev": true + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmmirror.com/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/debuglog": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/debuglog/-/debuglog-1.0.1.tgz", + "integrity": "sha512-syBZ+rnAK3EgMsH2aYEOLUW7mZSY9Gb+0wUMCFsZvcmiz+HigA0LOcq/HoQqVuGG+EKykunc7QG2bzrponfaSw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha512-ocLWuYzRPoS9bfiSdDd3cxvrzovVMZnRDVEzAs+hWIVXGDbHxWMECij2OBuyB/An0FFW/nLuq6Kv1i/YC5Qfzg==", + "dev": true, + "dependencies": { + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/decode-uri-component": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz", + "integrity": "sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dedent": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/dedent/-/dedent-0.7.0.tgz", + "integrity": "sha512-Q6fKUPqnAHAyhiUgFU7BUzLiv0kd8saH9al7tnu5Q/okj6dnupxyTgFIBjVzJATdfIAm9NAsvXNzjaKa+bxVyA==", + "dev": true + }, + "node_modules/deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "dependencies": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" + }, + "node_modules/deepmerge": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-2.2.1.tgz", + "integrity": "sha512-R9hc1Xa/NOBi9WRVUWg19rl1UB7Tt4kuPd+thNJgFZoxXsTz7ncaPaeIm+40oSGuP33DfMb4sZt1QIGiJzC4EA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "dependencies": { + "execa": "^3.3.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/default-gateway/node_modules/execa": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "get-stream": "^5.0.0", + "human-signals": "^1.1.1", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.0", + "onetime": "^5.1.0", + "p-finally": "^2.0.0", + "signal-exit": "^3.0.2", + "strip-final-newline": "^2.0.0" + }, + "engines": { + "node": "^8.12.0 || >=9.7.0" + } + }, + "node_modules/default-gateway/node_modules/get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "dependencies": { + "path-key": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dev": true, + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/default-gateway/node_modules/p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/default-gateway/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/defaults": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/defaults/-/defaults-1.0.3.tgz", + "integrity": "sha512-s82itHOnYrN0Ib8r+z7laQz3sdE+4FP3d9Q7VLO7U+KRT+CR0GsWuyHxzdAY82I7cXv0G/twrqomTJLOssO5HA==", + "dev": true, + "dependencies": { + "clone": "^1.0.2" + } + }, + "node_modules/define-properties": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", + "dependencies": { + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dependencies": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-property/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/del/-/del-4.1.1.tgz", + "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "globby": "^6.1.0", + "is-path-cwd": "^2.0.0", + "is-path-in-cwd": "^2.0.0", + "p-map": "^2.0.0", + "pify": "^4.0.1", + "rimraf": "^2.6.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/del/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/del/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/delayed-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, + "node_modules/delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", + "dev": true + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "node_modules/des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dependencies": { + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "dev": true, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, + "node_modules/detect-indent": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz", + "integrity": "sha512-rlpvsxUtM0PQvy9iZe640/IWwWYyBsTApREbA1pHOpmOUIl9MkP/U4z7vTtg4Oaojvqhxt7sdufnT0EzGaR31g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/detect-node": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", + "dev": true + }, + "node_modules/dexie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/dexie/-/dexie-2.0.4.tgz", + "integrity": "sha512-aQ/s1U2wHxwBKRrt2Z/mwFNHMQWhESerFsMYzE+5P5OsIe5o1kgpFMWkzKTtkvkyyEni6mWr/T4HUJuY9xIHLA==", + "engines": { + "node": ">=6.0" + } + }, + "node_modules/dezalgo": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz", + "integrity": "sha512-rXSP0bf+5n0Qonsb+SVVfNfIsimO4HEtmnIpPHY8Q1UCzKlQrDMfdobr8nJOOsRgWCyMRqeSBQzmWUMq7zvVig==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmmirror.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dependencies": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" + } + }, + "node_modules/diffie-hellman/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "dependencies": { + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/dns-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/dns-equal/-/dns-equal-1.0.0.tgz", + "integrity": "sha512-z+paD6YUQsk+AbGCEM4PrOXSss5gd66QfcVBFTKR/HpFL9jCqikS94HYwKww6fQyO7IxrIIyUu+g0Ka9tUS2Cg==", + "dev": true + }, + "node_modules/dns-packet": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", + "dev": true, + "dependencies": { + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" + } + }, + "node_modules/dns-txt": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/dns-txt/-/dns-txt-2.0.2.tgz", + "integrity": "sha512-Ix5PrWjphuSoUXV/Zv5gaFHjnaJtb02F2+Si3Ht9dyJ87+Z/lMmy+dpNHtTGraNK958ndXq2i+GLkWsWHcKaBQ==", + "dev": true, + "dependencies": { + "buffer-indexof": "^1.0.0" + } + }, + "node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/dom-converter": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/dom-converter/-/dom-converter-0.2.0.tgz", + "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", + "dev": true, + "dependencies": { + "utila": "~0.4" + } + }, + "node_modules/dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dependencies": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + } + }, + "node_modules/dom-serializer/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==" + }, + "node_modules/dom-to-image": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/dom-to-image/-/dom-to-image-2.6.0.tgz", + "integrity": "sha512-Dt0QdaHmLpjURjU7Tnu3AgYSF2LuOmksSGsUcE6ItvJoCWTBEmiMXcqBdNSAm9+QbbwD7JMoVsuuKX6ZVQv1qA==" + }, + "node_modules/domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "engines": { + "node": ">=0.4", + "npm": ">=1.2" + } + }, + "node_modules/domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==" + }, + "node_modules/domhandler": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", + "dev": true, + "dependencies": { + "domelementtype": "^2.2.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/domhandler/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/domready": { + "version": "1.0.8", + "resolved": "https://registry.npmmirror.com/domready/-/domready-1.0.8.tgz", + "integrity": "sha512-uIzsOJUNk+AdGE9a6VDeessoMCzF8RrZvJCX/W8QtyfgdR6Uofn/MvRonih3OtCO79b2VDzDOymuiABrQ4z3XA==", + "dev": true + }, + "node_modules/domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dependencies": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "node_modules/dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "dependencies": { + "is-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/dotenv": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/dotenv/-/dotenv-7.0.0.tgz", + "integrity": "sha512-M3NhsLbV1i6HuGzBUH8vXrtxOk+tWmzWKDMbAVSUp3Zsjm7ywFeuwrUXhmhQyRK1q5B5GGy7hcXPbj3bnfZg2g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/dotenv-expand": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/dotenv-expand/-/dotenv-expand-5.1.0.tgz", + "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", + "dev": true + }, + "node_modules/dt-sql-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/dt-sql-parser/-/dt-sql-parser-1.2.1.tgz", + "integrity": "sha512-bp6Rtm8N3m2Z3tavtKGo8J5ffaPQdPodYV2xGi9f6IsWbHzOkpNBxHlORcWtnSLtA/JvZcvImQxgbkdaGiv5cw==" + }, + "node_modules/duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "node_modules/duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmmirror.com/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dependencies": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/easings-css": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/easings-css/-/easings-css-1.0.0.tgz", + "integrity": "sha512-7Uq7NdazNfVtr0RNmPAys8it0zKCuaqxJStYKEl72D3j4gbvXhhaM7iWNbqhA4C94ygCye6VuyhzBRQC4szeBg==" + }, + "node_modules/easy-stack": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", + "dev": true, + "dependencies": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "node_modules/echarts": { + "version": "4.9.0", + "resolved": "https://registry.npmmirror.com/echarts/-/echarts-4.9.0.tgz", + "integrity": "sha512-+ugizgtJ+KmsJyyDPxaw2Br5FqzuBnyOWwcxPKO6y0gc5caYcfnEUIlNStx02necw8jmKmTafmpHhGo4XDtEIA==", + "dependencies": { + "zrender": "4.3.2" + } + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==", + "dev": true + }, + "node_modules/ejs": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", + "dev": true, + "hasInstallScript": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/electron-to-chromium": { + "version": "1.4.121", + "resolved": "https://registry.npmmirror.com/electron-to-chromium/-/electron-to-chromium-1.4.121.tgz", + "integrity": "sha512-N7OXhMr1p2oa9EkOhmHpmOm43DHzs55dep2FF6M7y6px5QJBheqEE3nwwZ+xJowlff+AEmMOdg3ARYGB+0kzbA==", + "dev": true + }, + "node_modules/elegant-spinner": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz", + "integrity": "sha512-B+ZM+RXvRqQaAmkMlO/oSe5nMUOaUnyfGYCEHoR8wrXsZR2mA0XVibsxV1bvTwxdRWah1PkQqso2EzhILGHtEQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/element-resize-detector": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/element-resize-detector/-/element-resize-detector-1.2.4.tgz", + "integrity": "sha512-Fl5Ftk6WwXE0wqCgNoseKWndjzZlDCwuPTcoVZfCP9R3EHQF8qUtr3YUPNETegRBOKqQKPW3n4kiIWngGi8tKg==", + "dependencies": { + "batch-processor": "1.0.0" + } + }, + "node_modules/elliptic": { + "version": "6.5.4", + "resolved": "https://registry.npmmirror.com/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dependencies": { + "bn.js": "^4.11.9", + "brorand": "^1.1.0", + "hash.js": "^1.0.0", + "hmac-drbg": "^1.0.1", + "inherits": "^2.0.4", + "minimalistic-assert": "^1.0.1", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/elliptic/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/encoding": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/encoding/-/encoding-0.1.13.tgz", + "integrity": "sha512-ETBauow1T35Y/WZMkio9jiM0Z5xjHHmJ4XmjZOq1l/dXz3lr2sRn87nJy20RupqSh1F2m3HHPSp8ShIPQJrJ3A==", + "dev": true, + "optional": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "dev": true, + "optional": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmmirror.com/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dependencies": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/enhanced-resolve/node_modules/memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + }, + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==" + }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/envinfo": { + "version": "7.8.1", + "resolved": "https://registry.npmmirror.com/envinfo/-/envinfo-7.8.1.tgz", + "integrity": "sha512-/o+BXHmB7ocbHEAs6F2EnG0ogybVVUdkRunTT2glZU9XAaGmhqskrvKwqXuDfNjEO0LZKWdejEEpnq8aM0tOaw==", + "dev": true, + "bin": { + "envinfo": "dist/cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/err-code": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/err-code/-/err-code-2.0.3.tgz", + "integrity": "sha512-2bmlRpNKBxT/CRmPOlyISQpNj+qSeYvcym/uT0Jx2bMOlKLtSy1ZmLuVxSEKKyor/N5yhvp/ZiG1oE3DEYMSFA==", + "dev": true + }, + "node_modules/errno": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/errno/-/errno-0.1.8.tgz", + "integrity": "sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==", + "dependencies": { + "prr": "~1.0.1" + }, + "bin": { + "errno": "cli.js" + } + }, + "node_modules/error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "dependencies": { + "is-arrayish": "^0.2.1" + } + }, + "node_modules/error-stack-parser": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/error-stack-parser/-/error-stack-parser-2.0.7.tgz", + "integrity": "sha512-chLOW0ZGRf4s8raLrDxa5sdkvPec5YdvwbFnqJme4rk0rFajP8mPtrDL1+I+CwrQDCjswDA5sREX7jYQDQs9vA==", + "dev": true, + "dependencies": { + "stackframe": "^1.1.1" + } + }, + "node_modules/es-abstract": { + "version": "1.19.5", + "resolved": "https://registry.npmmirror.com/es-abstract/-/es-abstract-1.19.5.tgz", + "integrity": "sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==", + "dependencies": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "get-symbol-description": "^1.0.0", + "has": "^1.0.3", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.3", + "is-callable": "^1.2.4", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.0", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-shim-unscopables": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz", + "integrity": "sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/es-to-primitive": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "dependencies": { + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==", + "dev": true + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/eslint": { + "version": "6.8.0", + "resolved": "https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz", + "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", + "dependencies": { + "@babel/code-frame": "^7.0.0", + "ajv": "^6.10.0", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^5.0.0", + "eslint-utils": "^1.4.3", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.1.2", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.0.0", + "globals": "^12.1.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^7.0.0", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.14", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.3", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^6.1.2", + "strip-ansi": "^5.2.0", + "strip-json-comments": "^3.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "bin": { + "eslint": "bin/eslint.js" + }, + "engines": { + "node": "^8.10.0 || ^10.13.0 || >=11.10.1" + } + }, + "node_modules/eslint-config-standard": { + "version": "12.0.0", + "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", + "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0", + "eslint-plugin-import": ">=2.13.0", + "eslint-plugin-node": ">=7.0.0", + "eslint-plugin-promise": ">=4.0.0", + "eslint-plugin-standard": ">=4.0.0" + } + }, + "node_modules/eslint-import-resolver-node": { + "version": "0.3.6", + "resolved": "https://registry.npmmirror.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.6.tgz", + "integrity": "sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-import-resolver-node/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-loader": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/eslint-loader/-/eslint-loader-2.2.1.tgz", + "integrity": "sha512-RLgV9hoCVsMLvOxCuNjdqOrUqIj9oJg8hF44vzJaYqsAHuY9G2YAeN3joQ9nxP0p5Th9iFSIpKo+SD8KISxXRg==", + "deprecated": "This loader has been deprecated. Please use eslint-webpack-plugin", + "dev": true, + "dependencies": { + "loader-fs-cache": "^1.0.0", + "loader-utils": "^1.0.2", + "object-assign": "^4.0.1", + "object-hash": "^1.1.4", + "rimraf": "^2.6.1" + }, + "peerDependencies": { + "eslint": ">=1.6.0 <7.0.0", + "webpack": ">=2.0.0 <5.0.0" + } + }, + "node_modules/eslint-module-utils": { + "version": "2.7.3", + "resolved": "https://registry.npmmirror.com/eslint-module-utils/-/eslint-module-utils-2.7.3.tgz", + "integrity": "sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-module-utils/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/eslint-module-utils/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-module-utils/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint-plugin-es": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-es/-/eslint-plugin-es-1.4.1.tgz", + "integrity": "sha512-5fa/gR2yR3NxQf+UXkeLeP8FBBl6tSgdrAz1+cF84v1FMM4twGwQoqTnn+QxFLcPOrF4pdKEJKDB/q9GoyJrCA==", + "dev": true, + "dependencies": { + "eslint-utils": "^1.4.2", + "regexpp": "^2.0.1" + }, + "engines": { + "node": ">=6.5.0" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-es/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "dev": true, + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.26.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-import/-/eslint-plugin-import-2.26.0.tgz", + "integrity": "sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.4", + "array.prototype.flat": "^1.2.5", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.6", + "eslint-module-utils": "^2.7.3", + "has": "^1.0.3", + "is-core-module": "^2.8.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.values": "^1.1.5", + "resolve": "^1.22.0", + "tsconfig-paths": "^3.14.1" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + } + }, + "node_modules/eslint-plugin-node": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-node/-/eslint-plugin-node-8.0.1.tgz", + "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", + "dev": true, + "dependencies": { + "eslint-plugin-es": "^1.3.1", + "eslint-utils": "^1.3.1", + "ignore": "^5.0.2", + "minimatch": "^3.0.4", + "resolve": "^1.8.1", + "semver": "^5.5.0" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "eslint": ">=4.19.1" + } + }, + "node_modules/eslint-plugin-node/node_modules/ignore": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-5.2.0.tgz", + "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint-plugin-promise": { + "version": "4.3.1", + "resolved": "https://registry.npmmirror.com/eslint-plugin-promise/-/eslint-plugin-promise-4.3.1.tgz", + "integrity": "sha512-bY2sGqyptzFBDLh/GMbAxfdJC+b0f23ME63FOE4+Jao0oZ3E1LEwFtWJX/1pGMJLiTtrSSern2CRM/g+dfc0eQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-plugin-standard": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", + "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", + "dev": true, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-vue": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz", + "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==", + "dependencies": { + "natural-compare": "^1.4.0", + "semver": "^5.6.0", + "vue-eslint-parser": "^7.0.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": "^5.0.0 || ^6.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" + }, + "node_modules/eslint-plugin-vue/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { + "version": "7.11.0", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", + "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", + "dependencies": { + "debug": "^4.1.1", + "eslint-scope": "^5.1.1", + "eslint-visitor-keys": "^1.1.0", + "espree": "^6.2.1", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^6.3.0" + }, + "engines": { + "node": ">=8.10" + }, + "peerDependencies": { + "eslint": ">=5.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-scope": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-4.0.3.tgz", + "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eslint-utils": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz", + "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", + "dependencies": { + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint/node_modules/acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint/node_modules/ansi-escapes": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", + "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", + "dependencies": { + "type-fest": "^0.21.3" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-escapes/node_modules/type-fest": { + "version": "0.21.3", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/chardet": { + "version": "0.7.0", + "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" + }, + "node_modules/eslint/node_modules/cli-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", + "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", + "dependencies": { + "restore-cursor": "^3.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/cli-width": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", + "engines": { + "node": ">= 10" + } + }, + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/eslint/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/eslint/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/eslint/node_modules/doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dependencies": { + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/espree": { + "version": "6.2.1", + "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz", + "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", + "dependencies": { + "acorn": "^7.1.1", + "acorn-jsx": "^5.2.0", + "eslint-visitor-keys": "^1.1.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/external-editor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", + "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", + "dependencies": { + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/figures": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", + "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/file-entry-cache": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz", + "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", + "dependencies": { + "flat-cache": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dependencies": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/globals": { + "version": "12.4.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-12.4.0.tgz", + "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", + "dependencies": { + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "engines": { + "node": ">= 4" + } + }, + "node_modules/eslint/node_modules/import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dependencies": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/inquirer": { + "version": "7.3.3", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz", + "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.19", + "mute-stream": "0.0.8", + "run-async": "^2.4.0", + "rxjs": "^6.6.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint/node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/eslint/node_modules/mute-stream": { + "version": "0.0.8", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" + }, + "node_modules/eslint/node_modules/onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", + "dependencies": { + "mimic-fn": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/regexpp": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz", + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", + "engines": { + "node": ">=6.5.0" + } + }, + "node_modules/eslint/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/restore-cursor": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", + "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/eslint/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint/node_modules/slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dependencies": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/slice-ansi/node_modules/ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/slice-ansi/node_modules/color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/eslint/node_modules/slice-ansi/node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/eslint/node_modules/slice-ansi/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/string-width/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/table": { + "version": "5.4.6", + "resolved": "https://registry.npmmirror.com/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dependencies": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/eslint/node_modules/table/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" + }, + "node_modules/eslint/node_modules/table/node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "engines": { + "node": ">=4" + } + }, + "node_modules/eslint/node_modules/table/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/eslint/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/eslint/node_modules/write": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/espree": { + "version": "3.5.4", + "resolved": "https://registry.npmmirror.com/espree/-/espree-3.5.4.tgz", + "integrity": "sha512-yAcIQxtmMiB/jL32dzEp2enBeidsB7xWPLNiw3IIkpVds1P+h7qF9YwJq1yUNzp2OKXgAprs4F61ih66UsoD1A==", + "dev": true, + "optional": true, + "dependencies": { + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/espree/node_modules/acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true, + "optional": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dependencies": { + "estraverse": "^5.1.0" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dependencies": { + "estraverse": "^5.2.0" + }, + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmmirror.com/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/event-pubsub": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/event-pubsub/-/event-pubsub-4.3.0.tgz", + "integrity": "sha512-z7IyloorXvKbFx9Bpie2+vMJKKx1fH1EN5yiTfp8CiLOTptSYy1g8H4yDpGlEdshL1PBiFtBHepF2cNsqeEeFQ==", + "dev": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmmirror.com/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "engines": { + "node": ">=0.8.x" + } + }, + "node_modules/eventsource": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/eventsource/-/eventsource-1.1.0.tgz", + "integrity": "sha512-VSJjT5oCNrFvCS6igjzPAt5hBzQ2qPBFIbJ03zLI9SE0mxwZpMw6BfJrbFHm1a141AavMEB8JHmBhWAd66PfCg==", + "dev": true, + "dependencies": { + "original": "^1.0.0" + }, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dependencies": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/execa": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "dependencies": { + "cross-spawn": "^6.0.0", + "get-stream": "^4.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmmirror.com/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha512-w/ozOKR9Obk3qoWeY/WDi6MFta9AoMR+zud60mdnbniMcBxRuFJyDt2LdX/14A1UABeqk+Uk+LDfUpvoGKppZA==", + "dependencies": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-brackets/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/expand-range/-/expand-range-1.8.2.tgz", + "integrity": "sha512-AFASGfIlnIbkKPQwX1yHaDjFvh/1gyKJODme52V6IORh69uEYgZp0o9C+qsIGNVEiuuhQU0CSSl++Rlegg1qvA==", + "dev": true, + "dependencies": { + "fill-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/fill-range": { + "version": "2.2.4", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-2.2.4.tgz", + "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", + "dev": true, + "dependencies": { + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/is-number": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-2.1.0.tgz", + "integrity": "sha512-QUzH43Gfb9+5yckcrSA0VBDwEtDUchrk4F6tfJZQuNzDJbEDB9cZNzSfXGQ1jqmdDY/kl41lUOWM9syA8z8jlg==", + "dev": true, + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/expand-range/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dev": true, + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/express": { + "version": "4.18.0", + "resolved": "https://registry.npmmirror.com/express/-/express-4.18.0.tgz", + "integrity": "sha512-EJEXxiTQJS3lIPrU1AE2vRuT7X7E+0KBbpm5GSoK524yl0K8X+er8zS2P14E64eqsVNoWbMCT7MpmQ+ErAhgRg==", + "dev": true, + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.0", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.10.3", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/express/node_modules/qs": { + "version": "6.10.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.10.3.tgz", + "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/express/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/extend": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extend-shallow/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/external-editor": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-2.2.0.tgz", + "integrity": "sha512-bSn6gvGxKt+b7+6TKEv1ZycHleA7aHhRHyAqJyp5pbUFuYYNIzpZnQDk7AsYckyWdEnTeAnay0aCy2aV6iTk9A==", + "dev": true, + "optional": true, + "dependencies": { + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dependencies": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extglob/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", + "dev": true, + "engines": [ + "node >=0.6.0" + ] + }, + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==" + }, + "node_modules/fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmmirror.com/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "dependencies": { + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" + }, + "node_modules/fastparse": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/fastparse/-/fastparse-1.1.2.tgz", + "integrity": "sha512-483XLLxTVIwWK3QTrMGRqUfUpoOs/0hbQrl2oz4J0pAcm3A3bu84wxTFqGqkJzewCLdME38xJLJAxBABfQT8sQ==", + "dev": true + }, + "node_modules/fastq": { + "version": "1.13.0", + "resolved": "https://registry.npmmirror.com/fastq/-/fastq-1.13.0.tgz", + "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/faye-websocket": { + "version": "0.11.4", + "resolved": "https://registry.npmmirror.com/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", + "dev": true, + "dependencies": { + "websocket-driver": ">=0.5.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, + "node_modules/figgy-pudding": { + "version": "3.5.2", + "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", + "integrity": "sha512-0btnI/H8f2pavGMN8w40mlSKOfTK2SVJmBfBeVIj3kNw0swwgzyRq0d5TJVOwodFmtvpPeWPN/MCcfuWF0Ezbw==" + }, + "node_modules/figures": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-2.0.0.tgz", + "integrity": "sha512-Oa2M9atig69ZkfwiApY8F2Yy+tzMbazyvqv21R0NsSC8floSOC09BbT1ITWAdoMGQvJ/aZnR1KMwdx9tvHnTNA==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/file-entry-cache": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-2.0.0.tgz", + "integrity": "sha512-uXP/zGzxxFvFfcZGgBIwotm+Tdc55ddPAzF7iHshP4YGaXMww7rSF9peD9D1sui5ebONg5UobsZv+FfgEpGv/w==", + "dev": true, + "optional": true, + "dependencies": { + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/file-loader": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/file-loader/-/file-loader-3.0.1.tgz", + "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", + "dev": true, + "dependencies": { + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, + "node_modules/filemanager-webpack-plugin": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/filemanager-webpack-plugin/-/filemanager-webpack-plugin-2.0.5.tgz", + "integrity": "sha512-Yj5XIdKI2AN2r66uZc4MZ/n18SMqe2KKlkAqHHMW1OwveDs2Vc5129CpbFcI73rq/rjqso+2HsxieS7u5sx6XA==", + "dev": true, + "dependencies": { + "archiver": "^3.0.0", + "cpx": "^1.5.0", + "fs-extra": "^7.0.0", + "make-dir": "^1.1.0", + "mv": "^2.1.1", + "rimraf": "^2.6.2" + } + }, + "node_modules/filemanager-webpack-plugin/node_modules/make-dir": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-1.3.0.tgz", + "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/filemanager-webpack-plugin/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/filename-regex": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/filename-regex/-/filename-regex-2.0.1.tgz", + "integrity": "sha512-BTCqyBaWBTsauvnHiE8i562+EdJj+oUpkqWp2R1iCoR8f6oo8STRu3of7WJJ0TqWtxN50a5YFpzYK4Jj9esYfQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filesize": { + "version": "3.6.1", + "resolved": "https://registry.npmmirror.com/filesize/-/filesize-3.6.1.tgz", + "integrity": "sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha512-VcpLTWqWDiTerugjj8e3+esbg+skS3M9e54UuR3iCeIDMXCLTsAH8hTSzDQU/X6/6t3eYkOKoZSef2PlU6U1XQ==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fill-range/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/find-babel-config": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/find-babel-config/-/find-babel-config-1.2.0.tgz", + "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", + "dev": true, + "dependencies": { + "json5": "^0.5.1", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/find-babel-config/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/find-cache-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz", + "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", + "dependencies": { + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-index": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/find-index/-/find-index-0.1.1.tgz", + "integrity": "sha512-uJ5vWrfBKMcE6y2Z8834dwEZj9mNGxYa3t3I53OwFeuZ8D9oc2E5zcsrkuhX6h4iYrjhiv0T3szQmxlAV9uxDg==", + "dev": true + }, + "node_modules/find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dependencies": { + "locate-path": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/find-yarn-workspace-root": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/find-yarn-workspace-root/-/find-yarn-workspace-root-1.2.1.tgz", + "integrity": "sha512-dVtfb0WuQG+8Ag2uWkbG79hOUzEsRrhBzgfn86g2sJPkzmcpGdghbNTfUKGTxymFrY/tLIodDzLoW9nOJ4FY8Q==", + "dev": true, + "dependencies": { + "fs-extra": "^4.0.3", + "micromatch": "^3.1.4" + } + }, + "node_modules/find-yarn-workspace-root/node_modules/fs-extra": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-4.0.3.tgz", + "integrity": "sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "node_modules/flat-cache": { + "version": "1.3.4", + "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-1.3.4.tgz", + "integrity": "sha512-VwyB3Lkgacfik2vhqR4uv2rvebqmDvFu4jlN/C1RzWoJEo8I7z4Q404oiqYCkq41mni8EzQnm95emU9seckwtg==", + "dev": true, + "optional": true, + "dependencies": { + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/flat-cache/node_modules/rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "optional": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" + }, + "node_modules/flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dependencies": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "node_modules/fn-name": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/fn-name/-/fn-name-2.0.1.tgz", + "integrity": "sha512-oIDB1rXf3BUnn00bh2jVM0byuqr94rBh6g7ZfdKcbmp1we2GQtPzKdloyvBXHs+q3fvxB8EqX5ecFba3RwCSjA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/follow-redirects": { + "version": "1.14.9", + "resolved": "https://registry.npmmirror.com/follow-redirects/-/follow-redirects-1.14.9.tgz", + "integrity": "sha512-MQDfihBQYMcyy5dhRDJUHcw7lb2Pv/TuE6xP1vyraLukNDHKbDxDNaOE3NbCAdKQApno+GPRyo1YAp89yCjK4w==", + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha512-7EwmXrOjyL+ChxMhmG5lnW9MPt1aIeZEwKhQzoBUdTV0N3zuwWDZYVJatDvZ2OyzPUvdIAZDsCetk3coyMfcnQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/for-own": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/for-own/-/for-own-0.1.5.tgz", + "integrity": "sha512-SKmowqGTJoPzLO1T0BBJpkfp3EMacCMOuH40hOUbrbzElVktk4DioXVM99QkLCyKoiuOmyjgcWMpVz2xjE7LZw==", + "dev": true, + "dependencies": { + "for-in": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 0.12" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha512-GMBAbW9antB8iZRHLoGw0b3HANt57diZYFO/HL1JGIC1MjKrdmhxvrJbupnVvpys0zsz7yBApXdQyfepKly2kA==", + "dependencies": { + "map-cache": "^0.2.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmmirror.com/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/from2": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/from2/-/from2-2.3.0.tgz", + "integrity": "sha512-OMcX/4IC/uqEPVgGeyfN22LJk6AZrMkRZHxcHBMBvHScDGgwTm2GT2Wkgtocyd3JfZffjj2kYUDXXII0Fk9W0g==", + "dependencies": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" + } + }, + "node_modules/fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "node_modules/fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, + "engines": { + "node": ">=6 <7 || >=8" + } + }, + "node_modules/fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "dependencies": { + "minipass": "^2.6.0" + } + }, + "node_modules/fs-write-stream-atomic": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz", + "integrity": "sha512-gehEzmPn2nAwr39eay+x3X34Ra+M2QlVUTLhkXPjWdeO8RF9kszk116avgBJM3ZyNHgHXBNx+VmPaFC36k0PzA==", + "dependencies": { + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==" + }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "node_modules/functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" + }, + "node_modules/functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "node_modules/fuzzysearch": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz", + "integrity": "sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg==" + }, + "node_modules/g-status": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/g-status/-/g-status-2.0.2.tgz", + "integrity": "sha512-kQoE9qH+T1AHKgSSD0Hkv98bobE90ILQcXAF4wvGgsr7uFqNvwmh8j+Lq3l0RVt3E3HjSbv2B9biEGcEtpHLCA==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "matcher": "^1.0.0", + "simple-git": "^1.85.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/g-status/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmmirror.com/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "dependencies": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + } + }, + "node_modules/gauge/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", + "dev": true, + "dependencies": { + "number-is-nan": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", + "dev": true, + "dependencies": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gauge/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "dependencies": { + "globule": "^1.0.0" + }, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmmirror.com/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dependencies": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "node_modules/get-own-enumerable-property-symbols": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz", + "integrity": "sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g==", + "dev": true + }, + "node_modules/get-pkg-repo": { + "version": "4.2.1", + "resolved": "https://registry.npmmirror.com/get-pkg-repo/-/get-pkg-repo-4.2.1.tgz", + "integrity": "sha512-2+QbHjFRfGB74v/pYWjd5OhU3TDIC2Gv/YKUTk/tCvAz0pkn/Mz6P3uByuBimLOcPvN2jYdScl3xGFSrx0jEcA==", + "dev": true, + "dependencies": { + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" + }, + "bin": { + "get-pkg-repo": "src/cli.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/get-pkg-repo/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/get-pkg-repo/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/get-port": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/get-port/-/get-port-5.1.1.tgz", + "integrity": "sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmmirror.com/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0" + } + }, + "node_modules/git-raw-commits": { + "version": "2.0.11", + "resolved": "https://registry.npmmirror.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz", + "integrity": "sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==", + "dev": true, + "dependencies": { + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-raw-commits/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/git-raw-commits/node_modules/through2": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/through2/-/through2-4.0.2.tgz", + "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "dev": true, + "dependencies": { + "readable-stream": "3" + } + }, + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/git-remote-origin-url/-/git-remote-origin-url-2.0.0.tgz", + "integrity": "sha512-eU+GGrZgccNJcsDH5LkXR3PB9M958hxc7sbA8DFJjrv9j4L2P/eZfKhM+QD6wyzpiv+b1BpK0XrYCxkovtjSLw==", + "dev": true, + "dependencies": { + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/git-semver-tags": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/git-semver-tags/-/git-semver-tags-4.1.1.tgz", + "integrity": "sha512-OWyMt5zBe7xFs8vglMmhM9lRQzCWL3WjHtxNNfJTMngGym7pC1kh8sP6jevfydJ6LP3ZvGxfb6ABYgPUM0mtsA==", + "dev": true, + "dependencies": { + "meow": "^8.0.0", + "semver": "^6.0.0" + }, + "bin": { + "git-semver-tags": "cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "node_modules/git-url-parse": { + "version": "11.6.0", + "resolved": "https://registry.npmmirror.com/git-url-parse/-/git-url-parse-11.6.0.tgz", + "integrity": "sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==", + "dev": true, + "dependencies": { + "git-up": "^4.0.0" + } + }, + "node_modules/gitconfiglocal": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/gitconfiglocal/-/gitconfiglocal-1.0.0.tgz", + "integrity": "sha512-spLUXeTAVHxDtKsJc8FkFVgFtMdEN9qPGpL23VfSHx4fP4+Ds097IXLvymbnDH8FnmxX5Nr9bPw3A+AQ6mWEaQ==", + "dev": true, + "dependencies": { + "ini": "^1.3.2" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/gl-vec2": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/gl-vec2/-/gl-vec2-1.3.0.tgz", + "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" + }, + "node_modules/glob": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", + "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/glob-base": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-base/-/glob-base-0.3.0.tgz", + "integrity": "sha512-ab1S1g1EbO7YzauaJLkgLp7DZVAqj9M/dvKlTt8DkXA2tiOIcSMrlVI2J1RZyB5iJVccEscjGn+kpOG9788MHA==", + "dev": true, + "dependencies": { + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/glob-parent": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-2.0.0.tgz", + "integrity": "sha512-JDYOvfxio/t42HKdxkAYaCiBN7oYiuxykOxKxdaUW5Qn0zaYN3gRQWolrwdnf0shM9/EP0ebuuTmyoXNr1cC5w==", + "dev": true, + "dependencies": { + "is-glob": "^2.0.0" + } + }, + "node_modules/glob-base/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-base/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha512-Iozmtbqv0noj0uDDqoL0zNq0VBEfK2YFoMAZoxJe4cwphvLR+JskfF30QhXHOR4m3KrE6NLRYw+U9MRXvifyig==", + "dev": true + }, + "node_modules/glob2base": { + "version": "0.0.12", + "resolved": "https://registry.npmmirror.com/glob2base/-/glob2base-0.0.12.tgz", + "integrity": "sha512-ZyqlgowMbfj2NPjxaZZ/EtsXlOch28FRXgMd64vqZWk1bT9+wvSRLYD1om9M7QfQru51zJPAT17qXm4/zd+9QA==", + "dev": true, + "dependencies": { + "find-index": "^0.1.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globals": { + "version": "11.12.0", + "resolved": "https://registry.npmmirror.com/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/globby": { + "version": "9.2.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-9.2.0.tgz", + "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", + "dev": true, + "dependencies": { + "@types/glob": "^7.1.1", + "array-union": "^1.0.2", + "dir-glob": "^2.2.2", + "fast-glob": "^2.2.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globby/node_modules/ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/globule": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/globule/-/globule-1.3.3.tgz", + "integrity": "sha512-mb1aYtDbIjTu4ShMB85m3UzjX9BVKe9WCzsnfMSZk+K5GpIbBOexgg4PPCt5eHDEG5/ZQAUX2Kct02zfiPLsKg==", + "dev": true, + "dependencies": { + "glob": "~7.1.1", + "lodash": "~4.17.10", + "minimatch": "~3.0.2" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/globule/node_modules/glob": { + "version": "7.1.7", + "resolved": "https://registry.npmmirror.com/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/globule/node_modules/minimatch": { + "version": "3.0.8", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "dependencies": { + "delegate": "^3.1.2" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.10", + "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", + "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==" + }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/gzip-size": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/gzip-size/-/gzip-size-5.1.1.tgz", + "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "pify": "^4.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/handle-thing": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", + "dev": true + }, + "node_modules/handlebars": { + "version": "4.7.7", + "resolved": "https://registry.npmmirror.com/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmmirror.com/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "deprecated": "this library is no longer supported", + "dev": true, + "dependencies": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/has": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dependencies": { + "function-bind": "^1.1.1" + }, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/has-ansi": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/has-ansi/-/has-ansi-2.0.0.tgz", + "integrity": "sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-ansi/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==" + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dependencies": { + "get-intrinsic": "^1.1.1" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", + "dev": true + }, + "node_modules/has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha512-IBXk4GTsLYdQ7Rvt+GRBrFSVEkmuOUy4re0Xjd9kJSUQpnTrWR4/y9RpfexN9vkAPMFuQoeWKwqzPozRTlasGw==", + "dependencies": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha512-ODYZC64uqzmtfGMEAX/FvZiRyWLpAC3vYnNunURUnkGVTS+mI0smVsWaPydRBsE3g+ok7h960jChO8mFcWlHaQ==", + "dependencies": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/has-values/node_modules/kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha512-24XsCxmEbRwEDbz/qz3stgin8TTzZ1ESR56OMCN0ujYg+vRutNSiOj9bHH9u85DKgXguraugV5sFuvbD4FW/hw==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dependencies": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/hash-base/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/hash-base/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==" + }, + "node_modules/hash-sum": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/hash-sum/-/hash-sum-1.0.2.tgz", + "integrity": "sha512-fUs4B4L+mlt8/XAtSOGMUO1TXmAelItBPtJG7CyHJfYTdDjwisntGO2JQz7oUsatOY9o68+57eziUVNw/mRHmA==", + "dev": true + }, + "node_modules/hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmmirror.com/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dependencies": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "node_modules/he": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true, + "bin": { + "he": "bin/he" + } + }, + "node_modules/hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "node_modules/highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==", + "deprecated": "Version no longer supported. Upgrade to @latest", + "engines": { + "node": "*" + } + }, + "node_modules/hmac-drbg": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", + "integrity": "sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==", + "dependencies": { + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "node_modules/hoopy": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/hoopy/-/hoopy-0.1.4.tgz", + "integrity": "sha512-HRcs+2mr52W0K+x8RzcLzuPPmVIKMSv97RGHy0Ea9y/mpcaK+xTrjICA04KAHi4GRzxliNqNJEFYWHghy3rSfQ==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true + }, + "node_modules/hpack.js": { + "version": "2.1.6", + "resolved": "https://registry.npmmirror.com/hpack.js/-/hpack.js-2.1.6.tgz", + "integrity": "sha512-zJxVehUdMGIKsRaNt7apO2Gqp0BdqW5yaiGHXXmbpvxgBYVZnAql+BJb4RO5ad2MgpbZKn5G6nMnegrH1FcNYQ==", + "dev": true, + "dependencies": { + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" + } + }, + "node_modules/hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha512-M5ezZw4LzXbBKMruP+BNANf0k+19hDQMgpzBIYnya//Al+fjNct9Wf3b1WedLqdEs2hKBvxq/jh+DsHJLj0F9A==", + "dev": true + }, + "node_modules/hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha512-7Wn5GMLuHBjZCb2bTmnDOycho0p/7UVaAeqXZGbHrBCl6Yd/xDhQJAXe6Ga9AXJH2I5zY1dEdYw2u1UptnSBJA==", + "dev": true + }, + "node_modules/html-entities": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", + "dev": true + }, + "node_modules/html-minifier": { + "version": "3.5.21", + "resolved": "https://registry.npmmirror.com/html-minifier/-/html-minifier-3.5.21.tgz", + "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", + "dev": true, + "dependencies": { + "camel-case": "3.0.x", + "clean-css": "4.2.x", + "commander": "2.17.x", + "he": "1.2.x", + "param-case": "2.1.x", + "relateurl": "0.2.x", + "uglify-js": "3.4.x" + }, + "bin": { + "html-minifier": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-minifier/node_modules/commander": { + "version": "2.17.1", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.17.1.tgz", + "integrity": "sha512-wPMUt6FnH2yzG95SA6mzjQOEKUU3aLaDEmzs1ti+1E9h+CsrZghRlqEM/EJ4KscsQVG8uNN4uVreUeT8+drlgg==", + "dev": true + }, + "node_modules/html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha512-+Il6N8cCo2wB/Vd3gqy/8TZhTD3QvcVeQLCnZiGkGCH3JP28IgGAY41giccp2W4R3jfyJPAP318FQTa1yU7K7g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/html-webpack-plugin": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/html-webpack-plugin/-/html-webpack-plugin-3.2.0.tgz", + "integrity": "sha512-Br4ifmjQojUP4EmHnRBoUIYcZ9J7M4bTMcm7u6xoIAIuq2Nte4TzXX0533owvkQKQD1WeMTTTyD4Ni4QKxS0Bg==", + "deprecated": "3.x is no longer supported", + "dev": true, + "dependencies": { + "html-minifier": "^3.2.3", + "loader-utils": "^0.2.16", + "lodash": "^4.17.3", + "pretty-error": "^2.0.2", + "tapable": "^1.0.0", + "toposort": "^1.0.0", + "util.promisify": "1.0.0" + }, + "engines": { + "node": ">=6.9" + }, + "peerDependencies": { + "webpack": "^1.0.0 || ^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/html-webpack-plugin/node_modules/big.js": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/big.js/-/big.js-3.2.0.tgz", + "integrity": "sha512-+hN/Zh2D08Mx65pZ/4g5bsmNiZUuChDiQfTUQ7qJr4/kuopCr88xZsAXv6mBoZEsUI4OuGHlX59qE94K2mMW8Q==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/html-webpack-plugin/node_modules/emojis-list": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/emojis-list/-/emojis-list-2.1.0.tgz", + "integrity": "sha512-knHEZMgs8BB+MInokmNTg/OyPlAddghe1YBgNwJBc5zsJi/uyIcXoSDsL/W9ymOsBoBGdPIHXYJ9+qKFwRwDng==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/html-webpack-plugin/node_modules/json5": { + "version": "0.5.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-0.5.1.tgz", + "integrity": "sha512-4xrs1aW+6N5DalkqSVA8fxh458CXvR99WU8WLKmq4v8eWAL86Xo3BVqyd3SkA9wEVjCMqyvvRRkshAdOnBp5rw==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/html-webpack-plugin/node_modules/loader-utils": { + "version": "0.2.17", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-0.2.17.tgz", + "integrity": "sha512-tiv66G0SmiOx+pLWMtGEkfSEejxvb6N6uRrQjfWJIT79W9GMpgKeCAmm9aVBKtd4WEgntciI8CsGqjpDoCWJug==", + "dev": true, + "dependencies": { + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" + } + }, + "node_modules/html-webpack-plugin/node_modules/util.promisify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.0.tgz", + "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", + "dev": true, + "dependencies": { + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/htmlparser2": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/htmlparser2/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/htmlparser2/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/http-cache-semantics": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz", + "integrity": "sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ==", + "dev": true + }, + "node_modules/http-deceiver": { + "version": "1.2.7", + "resolved": "https://registry.npmmirror.com/http-deceiver/-/http-deceiver-1.2.7.tgz", + "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==", + "dev": true + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dev": true, + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-parser-js": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/http-parser-js/-/http-parser-js-0.5.6.tgz", + "integrity": "sha512-vDlkRPDJn93swjcjqMSaGSPABbIarsr1TLAui/gLDXzV5VsJNdXNzMYDyNBLQkjWQCJ1uizu8T2oDMhmGt0PRA==", + "dev": true + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmmirror.com/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", + "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", + "dev": true, + "dependencies": { + "@tootallnate/once": "1", + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/http-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/http-proxy-middleware": { + "version": "0.19.1", + "resolved": "https://registry.npmmirror.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz", + "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", + "dev": true, + "dependencies": { + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", + "dev": true, + "dependencies": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + }, + "engines": { + "node": ">=0.8", + "npm": ">=1.3.7" + } + }, + "node_modules/https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==" + }, + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", + "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", + "dev": true, + "dependencies": { + "agent-base": "6", + "debug": "4" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/https-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/https-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true, + "engines": { + "node": ">=8.12.0" + } + }, + "node_modules/humanize-ms": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/humanize-ms/-/humanize-ms-1.2.1.tgz", + "integrity": "sha512-Fl70vYtsAFb/C06PTS9dZBo7ihau+Tu/DNCk/OyHhea07S+aeMWpFFkUaXRa8fI+ScZbEI8dfSxwY7gxZ9SAVQ==", + "dev": true, + "dependencies": { + "ms": "^2.0.0" + } + }, + "node_modules/husky": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/husky/-/husky-1.3.1.tgz", + "integrity": "sha512-86U6sVVVf4b5NYSZ0yvv88dRgBSSXXmHaiq5pP4KDj5JVzdwKgBjEtUPOm8hcoytezFwbU+7gotXNhpHdystlg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "cosmiconfig": "^5.0.7", + "execa": "^1.0.0", + "find-up": "^3.0.0", + "get-stdin": "^6.0.0", + "is-ci": "^2.0.0", + "pkg-dir": "^3.0.0", + "please-upgrade-node": "^3.1.1", + "read-pkg": "^4.0.1", + "run-node": "^1.0.0", + "slash": "^2.0.0" + }, + "bin": { + "husky-upgrade": "lib/upgrader/bin.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/husky/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/husky/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/husky/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/husky/node_modules/read-pkg": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-4.0.1.tgz", + "integrity": "sha512-+UBirHHDm5J+3WDmLBZYSklRYg82nMlz+enn+GMZ22nSR2f4bzxmhso6rzQW/3mT2PVzpzDTiYIZahk8UmZ44w==", + "dev": true, + "dependencies": { + "normalize-package-data": "^2.3.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/icss-replace-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/icss-replace-symbols/-/icss-replace-symbols-1.1.0.tgz", + "integrity": "sha512-chIaY3Vh2mh2Q3RGXttaDIzeiPvaVXJ+C4DAh/w3c37SKZ/U6PGMmuicR2EQQp9bKG8zLMCl7I+PtIoOOPp8Gg==", + "dev": true + }, + "node_modules/icss-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/icss-utils/-/icss-utils-2.1.0.tgz", + "integrity": "sha512-bsVoyn/1V4R1kYYjLcWLedozAM4FClZUdjE9nIr8uWY7xs78y9DATgwz2wGU7M+7z55KenmmTkN2DVJ7bqzjAA==", + "dev": true, + "dependencies": { + "postcss": "^6.0.1" + } + }, + "node_modules/icss-utils/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/icss-utils/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "node_modules/iferr": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/iferr/-/iferr-0.1.5.tgz", + "integrity": "sha512-DUNFN5j7Tln0D+TxzloUjKB+CtVu6myn0JEFak6dG18mNt9YkQ6lzGCdafwofISZ1lLF3xRHJ98VKy9ynkcFaA==" + }, + "node_modules/ignore": { + "version": "3.3.10", + "resolved": "https://registry.npmmirror.com/ignore/-/ignore-3.3.10.tgz", + "integrity": "sha512-Pgs951kaMm5GXP7MOvxERINe3gsaVjUWFm+UZPSq9xYriQAksyhg0csnS0KXSNRD5NmNdapXEpjxG49+AKh/ug==", + "dev": true + }, + "node_modules/ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "dependencies": { + "minimatch": "^3.0.4" + } + }, + "node_modules/image-size": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/image-size/-/image-size-0.5.5.tgz", + "integrity": "sha512-6TDAlDPZxUFCv+fuOkIoXT/V/f3Qbq8e37p+YOiYrUv3v9cc3/6x78VdfPgFVaB9dZYeLUfKgHRebpkm/oP2VQ==", + "dev": true, + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/import-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-cwd/-/import-cwd-2.1.0.tgz", + "integrity": "sha512-Ew5AZzJQFqrOV5BTW3EIoHAnoie1LojZLXKcCQ/yTRyVZosBhK1x1ViYjHGf5pAFOq8ZyChZp6m/fSN7pJyZtg==", + "dev": true, + "dependencies": { + "import-from": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha512-eZ5H8rcgYazHbKC3PG4ClHNykCSxtAhxSSEM+2mb+7evD2CKF5V7c0dNum7AdpDh0ZdICwZY9sRSn8f+KH96sg==", + "dev": true, + "dependencies": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha512-MCL3sf6nCSXOwCTzvPKhN18TU7AHTvdtam8DAogxcrJ8Rjfbbg7Lgng64H9Iy+vUV6VGFClN/TyxBkAebLRR4A==", + "dev": true, + "dependencies": { + "caller-callsite": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/import-from/-/import-from-2.1.0.tgz", + "integrity": "sha512-0vdnLL2wSGnhlRmzHJAg5JHjt1l2vYhzJ7tNLGbeVg0fse56tpGaH0uzH+r9Slej+BSXXEHvBKDEnVSLLE9/+w==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-from/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/import-local": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-2.0.0.tgz", + "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", + "dev": true, + "dependencies": { + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", + "engines": { + "node": ">=0.8.19" + } + }, + "node_modules/in-publish": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", + "dev": true, + "bin": { + "in-install": "in-install.js", + "in-publish": "in-publish.js", + "not-in-install": "not-in-install.js", + "not-in-publish": "not-in-publish.js" + } + }, + "node_modules/indent-string": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha512-bup+4tap3Hympa+JBJUG7XuOsdNQ6fxt0MHyXMKuLBKn0OqsTfvUxkUrroEX1+B2VsSHvCjiIcZVxRtYa4nllA==", + "dev": true + }, + "node_modules/infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==" + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmmirror.com/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmmirror.com/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/init-package-json": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/init-package-json/-/init-package-json-2.0.5.tgz", + "integrity": "sha512-u1uGAtEFu3VA6HNl/yUWw57jmKEMx8SKOxHhxjGnOFUiIlFnohKDFg4ZrPpv9wWqk44nDxGJAtqjdQFm+9XXQA==", + "dev": true, + "dependencies": { + "npm-package-arg": "^8.1.5", + "promzard": "^0.3.0", + "read": "~1.0.1", + "read-package-json": "^4.1.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/read-package-json": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/read-package-json/-/read-package-json-4.1.2.tgz", + "integrity": "sha512-Dqer4pqzamDE2O4M55xp1qZMuLPqi4ldk2ya648FOMHRjwMzFhuxVrG04wd0c38IsvkVdr3vgHI6z+QTPdAjrQ==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^3.0.0", + "npm-normalize-package-bin": "^1.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/init-package-json/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/inquirer": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-3.3.0.tgz", + "integrity": "sha512-h+xtnyk4EwKvFWHrUYsWErEVR+igKtLdchu+o0Z1RL7VU/jVMFbYir2bp6bAj8efFNxWqHX0dIss6fJQ+/+qeQ==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.0", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^2.0.4", + "figures": "^2.0.0", + "lodash": "^4.3.0", + "mute-stream": "0.0.7", + "run-async": "^2.2.0", + "rx-lite": "^4.0.8", + "rx-lite-aggregates": "^4.0.8", + "string-width": "^2.1.0", + "strip-ansi": "^4.0.0", + "through": "^2.3.6" + } + }, + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "optional": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + }, + "node_modules/internal-ip": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", + "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", + "dev": true, + "dependencies": { + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-ip/node_modules/default-gateway": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/default-gateway/-/default-gateway-4.2.0.tgz", + "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", + "dev": true, + "dependencies": { + "execa": "^1.0.0", + "ip-regex": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dependencies": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/invariant": { + "version": "2.2.4", + "resolved": "https://registry.npmmirror.com/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", + "dev": true, + "dependencies": { + "loose-envify": "^1.0.0" + } + }, + "node_modules/inversify": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/inversify/-/inversify-5.1.1.tgz", + "integrity": "sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ==" + }, + "node_modules/inversify-inject-decorators": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/inversify-inject-decorators/-/inversify-inject-decorators-3.1.0.tgz", + "integrity": "sha512-/seBlVp5bXrLQS3DpKEmlgeZL6C7Tf/QITd+IMQrbBBGuCbxb7k3hRAWu9XSreNpFzLgSboz3sClLSEmGwHphw==" + }, + "node_modules/ip": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz", + "integrity": "sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==", + "dev": true + }, + "node_modules/ip-regex": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/ip-regex/-/ip-regex-2.1.0.tgz", + "integrity": "sha512-58yWmlHpp7VYfcdTwMTvwMmqx/Elfxjd9RXTDyMsbL7lLWmhMylLEqiYVLKuLzOZqVgiWXD9MfR62Vv89VRxkw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha512-vOx7VprsKyllwjSkLV79NIhpyLfr3jAp7VaTCMXOJHu4m0Ew1CZ2fcjASwmV1jI3BWuWHB013M48eyeldk9gYg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-any-array": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-any-array/-/is-any-array-2.0.0.tgz", + "integrity": "sha512-WdPV58rT3aOWXvvyuBydnCq4S2BM1Yz8shKxlEpk/6x+GX202XRvXOycEFtNgnHVLoc46hpexPFx8Pz1/sMS0w==" + }, + "node_modules/is-arguments": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/is-arguments/-/is-arguments-1.1.1.tgz", + "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==", + "dev": true + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dependencies": { + "has-bigints": "^1.0.1" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "optional": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==" + }, + "node_modules/is-callable": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/is-callable/-/is-callable-1.2.4.tgz", + "integrity": "sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-ci": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-1.2.1.tgz", + "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", + "dev": true, + "dependencies": { + "ci-info": "^1.5.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-color-stop/-/is-color-stop-1.1.0.tgz", + "integrity": "sha512-H1U8Vz0cfXNujrJzEcvvwMDW9Ra+biSYA3ThdQvAnMLJkEHQXn6bWzLkxHtVYJ+Sdbx0b6finn3jZiaVe7MAHA==", + "dev": true, + "dependencies": { + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "node_modules/is-core-module": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/is-core-module/-/is-core-module-2.9.0.tgz", + "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", + "dev": true, + "dependencies": { + "has": "^1.0.3" + } + }, + "node_modules/is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha512-+w9D5ulSoBNlmw9OHn3U2v51SyoCd0he+bB3xMl62oijhrspxowjU+AIcDY0N3iEJbUEkB15IlMASQsxYigvXg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-date-object": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dependencies": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-descriptor/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha512-yVChGzahRFvbkscn2MlwGismPO12i9+znNruC5gVEntG3qu0xQMzsGg/JFbrsqDOHtHFPci+V5aP5T9I+yeKqw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true, + "bin": { + "is-docker": "cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-dotfile": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/is-dotfile/-/is-dotfile-1.0.3.tgz", + "integrity": "sha512-9YclgOGtN/f8zx0Pr4FQYMdibBiTaH3sn52vjYip4ZSf6C4/6RfTEZ+MR4GvKhCxdPh21Bg42/WL55f6KSnKpg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-equal-shallow": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/is-equal-shallow/-/is-equal-shallow-0.1.3.tgz", + "integrity": "sha512-0EygVC5qPvIyb+gSz7zdD5/AAoS6Qrx1e//6N4yv4oNm30kqvdmG66oZFWVlQHUWe5OjP08FuTw2IdT0EOTcYA==", + "dev": true, + "dependencies": { + "is-primitive": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-lambda": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-lambda/-/is-lambda-1.0.1.tgz", + "integrity": "sha512-z7CMFGNrENq5iFB9Bqo64Xk6Y9sg+epq1myIcdHaGnbMTYOxvzsEtdYqQUylB7LxfkvgrrjP32T6Ywciio9UIQ==", + "dev": true + }, + "node_modules/is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha512-4cboCqIpliH+mAvFNegjZQ4kgKc3ZUhQVr3HvWbSh5q3WH2v82ct+T2Y1hdU5Gdtorx/cLifQjqCbL7bpznLTg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-number/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-observable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-observable/-/is-observable-1.1.0.tgz", + "integrity": "sha512-NqCa4Sa2d+u7BWc6CukaObG3Fh+CU9bvixbpcXYhy2VvYS7vVGIdAgnIS5Ks3A/cqk4rebLJ9s8zBstT2aKnIA==", + "dev": true, + "dependencies": { + "symbol-observable": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/is-path-cwd": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz", + "integrity": "sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-in-cwd": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-2.1.0.tgz", + "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^2.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-path-inside": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-2.1.0.tgz", + "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-posix-bracket": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/is-posix-bracket/-/is-posix-bracket-0.1.1.tgz", + "integrity": "sha512-Yu68oeXJ7LeWNmZ3Zov/xg/oDBnBK2RNxwYY1ilNJX+tKKZqgPK+qOn/Gs9jEu66KDY9Netf5XLKNGzas/vPfQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-primitive": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-primitive/-/is-primitive-2.0.0.tgz", + "integrity": "sha512-N3w1tFaRfk3UrPfqeRyD+GYDASU3W5VinKhlORy8EWVf/sIdDL9GAcew85XmktCfH+ngG7SRXEVDoO18WMdB/Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-promise": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz", + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" + }, + "node_modules/is-regex": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "dependencies": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-resolvable/-/is-resolvable-1.1.0.tgz", + "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", + "dev": true + }, + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "dependencies": { + "protocols": "^1.1.0" + } + }, + "node_modules/is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-symbol": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dependencies": { + "has-symbols": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/is-text-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-text-path/-/is-text-path-1.0.1.tgz", + "integrity": "sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==", + "dev": true, + "dependencies": { + "text-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", + "dev": true + }, + "node_modules/is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha512-rMYPYvCzsXywIsldgLaSoPlw5PfoB/ssr7hY4pLfcodrA5M/eArza1a9VmTiNIBNMjOGr1Ow9mTyU2o69U6U9Q==", + "dev": true + }, + "node_modules/is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dependencies": { + "call-bind": "^1.0.2" + } + }, + "node_modules/is-what": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/is-what/-/is-what-3.14.1.tgz", + "integrity": "sha512-sNxgpk9793nzSs7bA6JQJGeIuRBQhAaNGG77kzYQgMkrID+lS6SlK07K5LaptscDlSaIgH+GPFzf+d75FVxozA==", + "dev": true + }, + "node_modules/is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha512-gfygJYZ2gLTDlmbWMI0CE2MwnFzSN/2SZfkMlItC4K/JBlsWVDB0bO6XhqcY13YXE7iMcAJnzTCJjPiTeJJ0Mw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==" + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", + "dev": true + }, + "node_modules/iview": { + "version": "3.5.4", + "resolved": "https://registry.npmmirror.com/iview/-/iview-3.5.4.tgz", + "integrity": "sha512-CEDHdAXxpGciMV+m1jdMDs0UVqzk/AaFhCDtSGcKDLidXRMOG2TgCZhtEHhI4mf3lchKEUFO/BcXtHAfBNuy7Q==", + "dependencies": { + "async-validator": "^1.12.2", + "deepmerge": "^2.2.1", + "element-resize-detector": "^1.2.0", + "js-calendar": "^1.2.3", + "lodash.throttle": "^4.1.1", + "popper.js": "^1.14.6", + "tinycolor2": "^1.4.1", + "v-click-outside-x": "^4.0.19" + }, + "engines": { + "node": ">=8.9.1", + "npm": ">=5.5.1", + "yarn": ">=1.3.2" + }, + "peerDependencies": { + "vue": "^2.5.2" + } + }, + "node_modules/javascript-stringify": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/javascript-stringify/-/javascript-stringify-1.6.0.tgz", + "integrity": "sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ==", + "dev": true + }, + "node_modules/jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, + "node_modules/js-base64": { + "version": "2.6.4", + "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", + "dev": true + }, + "node_modules/js-calendar": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/js-calendar/-/js-calendar-1.2.3.tgz", + "integrity": "sha512-dAA1/Zbp4+c5E+ARCVTIuKepXsNLzSYfzvOimiYD4S5eeP9QuplSHLcdhfqFSwyM1o1u6ku6RRRCyaZ0YAjiBw==" + }, + "node_modules/js-levenshtein": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/js-levenshtein/-/js-levenshtein-1.1.6.tgz", + "integrity": "sha512-X2BB11YZtrRqY4EnQcLX5Rh373zbK4alC1FW7D7MBhL2gtcC17cTnr6DmfHZeS0s2rTHjUTMMHfG7gO8SSdw+g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/js-message": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", + "dev": true, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/js-queue": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", + "dev": true, + "dependencies": { + "easy-stack": "^1.0.1" + }, + "engines": { + "node": ">=1.0.0" + } + }, + "node_modules/js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" + }, + "node_modules/js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", + "dev": true + }, + "node_modules/jsencrypt": { + "version": "3.2.1", + "resolved": "https://registry.npmmirror.com/jsencrypt/-/jsencrypt-3.2.1.tgz", + "integrity": "sha512-k1sD5QV0KPn+D8uG9AdGzTQuamt82QZ3A3l6f7TRwMU6Oi2Vg0BsL+wZIQBONcraO1pc78ExMdvmBBJ8WhNYUA==" + }, + "node_modules/jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + }, + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", + "dev": true + }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, + "node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" + }, + "node_modules/json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", + "dev": true + }, + "node_modules/json5": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-1.0.1.tgz", + "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "dependencies": { + "minimist": "^1.2.0" + }, + "bin": { + "json5": "lib/cli.js" + } + }, + "node_modules/jsonfile": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/jsonfile/-/jsonfile-4.0.0.tgz", + "integrity": "sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==", + "dev": true, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", + "dev": true, + "engines": [ + "node >= 0.2.0" + ] + }, + "node_modules/JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "dependencies": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + }, + "bin": { + "JSONStream": "bin.js" + }, + "engines": { + "node": "*" + } + }, + "node_modules/jsprim": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", + "dev": true, + "dependencies": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.4.0", + "verror": "1.10.0" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/killable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/killable/-/killable-1.0.1.tgz", + "integrity": "sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/klaw-sync": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/klaw-sync/-/klaw-sync-6.0.0.tgz", + "integrity": "sha512-nIeuVSzdCCs6TDPTqI8w1Yre34sSq7AkZ4B3sfOBbI2CgVSB4Du4aLQijFU2+lhAFCwt9+42Hel6lQNIv6AntQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11" + } + }, + "node_modules/launch-editor": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor/-/launch-editor-2.3.0.tgz", + "integrity": "sha512-3QrsCXejlWYHjBPFXTyGNhPj4rrQdB+5+r5r3wArpLH201aR+nWUgw/zKKkTmilCfY/sv6u8qo98pNvtg8LUTA==", + "dev": true, + "dependencies": { + "picocolors": "^1.0.0", + "shell-quote": "^1.6.1" + } + }, + "node_modules/launch-editor-middleware": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/launch-editor-middleware/-/launch-editor-middleware-2.3.0.tgz", + "integrity": "sha512-GJR64trLdFFwCoL9DMn/d1SZX0OzTDPixu4mcfWTShQ4tIqCHCGvlg9fOEYQXyBlrSMQwylsJfUWncheShfV2w==", + "dev": true, + "dependencies": { + "launch-editor": "^2.3.0" + } + }, + "node_modules/lazystream": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/lazystream/-/lazystream-1.0.1.tgz", + "integrity": "sha512-b94GiNHQNy6JNTrt5w6zNyffMrNkXZb3KTkCZJb2V1xaEGCk093vkZ2jk3tpaeP33/OiXC+WvK9AxUebnf5nbw==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.5" + }, + "engines": { + "node": ">= 0.6.3" + } + }, + "node_modules/lerna": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/lerna/-/lerna-4.0.0.tgz", + "integrity": "sha512-DD/i1znurfOmNJb0OBw66NmNqiM8kF6uIrzrJ0wGE3VNdzeOhz9ziWLYiRaZDGGwgbcjOo6eIfcx9O5Qynz+kg==", + "dev": true, + "dependencies": { + "@lerna/add": "4.0.0", + "@lerna/bootstrap": "4.0.0", + "@lerna/changed": "4.0.0", + "@lerna/clean": "4.0.0", + "@lerna/cli": "4.0.0", + "@lerna/create": "4.0.0", + "@lerna/diff": "4.0.0", + "@lerna/exec": "4.0.0", + "@lerna/import": "4.0.0", + "@lerna/info": "4.0.0", + "@lerna/init": "4.0.0", + "@lerna/link": "4.0.0", + "@lerna/list": "4.0.0", + "@lerna/publish": "4.0.0", + "@lerna/run": "4.0.0", + "@lerna/version": "4.0.0", + "import-local": "^3.0.2", + "npmlog": "^4.1.2" + }, + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": ">= 10.18.0" + } + }, + "node_modules/lerna/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/import-local": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/import-local/-/import-local-3.1.0.tgz", + "integrity": "sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==", + "dev": true, + "dependencies": { + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" + }, + "bin": { + "import-local-fixture": "fixtures/cli.js" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/pkg-dir": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-4.2.0.tgz", + "integrity": "sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==", + "dev": true, + "dependencies": { + "find-up": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/resolve-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz", + "integrity": "sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg==", + "dev": true, + "dependencies": { + "resolve-from": "^5.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/less": { + "version": "3.13.1", + "resolved": "https://registry.npmmirror.com/less/-/less-3.13.1.tgz", + "integrity": "sha512-SwA1aQXGUvp+P5XdZslUOhhLnClSLIjWvJhmd+Vgib5BFIr9lMNlQwmwUNOjXThF/A0x+MCYYPeWEfeWiLRnTw==", + "dev": true, + "dependencies": { + "copy-anything": "^2.0.1", + "tslib": "^1.10.0" + }, + "bin": { + "lessc": "bin/lessc" + }, + "engines": { + "node": ">=6" + }, + "optionalDependencies": { + "errno": "^0.1.1", + "graceful-fs": "^4.1.2", + "image-size": "~0.5.0", + "make-dir": "^2.1.0", + "mime": "^1.4.1", + "native-request": "^1.0.5", + "source-map": "~0.6.0" + } + }, + "node_modules/less-loader": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/less-loader/-/less-loader-6.1.0.tgz", + "integrity": "sha512-/jLzOwLyqJ7Kt3xg5sHHkXtOyShWwFj410K9Si9WO+/h8rmYxxkSR0A3/hFEntWudE20zZnWMtpMYnLzqTVdUA==", + "dev": true, + "dependencies": { + "clone": "^2.1.2", + "less": "^3.11.1", + "loader-utils": "^2.0.0", + "schema-utils": "^2.6.6" + }, + "engines": { + "node": ">= 10.13.0" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/less-loader/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/less-loader/node_modules/json5": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/json5/-/json5-2.2.1.tgz", + "integrity": "sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==", + "dev": true, + "bin": { + "json5": "lib/cli.js" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/less-loader/node_modules/loader-utils": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-2.0.2.tgz", + "integrity": "sha512-TM57VeHptv569d/GKh6TAYdzKblwDNiumOdkFnejjD0XwTH87K90w3O7AiJRqdQoXygvi1VQTJTLGhJl7WqA7A==", + "dev": true, + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" + }, + "engines": { + "node": ">=8.9.0" + } + }, + "node_modules/less-loader/node_modules/schema-utils": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-2.7.1.tgz", + "integrity": "sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg==", + "dev": true, + "dependencies": { + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + } + }, + "node_modules/less/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "optional": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/less/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/less/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "node_modules/levn": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", + "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", + "dependencies": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/libnpmaccess": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/libnpmaccess/-/libnpmaccess-4.0.3.tgz", + "integrity": "sha512-sPeTSNImksm8O2b6/pf3ikv4N567ERYEpeKRPSmqlNt1dTZbvgpJIzg5vAhXHpw2ISBsELFRelk0jEahj1c6nQ==", + "dev": true, + "dependencies": { + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmaccess/node_modules/aproba": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/aproba/-/aproba-2.0.0.tgz", + "integrity": "sha512-lYe4Gx7QT+MKGbDsA+Z+he/Wtef0BiwDOlK/XkBrdfsh9J/jPPXbX0tE9x9cl27Tmu5gg3QUbUrQYa/y+KOHPQ==", + "dev": true + }, + "node_modules/libnpmaccess/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/libnpmaccess/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/libnpmpublish": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/libnpmpublish/-/libnpmpublish-4.0.2.tgz", + "integrity": "sha512-+AD7A2zbVeGRCFI2aO//oUmapCwy7GHqPXFJh3qpToSRNU+tXKJ2YFUgjt04LPPAf2dlEH95s6EhIHM1J7bmOw==", + "dev": true, + "dependencies": { + "normalize-package-data": "^3.0.2", + "npm-package-arg": "^8.1.2", + "npm-registry-fetch": "^11.0.0", + "semver": "^7.1.3", + "ssri": "^8.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/libnpmpublish/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/libnpmpublish/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lint-staged": { + "version": "8.2.1", + "resolved": "https://registry.npmmirror.com/lint-staged/-/lint-staged-8.2.1.tgz", + "integrity": "sha512-n0tDGR/rTCgQNwXnUf/eWIpPNddGWxC32ANTNYsj2k02iZb7Cz5ox2tytwBu+2r0zDXMEMKw7Y9OD/qsav561A==", + "dev": true, + "dependencies": { + "chalk": "^2.3.1", + "commander": "^2.14.1", + "cosmiconfig": "^5.2.0", + "debug": "^3.1.0", + "dedent": "^0.7.0", + "del": "^3.0.0", + "execa": "^1.0.0", + "g-status": "^2.0.2", + "is-glob": "^4.0.0", + "is-windows": "^1.0.2", + "listr": "^0.14.2", + "listr-update-renderer": "^0.5.0", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "micromatch": "^3.1.8", + "npm-which": "^3.0.1", + "p-map": "^1.1.1", + "path-is-inside": "^1.0.2", + "pify": "^3.0.0", + "please-upgrade-node": "^3.0.2", + "staged-git-files": "1.1.2", + "string-argv": "^0.0.2", + "stringify-object": "^3.2.2", + "yup": "^0.27.0" + }, + "bin": { + "lint-staged": "index.js" + } + }, + "node_modules/lint-staged/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/lint-staged/node_modules/del": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/del/-/del-3.0.0.tgz", + "integrity": "sha512-7yjqSoVSlJzA4t/VUwazuEagGeANEKB3f/aNI//06pfKgwoCb7f6Q1gETN1sZzYaj6chTQ0AhIwDiPdfOjko4A==", + "dev": true, + "dependencies": { + "globby": "^6.1.0", + "is-path-cwd": "^1.0.0", + "is-path-in-cwd": "^1.0.0", + "p-map": "^1.1.1", + "pify": "^3.0.0", + "rimraf": "^2.2.8" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/lint-staged/node_modules/globby": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/globby/-/globby-6.1.0.tgz", + "integrity": "sha512-KVbFv2TQtbzCoxAnfD6JcHZTYCzyliEaaeM/gH8qQdkKr5s0OP9scEgvdcngyk7AVdY6YVW/TJHd+lQ/Df3Daw==", + "dev": true, + "dependencies": { + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lint-staged/node_modules/globby/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lint-staged/node_modules/is-path-cwd": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-path-cwd/-/is-path-cwd-1.0.0.tgz", + "integrity": "sha512-cnS56eR9SPAscL77ik76ATVqoPARTqPIVkMDVxRaWH06zT+6+CzIroYRJ0VVvm0Z1zfAvxvz9i/D3Ppjaqt5Nw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lint-staged/node_modules/is-path-in-cwd": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-path-in-cwd/-/is-path-in-cwd-1.0.1.tgz", + "integrity": "sha512-FjV1RTW48E7CWM7eE/J2NJvAEEVektecDBVBE5Hh3nM1Jd0kvhHtX68Pr3xsDf857xt3Y4AkwVULK1Vku62aaQ==", + "dev": true, + "dependencies": { + "is-path-inside": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lint-staged/node_modules/is-path-inside": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-path-inside/-/is-path-inside-1.0.1.tgz", + "integrity": "sha512-qhsCR/Esx4U4hg/9I19OVUAJkGWtjRYHMRgUMZE2TDdj+Ag+kttZanLupfddNyglzz50cUlmWzUaI37GDfNx/g==", + "dev": true, + "dependencies": { + "path-is-inside": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lint-staged/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/lint-staged/node_modules/p-map": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-1.2.0.tgz", + "integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/lint-staged/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr": { + "version": "0.14.3", + "resolved": "https://registry.npmmirror.com/listr/-/listr-0.14.3.tgz", + "integrity": "sha512-RmAl7su35BFd/xoMamRjpIE4j3v+L28o8CT5YhAXQJm1fD+1l9ngXY8JAQRJ+tFK2i5njvi0iRUKV09vPwA0iA==", + "dev": true, + "dependencies": { + "@samverschueren/stream-to-observable": "^0.3.0", + "is-observable": "^1.1.0", + "is-promise": "^2.1.0", + "is-stream": "^1.1.0", + "listr-silent-renderer": "^1.1.1", + "listr-update-renderer": "^0.5.0", + "listr-verbose-renderer": "^0.5.0", + "p-map": "^2.0.0", + "rxjs": "^6.3.3" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/listr-silent-renderer": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/listr-silent-renderer/-/listr-silent-renderer-1.1.1.tgz", + "integrity": "sha512-L26cIFm7/oZeSNVhWB6faeorXhMg4HNlb/dS/7jHhr708jxlXrtrBWo4YUxZQkc6dGoxEAe6J/D3juTRBUzjtA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/listr-update-renderer/-/listr-update-renderer-0.5.0.tgz", + "integrity": "sha512-tKRsZpKz8GSGqoI/+caPmfrypiaq+OQCbd+CovEC24uk1h952lVj5sC7SqyFUm+OaJ5HN/a1YLt5cit2FMNsFA==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "cli-truncate": "^0.2.1", + "elegant-spinner": "^1.0.1", + "figures": "^1.7.0", + "indent-string": "^3.0.0", + "log-symbols": "^1.0.2", + "log-update": "^2.3.0", + "strip-ansi": "^3.0.1" + }, + "engines": { + "node": ">=6" + }, + "peerDependencies": { + "listr": "^0.14.2" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/figures": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/figures/-/figures-1.7.0.tgz", + "integrity": "sha512-UxKlfCRuCBxSXU4C6t9scbDyWZ4VlaFFdojKtzJuSkuOBQ5CNFum+zZXFwHjo+CxBC1t6zlYPgHIgFjL8ggoEQ==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.5", + "object-assign": "^4.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha512-BYqTHXTGUIvg7t1r4sJNKcbDZkL92nkXA8YtRpbjFHRHGDL/NtUeiBJMeE60kIFN/Mg8ESaWQvftaYMGJzQZCQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/listr-update-renderer/node_modules/log-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-1.0.2.tgz", + "integrity": "sha512-mmPrW0Fh2fxOzdBbFv4g1m6pR72haFLPJ2G5SJEELf1y+iaQrDG6cWCPjy54RHYbZAt7X+ls690Kw62AdWXBzQ==", + "dev": true, + "dependencies": { + "chalk": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/listr-update-renderer/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/listr-verbose-renderer": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/listr-verbose-renderer/-/listr-verbose-renderer-0.5.0.tgz", + "integrity": "sha512-04PDPqSlsqIOaaaGZ+41vq5FejI9auqTInicFRndCBgE3bXG8D6W1I+mWhk+1nqbHmyhla/6BUrd5OSiHwKRXw==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "cli-cursor": "^2.1.0", + "date-fns": "^1.27.2", + "figures": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/load-json-file": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-6.2.0.tgz", + "integrity": "sha512-gUD/epcRms75Cw8RT1pUdHugZYM5ce64ucs2GEISABwkRsOQr0q2wm/MV2TKThycIe5e0ytRweW2RZxclogCdQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/load-json-file/node_modules/strip-bom": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-4.0.0.tgz", + "integrity": "sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/loader-fs-cache": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", + "dev": true, + "dependencies": { + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" + } + }, + "node_modules/loader-fs-cache/node_modules/find-cache-dir": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/find-cache-dir/-/find-cache-dir-0.1.1.tgz", + "integrity": "sha512-Z9XSBoNE7xQiV6MSgPuCfyMokH2K7JdpRkOYE1+mu3d4BFJtx3GW+f6Bo4q8IX6rlf5MYbLBKW0pjl2cWdkm2A==", + "dev": true, + "dependencies": { + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-fs-cache/node_modules/pkg-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-1.0.0.tgz", + "integrity": "sha512-c6pv3OE78mcZ92ckebVDqg0aWSoKhOTbwCV6qbCWMk546mAL9pZln0+QsN/yQ7fkucd4+yJPLrCBXNt8Ruk+Eg==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/loader-runner": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/loader-runner/-/loader-runner-2.4.0.tgz", + "integrity": "sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==", + "engines": { + "node": ">=4.3.0 <5.0.0 || >=5.10" + } + }, + "node_modules/loader-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loader-utils/-/loader-utils-1.4.0.tgz", + "integrity": "sha512-qH0WSMBtn/oHuwjy/NucEgbx5dbxxnxup9s4PVXJUDHZBQY+s0NWA9rJf53RBnQZxfch7euUui7hpoAPvALZdA==", + "dependencies": { + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "dependencies": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/lodash": { + "version": "4.17.20", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.20.tgz", + "integrity": "sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA==" + }, + "node_modules/lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha512-xYHt68QRoYGjeeM/XOE1uJtvXQAgvszfBhjV4yvsQH0u2i9I6cI6c6/eG4Hh3UAOVn0y/xAXwmTzEay49Q//HA==", + "dev": true + }, + "node_modules/lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", + "dev": true + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.defaultsdeep": { + "version": "4.6.1", + "resolved": "https://registry.npmmirror.com/lodash.defaultsdeep/-/lodash.defaultsdeep-4.6.1.tgz", + "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.ismatch": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", + "integrity": "sha512-fPMfXjGQEV9Xsq/8MTSgUf255gawYRbjwMyDbcvDhXgV7enSZA0hynz6vMPnpAb5iONEzBHBPsT+0zes5Z301g==", + "dev": true + }, + "node_modules/lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmmirror.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==", + "dev": true + }, + "node_modules/lodash.kebabcase": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz", + "integrity": "sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==", + "dev": true + }, + "node_modules/lodash.mapvalues": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.mapvalues/-/lodash.mapvalues-4.6.0.tgz", + "integrity": "sha512-JPFqXFeZQ7BfS00H58kClY7SPVeHertPE0lNuCyZ26/XlN8TvakYD7b9bGyNmXbT/D3BbtPAAmq90gPWqLkxlQ==", + "dev": true + }, + "node_modules/lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==", + "dev": true + }, + "node_modules/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "node_modules/lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "dependencies": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "node_modules/lodash.throttle": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/lodash.throttle/-/lodash.throttle-4.1.1.tgz", + "integrity": "sha512-wIkUCfVKpVsWo3JSZlc+8MB5it+2AN5W8J7YVMST30UrvcQNZ1Okbj+rbVniijTWE6FGYy4XJq/rHkas8qJMLQ==" + }, + "node_modules/lodash.transform": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.transform/-/lodash.transform-4.6.0.tgz", + "integrity": "sha512-LO37ZnhmBVx0GvOU/caQuipEh4GN82TcWv3yHlebGDgOxbxiwwzW5Pcx2AcvpIv2WmvmSMoC492yQFNhy/l/UQ==", + "dev": true + }, + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmmirror.com/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmmirror.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==", + "dev": true + }, + "node_modules/log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "dependencies": { + "chalk": "^2.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/log-update/-/log-update-2.3.0.tgz", + "integrity": "sha512-vlP11XfFGyeNQlmEn9tJ66rEW1coA/79m5z6BCkudjbAGE83uhAcGYrBFwfs3AdLiLzGRusRPAbSPK9xZteCmg==", + "dev": true, + "dependencies": { + "ansi-escapes": "^3.0.0", + "cli-cursor": "^2.0.0", + "wrap-ansi": "^3.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-3.0.1.tgz", + "integrity": "sha512-iXR3tDXpbnTpzjKSylUJRkLuOrEC7hwEB221cgn6wtF8wpmz28puFXAEfPT5zrjM3wahygB//VuWEr1vTkDcNQ==", + "dev": true, + "dependencies": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/loglevel": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/loglevel/-/loglevel-1.8.0.tgz", + "integrity": "sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==", + "dev": true, + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "dependencies": { + "js-tokens": "^3.0.0 || ^4.0.0" + }, + "bin": { + "loose-envify": "cli.js" + } + }, + "node_modules/loud-rejection": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/loud-rejection/-/loud-rejection-1.6.0.tgz", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, + "dependencies": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/lower-case": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/lower-case/-/lower-case-1.1.4.tgz", + "integrity": "sha512-2Fgx1Ycm599x+WGpIYwJOvsjmXFzTSc34IwDWALRA/8AopUKAVPwfJ+h5+f85BCp0PWmmJcWzEpxOpoXycMpdA==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-5.1.1.tgz", + "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", + "dependencies": { + "yallist": "^3.0.2" + } + }, + "node_modules/make-dir": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-2.1.0.tgz", + "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/make-fetch-happen": { + "version": "9.1.0", + "resolved": "https://registry.npmmirror.com/make-fetch-happen/-/make-fetch-happen-9.1.0.tgz", + "integrity": "sha512-+zopwDy7DNknmwPQplem5lAZX/eCOzSvSNNcSKm5eVwTkOBzoktEfXsa9L23J/GIRhxRsaxzkPEhrJEpE2F4Gg==", + "dev": true, + "dependencies": { + "agentkeepalive": "^4.1.3", + "cacache": "^15.2.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^4.0.1", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^6.0.0", + "minipass": "^3.1.3", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^1.3.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.2", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^6.0.0", + "ssri": "^8.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/make-fetch-happen/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/make-fetch-happen/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/make-fetch-happen/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/make-fetch-happen/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/make-fetch-happen/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha512-4y7uGv8bd2WdM9vpQsiQNo41Ln1NvhvDRuVt0k2JZQ+ezN2uaQes7lZeZ+QQUHOLQAtDaBJ+7wCbi+ab/KFs+w==", + "dependencies": { + "object-visit": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/matcher": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/matcher/-/matcher-1.1.1.tgz", + "integrity": "sha512-+BmqxWIubKTRKNWx/ahnCkk3mG8m7OturVlqq6HiojGJTd5hVYbgZm6WzcYPCoB+KBT4Vd6R7WSRG2OADNaCjg==", + "dev": true, + "dependencies": { + "escape-string-regexp": "^1.0.4" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, + "node_modules/math-random": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/math-random/-/math-random-1.0.4.tgz", + "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", + "dev": true + }, + "node_modules/mavon-editor": { + "version": "2.10.4", + "resolved": "https://registry.npmmirror.com/mavon-editor/-/mavon-editor-2.10.4.tgz", + "integrity": "sha512-CFsBLkgt/KZBDg+SJYe2fyYv4zClY149PiwpH0rDAiiP4ae1XNs0GC8nBsoTeipsHcebDLN1QMkt3bUsnMDjQw==", + "dependencies": { + "xss": "^1.0.6" + } + }, + "node_modules/md5": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz", + "integrity": "sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==", + "dependencies": { + "charenc": "0.0.2", + "crypt": "0.0.2", + "is-buffer": "~1.1.6" + } + }, + "node_modules/md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==" + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/memory-fs": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/memory-fs/-/memory-fs-0.4.1.tgz", + "integrity": "sha512-cda4JKCxReDXFXRqOHPQscuIYg1PvxbE2S2GP45rnwfEK+vZaXC8C1OFvdHIbgw0DLzowXGVoxLaAmlgRy14GQ==", + "dependencies": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + }, + "node_modules/meow": { + "version": "8.1.2", + "resolved": "https://registry.npmmirror.com/meow/-/meow-8.1.2.tgz", + "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", + "dev": true, + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "dev": true, + "dependencies": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "dev": true, + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "dev": true, + "dependencies": { + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "dev": true, + "dependencies": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/meow/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/meow/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==", + "dev": true + }, + "node_modules/merge-options": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/merge-options/-/merge-options-1.0.1.tgz", + "integrity": "sha512-iuPV41VWKWBIOpBsjoxjDZw8/GbSfZ2mk7N1453bwMrfzdrIk7EzBd+8UVR6rkw67th7xnk9Dytl3J+lHPdxvg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/merge-source-map": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/merge-source-map/-/merge-source-map-1.1.0.tgz", + "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", + "dev": true, + "dependencies": { + "source-map": "^0.6.1" + } + }, + "node_modules/merge-source-map/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dependencies": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "bin": { + "miller-rabin": "bin/miller-rabin" + } + }, + "node_modules/miller-rabin/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmmirror.com/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmmirror.com/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dev": true, + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-1.2.0.tgz", + "integrity": "sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mini-css-extract-plugin": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.4.0" + } + }, + "node_modules/mini-css-extract-plugin/node_modules/normalize-url": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", + "dev": true, + "dependencies": { + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==" + }, + "node_modules/minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==" + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minimist": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/minimist/-/minimist-1.2.6.tgz", + "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==" + }, + "node_modules/minimist-options": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", + "dev": true, + "dependencies": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "node_modules/minipass-collect": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/minipass-collect/-/minipass-collect-1.0.2.tgz", + "integrity": "sha512-6T6lH0H8OG9kITm/Jm6tdooIbogG9e0tLgpY6mphXSm/A9u8Nq1ryBG+Qspiub9LjWlBPsPS3tWQ/Botq4FdxA==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-collect/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-collect/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-fetch": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/minipass-fetch/-/minipass-fetch-1.4.1.tgz", + "integrity": "sha512-CGH1eblLq26Y15+Azk7ey4xh0J/XfJfrCox5LDJiKqI2Q2iwOLOKrlmIaODiSQS8d18jalF6y2K2ePUm0CmShw==", + "dev": true, + "dependencies": { + "minipass": "^3.1.0", + "minipass-sized": "^1.0.3", + "minizlib": "^2.0.0" + }, + "engines": { + "node": ">=8" + }, + "optionalDependencies": { + "encoding": "^0.1.12" + } + }, + "node_modules/minipass-fetch/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-fetch/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-flush": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/minipass-flush/-/minipass-flush-1.0.5.tgz", + "integrity": "sha512-JmQSYYpPUqX5Jyn1mXaRwOda1uQ8HP5KAT/oDSLCzt1BYRhQU0/hDtsB1ufZfEEzMZ9aAVmsBw8+FWsIXlClWw==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/minipass-flush/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-flush/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-json-stream": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/minipass-json-stream/-/minipass-json-stream-1.0.1.tgz", + "integrity": "sha512-ODqY18UZt/I8k+b7rl2AENgbWE8IDYam+undIJONvigAz8KR5GWblsFTEfQs0WODsjbSXWlm+JHEv8Gr6Tfdbg==", + "dev": true, + "dependencies": { + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" + } + }, + "node_modules/minipass-json-stream/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-json-stream/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-pipeline": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/minipass-pipeline/-/minipass-pipeline-1.2.4.tgz", + "integrity": "sha512-xuIq7cIOt09RPRJ19gdi4b+RiNvDFYe5JH+ggNvBqGqpQXcru3PcRmOZuHBKWK1Txf9+cQ+HMVN4d6z46LZP7A==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-pipeline/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minipass-sized": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/minipass-sized/-/minipass-sized-1.0.3.tgz", + "integrity": "sha512-MbkQQ2CTiBMlA2Dm/5cY+9SWFEN8pzzOXi6rlM5Xxq0Yqbda5ZQy9sU75a673FE9ZK0Zsbr6Y5iP6u9nktfg2g==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/minipass-sized/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "dependencies": { + "minipass": "^2.9.0" + } + }, + "node_modules/mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dependencies": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/mitt": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/mitt/-/mitt-1.1.2.tgz", + "integrity": "sha512-3btxP0O9iGADGWAkteQ8mzDtEspZqu4I32y4GZYCV5BrwtzdcRpF4dQgNdJadCrbBx7Lu6Sq9AVrerMHR0Hkmw==", + "dev": true + }, + "node_modules/mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dependencies": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mixin-deep/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/mkdirp-infer-owner/-/mkdirp-infer-owner-2.0.0.tgz", + "integrity": "sha512-sdqtiFt3lkOaYvTXSRIUjkIdPTcxgv5+fgqYE/5qgwdw12cOrAuzzgzvVExIkH/ul1oeHN3bCLOWSG3XOqbKKw==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/mkdirp-infer-owner/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/ml-array-max": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/ml-array-max/-/ml-array-max-1.2.4.tgz", + "integrity": "sha512-BlEeg80jI0tW6WaPyGxf5Sa4sqvcyY6lbSn5Vcv44lp1I2GR6AWojfUvLnGTNsIXrZ8uqWmo8VcG1WpkI2ONMQ==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-min": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/ml-array-min/-/ml-array-min-1.2.3.tgz", + "integrity": "sha512-VcZ5f3VZ1iihtrGvgfh/q0XlMobG6GQ8FsNyQXD3T+IlstDv85g8kfV0xUG1QPRO/t21aukaJowDzMTc7j5V6Q==", + "dependencies": { + "is-any-array": "^2.0.0" + } + }, + "node_modules/ml-array-rescale": { + "version": "1.3.7", + "resolved": "https://registry.npmmirror.com/ml-array-rescale/-/ml-array-rescale-1.3.7.tgz", + "integrity": "sha512-48NGChTouvEo9KBctDfHC3udWnQKNKEWN0ziELvY3KG25GR5cA8K8wNVzracsqSW1QEkAXjTNx+ycgAv06/1mQ==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-max": "^1.2.4", + "ml-array-min": "^1.2.3" + } + }, + "node_modules/ml-matrix": { + "version": "6.10.0", + "resolved": "https://registry.npmmirror.com/ml-matrix/-/ml-matrix-6.10.0.tgz", + "integrity": "sha512-wU+jacx1dcP1QArV1/Kv49Ah6y2fq+BiQl2BnNVBC+hoCW7KgBZ4YZrowPopeoY164TB6Kes5wMeDjY8ODHYDg==", + "dependencies": { + "is-any-array": "^2.0.0", + "ml-array-rescale": "^1.3.7" + } + }, + "node_modules/mockjs": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/mockjs/-/mockjs-1.1.0.tgz", + "integrity": "sha512-eQsKcWzIaZzEZ07NuEyO4Nw65g0hdWAyurVol1IPl1gahRwY+svqzfgfey8U8dahLwG44d6/RwEzuK52rSa/JQ==", + "dev": true, + "dependencies": { + "commander": "*" + }, + "bin": { + "random": "bin/random" + } + }, + "node_modules/modify-values": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/modify-values/-/modify-values-1.0.1.tgz", + "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/moment": { + "version": "2.29.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==", + "engines": { + "node": "*" + } + }, + "node_modules/moment-timezone": { + "version": "0.5.37", + "resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.37.tgz", + "integrity": "sha512-uEDzDNFhfaywRl+vwXxffjjq1q0Vzr+fcQpQ1bU0kbzorfS7zVtZnCnGc8mhWmF39d4g4YriF6kwA75mJKE/Zg==", + "dependencies": { + "moment": ">= 2.9.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/monaco-editor": { + "version": "0.19.3", + "resolved": "https://registry.npmmirror.com/monaco-editor/-/monaco-editor-0.19.3.tgz", + "integrity": "sha512-2n1vJBVQF2Hhi7+r1mMeYsmlf18hjVb6E0v5SoMZyb4aeOmYPKun+CE3gYpiNA1KEvtSdaDHFBqH9d7Wd9vREg==" + }, + "node_modules/monaco-editor-webpack-plugin": { + "version": "1.8.2", + "resolved": "https://registry.npmmirror.com/monaco-editor-webpack-plugin/-/monaco-editor-webpack-plugin-1.8.2.tgz", + "integrity": "sha512-g9G7A/lxQtpPsYaZFBqm73dwVkOziGUXExIR6iW7ksZUaiMkpvdTiE9O8edgdJGo+XtCmjycmIKB1Lt8VKbSTQ==", + "dev": true, + "dependencies": { + "loader-utils": "^1.2.3" + }, + "peerDependencies": { + "monaco-editor": "^0.19.1", + "webpack": "^4.5.0" + } + }, + "node_modules/move-concurrently": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/move-concurrently/-/move-concurrently-1.0.1.tgz", + "integrity": "sha512-hdrFxZOycD/g6A6SoI2bB5NA/5NEqD0569+S47WZhPvm46sD50ZHdYaFmnua5lndde9rCHGjmfK7Z8BuCt/PcQ==", + "dependencies": { + "aproba": "^1.1.1", + "copy-concurrently": "^1.0.0", + "fs-write-stream-atomic": "^1.0.8", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.3" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/multicast-dns": { + "version": "6.2.3", + "resolved": "https://registry.npmmirror.com/multicast-dns/-/multicast-dns-6.2.3.tgz", + "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", + "dev": true, + "dependencies": { + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" + }, + "bin": { + "multicast-dns": "cli.js" + } + }, + "node_modules/multicast-dns-service-types": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/multicast-dns-service-types/-/multicast-dns-service-types-1.1.0.tgz", + "integrity": "sha512-cnAsSVxIDsYt0v7HmC0hWZFwwXSh+E6PgCrREDuN/EsjgLwA5XRmlMHhSiDPrt6HxY1gTivEa/Zh7GtODoLevQ==", + "dev": true + }, + "node_modules/multimatch": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/multimatch/-/multimatch-5.0.0.tgz", + "integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==", + "dev": true, + "dependencies": { + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/multimatch/node_modules/array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/mute-stream": { + "version": "0.0.7", + "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.7.tgz", + "integrity": "sha512-r65nCZhrbXXb6dXOACihYApHw2Q6pV0M3V0PSxd74N0+D8nzAdEAITq2oAjA1jVnKI+tGvEBUpqiMh0+rW6zDQ==", + "dev": true + }, + "node_modules/mv": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/mv/-/mv-2.1.1.tgz", + "integrity": "sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg==", + "dev": true, + "dependencies": { + "mkdirp": "~0.5.1", + "ncp": "~2.0.0", + "rimraf": "~2.4.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/mv/node_modules/glob": { + "version": "6.0.4", + "resolved": "https://registry.npmmirror.com/glob/-/glob-6.0.4.tgz", + "integrity": "sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A==", + "dev": true, + "dependencies": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + } + }, + "node_modules/mv/node_modules/rimraf": { + "version": "2.4.5", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.4.5.tgz", + "integrity": "sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ==", + "dev": true, + "dependencies": { + "glob": "^6.0.1" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmmirror.com/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "devOptional": true + }, + "node_modules/nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/native-request": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/native-request/-/native-request-1.1.0.tgz", + "integrity": "sha512-uZ5rQaeRn15XmpgE0xoPL8YWqcX90VtCFglYwAgkvKM5e8fog+vePLAhHxuuv/gRkrQxIeh5U3q9sMNUrENqWw==", + "dev": true, + "optional": true + }, + "node_modules/natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" + }, + "node_modules/ncp": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ncp/-/ncp-2.0.0.tgz", + "integrity": "sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA==", + "dev": true, + "bin": { + "ncp": "bin/ncp" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmmirror.com/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/neo-async": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/neo-async/-/neo-async-2.6.2.tgz", + "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==" + }, + "node_modules/nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" + }, + "node_modules/no-case": { + "version": "2.3.2", + "resolved": "https://registry.npmmirror.com/no-case/-/no-case-2.3.2.tgz", + "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", + "dev": true, + "dependencies": { + "lower-case": "^1.1.1" + } + }, + "node_modules/node-fetch": { + "version": "2.6.7", + "resolved": "https://registry.npmmirror.com/node-fetch/-/node-fetch-2.6.7.tgz", + "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", + "dev": true, + "dependencies": { + "whatwg-url": "^5.0.0" + }, + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/node-fetch/node_modules/tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==", + "dev": true + }, + "node_modules/node-fetch/node_modules/webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", + "dev": true + }, + "node_modules/node-fetch/node_modules/whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "dev": true, + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + }, + "node_modules/node-forge": { + "version": "0.10.0", + "resolved": "https://registry.npmmirror.com/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", + "dev": true, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-gyp": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/node-gyp/-/node-gyp-5.1.1.tgz", + "integrity": "sha512-WH0WKGi+a4i4DUt2mHnvocex/xPLp9pYt5R6M2JdFB7pJ7Z34hveZ4nDTGTiLXCkitA9T8HFZjhinBCiVHYcWw==", + "dev": true, + "dependencies": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.2", + "mkdirp": "^0.5.1", + "nopt": "^4.0.1", + "npmlog": "^4.1.2", + "request": "^2.88.0", + "rimraf": "^2.6.3", + "semver": "^5.7.1", + "tar": "^4.4.12", + "which": "^1.3.1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 6.0.0" + } + }, + "node_modules/node-ipc": { + "version": "9.2.1", + "resolved": "https://registry.npmmirror.com/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", + "dev": true, + "dependencies": { + "event-pubsub": "4.3.0", + "js-message": "1.0.7", + "js-queue": "2.0.2" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dependencies": { + "assert": "^1.1.1", + "browserify-zlib": "^0.2.0", + "buffer": "^4.3.0", + "console-browserify": "^1.1.0", + "constants-browserify": "^1.0.0", + "crypto-browserify": "^3.11.0", + "domain-browser": "^1.1.1", + "events": "^3.0.0", + "https-browserify": "^1.0.0", + "os-browserify": "^0.3.0", + "path-browserify": "0.0.1", + "process": "^0.11.10", + "punycode": "^1.2.4", + "querystring-es3": "^0.2.0", + "readable-stream": "^2.3.3", + "stream-browserify": "^2.0.1", + "stream-http": "^2.7.2", + "string_decoder": "^1.0.0", + "timers-browserify": "^2.0.4", + "tty-browserify": "0.0.0", + "url": "^0.11.0", + "util": "^0.11.0", + "vm-browserify": "^1.0.1" + } + }, + "node_modules/node-libs-browser/node_modules/punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==" + }, + "node_modules/node-releases": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/node-releases/-/node-releases-2.0.3.tgz", + "integrity": "sha512-maHFz6OLqYxz+VQyCAtA3PTX4UP/53pa05fyDNc9CwjvJ0yEh6+xBwKsgCxMNhS8taUKBFYxfuiaD9U/55iFaw==", + "dev": true + }, + "node_modules/node-sass": { + "version": "4.14.1", + "resolved": "https://registry.npmmirror.com/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "async-foreach": "^0.1.3", + "chalk": "^1.1.1", + "cross-spawn": "^3.0.0", + "gaze": "^1.0.0", + "get-stdin": "^4.0.1", + "glob": "^7.0.3", + "in-publish": "^2.0.0", + "lodash": "^4.17.15", + "meow": "^3.7.0", + "mkdirp": "^0.5.1", + "nan": "^2.13.2", + "node-gyp": "^3.8.0", + "npmlog": "^4.0.0", + "request": "^2.88.0", + "sass-graph": "2.2.5", + "stdout-stream": "^1.4.0", + "true-case-path": "^1.0.2" + }, + "bin": { + "node-sass": "bin/node-sass" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "dependencies": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/cross-spawn": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-3.0.1.tgz", + "integrity": "sha512-eZ+m1WNhSZutOa/uRblAc9Ut5MQfukFrFMtPSm3bZCA888NmMd5AWXWdgRZ80zd+pTk1P2JrGjg9pUPTvl2PWQ==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "node_modules/node-sass/node_modules/find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha512-jvElSjyuo4EMQGoTwo1uJU5pQMwTW5lS1x05zzfJuTIyLR3zwO27LYrxNg+dlvKpGOuGy/MzBdXh80g0ve5+HA==", + "dev": true, + "dependencies": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", + "dev": true, + "dependencies": { + "repeating": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha512-cy7ZdNRXdablkXYNI049pthVeXFurRyb9+hA/dZzerZ0pGTx42z+y+ssxBaVV2l70t1muq5IdKhn4UtcoGUY9A==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/node-sass/node_modules/map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/meow": { + "version": "3.7.0", + "resolved": "https://registry.npmmirror.com/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "dependencies": { + "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" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/node-gyp": { + "version": "3.8.0", + "resolved": "https://registry.npmmirror.com/node-gyp/-/node-gyp-3.8.0.tgz", + "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", + "dev": true, + "dependencies": { + "fstream": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "osenv": "0", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^2.0.0", + "which": "1" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/node-sass/node_modules/nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmmirror.com/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", + "dev": true, + "dependencies": { + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/node-sass/node_modules/parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha512-QR/GGaKCkhwk1ePQNYDRKYZ3mwU9ypsKhB0XyFnLQdomyEqk3e8wpW3V5Jp88zbxK4n5ST1nqo+g9juTpownhQ==", + "dev": true, + "dependencies": { + "error-ex": "^1.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha512-yTltuKuhtNeFJKa1PiRzfLAU5182q1y4Eb4XCJ3PBqyzEDkAZRzBrKKBct682ls9reBVHf9udYLN5Nd+K1B9BQ==", + "dev": true, + "dependencies": { + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha512-S4eENJz1pkiQn9Znv33Q+deTOKmbl+jj1Fl+qiP/vYezj+S8x+J3Uo0ISrx/QoEvIlOaDWJhPaRd1flJ9HXZqg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha512-7BGwRHqt4s/uVbuyoeejRn4YmFnYZiFl4AuaeXHlgZf3sONF0SOGlxs2Pw8g6hCKupo08RafIO5YXFNOKTfwsQ==", + "dev": true, + "dependencies": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha512-WD9MTlNtI55IwYUS27iHh9tK3YoIVhxis8yKhLpTqWtml739uXc9NWTpxoHkfZf3+DkCCsXox94/VWZniuZm6A==", + "dev": true, + "dependencies": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/redent": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "dependencies": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/semver": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.3.0.tgz", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", + "dev": true, + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/node-sass/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha512-kwrX1y7czp1E69n2ajbG65mIo9dqvJ+8aBQXOGVxqwvNbsXdFM6Lq37dLAY3mknUwru8CfcCbfOLL/gMo+fi3g==", + "dev": true, + "dependencies": { + "is-utf8": "^0.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", + "dev": true, + "dependencies": { + "get-stdin": "^4.0.1" + }, + "bin": { + "strip-indent": "cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/node-sass/node_modules/tar": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "deprecated": "This version of tar is no longer supported, and will not receive security updates. Please upgrade asap.", + "dev": true, + "dependencies": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + }, + "node_modules/node-sass/node_modules/trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/node-sass/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "dependencies": { + "abbrev": "1", + "osenv": "^0.1.4" + }, + "bin": { + "nopt": "bin/nopt.js" + } + }, + "node_modules/normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "dependencies": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "node_modules/npm-install-checks": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/npm-install-checks/-/npm-install-checks-4.0.0.tgz", + "integrity": "sha512-09OmyDkNLYwqKPOnbI8exiOZU2GVVmQp7tgez2BPi5OZC8M82elDAps7sxC4l//uSUtotWqoEIDwjRvWH4qz8w==", + "dev": true, + "dependencies": { + "semver": "^7.1.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-install-checks/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-install-checks/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-install-checks/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/npm-lifecycle": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/npm-lifecycle/-/npm-lifecycle-3.1.5.tgz", + "integrity": "sha512-lDLVkjfZmvmfvpvBzA4vzee9cn+Me4orq0QF8glbswJVEbIcSNWib7qGOffolysc3teCqbbPZZkzbr3GQZTL1g==", + "dev": true, + "dependencies": { + "byline": "^5.0.0", + "graceful-fs": "^4.1.15", + "node-gyp": "^5.0.2", + "resolve-from": "^4.0.0", + "slide": "^1.1.6", + "uid-number": "0.0.6", + "umask": "^1.1.0", + "which": "^1.3.1" + } + }, + "node_modules/npm-lifecycle/node_modules/resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "node_modules/npm-package-arg": { + "version": "8.1.5", + "resolved": "https://registry.npmmirror.com/npm-package-arg/-/npm-package-arg-8.1.5.tgz", + "integrity": "sha512-LhgZrg0n0VgvzVdSm1oiZworPbTxYHUJCgtsJW8mGvlDpxTM1vSJc3m5QZeUkhAHIzbz3VCHd/R4osi1L1Tg/Q==", + "dev": true, + "dependencies": { + "hosted-git-info": "^4.0.1", + "semver": "^7.3.4", + "validate-npm-package-name": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmmirror.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-package-arg/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmmirror.com/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "dependencies": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "npm-packlist": "bin/index.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-path": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/npm-path/-/npm-path-2.0.4.tgz", + "integrity": "sha512-IFsj0R9C7ZdR5cP+ET342q77uSRdtWOlWpih5eC+lu29tIDbNEgDbzgVJ5UFvYHWhxDZ5TFkJafFioO0pPQjCw==", + "dev": true, + "dependencies": { + "which": "^1.2.10" + }, + "bin": { + "npm-path": "bin/npm-path" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/npm-pick-manifest": { + "version": "6.1.1", + "resolved": "https://registry.npmmirror.com/npm-pick-manifest/-/npm-pick-manifest-6.1.1.tgz", + "integrity": "sha512-dBsdBtORT84S8V8UTad1WlUyKIY9iMsAmqxHbLdeEeBNMLQDlDWWra3wYUx9EBEIiG/YwAy0XyNHDd2goAsfuA==", + "dev": true, + "dependencies": { + "npm-install-checks": "^4.0.0", + "npm-normalize-package-bin": "^1.0.1", + "npm-package-arg": "^8.1.2", + "semver": "^7.3.4" + } + }, + "node_modules/npm-pick-manifest/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest/node_modules/semver": { + "version": "7.3.7", + "resolved": "https://registry.npmmirror.com/semver/-/semver-7.3.7.tgz", + "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "dependencies": { + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-pick-manifest/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/npm-registry-fetch": { + "version": "11.0.0", + "resolved": "https://registry.npmmirror.com/npm-registry-fetch/-/npm-registry-fetch-11.0.0.tgz", + "integrity": "sha512-jmlgSxoDNuhAtxUIG6pVwwtz840i994dL14FoNVZisrmZW5kWd63IUTNv1m/hyRSGSqWjCUp/YZlS1BJyNp9XA==", + "dev": true, + "dependencies": { + "make-fetch-happen": "^9.0.1", + "minipass": "^3.1.3", + "minipass-fetch": "^1.3.0", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.0.0", + "npm-package-arg": "^8.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/npm-registry-fetch/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-registry-fetch/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/npm-registry-fetch/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw==", + "dev": true, + "dependencies": { + "path-key": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/npm-which": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/npm-which/-/npm-which-3.0.1.tgz", + "integrity": "sha512-CM8vMpeFQ7MAPin0U3wzDhSGV0hMHNwHU0wjo402IVizPDrs45jSfSuoC+wThevY88LQti8VvaAnqYAeVy3I1A==", + "dev": true, + "dependencies": { + "commander": "^2.9.0", + "npm-path": "^2.0.2", + "which": "^1.2.10" + }, + "bin": { + "npm-which": "bin/npm-which.js" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "node_modules/npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "dependencies": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "node_modules/nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dependencies": { + "boolbase": "~1.0.0" + } + }, + "node_modules/num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha512-Y1wZESM7VUThYY+4W+X4ySH2maqcA+p7UR+w8VWNWVAd6lwuXXWz/w/Cz43J/dI2I+PS6wD5N+bJUF+gjWvIqg==", + "dev": true + }, + "node_modules/number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha512-4jbtZXNAsfZbAHiiqjLPBiCl16dES1zI4Hpzzxw61Tk+loF+sBDBKx1ICKKKwIqQ7M0mFn1TmkN7euSncWgHiQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmmirror.com/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha512-79LYn6VAb63zgtmAteVOWo9Vdj71ZVBy3Pbse+VqxDpEP83XuujMrGqHIwAXJ5I/aM0zU7dIyIAhifVTPrNItQ==", + "dependencies": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-copy/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/object-hash/-/object-hash-1.3.1.tgz", + "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", + "dev": true, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/object-inspect": { + "version": "1.12.0", + "resolved": "https://registry.npmmirror.com/object-inspect/-/object-inspect-1.12.0.tgz", + "integrity": "sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==" + }, + "node_modules/object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha512-GBaMwwAVK9qbQN3Scdo0OyvgPW7l3lnaVMj84uTOZlswkX0KpF6fyDBJhtTthf7pymztoN36/KEr1DyhF96zEA==", + "dependencies": { + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dependencies": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/object.getownpropertydescriptors": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.3.tgz", + "integrity": "sha512-VdDoCwvJI4QdC6ndjpqFmoL3/+HxffFBbcJzKi5hwLLqqx3mdbedRpfZDdK0SrOSauj8X4GzBvnDZl4vTN7dOw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/object.omit": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/object.omit/-/object.omit-2.0.1.tgz", + "integrity": "sha512-UiAM5mhmIuKLsOvrL+B0U2d1hXHF3bFYWIuH1LMpuV2EJEHG1Ntz06PgLEHjm6VFd87NpH8rastvPoyv6UW2fA==", + "dev": true, + "dependencies": { + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha512-tqa/UMy/CCoYmj+H5qc07qvSL9dqcs/WZENZ1JbtWBlATP+iVOe778gE6MSijnyCnORzDuX6hU+LA4SZ09YjFQ==", + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object.values": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/object.values/-/object.values-1.1.5.tgz", + "integrity": "sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/obuf": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/obuf/-/obuf-1.1.2.tgz", + "integrity": "sha512-PX1wu0AmAdPqOL1mWhqmlOd8kOIZQwGZw6rh7uby9fTc5lhaOWFLX3I6R1hrF9k3zUY40e6igsLGkDXK92LJNg==", + "dev": true + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dev": true, + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/onetime": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/onetime/-/onetime-2.0.1.tgz", + "integrity": "sha512-oyyPpiMaKARvvcgip+JV+7zci5L8D1W9RZIz2l1o08AM3pfspitVWnPt3mzHcBPp12oYMTy0pqrFs/C+m3EwsQ==", + "dev": true, + "dependencies": { + "mimic-fn": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/open": { + "version": "6.4.0", + "resolved": "https://registry.npmmirror.com/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/opener": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true, + "bin": { + "opener": "bin/opener-bin.js" + } + }, + "node_modules/opn": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/opn/-/opn-5.5.0.tgz", + "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", + "dev": true, + "dependencies": { + "is-wsl": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dependencies": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/ora": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/ora/-/ora-3.4.0.tgz", + "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", + "dev": true, + "dependencies": { + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-spinners": "^2.0.0", + "log-symbols": "^2.2.0", + "strip-ansi": "^5.2.0", + "wcwidth": "^1.0.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/original": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/original/-/original-1.0.2.tgz", + "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", + "dev": true, + "dependencies": { + "url-parse": "^1.4.3" + } + }, + "node_modules/os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==" + }, + "node_modules/os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha512-B5JU3cabzk8c67mRRd3ECmROafjYMXbuzlwtqdM8IbS8ktlTix8aFGb2bAGKrSRIlnfKwovGUUr72JUPyOb6kQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmmirror.com/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "dependencies": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, + "node_modules/p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dependencies": { + "p-try": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dependencies": { + "p-limit": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-2.1.0.tgz", + "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-map-series": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-map-series/-/p-map-series-2.1.0.tgz", + "integrity": "sha512-RpYIIK1zXSNEOdwxcfe7FdvGcs7+y5n8rifMhMNWvaxRNMPINJHF5GDeuVxWqnfrcHPSCnp7Oo5yNXHId9Av2Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-pipe": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/p-pipe/-/p-pipe-3.1.0.tgz", + "integrity": "sha512-08pj8ATpzMR0Y80x50yJHn37NF6vjrqHutASaX5LiH5npS9XPvrUmscd9MF5R4fuYRHOxQR1FfMIlF7AzwoPqw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-queue": { + "version": "6.6.2", + "resolved": "https://registry.npmmirror.com/p-queue/-/p-queue-6.6.2.tgz", + "integrity": "sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==", + "dev": true, + "dependencies": { + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-reduce": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/p-reduce/-/p-reduce-2.1.0.tgz", + "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, + "dependencies": { + "retry": "^0.12.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/p-timeout": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/p-timeout/-/p-timeout-3.2.0.tgz", + "integrity": "sha512-rhIwUycgwwKcP9yTOOFK/AKsAopjjCakVqLHePO3CC6Mir1Z99xT+R63jZxAT5lFZLa2inS5h+ZS2GvR99/FBg==", + "dev": true, + "dependencies": { + "p-finally": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-waterfall": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/p-waterfall/-/p-waterfall-2.1.1.tgz", + "integrity": "sha512-RRTnDb2TBG/epPRI2yYXsimO0v3BXC8Yd3ogr1545IaqKK17VGhbWVeGGN+XfCm/08OK8635nH31c8bATkHuSw==", + "dev": true, + "dependencies": { + "p-reduce": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote": { + "version": "11.3.5", + "resolved": "https://registry.npmmirror.com/pacote/-/pacote-11.3.5.tgz", + "integrity": "sha512-fT375Yczn4zi+6Hkk2TBe1x1sP8FgFsEIZ2/iWaXY2r/NkhDJfxbcn5paz1+RTFCyNf+dPnaoBDJoAxXSU8Bkg==", + "dev": true, + "dependencies": { + "@npmcli/git": "^2.1.0", + "@npmcli/installed-package-contents": "^1.0.6", + "@npmcli/promise-spawn": "^1.2.0", + "@npmcli/run-script": "^1.8.2", + "cacache": "^15.0.5", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.3", + "mkdirp": "^1.0.3", + "npm-package-arg": "^8.0.1", + "npm-packlist": "^2.1.4", + "npm-pick-manifest": "^6.0.0", + "npm-registry-fetch": "^11.0.0", + "promise-retry": "^2.0.1", + "read-package-json-fast": "^2.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.1.0" + }, + "bin": { + "pacote": "lib/bin.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/cacache": { + "version": "15.3.0", + "resolved": "https://registry.npmmirror.com/cacache/-/cacache-15.3.0.tgz", + "integrity": "sha512-VVdYzXEn+cnbXpFgWs5hTT7OScegHVmLhJIR8Ufqk3iFD6A6j5iSX1KuBTfNEv4tdJWE2PzA6IVFtcLC7fN9wQ==", + "dev": true, + "dependencies": { + "@npmcli/fs": "^1.0.0", + "@npmcli/move-file": "^1.0.1", + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "glob": "^7.1.4", + "infer-owner": "^1.0.4", + "lru-cache": "^6.0.0", + "minipass": "^3.1.1", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.2", + "mkdirp": "^1.0.3", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^8.0.1", + "tar": "^6.0.2", + "unique-filename": "^1.1.1" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pacote/node_modules/lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/minipass": { + "version": "3.1.6", + "resolved": "https://registry.npmmirror.com/minipass/-/minipass-3.1.6.tgz", + "integrity": "sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==", + "dev": true, + "dependencies": { + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/pacote/node_modules/minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "dependencies": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pacote/node_modules/mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true, + "bin": { + "mkdirp": "bin/cmd.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/p-map": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/p-map/-/p-map-4.0.0.tgz", + "integrity": "sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==", + "dev": true, + "dependencies": { + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/pacote/node_modules/rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/pacote/node_modules/ssri": { + "version": "8.0.1", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-8.0.1.tgz", + "integrity": "sha512-97qShzy1AiyxvPNIkLWoGua7xoQzzPjQ0HAH4B0rWKo7SZ6USuPcrUiAFrws0UH8RrbWmgq3LMTObhPIHbbBeQ==", + "dev": true, + "dependencies": { + "minipass": "^3.1.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/pacote/node_modules/tar": { + "version": "6.1.11", + "resolved": "https://registry.npmmirror.com/tar/-/tar-6.1.11.tgz", + "integrity": "sha512-an/KZQzQUkZCkuoAA64hM92X0Urb6VpRhAFllDzz44U2mcD5scmT3zBc4VgVpkugF580+DQn8eAFSyoQt0tznA==", + "dev": true, + "dependencies": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/pacote/node_modules/yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "node_modules/pako": { + "version": "1.0.11", + "resolved": "https://registry.npmmirror.com/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==" + }, + "node_modules/parallel-transform": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", + "dependencies": { + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" + } + }, + "node_modules/param-case": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/param-case/-/param-case-2.1.1.tgz", + "integrity": "sha512-eQE845L6ot89sk2N8liD8HAuH4ca6Vvr7VWAWwt7+kvvG5aBcPmmphQ68JsEG2qa9n1TykS2DLeMt363AAH8/w==", + "dev": true, + "dependencies": { + "no-case": "^2.2.0" + } + }, + "node_modules/parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dependencies": { + "callsites": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmmirror.com/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dependencies": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "node_modules/parse-glob": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/parse-glob/-/parse-glob-3.0.4.tgz", + "integrity": "sha512-FC5TeK0AwXzq3tUBFtH74naWkPQCEWs4K+xMxWZBlKDWu0bVHXGZa+KKqxKidd7xwhdZ19ZNuF2uO1M/r196HA==", + "dev": true, + "dependencies": { + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-glob/node_modules/is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", + "dev": true, + "dependencies": { + "is-extglob": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==", + "dev": true, + "dependencies": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "node_modules/parse-path/node_modules/query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "dependencies": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/parse-path/node_modules/strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "dependencies": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + } + }, + "node_modules/parse-url/node_modules/normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "node_modules/parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "dependencies": { + "parse5": "^6.0.1" + } + }, + "node_modules/parse5-htmlparser2-tree-adapter/node_modules/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmmirror.com/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha512-XHXfu/yOQRy9vYOtUDVMN60OEJjW013GoObG1o+xwQTpB9eYJX/BjXMsdW13ZDPruFhYYn0AG22w0xgQMwl3Nw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/patch-package": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/patch-package/-/patch-package-6.2.2.tgz", + "integrity": "sha512-YqScVYkVcClUY0v8fF0kWOjDYopzIM8e3bj/RU1DPeEF14+dCGm6UeOYm4jvCyxqIEQ5/eJzmbWfDWnUleFNMg==", + "dev": true, + "dependencies": { + "@yarnpkg/lockfile": "^1.1.0", + "chalk": "^2.4.2", + "cross-spawn": "^6.0.5", + "find-yarn-workspace-root": "^1.2.1", + "fs-extra": "^7.0.1", + "is-ci": "^2.0.0", + "klaw-sync": "^6.0.0", + "minimist": "^1.2.0", + "rimraf": "^2.6.3", + "semver": "^5.6.0", + "slash": "^2.0.0", + "tmp": "^0.0.33" + }, + "bin": { + "patch-package": "index.js" + }, + "engines": { + "npm": ">5" + } + }, + "node_modules/patch-package/node_modules/ci-info": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/ci-info/-/ci-info-2.0.0.tgz", + "integrity": "sha512-5tK7EtrZ0N+OLFMthtqOj4fI2Jeb88C4CAZPu25LDVUgXJ0A3Js4PMGqrn0JU1W0Mh1/Z8wZzYPxqUrXeBboCQ==", + "dev": true + }, + "node_modules/patch-package/node_modules/is-ci": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/is-ci/-/is-ci-2.0.0.tgz", + "integrity": "sha512-YfJT7rkpQB0updsdHLGWrvhBJfcfzNNawYDNIyQXJz0IViGf75O8EBPKSdvw2rF+LGCsX4FZ8tcr3b19LcZq4w==", + "dev": true, + "dependencies": { + "ci-info": "^2.0.0" + }, + "bin": { + "is-ci": "bin.js" + } + }, + "node_modules/path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmmirror.com/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==" + }, + "node_modules/path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "devOptional": true + }, + "node_modules/path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-is-inside": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/path-is-inside/-/path-is-inside-1.0.2.tgz", + "integrity": "sha512-DUWJr3+ULp4zXmol/SZkFf3JGsS9/SIv+Y3Rt93/UjPpDpklB5f1er4O3POIbUuUJ3FXgqte2Q7SrU6zAqwk8w==", + "dev": true + }, + "node_modules/path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==", + "dev": true + }, + "node_modules/path-type": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, + "dependencies": { + "pify": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/path-type/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dependencies": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", + "dev": true + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/pify": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "engines": { + "node": ">=6" + } + }, + "node_modules/pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha512-MnUuEycAemtSaeFSjXKW/aroV7akBbY+Sv+RkyqFjgAe73F+MR0TBWKBRDkmfWq/HiFmdavfZ1G7h4SPZXaCSg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha512-0Gni6D4UcLTbv9c57DfxDGdr41XfgUjqWZu492f0cIGr16zDU06BWP/RAEvOuo7CQ0CNjHaLlM59YJJFm3NWlw==", + "dev": true, + "dependencies": { + "pinkie": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pkg-dir": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pkg-dir/-/pkg-dir-3.0.0.tgz", + "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", + "dependencies": { + "find-up": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha512-fjAPuiws93rm7mPUu21RdBnkeZNrbfCFCwfAhPWY+rR3zG0ubpe5cEReHOw5fIbfmsxEV/g2kSxGTATY3Bpnwg==", + "dev": true, + "dependencies": { + "find-up": "^2.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/please-upgrade-node": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/please-upgrade-node/-/please-upgrade-node-3.2.0.tgz", + "integrity": "sha512-gQR3WpIgNIKwBMVLkpMUeR3e1/E1y42bqDQZfql+kDeXd8COYfM8PQA4X6y7a8u9Ua9FHmsrrmirW2vHs45hWg==", + "dev": true, + "dependencies": { + "semver-compare": "^1.0.0" + } + }, + "node_modules/pluralize": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/pluralize/-/pluralize-7.0.0.tgz", + "integrity": "sha512-ARhBOdzS3e41FbkW/XWrTEtukqqLoK5+Z/4UeDaLuSW+39JPeFgs4gCGqsrJHVZX0fUrx//4OF0K1CUGwlIFow==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/polyline-miter-util": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/polyline-miter-util/-/polyline-miter-util-1.0.1.tgz", + "integrity": "sha512-/3u91zz6mBerBZo6qnOJOTjv7EfPhKtsV028jMyj86YpzLRNmCCFfrX7IO9tCEQ2W4x45yc+vKOezjf7u2Nd6Q==", + "dependencies": { + "gl-vec2": "^1.0.0" + } + }, + "node_modules/polyline-normals": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/polyline-normals/-/polyline-normals-2.0.2.tgz", + "integrity": "sha512-dpHrAi61ymhsB4N0XlNb3YpkKJeTFnXBXDWpeH8Ucstq0TUZrCN3YK4Jlgk8ofMWN25lhGC4wnxLMv+TUK8rig==", + "dependencies": { + "polyline-miter-util": "^1.0.1" + } + }, + "node_modules/popper.js": { + "version": "1.16.1", + "resolved": "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==", + "deprecated": "You can find the new Popper v2 at @popperjs/core, this package is dedicated to the legacy v1" + }, + "node_modules/portfinder": { + "version": "1.0.28", + "resolved": "https://registry.npmmirror.com/portfinder/-/portfinder-1.0.28.tgz", + "integrity": "sha512-Se+2isanIcEqf2XMHjyUKskczxbPH7dQnlMjXX6+dybayyHvAf/TCgyMRlzf/B6QDhAEFOGes0pzRo3by4AbMA==", + "dev": true, + "dependencies": { + "async": "^2.6.2", + "debug": "^3.1.1", + "mkdirp": "^0.5.5" + }, + "engines": { + "node": ">= 0.12.0" + } + }, + "node_modules/portfinder/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/portfinder/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmmirror.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha512-xTgYBc3fuo7Yt7JbiuFxSYGToMoz8fLoE6TC9Wx1P/u+LfeThMOAqmuyECnlBaaJb+u1m9hHiXUEtwW4OzfUJg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss": { + "version": "7.0.39", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", + "dev": true, + "dependencies": { + "picocolors": "^0.2.1", + "source-map": "^0.6.1" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmmirror.com/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + } + }, + "node_modules/postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-colormin/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-convert-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-load-config": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/postcss-load-config/-/postcss-load-config-2.1.2.tgz", + "integrity": "sha512-/rDeGV6vMUo3mwJZmeHfEDvwnTKKqQ0S7OHUi/kJvvtx3aWtyWG2/0ZWnzCt2keEclwN6Tf0DST2v9kITdOKYw==", + "dev": true, + "dependencies": { + "cosmiconfig": "^5.0.0", + "import-cwd": "^2.0.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/postcss-loader": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/postcss-loader/-/postcss-loader-3.0.0.tgz", + "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmmirror.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "dependencies": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-longhand/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "cssnano-util-same-parent": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0", + "vendors": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-merge-rules/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-font-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-gradients/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-params/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-minify-selectors/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/postcss-modules-extract-imports": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/postcss-modules-extract-imports/-/postcss-modules-extract-imports-1.2.1.tgz", + "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", + "dev": true, + "dependencies": { + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-extract-imports/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-extract-imports/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-local-by-default": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-local-by-default/-/postcss-modules-local-by-default-1.2.0.tgz", + "integrity": "sha512-X4cquUPIaAd86raVrBwO8fwRfkIdbwFu7CTfEOjiZQHVQwlHRSkTgH5NLDmMm5+1hQO8u6dZ+TOOJDbay1hYpA==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-local-by-default/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-scope": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-scope/-/postcss-modules-scope-1.1.0.tgz", + "integrity": "sha512-LTYwnA4C1He1BKZXIx1CYiHixdSe9LWYVKadq9lK5aCCMkoOkFyZ7aigt+srfjlRplJY3gIol6KUNefdMQJdlw==", + "dev": true, + "dependencies": { + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-scope/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-scope/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-modules-values": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/postcss-modules-values/-/postcss-modules-values-1.3.0.tgz", + "integrity": "sha512-i7IFaR9hlQ6/0UgFuqM6YWaCfA1Ej8WMg8A5DggnH1UGKJvTV/ugqq/KaULixzzOi3T/tF6ClBXcHGCzdd5unA==", + "dev": true, + "dependencies": { + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" + } + }, + "node_modules/postcss-modules-values/node_modules/postcss": { + "version": "6.0.23", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-6.0.23.tgz", + "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", + "dev": true, + "dependencies": { + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/postcss-modules-values/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-display-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-positions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-repeat-style/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "dependencies": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-string/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-timing-functions/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-unicode/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "dependencies": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-url/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-normalize-whitespace/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "dependencies": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-ordered-values/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-prefix-selector": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.15.0.tgz", + "integrity": "sha512-9taaTPs6I4906QC03zBBt0LfTWAhrqEWlKSj0jRlxrg1yV+O91h0wcquu6krcA5L6aEv3QnCeG8B1vZ5WT4ecQ==", + "dev": true, + "peerDependencies": { + "postcss": ">4 <9" + } + }, + "node_modules/postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "dependencies": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-reduce-transforms/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-selector-parser": { + "version": "6.0.10", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", + "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-svgo": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", + "dev": true, + "dependencies": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-svgo/node_modules/postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "node_modules/postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "dependencies": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/postcss/node_modules/picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "node_modules/postcss/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml": { + "version": "0.9.2", + "resolved": "https://registry.npmmirror.com/posthtml/-/posthtml-0.9.2.tgz", + "integrity": "sha512-spBB5sgC4cv2YcW03f/IAUN1pgDJWNWD8FzkyY4mArLUMJW+KlQhlmUdKAHQuPfb00Jl5xIfImeOsf6YL8QK7Q==", + "dev": true, + "dependencies": { + "posthtml-parser": "^0.2.0", + "posthtml-render": "^1.0.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/posthtml-parser/-/posthtml-parser-0.2.1.tgz", + "integrity": "sha512-nPC53YMqJnc/+1x4fRYFfm81KV2V+G9NZY+hTohpYg64Ay7NemWWcV4UWuy/SgMupqQ3kJ88M/iRfZmSnxT+pw==", + "dev": true, + "dependencies": { + "htmlparser2": "^3.8.3", + "isobject": "^2.1.0" + } + }, + "node_modules/posthtml-parser/node_modules/domhandler": { + "version": "2.4.2", + "resolved": "https://registry.npmmirror.com/domhandler/-/domhandler-2.4.2.tgz", + "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "dev": true, + "dependencies": { + "domelementtype": "1" + } + }, + "node_modules/posthtml-parser/node_modules/entities": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "node_modules/posthtml-parser/node_modules/htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmmirror.com/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "dependencies": { + "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" + } + }, + "node_modules/posthtml-parser/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dev": true, + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/posthtml-parser/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/posthtml-rename-id": { + "version": "1.0.12", + "resolved": "https://registry.npmmirror.com/posthtml-rename-id/-/posthtml-rename-id-1.0.12.tgz", + "integrity": "sha512-UKXf9OF/no8WZo9edRzvuMenb6AD5hDLzIepJW+a4oJT+T/Lx7vfMYWT4aWlGNQh0WMhnUx1ipN9OkZ9q+ddEw==", + "dev": true, + "dependencies": { + "escape-string-regexp": "1.0.5" + } + }, + "node_modules/posthtml-render": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/posthtml-render/-/posthtml-render-1.4.0.tgz", + "integrity": "sha512-W1779iVHGfq0Fvh2PROhCe2QhB8mEErgqzo1wpIt36tCgChafP+hbXIhLDOM8ePJrZcFs0vkNEtdibEWVqChqw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/posthtml-svg-mode": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/posthtml-svg-mode/-/posthtml-svg-mode-1.0.3.tgz", + "integrity": "sha512-hEqw9NHZ9YgJ2/0G7CECOeuLQKZi8HjWLkBaSVtOWjygQ9ZD8P7tqeowYs7WrFdKsWEKG7o+IlsPY8jrr0CJpQ==", + "dev": true, + "dependencies": { + "merge-options": "1.0.1", + "posthtml": "^0.9.2", + "posthtml-parser": "^0.2.1", + "posthtml-render": "^1.0.6" + } + }, + "node_modules/prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/preserve": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/preserve/-/preserve-0.2.0.tgz", + "integrity": "sha512-s/46sYeylUfHNjI+sA/78FAHlmIuKqI9wNnzEOGehAlUUYeObv5C2mOinXBjyUyWmJ2SfcS2/ydApH4hTF4WXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/prettier": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/prettier/-/prettier-2.6.2.tgz", + "integrity": "sha512-PkUpF+qoXTqhOeWL9fu7As8LXsIUZ1WYaJiY/a7McAQzxjk82OF0tibkFXVCDImZtWxbvojFjerkiLb0/q8mew==", + "dev": true, + "optional": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/pretty-error": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/pretty-error/-/pretty-error-2.1.2.tgz", + "integrity": "sha512-EY5oDzmsX5wvuynAByrmY0P0hcp+QpnAKbJng2A2MPjVKXCxrDSUkzghVJ4ZGPIv+JC4gX8fPUWscC0RtjsWGw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.20", + "renderkid": "^2.0.4" + } + }, + "node_modules/probe.gl": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.5.0.tgz", + "integrity": "sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0", + "@probe.gl/log": "3.5.0", + "@probe.gl/stats": "3.5.0" + } + }, + "node_modules/process": { + "version": "0.11.10", + "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", + "integrity": "sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==", + "engines": { + "node": ">= 0.6.0" + } + }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==" + }, + "node_modules/progress": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/promise-inflight": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/promise-inflight/-/promise-inflight-1.0.1.tgz", + "integrity": "sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/promise-retry/-/promise-retry-2.0.1.tgz", + "integrity": "sha512-y+WKFlBR8BGXnsNlIHFGPZmyDf3DFMoLhaflAnyZgV6rG6xu+JwesTo2Q9R6XwYmtmwAFCkAk3e35jEdoeh/3g==", + "dev": true, + "dependencies": { + "err-code": "^2.0.2", + "retry": "^0.12.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/promzard": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/promzard/-/promzard-0.3.0.tgz", + "integrity": "sha512-JZeYqd7UAcHCwI+sTOeUDYkvEU+1bQ7iE0UT1MgB/tERkAPkesW46MrpIySzODi+owTjZtiF8Ay5j9m60KmMBw==", + "dev": true, + "dependencies": { + "read": "1" + } + }, + "node_modules/property-expr": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/property-expr/-/property-expr-1.5.1.tgz", + "integrity": "sha512-CGuc0VUTGthpJXL36ydB6jnbyOf/rAHFvmVrJlH+Rg0DqqLFQGAP6hIaxD/G0OAmBJPhXDHuEJigrp0e0wFV6g==", + "dev": true + }, + "node_modules/proto-list": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/proto-list/-/proto-list-1.2.4.tgz", + "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", + "dev": true + }, + "node_modules/protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmmirror.com/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dev": true, + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/prr": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/prr/-/prr-1.0.1.tgz", + "integrity": "sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==" + }, + "node_modules/pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==", + "dev": true + }, + "node_modules/psl": { + "version": "1.8.0", + "resolved": "https://registry.npmmirror.com/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "node_modules/public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dependencies": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "node_modules/public-encrypt/node_modules/bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmmirror.com/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==" + }, + "node_modules/pump": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dependencies": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + } + }, + "node_modules/pumpify/node_modules/pump": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "node_modules/punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "engines": { + "node": ">=6" + } + }, + "node_modules/q": { + "version": "1.5.1", + "resolved": "https://registry.npmmirror.com/q/-/q-1.5.1.tgz", + "integrity": "sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw==", + "engines": { + "node": ">=0.6.0", + "teleport": ">=0.2.0" + } + }, + "node_modules/qs": { + "version": "6.9.4", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.9.4.tgz", + "integrity": "sha512-A1kFqHekCTM7cz0udomYUoYNWjBebHm/5wzU/XqrBRBNWectVH0QIiN+NEcZ0Dte5hvzHwbr8+XQmguPhJ6WdQ==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/query-string": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, + "dependencies": { + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha512-X/xY82scca2tau62i9mDyU9K+I+djTMUsvwf7xnUX5GLvVzgJybOJf4Y6o9Zx3oJK/LSXg5tTZBjwzqVPaPO2g==", + "deprecated": "The querystring API is considered Legacy. new code should use the URLSearchParams API instead.", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==", + "engines": { + "node": ">=0.4.x" + } + }, + "node_modules/querystringify": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", + "dev": true + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true + }, + "node_modules/quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmmirror.com/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/randomatic": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/randomatic/-/randomatic-3.1.1.tgz", + "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", + "dev": true, + "dependencies": { + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/randomatic/node_modules/is-number": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/is-number/-/is-number-4.0.0.tgz", + "integrity": "sha512-rSklcAIlf1OmFdyAqbnWTLVelsQ58uvZ66S/ZyawjWqIviTWCjg2PzVGw8WUA+nNuPTqb4wgA+NszrJ+08LlgQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dependencies": { + "safe-buffer": "^5.1.0" + } + }, + "node_modules/randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dependencies": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.1", + "resolved": "https://registry.npmmirror.com/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", + "dev": true, + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/read/-/read-1.0.7.tgz", + "integrity": "sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==", + "dev": true, + "dependencies": { + "mute-stream": "~0.0.4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/read-cmd-shim": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/read-cmd-shim/-/read-cmd-shim-2.0.0.tgz", + "integrity": "sha512-HJpV9bQpkl6KwjxlJcBoqu9Ba0PQg8TqSNIOrulGt54a0uup0HtevreFHzYzkm0lpnleRdNBzXznKrgxglEHQw==", + "dev": true + }, + "node_modules/read-package-json": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/read-package-json/-/read-package-json-2.1.2.tgz", + "integrity": "sha512-D1KmuLQr6ZSJS0tW8hf3WGpRlwszJOXZ3E8Yd/DNRaM5d+1wVRZdHlpGBLAuovjr28LbWvjpWkBHMxpRGGjzNA==", + "dev": true, + "dependencies": { + "glob": "^7.1.1", + "json-parse-even-better-errors": "^2.3.0", + "normalize-package-data": "^2.0.0", + "npm-normalize-package-bin": "^1.0.0" + } + }, + "node_modules/read-package-json-fast": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/read-package-json-fast/-/read-package-json-fast-2.0.3.tgz", + "integrity": "sha512-W/BKtbL+dUjTuRL2vziuYhp76s5HZ9qQhd/dKfWIZveD0O40453QNyZhC0e63lqZrAQ4jiOapVoeJ7JrszenQQ==", + "dev": true, + "dependencies": { + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/read-package-tree": { + "version": "5.3.1", + "resolved": "https://registry.npmmirror.com/read-package-tree/-/read-package-tree-5.3.1.tgz", + "integrity": "sha512-mLUDsD5JVtlZxjSlPPx1RETkNjjvQYuweKwNVt1Sn8kP5Jh44pvYuUHCp6xSVDZWbNxVxG5lyZJ921aJH61sTw==", + "deprecated": "The functionality that this package provided is now in @npmcli/arborist", + "dev": true, + "dependencies": { + "read-package-json": "^2.0.0", + "readdir-scoped-modules": "^1.0.0", + "util-promisify": "^2.1.0" + } + }, + "node_modules/read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "dev": true, + "dependencies": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/read-pkg-up": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha512-YFzFrVvpC6frF1sz8psoHDBGF7fLPc+llq/8NB43oagqWkx8ar5zYtsTORtOjw9W2RHLpWP+zTWwBvf1bCmcSw==", + "dev": true, + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/find-up": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/find-up/-/find-up-2.1.0.tgz", + "integrity": "sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==", + "dev": true, + "dependencies": { + "locate-path": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/load-json-file": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/locate-path": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/locate-path/-/locate-path-2.0.0.tgz", + "integrity": "sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==", + "dev": true, + "dependencies": { + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-limit": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/p-limit/-/p-limit-1.3.0.tgz", + "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, + "dependencies": { + "p-try": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-locate": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/p-locate/-/p-locate-2.0.0.tgz", + "integrity": "sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==", + "dev": true, + "dependencies": { + "p-limit": "^1.1.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/p-try": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/p-try/-/p-try-1.0.0.tgz", + "integrity": "sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/pify": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/pify/-/pify-3.0.0.tgz", + "integrity": "sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg-up/node_modules/read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==", + "dev": true, + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/read-pkg/node_modules/parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "dev": true, + "dependencies": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/readdir-scoped-modules/-/readdir-scoped-modules-1.1.0.tgz", + "integrity": "sha512-asaikDeqAQg7JifRsZn1NJZXo9E+VwlyCfbkZhwyISinqk5zNS6266HS5kah6P0SaQKGF6SkNnZVHUzHFYxYDw==", + "dev": true, + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "optional": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/reconnecting-websocket": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", + "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" + }, + "node_modules/redent": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", + "dev": true, + "dependencies": { + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/redent/node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, + "node_modules/regenerate": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", + "dev": true + }, + "node_modules/regenerate-unicode-properties": { + "version": "10.0.1", + "resolved": "https://registry.npmmirror.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.0.1.tgz", + "integrity": "sha512-vn5DU6yg6h8hP/2OkQo3K7uVILvY4iu0oI4t3HFa81UPkhGJwkRwM10JEc3upjdhHjs/k8GJY1sRBhk5sr69Bw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/regenerator-transform": { + "version": "0.15.0", + "resolved": "https://registry.npmmirror.com/regenerator-transform/-/regenerator-transform-0.15.0.tgz", + "integrity": "sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.8.4" + } + }, + "node_modules/regex-cache": { + "version": "0.4.4", + "resolved": "https://registry.npmmirror.com/regex-cache/-/regex-cache-0.4.4.tgz", + "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", + "dev": true, + "dependencies": { + "is-equal-shallow": "^0.1.3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dependencies": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/regexpp": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-1.1.0.tgz", + "integrity": "sha512-LOPw8FpgdQF9etWMaAfG/WRthIdXJGYp4mJ2Jgn/2lpkbod9jPn0t9UqN7AxBOKNfzRbYyVfgc7Vk4t/MpnXgw==", + "dev": true, + "optional": true, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/regexpu-core": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/regexpu-core/-/regexpu-core-5.0.1.tgz", + "integrity": "sha512-CriEZlrKK9VJw/xQGJpQM5rY88BtuL8DM+AEwvcThHilbxiTAy8vq4iJnd2tqq8wLmjbGZzP7ZcKFjbGkmEFrw==", + "dev": true, + "dependencies": { + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.0.1", + "regjsgen": "^0.6.0", + "regjsparser": "^0.8.2", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/regjsgen": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/regjsgen/-/regjsgen-0.6.0.tgz", + "integrity": "sha512-ozE883Uigtqj3bx7OhL1KNbCzGyW2NQZPl6Hs09WTvCuZD5sTI4JY58bkbQWa/Y9hxIsvJ3M8Nbf7j54IqeZbA==", + "dev": true + }, + "node_modules/regjsparser": { + "version": "0.8.4", + "resolved": "https://registry.npmmirror.com/regjsparser/-/regjsparser-0.8.4.tgz", + "integrity": "sha512-J3LABycON/VNEu3abOviqGHuB/LOtOQj8SKmfP9anY5GfAVw/SPjwzSjxGjbZXIxbGfqTHtJw58C2Li/WkStmA==", + "dev": true, + "dependencies": { + "jsesc": "~0.5.0" + }, + "bin": { + "regjsparser": "bin/parser" + } + }, + "node_modules/regjsparser/node_modules/jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmmirror.com/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + } + }, + "node_modules/regl": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/regl/-/regl-1.7.0.tgz", + "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + }, + "node_modules/relateurl": { + "version": "0.2.7", + "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", + "integrity": "sha512-G08Dxvm4iDN3MLM0EsP62EDV9IuhXPR6blNz6Utcp7zyV3tr4HVNINt6MpaRWbxoOHT3Q7YN2P+jaHX8vUbgog==", + "dev": true, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "devOptional": true + }, + "node_modules/renderkid": { + "version": "2.0.7", + "resolved": "https://registry.npmmirror.com/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", + "dev": true, + "dependencies": { + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" + } + }, + "node_modules/renderkid/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/renderkid/node_modules/css-select": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "node_modules/renderkid/node_modules/css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/renderkid/node_modules/dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", + "dev": true, + "dependencies": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "node_modules/renderkid/node_modules/domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "node_modules/renderkid/node_modules/domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmmirror.com/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "dependencies": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "node_modules/renderkid/node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/renderkid/node_modules/nth-check": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/nth-check/-/nth-check-2.0.1.tgz", + "integrity": "sha512-it1vE95zF6dTT9lBsYbxvqh0Soy4SPowchj0UBGj/V6cTPnXXtQOPUbhZ6CmGzAD/rW22LQK6E96pcdJXk4A4w==", + "dev": true, + "dependencies": { + "boolbase": "^1.0.0" + } + }, + "node_modules/renderkid/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmmirror.com/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha512-ZqtSMuVybkISo2OWvqvm7iHSWngvdaW3IpsT9/uP8v4gMi591LY6h35wdOfvQdWCKFWZWm2Y1Opp4kV7vQKT6A==", + "dev": true, + "dependencies": { + "is-finite": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/request": { + "version": "2.88.2", + "resolved": "https://registry.npmmirror.com/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.3", + "http-signature": "~1.2.0", + "is-typedarray": "~1.0.0", + "isstream": "~0.1.2", + "json-stringify-safe": "~5.0.1", + "mime-types": "~2.1.19", + "oauth-sign": "~0.9.0", + "performance-now": "^2.1.0", + "qs": "~6.5.2", + "safe-buffer": "^5.1.2", + "tough-cookie": "~2.5.0", + "tunnel-agent": "^0.6.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/request-promise-core": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", + "dev": true, + "dependencies": { + "lodash": "^4.17.19" + }, + "engines": { + "node": ">=0.10.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request-promise-native": { + "version": "1.0.9", + "resolved": "https://registry.npmmirror.com/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", + "deprecated": "request-promise-native has been deprecated because it extends the now deprecated request package, see https://github.com/request/request/issues/3142", + "dev": true, + "dependencies": { + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + }, + "engines": { + "node": ">=0.12.0" + }, + "peerDependencies": { + "request": "^2.34" + } + }, + "node_modules/request/node_modules/qs": { + "version": "6.5.3", + "resolved": "https://registry.npmmirror.com/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "node_modules/require-uncached": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/require-uncached/-/require-uncached-1.0.3.tgz", + "integrity": "sha512-Xct+41K3twrbBHdxAgMoOS+cNcoqIjfM2/VxBF4LL2hVph7YsF8VSKyQ3BDFZwEVbok9yeDl2le/qo0S77WG2w==", + "dev": true, + "optional": true, + "dependencies": { + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", + "dev": true + }, + "node_modules/reselect": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/reselect/-/reselect-3.0.1.tgz", + "integrity": "sha512-b/6tFZCmRhtBMa4xGqiiRp9jh9Aqi2A687Lo265cN0/QohJQEBPiQ52f4QB6i0eF3yp3hmLL21LSGBcML2dlxA==", + "dev": true + }, + "node_modules/resolve": { + "version": "1.22.0", + "resolved": "https://registry.npmmirror.com/resolve/-/resolve-1.22.0.tgz", + "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.8.1", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + } + }, + "node_modules/resolve-cwd": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/resolve-cwd/-/resolve-cwd-2.0.0.tgz", + "integrity": "sha512-ccu8zQTrzVr954472aUVPLEcB3YpKSYR3cg/3lo1okzobPBM+1INXBbBZlDbnI/hbEocnf8j0QVo43hQKrbchg==", + "dev": true, + "dependencies": { + "resolve-from": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-cwd/node_modules/resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha512-GnlH6vxLymXJNMBo7XP1fJIzBFbdYt49CuTwmB/6N53t+kMPRMFKz783LlQ4tv28XoQfMWinAJX6WCGf2IlaIw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/resolve-from": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-1.0.1.tgz", + "integrity": "sha512-kT10v4dhrlLNcnO084hEjvXCI1wUG9qZLoz2RogxqDQQYy7IxjI/iMUkOtQTNEh6rzHxvdQWHsJyel1pKOVCxg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha512-ZuF55hVUQaaczgOIwqWzkEcEidmlD/xl44x1UZnhOXcYuFN2S6+rcxpG+C1N3So0wvNI3DmJICUFfu2SxhBmvg==", + "deprecated": "https://github.com/lydell/resolve-url#deprecated" + }, + "node_modules/restore-cursor": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-2.0.0.tgz", + "integrity": "sha512-6IzJLuGi4+R14vwagDHX+JrXmPVtPpn4mffDJ1UdR7/Edm87fl6yi8mMBIVvFtJaNTUvjughmW4hwLhRG7gC1Q==", + "dev": true, + "dependencies": { + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/ret": { + "version": "0.1.15", + "resolved": "https://registry.npmmirror.com/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "engines": { + "node": ">=0.12" + } + }, + "node_modules/retry": { + "version": "0.12.0", + "resolved": "https://registry.npmmirror.com/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true, + "engines": { + "node": ">= 4" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha512-gDK5mkALDFER2YLqH6imYvK6g02gpNGM4ILDZ472EwWfXZnC2ZEpoB2ECXTyOVUKuk/bPJZMzwQPBYICzP+D3w==", + "dev": true + }, + "node_modules/rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha512-zgn5OjNQXLUTdq8m17KdaicF6w89TZs8ZU8y0AYENIU6wG8GG6LLm0yLSiPY8DmaYmHdgRW8rnApjoT0fQRfMg==", + "dev": true + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dependencies": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "node_modules/run-async": { + "version": "2.4.1", + "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/run-node": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/run-node/-/run-node-1.0.0.tgz", + "integrity": "sha512-kc120TBlQ3mih1LSzdAJXo4xn/GWS2ec0l3S+syHDXP9uRr0JAT8Qd3mdMuyjqCzeZktgP3try92cEgf9Nks8A==", + "dev": true, + "bin": { + "run-node": "run-node" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/run-queue": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/run-queue/-/run-queue-1.0.3.tgz", + "integrity": "sha512-ntymy489o0/QQplUDnpYAYUsO50K9SBrIVaKCWDOJzYJts0f9WH9RFJkyagebkw5+y1oi00R7ynNW/d12GBumg==", + "dependencies": { + "aproba": "^1.1.1" + } + }, + "node_modules/rx-lite": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/rx-lite/-/rx-lite-4.0.8.tgz", + "integrity": "sha512-Cun9QucwK6MIrp3mry/Y7hqD1oFqTYLQ4pGxaHTjIdaFDWRGGLikqp6u8LcWJnzpoALg9hap+JGk8sFIUuEGNA==", + "dev": true, + "optional": true + }, + "node_modules/rx-lite-aggregates": { + "version": "4.0.8", + "resolved": "https://registry.npmmirror.com/rx-lite-aggregates/-/rx-lite-aggregates-4.0.8.tgz", + "integrity": "sha512-3xPNZGW93oCjiO7PtKxRK6iOVYBWBvtf9QHDfU23Oc+dLIQmAV//UnyXV/yihv81VS/UqoQPk4NegS8EFi55Hg==", + "dev": true, + "optional": true, + "dependencies": { + "rx-lite": "*" + } + }, + "node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/rxjs/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" + }, + "node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==" + }, + "node_modules/safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha512-aJXcif4xnaNUzvUuC5gcb46oTS7zvg4jpMTnuqtrEPlR3vFr4pxtdTwaF1Qs3Enjn9HK+ZlwQui+a7z0SywIzg==", + "dependencies": { + "ret": "~0.1.10" + } + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/sass-graph": { + "version": "2.2.5", + "resolved": "https://registry.npmmirror.com/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", + "dev": true, + "dependencies": { + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" + }, + "bin": { + "sassgraph": "bin/sassgraph" + } + }, + "node_modules/sass-graph/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/sass-graph/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sass-graph/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/sass-graph/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/sass-loader": { + "version": "7.3.1", + "resolved": "https://registry.npmmirror.com/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", + "dev": true, + "dependencies": { + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/sass-loader/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/sax": { + "version": "1.2.4", + "resolved": "https://registry.npmmirror.com/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==" + }, + "node_modules/schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/scss-tokenizer": { + "version": "0.2.3", + "resolved": "https://registry.npmmirror.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", + "integrity": "sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==", + "dev": true, + "dependencies": { + "js-base64": "^2.1.8", + "source-map": "^0.4.2" + } + }, + "node_modules/scss-tokenizer/node_modules/source-map": { + "version": "0.4.4", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.4.4.tgz", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", + "dev": true, + "dependencies": { + "amdefine": ">=0.0.4" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, + "node_modules/select-hose": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", + "integrity": "sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==", + "dev": true + }, + "node_modules/selfsigned": { + "version": "1.10.14", + "resolved": "https://registry.npmmirror.com/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", + "dev": true, + "dependencies": { + "node-forge": "^0.10.0" + } + }, + "node_modules/semver": { + "version": "5.7.1", + "resolved": "https://registry.npmmirror.com/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/semver-compare": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/semver-compare/-/semver-compare-1.0.0.tgz", + "integrity": "sha512-YM3/ITh2MJ5MtzaM429anh+x2jiLVjqILF4m4oyQB18W7Ggea7BfqdH/wGMK7dDiMghv/6WG7znWMwUDzJiXow==", + "dev": true + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmmirror.com/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dev": true, + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "dev": true, + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dependencies": { + "randombytes": "^2.1.0" + } + }, + "node_modules/serve-index": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/serve-index/-/serve-index-1.9.1.tgz", + "integrity": "sha512-pXHfKNP4qujrtteMrSBb0rc8HJ9Ms/GrXwcUtUtD5s4ewDJI8bT3Cz2zTVRMKtri49pLx2e0Ya8ziP5Ya2pZZw==", + "dev": true, + "dependencies": { + "accepts": "~1.3.4", + "batch": "0.6.1", + "debug": "2.6.9", + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/serve-index/node_modules/depd": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/depd/-/depd-1.1.2.tgz", + "integrity": "sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/http-errors": { + "version": "1.6.3", + "resolved": "https://registry.npmmirror.com/http-errors/-/http-errors-1.6.3.tgz", + "integrity": "sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==", + "dev": true, + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.0", + "statuses": ">= 1.4.0 < 2" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-index/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==", + "dev": true + }, + "node_modules/serve-index/node_modules/setprototypeof": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.1.0.tgz", + "integrity": "sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==", + "dev": true + }, + "node_modules/serve-index/node_modules/statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha512-OpZ3zP+jT1PI7I8nemJX4AKmAX070ZkYPVWV/AaKTJl+tXCTGyVdC1a4SL8RUQYEwk/f34ZX8UTykN68FwrqAA==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmmirror.com/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dev": true, + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==", + "dev": true + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/set-value/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/setimmediate": { + "version": "1.0.5", + "resolved": "https://registry.npmmirror.com/setimmediate/-/setimmediate-1.0.5.tgz", + "integrity": "sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==" + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", + "dev": true + }, + "node_modules/sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmmirror.com/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dependencies": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + }, + "bin": { + "sha.js": "bin.js" + } + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", + "dependencies": { + "shebang-regex": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/shell-quote": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/shell-quote/-/shell-quote-1.7.3.tgz", + "integrity": "sha512-Vpfqwm4EnqGdlsBFNmHhxhElJYrdfcxPThu+ryKS5J8L/fhAwLazFZtq+S+TWZ9ANj2piSQLGj6NQg+lKPmxrw==", + "dev": true + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" + }, + "node_modules/simple-git": { + "version": "1.132.0", + "resolved": "https://registry.npmmirror.com/simple-git/-/simple-git-1.132.0.tgz", + "integrity": "sha512-xauHm1YqCTom1sC9eOjfq3/9RKiUA9iPnxBbrY2DdL8l4ADMu0jjM5l5lphQP5YWNqAL2aXC/OeuQ76vHtW5fg==", + "dev": true, + "dependencies": { + "debug": "^4.0.1" + } + }, + "node_modules/simple-git/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/simple-git/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", + "dependencies": { + "is-arrayish": "^0.3.1" + } + }, + "node_modules/simple-swizzle/node_modules/is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" + }, + "node_modules/slash": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/slice-ansi": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-1.0.0.tgz", + "integrity": "sha512-POqxBK6Lb3q6s047D/XsDVNPnF9Dl8JSaqe9h9lURl0OdNqy/ujDrOiIHtsqXMGbWWTIomRzAMaTyawAU//Reg==", + "dev": true, + "optional": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/slide": { + "version": "1.1.6", + "resolved": "https://registry.npmmirror.com/slide/-/slide-1.1.6.tgz", + "integrity": "sha512-NwrtjCg+lZoqhFU8fOwl4ay2ei8PaqCBOUV3/ektPY9trO1yQ1oXEfmHAhKArUVUr/hOHvy5f6AdP17dCM0zMw==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/smart-buffer": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/smart-buffer/-/smart-buffer-4.2.0.tgz", + "integrity": "sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==", + "dev": true, + "engines": { + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmmirror.com/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dependencies": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dependencies": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-node/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dependencies": { + "kind-of": "^3.2.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon-util/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/snapdragon/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sockjs": { + "version": "0.3.24", + "resolved": "https://registry.npmmirror.com/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", + "dev": true, + "dependencies": { + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + } + }, + "node_modules/sockjs-client": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/sockjs-client/-/sockjs-client-1.6.0.tgz", + "integrity": "sha512-qVHJlyfdHFht3eBFZdKEXKTlb7I4IV41xnVNo8yUKA1UHcPJwgW2SvTq9LhnjjCywSkSK7c/e4nghU0GOoMCRQ==", + "dev": true, + "dependencies": { + "debug": "^3.2.7", + "eventsource": "^1.1.0", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/sockjs-client/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/sockjs-client/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/sockjs/node_modules/uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true, + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/socks": { + "version": "2.6.2", + "resolved": "https://registry.npmmirror.com/socks/-/socks-2.6.2.tgz", + "integrity": "sha512-zDZhHhZRY9PxRruRMR7kMhnf3I8hDs4S3f9RecfnGxvcBHQcKcIH/oUcEWffsfl1XxdYlA7nnlGbbTvPz9D8gA==", + "dev": true, + "dependencies": { + "ip": "^1.1.5", + "smart-buffer": "^4.2.0" + }, + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks-proxy-agent": { + "version": "6.2.0", + "resolved": "https://registry.npmmirror.com/socks-proxy-agent/-/socks-proxy-agent-6.2.0.tgz", + "integrity": "sha512-wWqJhjb32Q6GsrUqzuFkukxb/zzide5quXYcMVpIjxalDBBYy2nqKCFQ/9+Ie4dvOYSQdOk3hUlZSdzZOd3zMQ==", + "dev": true, + "dependencies": { + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/socks-proxy-agent/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/socks-proxy-agent/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/sort-keys": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, + "node_modules/source-list-map": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", + "integrity": "sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==" + }, + "node_modules/source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha512-LbrmJOMUSdEVxIKvdcJzQC+nQhe8FUZQTXQy6+I75skNgn3OoQ0DZA8YnFa7gp8tqtL3KPf1kmo0R5DoApeSGQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmmirror.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "deprecated": "See https://github.com/lydell/source-map-resolve#deprecated", + "dependencies": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmmirror.com/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/source-map-support/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "deprecated": "See https://github.com/lydell/source-map-url#deprecated" + }, + "node_modules/spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "dependencies": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "node_modules/spdx-license-ids": { + "version": "3.0.11", + "resolved": "https://registry.npmmirror.com/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", + "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", + "dev": true + }, + "node_modules/spdy": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/spdy-transport": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/spdy-transport/-/spdy-transport-3.0.0.tgz", + "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", + "dev": true, + "dependencies": { + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" + } + }, + "node_modules/spdy-transport/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy-transport/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/spdy-transport/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/spdy/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/spdy/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/speed-measure-webpack-plugin": { + "version": "1.5.0", + "resolved": "https://registry.npmmirror.com/speed-measure-webpack-plugin/-/speed-measure-webpack-plugin-1.5.0.tgz", + "integrity": "sha512-Re0wX5CtM6gW7bZA64ONOfEPEhwbiSF/vz6e2GvadjuaPrQcHTQdRGsD8+BE7iUOysXH8tIenkPCQBEcspXsNg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.0" + }, + "engines": { + "node": ">=6.0.0" + }, + "peerDependencies": { + "webpack": "^1 || ^2 || ^3 || ^4 || ^5" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/speed-measure-webpack-plugin/node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/speed-measure-webpack-plugin/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/split": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/split/-/split-1.0.1.tgz", + "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", + "dev": true, + "dependencies": { + "through": "2" + }, + "engines": { + "node": "*" + } + }, + "node_modules/split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split2": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/split2/-/split2-3.2.2.tgz", + "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", + "dev": true, + "dependencies": { + "readable-stream": "^3.0.0" + } + }, + "node_modules/split2/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/sql-formatter": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/sql-formatter/-/sql-formatter-2.3.3.tgz", + "integrity": "sha512-m6pqVXwsm9GkCHC/+gdPvNowI7PNoVTT6OZMWKwXJoP2MvfntfhcfyliIf4/QX6t+DirSJ6XDSiSS70YvZ87Lw==", + "dependencies": { + "lodash": "^4.16.0" + } + }, + "node_modules/sshpk": { + "version": "1.17.0", + "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz", + "integrity": "sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ==", + "dev": true, + "dependencies": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + }, + "bin": { + "sshpk-conv": "bin/sshpk-conv", + "sshpk-sign": "bin/sshpk-sign", + "sshpk-verify": "bin/sshpk-verify" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/ssri": { + "version": "6.0.2", + "resolved": "https://registry.npmmirror.com/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", + "dependencies": { + "figgy-pudding": "^3.5.1" + } + }, + "node_modules/stable": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "deprecated": "Modern JS already guarantees Array#sort() is a stable sort, so this library is deprecated. See the compatibility table on MDN: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/sort#browser_compatibility" + }, + "node_modules/stackframe": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/stackframe/-/stackframe-1.2.1.tgz", + "integrity": "sha512-h88QkzREN/hy8eRdyNhhsO7RSJ5oyTqxxmmn0dzBIMUclZsjpfmrsg81vp8mjjAs2vAZ72nyWxRUwSwmh0e4xg==", + "dev": true + }, + "node_modules/staged-git-files": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/staged-git-files/-/staged-git-files-1.1.2.tgz", + "integrity": "sha512-0Eyrk6uXW6tg9PYkhi/V/J4zHp33aNyi2hOCmhFLqLTIhbgqWn5jlSzI+IU0VqrZq6+DbHcabQl/WP6P3BG0QA==", + "dev": true, + "bin": { + "sgf": "bin/cli.js" + } + }, + "node_modules/static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha512-72E9+uLc27Mt718pMHt9VMNiAL4LMsmDbBva8mxWUCkT07fSzEGMYUCk0XWY6lp0j6RBAG4cJ3mWuZv2OE3s0g==", + "dependencies": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/static-extend/node_modules/define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha512-Rr7ADjQZenceVOAKop6ALkkRAmH1A4Gx9hV/7ZujPUN2rkATqFO0JZLZInbAjpZYoJ1gUx8MRMQVkYemcbMSTA==", + "dependencies": { + "is-descriptor": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/stdout-stream": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/stdout-stream/-/stdout-stream-1.4.1.tgz", + "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", + "dev": true, + "dependencies": { + "readable-stream": "^2.0.1" + } + }, + "node_modules/stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha512-ZnWpYnYugiOVEY5GkcuJK1io5V8QmNYChG62gSit9pQVGErXtrKuPC55ITaVSukmMta5qpMU7vqLt2Lnni4f/g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dependencies": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "node_modules/stream-each": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/stream-each/-/stream-each-1.2.3.tgz", + "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", + "dependencies": { + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" + } + }, + "node_modules/stream-http": { + "version": "2.8.3", + "resolved": "https://registry.npmmirror.com/stream-http/-/stream-http-2.8.3.tgz", + "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", + "dependencies": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "node_modules/stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==" + }, + "node_modules/strict-uri-encode": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", + "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "node_modules/string-argv": { + "version": "0.0.2", + "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.0.2.tgz", + "integrity": "sha512-p6/Mqq0utTQWUeGMi/m0uBtlLZEwXSY3+mXzeRRqw7fz5ezUb28Wr0R99NlfbWaMmL/jCyT9be4jpn7Yz8IO8w==", + "dev": true, + "engines": { + "node": ">=0.6.19" + } + }, + "node_modules/string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "dependencies": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/ansi-regex": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/string-width/node_modules/strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", + "dev": true, + "dependencies": { + "ansi-regex": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/string.prototype.padend": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/string.prototype.padend/-/string.prototype.padend-3.1.3.tgz", + "integrity": "sha512-jNIIeokznm8SD/TZISQsZKYu7RJyheFNt84DUPrh482GC8RVp2MKqm2O5oBRdGxbDQoXrhhWtPIWQOiy20svUg==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.padstart": { + "version": "3.1.3", + "resolved": "https://registry.npmmirror.com/string.prototype.padstart/-/string.prototype.padstart-3.1.3.tgz", + "integrity": "sha512-NZydyOMtYxpTjGqp0VN5PYUF/tsU15yDMZnUdj16qRUIUiMJkHHSDElYyQFrMu+/WloTpA7MQSiADhBicDfaoA==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "node_modules/stringify-object": { + "version": "3.3.0", + "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", + "integrity": "sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==", + "dev": true, + "dependencies": { + "get-own-enumerable-property-symbols": "^3.0.0", + "is-obj": "^1.0.1", + "is-regexp": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stringify-object/node_modules/is-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-obj/-/is-obj-1.0.1.tgz", + "integrity": "sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha512-RsSNPLpq6YUL7QYy44RnPVTn/lcVZtb48Uof3X5JLbF4zD/Gs7ZFDv2HWol+leoQN2mT86LAzSshGfkTlSOpsA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", + "dev": true, + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/strong-log-transformer": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/strong-log-transformer/-/strong-log-transformer-2.1.0.tgz", + "integrity": "sha512-B3Hgul+z0L9a236FAUC9iZsL+nVHgoCJnqCbN588DjYxvGXaXaaFbfmQ/JhvKjZwsOukuR72XbHv71Qkug0HxA==", + "dev": true, + "dependencies": { + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" + }, + "bin": { + "sl-log-transformer": "bin/sl-log-transformer.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "dependencies": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/stylehacks/node_modules/postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmmirror.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "dependencies": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha512-RIrIdRY0X1xojthNcVtgT9sjpOGagEUKpZdgBUi054OEPFo282yg+zE+t1Rj3+RqKq2xStL7uUHhY+AjbC4BXg==", + "dev": true, + "dependencies": { + "minimist": "^1.1.0" + } + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/svg-baker": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/svg-baker/-/svg-baker-1.7.0.tgz", + "integrity": "sha512-nibslMbkXOIkqKVrfcncwha45f97fGuAOn1G99YwnwTj8kF9YiM6XexPcUso97NxOm6GsP0SIvYVIosBis1xLg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "clone": "^2.1.1", + "he": "^1.1.1", + "image-size": "^0.5.1", + "loader-utils": "^1.1.0", + "merge-options": "1.0.1", + "micromatch": "3.1.0", + "postcss": "^5.2.17", + "postcss-prefix-selector": "^1.6.0", + "posthtml-rename-id": "^1.0", + "posthtml-svg-mode": "^1.0.3", + "query-string": "^4.3.2", + "traverse": "^0.6.6" + } + }, + "node_modules/svg-baker-runtime": { + "version": "1.4.7", + "resolved": "https://registry.npmmirror.com/svg-baker-runtime/-/svg-baker-runtime-1.4.7.tgz", + "integrity": "sha512-Zorfwwj5+lWjk/oxwSMsRdS2sPQQdTmmsvaSpzU+i9ZWi3zugHLt6VckWfnswphQP0LmOel3nggpF5nETbt6xw==", + "dev": true, + "dependencies": { + "deepmerge": "1.3.2", + "mitt": "1.1.2", + "svg-baker": "^1.7.0" + } + }, + "node_modules/svg-baker-runtime/node_modules/deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/ansi-styles": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-2.2.1.tgz", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/chalk/-/chalk-1.1.3.tgz", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", + "dev": true, + "dependencies": { + "ansi-styles": "^2.2.1", + "escape-string-regexp": "^1.0.2", + "has-ansi": "^2.0.0", + "strip-ansi": "^3.0.0", + "supports-color": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/chalk/node_modules/supports-color": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-2.0.0.tgz", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-baker/node_modules/clone": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/clone/-/clone-2.1.2.tgz", + "integrity": "sha512-3Pe/CF1Nn94hyhIYpjtiLhdCoEoz0DqQ+988E9gmeEdQZlojxnOb74wctFyuwWQHzqyf9X7C7MG8juUpqBJT8w==", + "dev": true, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/svg-baker/node_modules/define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha512-cZTYKFWspt9jZsMscWo8sc/5lbPC9Q0N5nBLgb+Yd915iL3udB1uFgS3B8YCx66UVHq018DAVFoee7x+gxggeA==", + "dev": true, + "dependencies": { + "is-descriptor": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/has-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-1.0.0.tgz", + "integrity": "sha512-DyYHfIYwAJmjAjSSPKANxI8bFY9YtFrgkAfinBojQ8YJTOuOuav64tMUJv584SES4xl74PmuaevIyaLESHdTAA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-accessor-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "dependencies": { + "kind-of": "^6.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-data-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "dependencies": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/is-descriptor/node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/micromatch": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/micromatch/-/micromatch-3.1.0.tgz", + "integrity": "sha512-3StSelAE+hnRvMs8IdVW7Uhk8CVed5tp+kLLGlBP6WiRAXS21GPGu/Nat4WNPXj2Eoc24B02SaeoyozPMfj0/g==", + "dev": true, + "dependencies": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.2.2", + "define-property": "^1.0.0", + "extend-shallow": "^2.0.1", + "extglob": "^2.0.2", + "fragment-cache": "^0.2.1", + "kind-of": "^5.0.2", + "nanomatch": "^1.2.1", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/postcss": { + "version": "5.2.18", + "resolved": "https://registry.npmmirror.com/postcss/-/postcss-5.2.18.tgz", + "integrity": "sha512-zrUjRRe1bpXKsX1qAJNJjqZViErVuyEkMTRrwu4ud4sbTtIBRmtaYDrHmcGgmrbsW3MHfmtIf+vJumgQn+PrXg==", + "dev": true, + "dependencies": { + "chalk": "^1.1.3", + "js-base64": "^2.1.9", + "source-map": "^0.5.6", + "supports-color": "^3.2.3" + }, + "engines": { + "node": ">=0.12" + } + }, + "node_modules/svg-baker/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-baker/node_modules/supports-color": { + "version": "3.2.3", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-3.2.3.tgz", + "integrity": "sha512-Jds2VIYDrlp5ui7t8abHN2bjAu4LV/q4N2KivFPpGH0lrka0BMq/33AmECUXlKPcHigkNaqfXRENFju+rlcy+A==", + "dev": true, + "dependencies": { + "has-flag": "^1.0.0" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/svg-sprite-loader": { + "version": "5.0.0", + "resolved": "https://registry.npmmirror.com/svg-sprite-loader/-/svg-sprite-loader-5.0.0.tgz", + "integrity": "sha512-/hedkRC2IS0E+kFIb+OUCfqQlbVx72/WEEeRGw2uPsNgOOgJEONXzjfSm+CJ3pB9gOHytlBmPMS8ijMCp5s2Eg==", + "dev": true, + "dependencies": { + "bluebird": "^3.5.0", + "deepmerge": "1.3.2", + "domready": "1.0.8", + "escape-string-regexp": "1.0.5", + "html-webpack-plugin": "^3.2.0", + "loader-utils": "^1.1.0", + "svg-baker": "^1.5.0", + "svg-baker-runtime": "^1.4.7", + "url-slug": "2.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/svg-sprite-loader/node_modules/deepmerge": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.3.2.tgz", + "integrity": "sha512-qjMjTrk+RKv/sp4RPDpV5CnKhxjFI9p+GkLBOls5A8EEElldYWCWA9zceAkmfd0xIo2aU1nxiaLFoiya2sb6Cg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha512-ovssysQTa+luh7A5Weu3Rta6FJlFBBbInjOh722LIt6klpU2/HtdUbszju/G4devcvk8PGt7FCLv5wftu3THUA==", + "dev": true + }, + "node_modules/svgo": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/svgo/-/svgo-1.3.0.tgz", + "integrity": "sha512-MLfUA6O+qauLDbym+mMZgtXCGRfIxyQoeH6IKVcFslyODEe/ElJNwr0FohQ3xG4C6HK6bk3KYPPXwHVJk3V5NQ==", + "deprecated": "This SVGO version is no longer supported. Upgrade to v2.x.x.", + "dependencies": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.33", + "csso": "^3.5.1", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" + }, + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/symbol-observable": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/symbol-observable/-/symbol-observable-1.2.0.tgz", + "integrity": "sha512-e900nM8RRtGhlV36KGEU9k65K3mPb1WV70OdjfxlG2EAuM1noi/E/BaW/uMhL7bPEssK8QV57vN3esixjUvcXQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/synchronous-promise": { + "version": "2.0.15", + "resolved": "https://registry.npmmirror.com/synchronous-promise/-/synchronous-promise-2.0.15.tgz", + "integrity": "sha512-k8uzYIkIVwmT+TcglpdN50pS2y1BDcUnBPK9iJeGu0Pl1lOI8pD6wtzgw91Pjpe+RxtTncw32tLxs/R0yNL2Mg==", + "dev": true + }, + "node_modules/table": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/table/-/table-4.0.2.tgz", + "integrity": "sha512-UUkEAPdSGxtRpiV9ozJ5cMTtYiqz7Ni1OGqLXRCynrvzdtR1p+cfOWe2RJLwvUG8hNanaSRjecIqwOjqeatDsA==", + "dev": true, + "optional": true, + "dependencies": { + "ajv": "^5.2.3", + "ajv-keywords": "^2.1.0", + "chalk": "^2.1.0", + "lodash": "^4.17.4", + "slice-ansi": "1.0.0", + "string-width": "^2.1.1" + } + }, + "node_modules/table/node_modules/ajv": { + "version": "5.5.2", + "resolved": "https://registry.npmmirror.com/ajv/-/ajv-5.5.2.tgz", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", + "dev": true, + "optional": true, + "dependencies": { + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" + } + }, + "node_modules/table/node_modules/ajv-keywords": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz", + "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", + "dev": true, + "optional": true, + "peerDependencies": { + "ajv": "^5.0.0" + } + }, + "node_modules/table/node_modules/fast-deep-equal": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", + "integrity": "sha512-fueX787WZKCV0Is4/T2cyAdM4+x1S3MXXOAhavE1ys/W42SHAPacLTQhucja22QBYrfGw50M2sRiXPtTGv9Ymw==", + "dev": true, + "optional": true + }, + "node_modules/table/node_modules/json-schema-traverse": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", + "integrity": "sha512-4JD/Ivzg7PoW8NzdrBSr3UFwC9mHgvI7Z6z3QGBsSHgKaRTUDmyZAAKJo2UbG1kUVfS9WS8bi36N49U1xw43DA==", + "dev": true, + "optional": true + }, + "node_modules/tapable": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/tapable/-/tapable-1.1.3.tgz", + "integrity": "sha512-4WK/bYZmj8xLr+HUCODHGF1ZFzsYffasLUgEiMBY4fgtltdO6B4WJtlSbPaDTLpYTcGVwM2qLnFTICEcNxs3kA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/tar": { + "version": "4.4.19", + "resolved": "https://registry.npmmirror.com/tar/-/tar-4.4.19.tgz", + "integrity": "sha512-a20gEsvHnWe0ygBY8JbxoM4w3SJdhc7ZAuxkLqh+nvNQN2IOt0B5lLgM490X5Hl8FF0dl0tOf2ewFYAlIFgzVA==", + "dev": true, + "dependencies": { + "chownr": "^1.1.4", + "fs-minipass": "^1.2.7", + "minipass": "^2.9.0", + "minizlib": "^1.3.3", + "mkdirp": "^0.5.5", + "safe-buffer": "^5.2.1", + "yallist": "^3.1.1" + }, + "engines": { + "node": ">=4.5" + } + }, + "node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmmirror.com/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/tar-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/tar/node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmmirror.com/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "node_modules/temp-dir": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/temp-dir/-/temp-dir-1.0.0.tgz", + "integrity": "sha512-xZFXEGbG7SNC3itwBzI3RYjq/cEhBkx2hJuKGIUOcEULmkQExXiHat2z/qkISYsuR+IKumhEfKKbV5qXmhICFQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/temp-write": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/temp-write/-/temp-write-4.0.0.tgz", + "integrity": "sha512-HIeWmj77uOOHb0QX7siN3OtwV3CTntquin6TNVg6SHOqCP3hYKmox90eeFOGaY1MqJ9WYDDjkyZrW6qS5AWpbw==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.15", + "is-stream": "^2.0.0", + "make-dir": "^3.0.0", + "temp-dir": "^1.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-write/node_modules/is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-write/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/temp-write/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/terser": { + "version": "4.8.0", + "resolved": "https://registry.npmmirror.com/terser/-/terser-4.8.0.tgz", + "integrity": "sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw==", + "dependencies": { + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/terser-webpack-plugin": { + "version": "1.4.5", + "resolved": "https://registry.npmmirror.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dependencies": { + "cacache": "^12.0.2", + "find-cache-dir": "^2.1.0", + "is-wsl": "^1.1.0", + "schema-utils": "^1.0.0", + "serialize-javascript": "^4.0.0", + "source-map": "^0.6.1", + "terser": "^4.1.2", + "webpack-sources": "^1.4.0", + "worker-farm": "^1.7.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^4.0.0" + } + }, + "node_modules/terser-webpack-plugin/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/terser/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/text-extensions": { + "version": "1.9.0", + "resolved": "https://registry.npmmirror.com/text-extensions/-/text-extensions-1.9.0.tgz", + "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", + "dev": true, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmmirror.com/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmmirror.com/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/thread-loader": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/thread-loader/-/thread-loader-2.1.3.tgz", + "integrity": "sha512-wNrVKH2Lcf8ZrWxDF/khdlLlsTMczdcwPA9VEK4c2exlEPynYWxi9op3nPTo5lAnDIkE0rQEB3VBP+4Zncc9Hg==", + "dev": true, + "dependencies": { + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" + }, + "engines": { + "node": ">= 6.9.0 <7.0.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^2.0.0 || ^3.0.0 || ^4.0.0" + } + }, + "node_modules/through": { + "version": "2.3.8", + "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" + }, + "node_modules/through2": { + "version": "2.0.5", + "resolved": "https://registry.npmmirror.com/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/thunky": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/thunky/-/thunky-1.1.0.tgz", + "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==", + "dev": true + }, + "node_modules/timers-browserify": { + "version": "2.0.12", + "resolved": "https://registry.npmmirror.com/timers-browserify/-/timers-browserify-2.0.12.tgz", + "integrity": "sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==", + "dependencies": { + "setimmediate": "^1.0.4" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", + "dev": true + }, + "node_modules/tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, + "node_modules/tinycolor2": { + "version": "1.4.2", + "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz", + "integrity": "sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==", + "engines": { + "node": "*" + } + }, + "node_modules/tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dependencies": { + "os-tmpdir": "~1.0.2" + }, + "engines": { + "node": ">=0.6.0" + } + }, + "node_modules/to-arraybuffer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/to-arraybuffer/-/to-arraybuffer-1.0.1.tgz", + "integrity": "sha512-okFlQcoGTi4LQBG/PgSYblw9VOyptsz2KJZqc6qtgGdes8VktzUQkj4BI2blit072iS8VODNcMA+tvnS9dnuMA==" + }, + "node_modules/to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmmirror.com/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha512-9mWHdnGRuh3onocaHzukyvCZhzvr6tiflAy/JRFXcJX0TjgfWA9pk9t8CMbzmBE4Jfw58pXbkngtBtqYxzNEyg==", + "dependencies": { + "kind-of": "^3.0.2" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-object-path/node_modules/kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmmirror.com/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", + "dependencies": { + "is-buffer": "^1.1.5" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmmirror.com/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dependencies": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha512-ZZWNfCjUokXXDGXFpZehJIkZqq91BcULFq/Pi7M5i4JnxXdhMKAK682z8bCW3o8Hj1wuuzoKcW3DfVzaP6VuNg==", + "dependencies": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "dev": true, + "engines": { + "node": ">=0.6" + } + }, + "node_modules/toposort": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-1.0.7.tgz", + "integrity": "sha512-FclLrw8b9bMWf4QlCJuHBEVhSRsqDj6u3nIjAzPeJvgl//1hBlffdlk0MALceL14+koWEdU4ofRAXofbODxQzg==", + "dev": true + }, + "node_modules/tough-cookie": { + "version": "2.5.0", + "resolved": "https://registry.npmmirror.com/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", + "dev": true, + "dependencies": { + "psl": "^1.1.28", + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tr46": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tr46/-/tr46-2.1.0.tgz", + "integrity": "sha512-15Ih7phfcdP5YxqiB+iDtLoaTz4Nd35+IiAv0kQ5FNKHzXgdWqPoTIqEDDJmXceQt4JZk6lVPT8lnDlPpGDppw==", + "dev": true, + "dependencies": { + "punycode": "^2.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/traverse": { + "version": "0.6.6", + "resolved": "https://registry.npmmirror.com/traverse/-/traverse-0.6.6.tgz", + "integrity": "sha512-kdf4JKs8lbARxWdp7RKdNzoJBhGUcIalSYibuGyHJbmk40pOysQ0+QPvlkCOICOivDWU2IJo2rkrxyTK2AH4fw==", + "dev": true + }, + "node_modules/trim-newlines": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/true-case-path": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/true-case-path/-/true-case-path-1.0.3.tgz", + "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", + "dev": true, + "dependencies": { + "glob": "^7.1.2" + } + }, + "node_modules/tryer": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/tryer/-/tryer-1.0.1.tgz", + "integrity": "sha512-c3zayb8/kWWpycWYg87P71E1S1ZL6b6IJxfb5fvsUgsf0S2MVGaDhDXXjDMpdCpfWXqptc+4mXwmiy1ypXqRAA==", + "dev": true + }, + "node_modules/tsconfig-paths": { + "version": "3.14.1", + "resolved": "https://registry.npmmirror.com/tsconfig-paths/-/tsconfig-paths-3.14.1.tgz", + "integrity": "sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==", + "dev": true, + "dependencies": { + "@types/json5": "^0.0.29", + "json5": "^1.0.1", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmmirror.com/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/tty-browserify": { + "version": "0.0.0", + "resolved": "https://registry.npmmirror.com/tty-browserify/-/tty-browserify-0.0.0.tgz", + "integrity": "sha512-JVa5ijo+j/sOoHGjw0sxw734b1LhBkQ3bvUGNdxnVXDCX81Yx7TFgnZygxrIIWn23hbfTaMYLwRmAxFyDuFmIw==" + }, + "node_modules/tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", + "dev": true, + "dependencies": { + "safe-buffer": "^5.0.1" + }, + "engines": { + "node": "*" + } + }, + "node_modules/tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmmirror.com/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", + "dev": true + }, + "node_modules/type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", + "dependencies": { + "prelude-ls": "~1.1.2" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmmirror.com/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha512-/aCDEGatGvZ2BIk+HmLf4ifCJFwvKFNb9/JeZPMulfgFracn9QFcAf5GO8B/mweUjSoblS5In0cWhqpfs/5PQA==" + }, + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", + "resolved": "https://registry.npmmirror.com/typedarray-to-buffer/-/typedarray-to-buffer-3.1.5.tgz", + "integrity": "sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==", + "dev": true, + "dependencies": { + "is-typedarray": "^1.0.0" + } + }, + "node_modules/uglify-js": { + "version": "3.4.10", + "resolved": "https://registry.npmmirror.com/uglify-js/-/uglify-js-3.4.10.tgz", + "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", + "dev": true, + "dependencies": { + "commander": "~2.19.0", + "source-map": "~0.6.1" + }, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/uglify-js/node_modules/commander": { + "version": "2.19.0", + "resolved": "https://registry.npmmirror.com/commander/-/commander-2.19.0.tgz", + "integrity": "sha512-6tvAOO+D6OENvRAh524Dh9jcfKTYDQAqvqezbCW82xj5X0pSrcpxtvRKHLG0yBY6SD7PSDrJaj+0AiOcKVd1Xg==", + "dev": true + }, + "node_modules/uglify-js/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uid-number": { + "version": "0.0.6", + "resolved": "https://registry.npmmirror.com/uid-number/-/uid-number-0.0.6.tgz", + "integrity": "sha512-c461FXIljswCuscZn67xq9PpszkPT6RjheWFQTgCyabJrTUozElanb0YEqv2UGgk247YpcJkFBuSGNvBlpXM9w==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/umask": { + "version": "1.1.0", + "resolved": "https://registry.npmmirror.com/umask/-/umask-1.1.0.tgz", + "integrity": "sha512-lE/rxOhmiScJu9L6RTNVgB/zZbF+vGC0/p6D3xnkAePI2o0sMyFG966iR5Ki50OI/0mNi2yaRnxfLsPmEZF/JA==", + "dev": true + }, + "node_modules/unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, + "node_modules/unicode-canonical-property-names-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", + "dev": true, + "dependencies": { + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-match-property-value-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.0.0.tgz", + "integrity": "sha512-7Yhkc0Ye+t4PNYzOGKedDhXbYIBe1XEQYQxOPyhcXNMJ0WCABqqj6ckydd6pWRZTHV4GuCPKdBAUiMc60tsKVw==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unicode-property-aliases-ecmascript": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.0.0.tgz", + "integrity": "sha512-5Zfuy9q/DFr4tfO7ZPeVXb1aPoeQSdeFMLpYuFebehDAhbuevLs5yxSZmIFN1tP5F9Wl4IpJrYojg85/zgyZHQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/unidecode": { + "version": "0.1.8", + "resolved": "https://registry.npmmirror.com/unidecode/-/unidecode-0.1.8.tgz", + "integrity": "sha512-SdoZNxCWpN2tXTCrGkPF/0rL2HEq+i2gwRG1ReBvx8/0yTzC3enHfugOf8A9JBShVwwrRIkLX0YcDUGbzjbVCA==", + "dev": true, + "engines": { + "node": ">= 0.4.12" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha512-Gw+zz50YNKPDKXs+9d+aKAjVwpjNwqzvNpLigIruT4HA9lMZNdMqs9x07kKHB/L9WRzqp4+DlTU5s4wG2esdoA==", + "dev": true + }, + "node_modules/uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha512-mZdDpf3vBV5Efh29kMw5tXoup/buMgxLzOt/XKFKcVmi+15ManNQWr6HfZ2aiZTYlYixbdNJ0KFmIZIv52tHSQ==", + "dev": true + }, + "node_modules/unique-filename": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unique-filename/-/unique-filename-1.1.1.tgz", + "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", + "dependencies": { + "unique-slug": "^2.0.0" + } + }, + "node_modules/unique-slug": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/unique-slug/-/unique-slug-2.0.2.tgz", + "integrity": "sha512-zoWr9ObaxALD3DOPfjPSqxt4fnZiWblxHIgeWqW8x7UqDzEtHEQLzji2cuJYQFCU6KmoJikOYAZlrTHHebjx2w==", + "dependencies": { + "imurmurhash": "^0.1.4" + } + }, + "node_modules/universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + }, + "node_modules/universalify": { + "version": "0.1.2", + "resolved": "https://registry.npmmirror.com/universalify/-/universalify-0.1.2.tgz", + "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", + "dev": true, + "engines": { + "node": ">= 4.0.0" + } + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha512-vRCqFv6UhXpWxZPyGDh/F3ZpNv8/qo7w6iufLpQg9aKnQ71qM4B5KiI7Mia9COcjEhrO9LueHpMYjYzsWH3OIg==" + }, + "node_modules/unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha512-PcA2tsuGSF9cnySLHTLSh2qrQiJ70mn+r+Glzxv2TWZblxsxCC52BDlZoPCsz7STd9pN7EZetkWZBAvk4cgZdQ==", + "dependencies": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmmirror.com/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha512-gpG936j8/MzaeID5Yif+577c17TxaDmhuyVgSwtnL/q8UUTySg8Mecb+8Cf1otgLoD7DDH75axp86ER7LFsf3Q==", + "dependencies": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-value/node_modules/isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha512-+OUdGJlgjOBZDfxnDjYYG6zp487z0JGNQq3cYQYg5f5hKR+syHMsaztzGeml/4kGG55CSpKSpWTY+jYGgsHLgA==", + "dependencies": { + "isarray": "1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unset-value/node_modules/has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha512-J8S0cEdWuQbqD9//tlZxiMuMNmxB8PlEwvYwuxsTmR1G5RXUePEX/SJn7aD0GMLieuZYSwNH0cQuJGwnYunXRQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/upath": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "devOptional": true, + "engines": { + "node": ">=4", + "yarn": "*" + } + }, + "node_modules/upper-case": { + "version": "1.1.3", + "resolved": "https://registry.npmmirror.com/upper-case/-/upper-case-1.1.3.tgz", + "integrity": "sha512-WRbjgmYzgXkCV7zNVpy5YgrHgbBv126rMALQQMrmzOVC4GM2waQ9x7xtm8VU+1yF2kWyPzI9zbZ48n4vSxwfSA==", + "dev": true + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmmirror.com/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urix": { + "version": "0.1.0", + "resolved": "https://registry.npmmirror.com/urix/-/urix-0.1.0.tgz", + "integrity": "sha512-Am1ousAhSLBeB9cG/7k7r2R0zj50uDRlZHPGbazid5s9rlF1F/QKYObEKSIunSjIOkJZqwRRLpvewjEkM7pSqg==", + "deprecated": "Please see https://github.com/lydell/urix#deprecated" + }, + "node_modules/url": { + "version": "0.11.0", + "resolved": "https://registry.npmmirror.com/url/-/url-0.11.0.tgz", + "integrity": "sha512-kbailJa29QrtXnxgq+DdCEGlbTeYM2eJUxsz6vjZavrCYPMIFHMKQmSKYAIuUK2i7hgPm28a8piX5NTUtM/LKQ==", + "dependencies": { + "punycode": "1.3.2", + "querystring": "0.2.0" + } + }, + "node_modules/url-loader": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/url-loader/-/url-loader-1.1.2.tgz", + "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", + "dev": true, + "dependencies": { + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" + }, + "engines": { + "node": ">= 6.9.0" + }, + "peerDependencies": { + "webpack": "^3.0.0 || ^4.0.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmmirror.com/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/url-slug": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/url-slug/-/url-slug-2.0.0.tgz", + "integrity": "sha512-aiNmSsVgrjCiJ2+KWPferjT46YFKoE8i0YX04BlMVDue022Xwhg/zYlnZ6V9/mP3p8Wj7LEp0myiTkC/p6sxew==", + "dev": true, + "dependencies": { + "unidecode": "0.1.8" + } + }, + "node_modules/url/node_modules/punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmmirror.com/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha512-RofWgt/7fL5wP1Y7fxE7/EmTLzQVnB0ycyibJ0OOHIlJqTNzglYFxVwETOcIoJqJmpDXJ9xImDv+Fq34F/d4Dw==" + }, + "node_modules/use": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/util": { + "version": "0.11.1", + "resolved": "https://registry.npmmirror.com/util/-/util-0.11.1.tgz", + "integrity": "sha512-HShAsny+zS2TZfaXxD9tYj4HQGlBezXZMZuM/S5PKLLoZkShZiGk9o5CzukI1LVHZvjdvZ2Sj1aW/Ndn2NB/HQ==", + "dependencies": { + "inherits": "2.0.3" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/util-promisify": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/util-promisify/-/util-promisify-2.1.0.tgz", + "integrity": "sha512-K+5eQPYs14b3+E+hmE2J6gCZ4JmMl9DbYS6BeP2CHq6WMuNxErxf5B/n0fz85L8zUuoO6rIzNNmIQDu/j+1OcA==", + "dev": true, + "dependencies": { + "object.getownpropertydescriptors": "^2.0.3" + } + }, + "node_modules/util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dependencies": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "node_modules/util/node_modules/inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==" + }, + "node_modules/utila": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/utila/-/utila-0.4.0.tgz", + "integrity": "sha512-Z0DbgELS9/L/75wZbro8xAnT50pBVFQZ+hUEueGDU5FN51YSCYM+jdxsfCiHjwNP/4LCDD0i/graKpeBnOXKRA==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "dev": true, + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmmirror.com/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", + "dev": true, + "bin": { + "uuid": "bin/uuid" + } + }, + "node_modules/v-click-outside-x": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/v-click-outside-x/-/v-click-outside-x-4.1.3.tgz", + "integrity": "sha512-qK4wwuDHK406fGBSJ4DbioPb6LQpRkWqk8i1TZhnVwObU+W4Ra6H7Cn+VLy/dTNTH/sgZJzk9YMYnB/s5RJ0Hg==", + "engines": { + "node": ">=8.11.4", + "npm": ">=6.10.1" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" + }, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmmirror.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "dependencies": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "node_modules/validate-npm-package-name": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/validate-npm-package-name/-/validate-npm-package-name-3.0.0.tgz", + "integrity": "sha512-M6w37eVCMMouJ9V/sdPGnC5H4uDr73/+xdq0FBLO3TFFX1+7wiUY6Es328NN+y43tmY+doUdN9g9J21vqB7iLw==", + "dev": true, + "dependencies": { + "builtins": "^1.0.3" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "dev": true, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmmirror.com/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "node_modules/verror": { + "version": "1.10.0", + "resolved": "https://registry.npmmirror.com/verror/-/verror-1.10.0.tgz", + "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", + "dev": true, + "engines": [ + "node >=0.6.0" + ], + "dependencies": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "node_modules/verror/node_modules/core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", + "dev": true + }, + "node_modules/vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==" + }, + "node_modules/vue": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/vue/-/vue-2.6.12.tgz", + "integrity": "sha512-uhmLFETqPPNyuLLbsKz6ioJ4q7AZHzD8ZVFNATNyICSZouqP2Sz0rotWQC8UNBF6VGSCs5abnKJoStA6JbCbfg==" + }, + "node_modules/vue-cli-plugin-mockjs": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/vue-cli-plugin-mockjs/-/vue-cli-plugin-mockjs-0.1.3.tgz", + "integrity": "sha512-BK7EaGhrLYYMOAPuhLxZjpBGJOLtpCFfVT2FDhDqBZIF+DimmAG/06P+gFwMDSQb8j8ROirLLBgLDjqIXJj56A==", + "dev": true, + "dependencies": { + "express": "^4.16.4", + "mockjs": "^1.0.1-beta3" + } + }, + "node_modules/vue-eslint-parser": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-2.0.3.tgz", + "integrity": "sha512-ZezcU71Owm84xVF6gfurBQUGg8WQ+WZGxgDEQu1IHFBZNx7BFZg3L1yHxrCBNNwbwFtE1GuvfJKMtb6Xuwc/Bw==", + "dev": true, + "optional": true, + "dependencies": { + "debug": "^3.1.0", + "eslint-scope": "^3.7.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^3.5.2", + "esquery": "^1.0.0", + "lodash": "^4.17.4" + }, + "engines": { + "node": ">=4" + }, + "peerDependencies": { + "eslint": ">=3.9.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "optional": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-3.7.3.tgz", + "integrity": "sha512-W+B0SvF4gamyCTmUc+uITPY0989iXVfKvhwtmJocTaYoc/3khEHmEmvfY/Gn9HA9VV75jrQECsHizkNw1b68FA==", + "dev": true, + "optional": true, + "dependencies": { + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/vue-eslint-parser/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true, + "optional": true + }, + "node_modules/vue-hot-reload-api": { + "version": "2.3.4", + "resolved": "https://registry.npmmirror.com/vue-hot-reload-api/-/vue-hot-reload-api-2.3.4.tgz", + "integrity": "sha512-BXq3jwIagosjgNVae6tkHzzIk6a8MHFtzAdwhnV5VlvPTFxDCvIttgSiHWjdGoTJvXtmRu5HacExfdarRcFhog==", + "dev": true + }, + "node_modules/vue-i18n": { + "version": "8.22.1", + "resolved": "https://registry.npmmirror.com/vue-i18n/-/vue-i18n-8.22.1.tgz", + "integrity": "sha512-JNgiEJ5a8YPfk5y2lKyfOAGLmkpAVfhaUi+T4wGpSppRYZ3XSyawSDDketY5KV2CsAiBLAGEIO6jO+0l2hQubg==" + }, + "node_modules/vue-loader": { + "version": "15.9.8", + "resolved": "https://registry.npmmirror.com/vue-loader/-/vue-loader-15.9.8.tgz", + "integrity": "sha512-GwSkxPrihfLR69/dSV3+5CdMQ0D+jXg8Ma1S4nQXKJAznYFX14vHdc/NetQc34Dw+rBbIJyP7JOuVb9Fhprvog==", + "dev": true, + "dependencies": { + "@vue/component-compiler-utils": "^3.1.0", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" + }, + "peerDependencies": { + "css-loader": "*", + "webpack": "^3.0.0 || ^4.1.0 || ^5.0.0-0" + }, + "peerDependenciesMeta": { + "cache-loader": { + "optional": true + }, + "vue-template-compiler": { + "optional": true + } + } + }, + "node_modules/vue-router": { + "version": "3.4.8", + "resolved": "https://registry.npmmirror.com/vue-router/-/vue-router-3.4.8.tgz", + "integrity": "sha512-3BsR84AqarcmweXjItxw3jwQsiYNssYg090yi4rlzTnCJxmHtkyCvhNz9Z7qRSOkmiV485KkUCReTp5AjNY4wg==" + }, + "node_modules/vue-style-loader": { + "version": "4.1.3", + "resolved": "https://registry.npmmirror.com/vue-style-loader/-/vue-style-loader-4.1.3.tgz", + "integrity": "sha512-sFuh0xfbtpRlKfm39ss/ikqs9AbKCoXZBpHeVZ8Tx650o0k0q/YCM7FRvigtxpACezfq6af+a7JeqVTWvncqDg==", + "dev": true, + "dependencies": { + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" + } + }, + "node_modules/vue-template-compiler": { + "version": "2.6.12", + "resolved": "https://registry.npmmirror.com/vue-template-compiler/-/vue-template-compiler-2.6.12.tgz", + "integrity": "sha512-OzzZ52zS41YUbkCBfdXShQTe69j1gQDZ9HIX8miuC9C3rBCk9wIRjLiZZLrmX9V+Ftq/YEyv1JaVr5Y/hNtByg==", + "dev": true, + "dependencies": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "node_modules/vue-template-es2015-compiler": { + "version": "1.9.1", + "resolved": "https://registry.npmmirror.com/vue-template-es2015-compiler/-/vue-template-es2015-compiler-1.9.1.tgz", + "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", + "dev": true + }, + "node_modules/vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "dependencies": { + "sortablejs": "1.10.2" + } + }, + "node_modules/vuescroll": { + "version": "4.16.1", + "resolved": "https://registry.npmmirror.com/vuescroll/-/vuescroll-4.16.1.tgz", + "integrity": "sha512-7fRsG2Yw5Z07LUz/IIu9barpmYiN9q+ZTC+CrVamvCbmsxyhz8mU1OuYFbfORysaUskioNMxTGDo+HOzeDfSyQ==", + "peerDependencies": { + "vue": "^2.0.0" + } + }, + "node_modules/watch-size": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/watch-size/-/watch-size-2.0.0.tgz", + "integrity": "sha512-M92R89dNoTPWyCD+HuUEDdhaDnh9jxPGOwlDc0u51jAgmjUvzqaEMynXSr3BaWs+QdHYk4KzibPy1TFtjLmOZQ==" + }, + "node_modules/watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmmirror.com/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dependencies": { + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0" + }, + "optionalDependencies": { + "chokidar": "^3.4.1", + "watchpack-chokidar2": "^2.0.1" + } + }, + "node_modules/watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "optional": true, + "dependencies": { + "chokidar": "^2.1.8" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "optional": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/watchpack-chokidar2/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "optional": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "optional": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "optional": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/watchpack-chokidar2/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "optional": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "optional": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "optional": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/watchpack-chokidar2/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "optional": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmmirror.com/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "dependencies": { + "minimalistic-assert": "^1.0.0" + } + }, + "node_modules/wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==", + "dev": true, + "dependencies": { + "defaults": "^1.0.3" + } + }, + "node_modules/webidl-conversions": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/webidl-conversions/-/webidl-conversions-6.1.0.tgz", + "integrity": "sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==", + "dev": true, + "engines": { + "node": ">=10.4" + } + }, + "node_modules/webpack": { + "version": "4.46.0", + "resolved": "https://registry.npmmirror.com/webpack/-/webpack-4.46.0.tgz", + "integrity": "sha512-6jJuJjg8znb/xRItk7bkT0+Q7AHCYjjFnvKIWQPkNIOyRqoCGvkOs0ipeQzrqz4l5FtN5ZI/ukEHroeX/o1/5Q==", + "dependencies": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/wasm-edit": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "acorn": "^6.4.1", + "ajv": "^6.10.2", + "ajv-keywords": "^3.4.1", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^4.5.0", + "eslint-scope": "^4.0.3", + "json-parse-better-errors": "^1.0.2", + "loader-runner": "^2.4.0", + "loader-utils": "^1.2.3", + "memory-fs": "^0.4.1", + "micromatch": "^3.1.10", + "mkdirp": "^0.5.3", + "neo-async": "^2.6.1", + "node-libs-browser": "^2.2.1", + "schema-utils": "^1.0.0", + "tapable": "^1.1.3", + "terser-webpack-plugin": "^1.4.3", + "watchpack": "^1.7.4", + "webpack-sources": "^1.4.1" + }, + "bin": { + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=6.11.5" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + }, + "webpack-command": { + "optional": true + } + } + }, + "node_modules/webpack-bundle-analyzer": { + "version": "3.9.0", + "resolved": "https://registry.npmmirror.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "dependencies": { + "acorn": "^7.1.1", + "acorn-walk": "^7.1.1", + "bfj": "^6.1.1", + "chalk": "^2.4.1", + "commander": "^2.18.0", + "ejs": "^2.6.1", + "express": "^4.16.3", + "filesize": "^3.6.1", + "gzip-size": "^5.0.0", + "lodash": "^4.17.19", + "mkdirp": "^0.5.1", + "opener": "^1.5.1", + "ws": "^6.0.0" + }, + "bin": { + "webpack-bundle-analyzer": "lib/bin/analyzer.js" + }, + "engines": { + "node": ">= 6.14.4" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-bundle-analyzer/node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmmirror.com/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/webpack-chain": { + "version": "4.12.1", + "resolved": "https://registry.npmmirror.com/webpack-chain/-/webpack-chain-4.12.1.tgz", + "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", + "dev": true, + "dependencies": { + "deepmerge": "^1.5.2", + "javascript-stringify": "^1.6.0" + } + }, + "node_modules/webpack-chain/node_modules/deepmerge": { + "version": "1.5.2", + "resolved": "https://registry.npmmirror.com/deepmerge/-/deepmerge-1.5.2.tgz", + "integrity": "sha512-95k0GDqvBjZavkuvzx/YqVLv/6YYa17fz6ILMSf7neqQITCPbnfEnQvEgMPNjH4kgobe7+WIL0yJEHku+H3qtQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-middleware": { + "version": "3.7.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", + "dev": true, + "dependencies": { + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" + }, + "engines": { + "node": ">= 6" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + } + }, + "node_modules/webpack-dev-server": { + "version": "3.11.3", + "resolved": "https://registry.npmmirror.com/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "dependencies": { + "ansi-html-community": "0.0.8", + "bonjour": "^3.5.0", + "chokidar": "^2.1.8", + "compression": "^1.7.4", + "connect-history-api-fallback": "^1.6.0", + "debug": "^4.1.1", + "del": "^4.1.1", + "express": "^4.17.1", + "html-entities": "^1.3.1", + "http-proxy-middleware": "0.19.1", + "import-local": "^2.0.0", + "internal-ip": "^4.3.0", + "ip": "^1.1.5", + "is-absolute-url": "^3.0.3", + "killable": "^1.0.1", + "loglevel": "^1.6.8", + "opn": "^5.5.0", + "p-retry": "^3.0.1", + "portfinder": "^1.0.26", + "schema-utils": "^1.0.0", + "selfsigned": "^1.10.8", + "semver": "^6.3.0", + "serve-index": "^1.9.1", + "sockjs": "^0.3.21", + "sockjs-client": "^1.5.0", + "spdy": "^4.0.2", + "strip-ansi": "^3.0.1", + "supports-color": "^6.1.0", + "url": "^0.11.0", + "webpack-dev-middleware": "^3.7.2", + "webpack-log": "^2.0.0", + "ws": "^6.2.1", + "yargs": "^13.3.2" + }, + "bin": { + "webpack-dev-server": "bin/webpack-dev-server.js" + }, + "engines": { + "node": ">= 6.11.5" + }, + "peerDependencies": { + "webpack": "^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "dependencies": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + } + }, + "node_modules/webpack-dev-server/node_modules/anymatch/node_modules/normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", + "dev": true, + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmmirror.com/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/chokidar": { + "version": "2.1.8", + "resolved": "https://registry.npmmirror.com/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "deprecated": "Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies", + "dev": true, + "dependencies": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "glob-parent": "^3.1.0", + "inherits": "^2.0.3", + "is-binary-path": "^1.0.0", + "is-glob": "^4.0.0", + "normalize-path": "^3.0.0", + "path-is-absolute": "^1.0.0", + "readdirp": "^2.2.1", + "upath": "^1.1.1" + }, + "optionalDependencies": { + "fsevents": "^1.2.7" + } + }, + "node_modules/webpack-dev-server/node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/webpack-dev-server/node_modules/emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmmirror.com/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha512-E8Ak/2+dZY6fnzlR7+ueWvhsH1SjHr4jjss4YS/h4py44jY9MhK/VFdaZJAWDz6BbL21KeteKxFSFpq8OS5gVA==", + "dev": true, + "dependencies": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "node_modules/webpack-dev-server/node_modules/glob-parent/node_modules/is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha512-UFpDDrPgM6qpnFNI+rh/p3bUaq9hKLZN8bMUWzxmcnZVS3omf4IPK+BrewlnWjO1WmUsMYuSjKh4UJuV4+Lqmw==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/webpack-dev-server/node_modules/is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha512-9fRVlXc0uCxEDj1nQzaWONSpbTfx0FmJfzHF7pwlI8DkWGoHBBea4Pg5Ky0ojwwxQmnSifgbKkI06Qv0Ljgj+Q==", + "dev": true, + "dependencies": { + "binary-extensions": "^1.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/webpack-dev-server/node_modules/readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmmirror.com/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/webpack-dev-server/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "dependencies": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/string-width/node_modules/strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "dependencies": { + "ansi-regex": "^4.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "dependencies": { + "ansi-regex": "^2.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-dev-server/node_modules/supports-color": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-6.1.0.tgz", + "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", + "dev": true, + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs": { + "version": "13.3.2", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "dependencies": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" + } + }, + "node_modules/webpack-dev-server/node_modules/yargs-parser": { + "version": "13.1.2", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", + "dev": true, + "dependencies": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "node_modules/webpack-log": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/webpack-log/-/webpack-log-2.0.0.tgz", + "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", + "dev": true, + "dependencies": { + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/webpack-merge": { + "version": "4.2.2", + "resolved": "https://registry.npmmirror.com/webpack-merge/-/webpack-merge-4.2.2.tgz", + "integrity": "sha512-TUE1UGoTX2Cd42j3krGYqObZbOD+xF7u28WB7tfUordytSjbWTIjK/8V0amkBfTYN4/pB/GIDlJZZ657BGG19g==", + "dev": true, + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/webpack-sources": { + "version": "1.4.3", + "resolved": "https://registry.npmmirror.com/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", + "dependencies": { + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" + } + }, + "node_modules/webpack-sources/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmmirror.com/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/webpack-virtual-modules": { + "version": "0.3.2", + "resolved": "https://registry.npmmirror.com/webpack-virtual-modules/-/webpack-virtual-modules-0.3.2.tgz", + "integrity": "sha512-RXQXioY6MhzM4CNQwmBwKXYgBs6ulaiQ8bkNQEl2J6Z+V+s7lgl/wGvaI/I0dLnYKB8cKsxQc17QOAVIphPLDw==", + "dev": true, + "dependencies": { + "debug": "^3.0.0" + } + }, + "node_modules/webpack-virtual-modules/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmmirror.com/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/webpack-virtual-modules/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/websocket-driver": { + "version": "0.7.4", + "resolved": "https://registry.npmmirror.com/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", + "dev": true, + "dependencies": { + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + }, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/websocket-extensions": { + "version": "0.1.4", + "resolved": "https://registry.npmmirror.com/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", + "dev": true, + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/whatwg-url": { + "version": "8.7.0", + "resolved": "https://registry.npmmirror.com/whatwg-url/-/whatwg-url-8.7.0.tgz", + "integrity": "sha512-gAojqb/m9Q8a5IV96E3fHJM70AzCkgt4uXYX2O7EmuyOnLrViCQlsEBmF9UQIu3/aeAIp2U17rtbpZWNntQqdg==", + "dev": true, + "dependencies": { + "lodash": "^4.7.0", + "tr46": "^2.1.0", + "webidl-conversions": "^6.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dependencies": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "node_modules/which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha512-B+enWhmw6cjfVC7kS8Pj9pCrKSc5txArRyaYGe088shv/FGWH+0Rjx/xPgtsWfsUtS27FkP697E4DDhgrgoc0Q==", + "dev": true + }, + "node_modules/wide-align": { + "version": "1.1.5", + "resolved": "https://registry.npmmirror.com/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", + "dev": true, + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, + "node_modules/worker-farm": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/worker-farm/-/worker-farm-1.7.0.tgz", + "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", + "dependencies": { + "errno": "~0.1.7" + } + }, + "node_modules/worker-loader": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/worker-loader/-/worker-loader-2.0.0.tgz", + "integrity": "sha512-tnvNp4K3KQOpfRnD20m8xltE3eWh89Ye+5oj7wXEEHKac1P4oZ6p9oTj8/8ExqoSBnk9nu5Pr4nKfQ1hn2APJw==", + "dependencies": { + "loader-utils": "^1.0.0", + "schema-utils": "^0.4.0" + }, + "engines": { + "node": ">= 6.9.0 || >= 8.9.0" + }, + "peerDependencies": { + "webpack": "^3.0.0 || ^4.0.0-alpha.0 || ^4.0.0" + } + }, + "node_modules/worker-loader/node_modules/schema-utils": { + "version": "0.4.7", + "resolved": "https://registry.npmmirror.com/schema-utils/-/schema-utils-0.4.7.tgz", + "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", + "dependencies": { + "ajv": "^6.1.0", + "ajv-keywords": "^3.1.0" + }, + "engines": { + "node": ">= 4" + } + }, + "node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmmirror.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmmirror.com/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==" + }, + "node_modules/write": { + "version": "0.2.1", + "resolved": "https://registry.npmmirror.com/write/-/write-0.2.1.tgz", + "integrity": "sha512-CJ17OoULEKXpA5pef3qLj5AxTJ6mSt7g84he2WIskKwqFO4T97d5V7Tadl0DYDk7qyUOQD5WlUlOMChaYrhxeA==", + "dev": true, + "optional": true, + "dependencies": { + "mkdirp": "^0.5.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "node_modules/write-json-file": { + "version": "4.3.0", + "resolved": "https://registry.npmmirror.com/write-json-file/-/write-json-file-4.3.0.tgz", + "integrity": "sha512-PxiShnxf0IlnQuMYOPPhPkhExoCQuTUNPOa/2JWCYTmBquU9njyyDuwRKN26IZBlp4yn1nt+Agh2HOOBl+55HQ==", + "dev": true, + "dependencies": { + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" + }, + "engines": { + "node": ">=8.3" + } + }, + "node_modules/write-json-file/node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz", + "integrity": "sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "dependencies": { + "semver": "^6.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/semver": { + "version": "6.3.0", + "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/write-json-file/node_modules/sort-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-4.2.0.tgz", + "integrity": "sha512-aUYIEU/UviqPgc8mHR6IW1EGxkAXpeRETYcrzg8cLAvUPZcpAlleSXHV2mY7G12GphSH6Gzv+4MMVSSkbdteHg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "resolved": "https://registry.npmmirror.com/write-file-atomic/-/write-file-atomic-3.0.3.tgz", + "integrity": "sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==", + "dev": true, + "dependencies": { + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "resolved": "https://registry.npmmirror.com/write-pkg/-/write-pkg-4.0.0.tgz", + "integrity": "sha512-v2UQ+50TNf2rNHJ8NyWttfm/EJUBWMJcx6ZTYZr6Qp52uuegWw/lBkCtCbnYZEmPRNL61m+u67dAmGxo+HTULA==", + "dev": true, + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/sort-keys/-/sort-keys-2.0.0.tgz", + "integrity": "sha512-/dPCrG1s3ePpWm6yBbxZq5Be1dXGLyLn9Z791chDC3NFrpkVbWGzkBwPN1knaciexFXgRJ7hzdnwZ4stHSDmjg==", + "dev": true, + "dependencies": { + "is-plain-obj": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", + "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.4.1.tgz", + "integrity": "sha512-IwzA/LSfD2vC1/YDYMv/zHP4rDF1usCwllsDpbolT3D4fUepIO7f9K70jjmUewU/LmGUKJcwcVtDCpnKk4BPMw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/write-json-file/-/write-json-file-3.2.0.tgz", + "integrity": "sha512-3xZqT7Byc2uORAatYiP3DHUUAVEkNOswEWNs9H5KXiicRTvzYzYqKjYc4G7p+8pltvAw641lVByKVtMpf+4sYQ==", + "dev": true, + "dependencies": { + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ws": { + "version": "6.2.2", + "resolved": "https://registry.npmmirror.com/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "dependencies": { + "async-limiter": "~1.0.0" + } + }, + "node_modules/xss": { + "version": "1.0.14", + "resolved": "https://registry.npmmirror.com/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "dependencies": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + }, + "bin": { + "xss": "bin/xss" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "engines": { + "node": ">=0.4" + } + }, + "node_modules/y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==" + }, + "node_modules/yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==" + }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmmirror.com/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmmirror.com/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmmirror.com/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmmirror.com/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yorkie": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/yorkie/-/yorkie-2.0.0.tgz", + "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/cross-spawn": { + "version": "5.1.0", + "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-5.1.0.tgz", + "integrity": "sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==", + "dev": true, + "dependencies": { + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + }, + "node_modules/yorkie/node_modules/execa": { + "version": "0.8.0", + "resolved": "https://registry.npmmirror.com/execa/-/execa-0.8.0.tgz", + "integrity": "sha512-zDWS+Rb1E8BlqqhALSt9kUhss8Qq4nN3iof3gsOdyINksElaPyNBtKUMTR62qhvgVWR0CqCX7sdnKe4MnUbFEA==", + "dev": true, + "dependencies": { + "cross-spawn": "^5.0.1", + "get-stream": "^3.0.0", + "is-stream": "^1.1.0", + "npm-run-path": "^2.0.0", + "p-finally": "^1.0.0", + "signal-exit": "^3.0.0", + "strip-eof": "^1.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/get-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmmirror.com/get-stream/-/get-stream-3.0.0.tgz", + "integrity": "sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/yorkie/node_modules/lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmmirror.com/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "node_modules/yorkie/node_modules/normalize-path": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-1.0.0.tgz", + "integrity": "sha512-7WyT0w8jhpDStXRq5836AMmihQwq2nrUVQrgjvUo/p/NZf9uy/MeJ246lBJVmWuYXMlJuG9BNZHF0hWjfTbQUA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/yorkie/node_modules/yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmmirror.com/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true + }, + "node_modules/yup": { + "version": "0.27.0", + "resolved": "https://registry.npmmirror.com/yup/-/yup-0.27.0.tgz", + "integrity": "sha512-v1yFnE4+u9za42gG/b/081E7uNW9mUj3qtkmelLbW5YPROZzSH/KUUyJu9Wt8vxFJcT9otL/eZopS0YK1L5yPQ==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.0.0", + "fn-name": "~2.0.1", + "lodash": "^4.17.11", + "property-expr": "^1.5.0", + "synchronous-promise": "^2.0.6", + "toposort": "^2.0.2" + } + }, + "node_modules/yup/node_modules/toposort": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/toposort/-/toposort-2.0.2.tgz", + "integrity": "sha512-0a5EOkAUp8D4moMi2W8ZF8jcga7BgZd91O/yabJCFY8az+XSzeGyTKs0Aoo897iV1Nj6guFq8orWDS96z91oGg==", + "dev": true + }, + "node_modules/zip-stream": { + "version": "2.1.3", + "resolved": "https://registry.npmmirror.com/zip-stream/-/zip-stream-2.1.3.tgz", + "integrity": "sha512-EkXc2JGcKhO5N5aZ7TmuNo45budRaFGHOmz24wtJR7znbNqDPmdZtUauKX6et8KAVseAMBOyWJqEpXcHTBsh7Q==", + "dev": true, + "dependencies": { + "archiver-utils": "^2.1.0", + "compress-commons": "^2.1.1", + "readable-stream": "^3.4.0" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/zip-stream/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/zrender": { + "version": "4.3.2", + "resolved": "https://registry.npmmirror.com/zrender/-/zrender-4.3.2.tgz", + "integrity": "sha512-bIusJLS8c4DkIcdiK+s13HiQ/zjQQVgpNohtd8d94Y2DnJqgM1yjh/jpDb8DoL6hd7r8Awagw8e3qK/oLaWr3g==" + } + }, "dependencies": { "@ampproject/remapping": { "version": "2.1.2", @@ -13,6 +27980,288 @@ "@jridgewell/trace-mapping": "^0.3.0" } }, + "@ant-design/colors": { + "version": "4.0.5", + "resolved": "https://registry.npmmirror.com/@ant-design/colors/-/colors-4.0.5.tgz", + "integrity": "sha512-3mnuX2prnWOWvpFTS2WH2LoouWlOgtnIpc6IarWN6GOzzLF8dW/U8UctuvIPhoboETehZfJ61XP+CGakBEPJ3Q==", + "requires": { + "tinycolor2": "^1.4.1" + } + }, + "@antv/algorithm": { + "version": "0.1.24", + "resolved": "https://registry.npmmirror.com/@antv/algorithm/-/algorithm-0.1.24.tgz", + "integrity": "sha512-zAv/YNDKYrHHKJKCn6RBKoNo9/298/qY6J5SSGglIIUfwJXN6wyRyTmNPfmkE/9t6/7XK9PYvK/6esQnwFawwQ==", + "requires": { + "@antv/util": "^2.0.13", + "tslib": "^2.0.0" + } + }, + "@antv/dom-util": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/@antv/dom-util/-/dom-util-2.0.4.tgz", + "integrity": "sha512-2shXUl504fKwt82T3GkuT4Uoc6p9qjCKnJ8gXGLSW4T1W37dqf9AV28aCfoVPHp2BUXpSsB+PAJX2rG/jLHsLQ==", + "requires": { + "tslib": "^2.0.3" + } + }, + "@antv/event-emitter": { + "version": "0.1.3", + "resolved": "https://registry.npmmirror.com/@antv/event-emitter/-/event-emitter-0.1.3.tgz", + "integrity": "sha512-4ddpsiHN9Pd4UIlWuKVK1C4IiZIdbwQvy9i7DUSI3xNJ89FPUFt8lxDYj8GzzfdllV0NkJTRxnG+FvLk0llidg==" + }, + "@antv/g-base": { + "version": "0.5.11", + "resolved": "https://registry.npmmirror.com/@antv/g-base/-/g-base-0.5.11.tgz", + "integrity": "sha512-10Hkq7XksVCqxZZrPkd6HTU9tb/+2meCVEMy/edhS4I/sokhcgC9m3fQP5bE8rA3EVKwELE7MJHZ98BEpVFqvQ==", + "requires": { + "@antv/event-emitter": "^0.1.1", + "@antv/g-math": "^0.1.6", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.13", + "@types/d3-timer": "^2.0.0", + "d3-ease": "^1.0.5", + "d3-interpolate": "^1.3.2", + "d3-timer": "^1.0.9", + "detect-browser": "^5.1.0", + "tslib": "^2.0.3" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + }, + "d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmmirror.com/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw==" + } + } + }, + "@antv/g-canvas": { + "version": "0.5.12", + "resolved": "https://registry.npmmirror.com/@antv/g-canvas/-/g-canvas-0.5.12.tgz", + "integrity": "sha512-iJ/muwwqCCNONVlPIzv/7OL5iLguaKRj2BxNMytUO3TWwamM+kHkiyYEOkS0dPn9h/hBsHYlLUluSVz2Fp6/bw==", + "requires": { + "@antv/g-base": "^0.5.3", + "@antv/g-math": "^0.1.6", + "@antv/matrix-util": "^3.1.0-beta.1", + "@antv/path-util": "~2.0.5", + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0", + "tslib": "^2.0.3" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + } + } + }, + "@antv/g-math": { + "version": "0.1.7", + "resolved": "https://registry.npmmirror.com/@antv/g-math/-/g-math-0.1.7.tgz", + "integrity": "sha512-xGyXaloD1ynfp7gS4VuV+MjSptZIwHvLHr8ekXJSFAeWPYLu84yOW2wOZHDdp1bzDAIuRv6xDBW58YGHrWsFcA==", + "requires": { + "@antv/util": "~2.0.0", + "gl-matrix": "^3.0.0" + } + }, + "@antv/g-svg": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-svg/-/g-svg-0.5.6.tgz", + "integrity": "sha512-Xve1EUGk4HMbl2nq4ozR4QLh6GyoZ8Xw/+9kHYI4B5P2lIUQU95MuRsaLFfW5NNpZDx85ZeH97tqEmC9L96E7A==", + "requires": { + "@antv/g-base": "^0.5.3", + "@antv/g-math": "^0.1.6", + "@antv/util": "~2.0.0", + "detect-browser": "^5.0.0", + "tslib": "^2.0.3" + } + }, + "@antv/g-webgpu": { + "version": "0.5.5", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu/-/g-webgpu-0.5.5.tgz", + "integrity": "sha512-TxtBniINFq1jFGEPo46xjJfrbJbUqkFd5wmsRs3tcg/7J7xoldOP1kEadpI3AJG9knMYdE92VpILw1VPd6DgzQ==", + "requires": { + "@antv/g-webgpu-core": "^0.5.5", + "@antv/g-webgpu-engine": "^0.5.5", + "@webgpu/types": "^0.0.31", + "gl-matrix": "^3.1.0", + "gl-vec2": "^1.3.0", + "hammerjs": "^2.0.8", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "polyline-miter-util": "^1.0.1", + "polyline-normals": "^2.0.2", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13" + } + }, + "@antv/g-webgpu-core": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu-core/-/g-webgpu-core-0.5.6.tgz", + "integrity": "sha512-DPiH3GkAUiT0Q+LAKeImpI+IOQ/gP2w6HstYKivpFIpBPIvZ/9equM3icVrn1iDfDkZANVXQ1PppcO3xBv1ZTw==", + "requires": { + "eventemitter3": "^4.0.0", + "gl-matrix": "^3.1.0", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13" + } + }, + "@antv/g-webgpu-engine": { + "version": "0.5.6", + "resolved": "https://registry.npmmirror.com/@antv/g-webgpu-engine/-/g-webgpu-engine-0.5.6.tgz", + "integrity": "sha512-D311qYUefdEFwLayutIHqucrAY3cAGH3BdnXS37nq+0nsglrHcNP0Ab1YTinn9RihLoY3yXFTLzrYkJHJbZXDg==", + "requires": { + "@antv/g-webgpu-core": "^0.5.6", + "@webgpu/glslang": "^0.0.15", + "@webgpu/types": "^0.0.31", + "gl-matrix": "^3.1.0", + "hammerjs": "^2.0.8", + "inversify": "^5.0.1", + "inversify-inject-decorators": "^3.1.0", + "probe.gl": "^3.1.1", + "reflect-metadata": "^0.1.13", + "regl": "^1.3.11" + } + }, + "@antv/g6": { + "version": "4.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6/-/g6-4.6.15.tgz", + "integrity": "sha512-sbtVPZxGHBNnkLynd4GAQAheDDZ/xUdPAJxxLO7LiMmaZcyNlk0ApV5d8G8IdiBFvJ6+mhaF+kot3LMyvsEx+g==", + "requires": { + "@antv/g6-pc": "0.6.15" + } + }, + "@antv/g6-core": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-core/-/g6-core-0.6.15.tgz", + "integrity": "sha512-klE4bLcY9dcByl9J97tN2IBEJcXFroyEJRG55l99IXd7ujh+DGnPEmKMX1BdnCiDqLZ9GJybRG5g6DqX6e7BbQ==", + "requires": { + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-math": "^0.1.1", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "ml-matrix": "^6.5.0", + "tslib": "^2.1.0" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + } + } + }, + "@antv/g6-element": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-element/-/g6-element-0.6.15.tgz", + "integrity": "sha512-8bUSCRMQVK9bh64V+jZRKpLapPVlrLdzC429uodg5wk9l3hugcSdanX6LAuLmy0p5Y4lXSyF2UsmWdx8t1qfcg==", + "requires": { + "@antv/g-base": "^0.5.1", + "@antv/g6-core": "0.6.15", + "@antv/util": "~2.0.5" + } + }, + "@antv/g6-pc": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-pc/-/g6-pc-0.6.15.tgz", + "integrity": "sha512-BqfFD5XiLfRhBt0QygdynUidz4T6azg0GnAzYsEkuKkye7qvaLL46xtfp9+Lqw/aUkBsjXUcEeJjoIPrx0Ehig==", + "requires": { + "@ant-design/colors": "^4.0.5", + "@antv/algorithm": "^0.1.8", + "@antv/dom-util": "^2.0.1", + "@antv/event-emitter": "~0.1.0", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-math": "^0.1.1", + "@antv/g-svg": "^0.5.1", + "@antv/g6-core": "0.6.15", + "@antv/g6-element": "0.6.15", + "@antv/g6-plugin": "0.6.15", + "@antv/hierarchy": "^0.6.7", + "@antv/layout": "^0.2.5", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/path-util": "^2.0.3", + "@antv/util": "~2.0.5", + "color": "^3.1.3", + "d3-force": "^2.0.1", + "dagre": "^0.8.5", + "insert-css": "^2.0.0", + "ml-matrix": "^6.5.0" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + } + } + }, + "@antv/g6-plugin": { + "version": "0.6.15", + "resolved": "https://registry.npmmirror.com/@antv/g6-plugin/-/g6-plugin-0.6.15.tgz", + "integrity": "sha512-LaXYEzaW3qkcAdwRrrhRItbsRKmtN6Orb0UCTRYSw0W8UOO4p4w5Tk05I7TME/VzPfMn9bXB+rD4aZofFzBYoA==", + "requires": { + "@antv/dom-util": "^2.0.2", + "@antv/g-base": "^0.5.1", + "@antv/g-canvas": "^0.5.2", + "@antv/g-svg": "^0.5.2", + "@antv/g6-core": "0.6.15", + "@antv/g6-element": "0.6.15", + "@antv/matrix-util": "^3.1.0-beta.3", + "@antv/scale": "^0.3.4", + "@antv/util": "^2.0.9", + "insert-css": "^2.0.0" + }, + "dependencies": { + "@antv/matrix-util": { + "version": "3.1.0-beta.3", + "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.1.0-beta.3.tgz", + "integrity": "sha512-W2R6Za3A6CmG51Y/4jZUM/tFgYSq7vTqJL1VD9dKrvwxS4sE0ZcXINtkp55CdyBwJ6Cwm8pfoRpnD4FnHahN0A==", + "requires": { + "@antv/util": "^2.0.9", + "gl-matrix": "^3.4.3", + "tslib": "^2.0.3" + } + } + } + }, + "@antv/graphlib": { + "version": "1.2.0", + "resolved": "https://registry.npmmirror.com/@antv/graphlib/-/graphlib-1.2.0.tgz", + "integrity": "sha512-hhJOMThec51nU4Fe5p/viLlNIL71uDEgYFzKPajWjr2715SFG1HAgiP6AVylIeqBcAZ04u3Lw7usjl/TuI5RuQ==" + }, "@antv/hierarchy": { "version": "0.6.8", "resolved": "https://registry.npmmirror.com/@antv/hierarchy/-/hierarchy-0.6.8.tgz", @@ -21,6 +28270,18 @@ "@antv/util": "^2.0.7" } }, + "@antv/layout": { + "version": "0.2.5", + "resolved": "https://registry.npmmirror.com/@antv/layout/-/layout-0.2.5.tgz", + "integrity": "sha512-YezISSc5wp88QLvytS2mm/3sFvJYTafIWEvjvp4DIIfIkt8fzZZSJHXJVky3VIqGwbkmD278lMWQQmQ8W1EWEA==", + "requires": { + "@antv/g-webgpu": "0.5.5", + "@antv/graphlib": "^1.0.0", + "d3-force": "^2.0.1", + "dagre-compound": "^0.0.11", + "ml-matrix": "^6.5.0" + } + }, "@antv/matrix-util": { "version": "3.0.4", "resolved": "https://registry.npmmirror.com/@antv/matrix-util/-/matrix-util-3.0.4.tgz", @@ -31,6 +28292,26 @@ "tslib": "^2.0.3" } }, + "@antv/path-util": { + "version": "2.0.15", + "resolved": "https://registry.npmmirror.com/@antv/path-util/-/path-util-2.0.15.tgz", + "integrity": "sha512-R2VLZ5C8PLPtr3VciNyxtjKqJ0XlANzpFb5sE9GE61UQqSRuSVSzIakMxjEPrpqbgc+s+y8i+fmc89Snu7qbNw==", + "requires": { + "@antv/matrix-util": "^3.0.4", + "@antv/util": "^2.0.9", + "tslib": "^2.0.3" + } + }, + "@antv/scale": { + "version": "0.3.18", + "resolved": "https://registry.npmmirror.com/@antv/scale/-/scale-0.3.18.tgz", + "integrity": "sha512-GHwE6Lo7S/Q5fgaLPaCsW+CH+3zl4aXpnN1skOiEY0Ue9/u+s2EySv6aDXYkAqs//i0uilMDD/0/4n8caX9U9w==", + "requires": { + "@antv/util": "~2.0.3", + "fecha": "~4.2.0", + "tslib": "^2.0.0" + } + }, "@antv/util": { "version": "2.0.17", "resolved": "https://registry.npmmirror.com/@antv/util/-/util-2.0.17.tgz", @@ -44,7 +28325,6 @@ "version": "7.16.7", "resolved": "https://registry.npmmirror.com/@babel/code-frame/-/code-frame-7.16.7.tgz", "integrity": "sha512-iAXqUn8IIeBTNd72xsFlgaXHkMBMt6y4HJp1tIaK465CWLT/fG1aqB7ykr95gHHmlBdGbFeWWfyB4NJJ0nmeIg==", - "dev": true, "requires": { "@babel/highlight": "^7.16.7" } @@ -361,8 +28641,7 @@ "@babel/helper-validator-identifier": { "version": "7.16.7", "resolved": "https://registry.npmmirror.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.16.7.tgz", - "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==", - "dev": true + "integrity": "sha512-hsEnFemeiW4D08A5gUAZxLBTXpZ39P+a+DGDsHw1yxqyQ/jzFEnxf5uTEGp+3bzAbNOxU1paTgYS4ECU/IgfDw==" }, "@babel/helper-validator-option": { "version": "7.16.7", @@ -397,7 +28676,6 @@ "version": "7.17.9", "resolved": "https://registry.npmmirror.com/@babel/highlight/-/highlight-7.17.9.tgz", "integrity": "sha512-J9PfEKCbFIv2X5bjTMiZu6Vf341N05QIY+d6FvVKynkG1S7G0j3I0QoRtWIrXhZ+/Nlb5Q0MzqL7TokEJ5BNHg==", - "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", "chalk": "^2.0.0", @@ -906,7 +29184,6 @@ "version": "7.17.9", "resolved": "https://registry.npmmirror.com/@babel/runtime/-/runtime-7.17.9.tgz", "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dev": true, "requires": { "regenerator-runtime": "^0.13.4" } @@ -4534,7 +32811,8 @@ "version": "1.0.4", "resolved": "https://registry.npmmirror.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", - "dev": true + "dev": true, + "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", @@ -4600,6 +32878,46 @@ "@octokit/openapi-types": "^11.2.0" } }, + "@probe.gl/env": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/env/-/env-3.5.0.tgz", + "integrity": "sha512-YdlpZZshhyYxvWDBmZ5RIW2pTR14Pw4p9czMlt/v7F6HbFzWfAdmH7q6xVwFRYxUpQLwhWensWyv4aFysiWl4g==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@probe.gl/log": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/log/-/log-3.5.0.tgz", + "integrity": "sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0" + } + }, + "@probe.gl/stats": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/@probe.gl/stats/-/stats-3.5.0.tgz", + "integrity": "sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@riophae/vue-treeselect": { + "version": "0.4.0", + "resolved": "https://registry.npmmirror.com/@riophae/vue-treeselect/-/vue-treeselect-0.4.0.tgz", + "integrity": "sha512-J4atYmBqXQmiPFK/0B5sXKjtnGc21mBJEiyKIDZwk0Q9XuynVFX6IJ4EpaLmUgL5Tve7HAS7wkiGGSti6Uaxcg==", + "requires": { + "@babel/runtime": "^7.3.1", + "babel-helper-vue-jsx-merge-props": "^2.0.3", + "easings-css": "^1.0.0", + "fuzzysearch": "^1.0.3", + "is-promise": "^2.1.0", + "lodash": "^4.0.0", + "material-colors": "^1.2.6", + "watch-size": "^2.0.0" + } + }, "@samverschueren/stream-to-observable": { "version": "0.3.1", "resolved": "https://registry.npmmirror.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz", @@ -4710,6 +33028,11 @@ "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, + "@types/d3-timer": { + "version": "2.0.1", + "resolved": "https://registry.npmmirror.com/@types/d3-timer/-/d3-timer-2.0.1.tgz", + "integrity": "sha512-TF8aoF5cHcLO7W7403blM7L1T+6NF3XMyN3fxyUolq2uOcFeicG/khQg/dGxiCJWoAcmYulYN7LYSRKO54IXaA==" + }, "@types/glob": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/@types/glob/-/glob-7.2.0.tgz", @@ -5254,7 +33577,8 @@ "version": "1.1.2", "resolved": "https://registry.npmmirror.com/@vue/preload-webpack-plugin/-/preload-webpack-plugin-1.1.2.tgz", "integrity": "sha512-LIZMuJk38pk9U9Ur4YzHjlIyMuxPlACdBIHH9/nGYVTsaGKOSnSuELiE8vS9wa+dJpIYspYUOqk+L1Q4pgHQHQ==", - "dev": true + "dev": true, + "requires": {} }, "@vue/web-component-wrapper": { "version": "1.3.0", @@ -5419,6 +33743,16 @@ "@xtuc/long": "4.2.2" } }, + "@webgpu/glslang": { + "version": "0.0.15", + "resolved": "https://registry.npmmirror.com/@webgpu/glslang/-/glslang-0.0.15.tgz", + "integrity": "sha512-niT+Prh3Aff8Uf1MVBVUsaNjFj9rJAKDXuoHIKiQbB+6IUP/3J3JIhBNyZ7lDhytvXxw6ppgnwKZdDJ08UMj4Q==" + }, + "@webgpu/types": { + "version": "0.0.31", + "resolved": "https://registry.npmmirror.com/@webgpu/types/-/types-0.0.31.tgz", + "integrity": "sha512-cvvCMSZBT4VsRNtt0lI6XQqvOIIWw6+NRUtnPUMDVDgsI4pCZColz3qzF5QcP9wIYOHEc3jssIBse8UWONKhlQ==" + }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -5435,16 +33769,6 @@ "integrity": "sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ==", "dev": true }, - "JSONStream": { - "version": "1.3.5", - "resolved": "https://registry.npmmirror.com/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" - } - }, "abbrev": { "version": "1.1.1", "resolved": "https://registry.npmmirror.com/abbrev/-/abbrev-1.1.1.tgz", @@ -5587,12 +33911,14 @@ "ajv-errors": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/ajv-errors/-/ajv-errors-1.0.1.tgz", - "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==" + "integrity": "sha512-DCRfO/4nQ+89p/RK43i8Ezd41EqdGIU4ld7nGF8OQ14oc/we5rEntLCUa7+jrn3nn83BosfwZA0wb4pon2o8iQ==", + "requires": {} }, "ajv-keywords": { "version": "3.5.2", "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-3.5.2.tgz", - "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==" + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "requires": {} }, "alphanum-sort": { "version": "1.0.2", @@ -5627,8 +33953,7 @@ "ansi-regex": { "version": "4.1.1", "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-4.1.1.tgz", - "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", - "dev": true + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==" }, "ansi-styles": { "version": "3.2.1", @@ -5896,8 +34221,7 @@ "astral-regex": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/astral-regex/-/astral-regex-1.0.0.tgz", - "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", - "dev": true + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==" }, "async": { "version": "2.6.4", @@ -5911,7 +34235,8 @@ "async-each": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/async-each/-/async-each-1.0.3.tgz", - "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==" + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "devOptional": true }, "async-foreach": { "version": "0.1.3", @@ -6063,6 +34388,11 @@ "resolve": "^1.12.0" } }, + "babel-helper-vue-jsx-merge-props": { + "version": "2.0.3", + "resolved": "https://registry.npmmirror.com/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-2.0.3.tgz", + "integrity": "sha512-gsLiKK7Qrb7zYJNgiXKpXblxbV5ffSwR0f5whkPAaBAR4fhi6bwRZxX9wBlIc5M/v8CCkXUbXZL4N/nSE97cqg==" + }, "babel-loader": { "version": "8.2.5", "resolved": "https://registry.npmmirror.com/babel-loader/-/babel-loader-8.2.5.tgz", @@ -6496,6 +34826,11 @@ "resolved": "https://registry.npmmirror.com/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==" }, + "bootstrap": { + "version": "3.4.1", + "resolved": "https://registry.npmmirror.com/bootstrap/-/bootstrap-3.4.1.tgz", + "integrity": "sha512-yN5oZVmRCwe5aKwzRj6736nSmKDX7pLYwsXiCj/EYmo16hODaBiT4En5btW/jhBF/seV+XMx3aYwukYC3A49DA==" + }, "brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmmirror.com/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -7284,6 +35619,16 @@ "dev": true, "optional": true }, + "clipboard": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/clipboard/-/clipboard-2.0.8.tgz", + "integrity": "sha512-Y6WO0unAIQp5bLmk1zdThRhgJt/x3ks6f30s3oE3H1mgIEU33XyQjEf8gsf6DxC7NPX8Y1SsNWjUjL/ywLnnbQ==", + "requires": { + "good-listener": "^1.2.2", + "select": "^1.1.2", + "tiny-emitter": "^2.0.0" + } + }, "clipboardy": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/clipboardy/-/clipboardy-2.3.0.tgz", @@ -7409,7 +35754,6 @@ "version": "3.2.1", "resolved": "https://registry.npmmirror.com/color/-/color-3.2.1.tgz", "integrity": "sha512-aBl7dZI9ENN6fUGC7mWpMTPNHmWUSNan9tuWN6ahh5ZLNk9baLJOnSMlrQkHcrfFgz2/RigjUVAjdx36VcemKA==", - "dev": true, "requires": { "color-convert": "^1.9.3", "color-string": "^1.6.0" @@ -7432,7 +35776,6 @@ "version": "1.9.1", "resolved": "https://registry.npmmirror.com/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, "requires": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" @@ -7844,8 +36187,8 @@ "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "requires": { - "JSONStream": "^1.0.4", "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", "lodash": "^4.17.15", "meow": "^8.0.0", "split2": "^3.0.0", @@ -8731,7 +37074,6 @@ "version": "6.0.5", "resolved": "https://registry.npmmirror.com/cross-spawn/-/cross-spawn-6.0.5.tgz", "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", - "dev": true, "requires": { "nice-try": "^1.0.4", "path-key": "^2.0.1", @@ -8893,6 +37235,11 @@ "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", "dev": true }, + "cssfilter": { + "version": "0.0.10", + "resolved": "https://registry.npmmirror.com/cssfilter/-/cssfilter-0.0.10.tgz", + "integrity": "sha512-FAaLDaplstoRsDR8XGYH51znUN0UY7nMc6Z9/fvE8EXGwvJE9hu7W2vHwx1+bd6gCYnln9nLbzxFTrcO9YQDZw==" + }, "cssnano": { "version": "4.1.11", "resolved": "https://registry.npmmirror.com/cssnano/-/cssnano-4.1.11.tgz", @@ -9019,11 +37366,26 @@ "resolved": "https://registry.npmmirror.com/cyclist/-/cyclist-1.0.1.tgz", "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==" }, + "d3": { + "version": "3.5.17", + "resolved": "https://registry.npmmirror.com/d3/-/d3-3.5.17.tgz", + "integrity": "sha512-yFk/2idb8OHPKkbAL8QaOaqENNoMhIaSHZerk3oQsECwkObkCpJyjYwCe+OHiq6UEdhe1m8ZGARRRO3ljFjlKg==" + }, + "d3-color": { + "version": "1.4.1", + "resolved": "https://registry.npmmirror.com/d3-color/-/d3-color-1.4.1.tgz", + "integrity": "sha512-p2sTHSLCJI2QKunbGb7ocOh7DgTAn8IrLx21QRc/BSnodXM4sv6aLQlnfpvehFMLZEfBc6g9pH9SWQccFYfJ9Q==" + }, "d3-dispatch": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/d3-dispatch/-/d3-dispatch-2.0.0.tgz", "integrity": "sha512-S/m2VsXI7gAti2pBoLClFFTMOO1HTtT0j99AuXLoGFKO6deHDdnv6ZGTxSTTUTgO1zVcv82fCOtDjYK4EECmWA==" }, + "d3-ease": { + "version": "1.0.7", + "resolved": "https://registry.npmmirror.com/d3-ease/-/d3-ease-1.0.7.tgz", + "integrity": "sha512-lx14ZPYkhNx0s/2HX5sLFUI3mbasHjSSpwO/KaaNACweVwxUruKyWVcb293wMv1RqTPZyZ8kSZ2NogUZNcLOFQ==" + }, "d3-force": { "version": "2.1.1", "resolved": "https://registry.npmmirror.com/d3-force/-/d3-force-2.1.1.tgz", @@ -9034,6 +37396,14 @@ "d3-timer": "1 - 2" } }, + "d3-interpolate": { + "version": "1.4.0", + "resolved": "https://registry.npmmirror.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz", + "integrity": "sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA==", + "requires": { + "d3-color": "1" + } + }, "d3-quadtree": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/d3-quadtree/-/d3-quadtree-2.0.0.tgz", @@ -9053,6 +37423,12 @@ "lodash": "^4.17.15" } }, + "dagre-compound": { + "version": "0.0.11", + "resolved": "https://registry.npmmirror.com/dagre-compound/-/dagre-compound-0.0.11.tgz", + "integrity": "sha512-UrSgRP9LtOZCYb9e5doolZXpc7xayyszgyOs7uakTK4n4KsLegLVTRRtq01GpQd/iZjYw5fWMapx9ed+c80MAQ==", + "requires": {} + }, "dargs": { "version": "7.0.0", "resolved": "https://registry.npmmirror.com/dargs/-/dargs-7.0.0.tgz", @@ -9080,6 +37456,11 @@ "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, + "dayjs": { + "version": "1.10.7", + "resolved": "https://registry.npmmirror.com/dayjs/-/dayjs-1.10.7.tgz", + "integrity": "sha512-P6twpd70BcPK34K26uJ1KT3wlhpuOAPoMwJzpsIWUxHZ7wpmbdZL/hQqBDfz7hGurYSa5PhzdhDHtt319hL3ig==" + }, "de-indent": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/de-indent/-/de-indent-1.0.2.tgz", @@ -9152,8 +37533,7 @@ "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmmirror.com/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==" }, "deepmerge": { "version": "2.2.1", @@ -9374,6 +37754,11 @@ "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", "dev": true }, + "delegate": { + "version": "3.2.0", + "resolved": "https://registry.npmmirror.com/delegate/-/delegate-3.2.0.tgz", + "integrity": "sha512-IofjkYBZaZivn0V8nnsMJGBr4jVLxHDheKSW88PyxS5QC4Vo9ZbZVvhzlSxY87fVq3STR6r+4cGepyHkcWOQSw==" + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/delegates/-/delegates-1.0.0.tgz", @@ -9407,6 +37792,11 @@ "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, + "detect-browser": { + "version": "5.3.0", + "resolved": "https://registry.npmmirror.com/detect-browser/-/detect-browser-5.3.0.tgz", + "integrity": "sha512-53rsFbGdwMwlF7qvCt0ypLM5V5/Mbl0szB7GPN8y9NCcbknYOeVVXdrXEq+90IwAfrrzt6Hd+u2E2ntakICU8w==" + }, "detect-indent": { "version": "5.0.0", "resolved": "https://registry.npmmirror.com/detect-indent/-/detect-indent-5.0.0.tgz", @@ -9419,6 +37809,11 @@ "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, + "dexie": { + "version": "2.0.4", + "resolved": "https://registry.npmmirror.com/dexie/-/dexie-2.0.4.tgz", + "integrity": "sha512-aQ/s1U2wHxwBKRrt2Z/mwFNHMQWhESerFsMYzE+5P5OsIe5o1kgpFMWkzKTtkvkyyEni6mWr/T4HUJuY9xIHLA==" + }, "dezalgo": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/dezalgo/-/dezalgo-1.0.4.tgz", @@ -9582,6 +37977,11 @@ "integrity": "sha512-YXQl1DSa4/PQyRfgrv6aoNjhasp/p4qs9FjJ4q4cQk+8m4r6k4ZSiEyytKG8f8W9gi8WsQtIObNmKd+tMzNTmA==", "dev": true }, + "dt-sql-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmmirror.com/dt-sql-parser/-/dt-sql-parser-1.2.1.tgz", + "integrity": "sha512-bp6Rtm8N3m2Z3tavtKGo8J5ffaPQdPodYV2xGi9f6IsWbHzOkpNBxHlORcWtnSLtA/JvZcvImQxgbkdaGiv5cw==" + }, "duplexer": { "version": "0.1.2", "resolved": "https://registry.npmmirror.com/duplexer/-/duplexer-0.1.2.tgz", @@ -9599,6 +37999,11 @@ "stream-shift": "^1.0.0" } }, + "easings-css": { + "version": "1.0.0", + "resolved": "https://registry.npmmirror.com/easings-css/-/easings-css-1.0.0.tgz", + "integrity": "sha512-7Uq7NdazNfVtr0RNmPAys8it0zKCuaqxJStYKEl72D3j4gbvXhhaM7iWNbqhA4C94ygCye6VuyhzBRQC4szeBg==" + }, "easy-stack": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/easy-stack/-/easy-stack-1.0.1.tgz", @@ -9679,8 +38084,7 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "emojis-list": { "version": "3.0.0", @@ -9860,7 +38264,6 @@ "version": "6.8.0", "resolved": "https://registry.npmmirror.com/eslint/-/eslint-6.8.0.tgz", "integrity": "sha512-K+Iayyo2LtyYhDSYwz5D5QdWw0hCacNzyq1Y821Xna2xSJj7cijoLLYmLxTQgcgZ9mC61nryMy9S7GRbYpI5Ig==", - "dev": true, "requires": { "@babel/code-frame": "^7.0.0", "ajv": "^6.10.0", @@ -9903,21 +38306,19 @@ "dependencies": { "acorn": { "version": "7.4.1", - "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "requires": {} }, "ansi-escapes": { "version": "4.3.2", "resolved": "https://registry.npmmirror.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz", "integrity": "sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==", - "dev": true, "requires": { "type-fest": "^0.21.3" }, @@ -9925,22 +38326,19 @@ "type-fest": { "version": "0.21.3", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.21.3.tgz", - "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==", - "dev": true + "integrity": "sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==" } } }, "ansi-regex": { "version": "5.0.1", "resolved": "https://registry.npmmirror.com/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", - "dev": true, "requires": { "color-convert": "^2.0.1" } @@ -9948,14 +38346,12 @@ "chardet": { "version": "0.7.0", "resolved": "https://registry.npmmirror.com/chardet/-/chardet-0.7.0.tgz", - "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==", - "dev": true + "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/cli-cursor/-/cli-cursor-3.1.0.tgz", "integrity": "sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==", - "dev": true, "requires": { "restore-cursor": "^3.1.0" } @@ -9963,14 +38359,12 @@ "cli-width": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/cli-width/-/cli-width-3.0.0.tgz", - "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==", - "dev": true + "integrity": "sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==" }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, "requires": { "color-name": "~1.1.4" } @@ -9978,14 +38372,12 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -9994,7 +38386,6 @@ "version": "3.0.0", "resolved": "https://registry.npmmirror.com/doctrine/-/doctrine-3.0.0.tgz", "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, "requires": { "esutils": "^2.0.2" } @@ -10003,7 +38394,6 @@ "version": "5.1.1", "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -10013,7 +38403,6 @@ "version": "6.2.1", "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz", "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", @@ -10024,7 +38413,6 @@ "version": "3.1.0", "resolved": "https://registry.npmmirror.com/external-editor/-/external-editor-3.1.0.tgz", "integrity": "sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==", - "dev": true, "requires": { "chardet": "^0.7.0", "iconv-lite": "^0.4.24", @@ -10035,7 +38423,6 @@ "version": "3.2.0", "resolved": "https://registry.npmmirror.com/figures/-/figures-3.2.0.tgz", "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", - "dev": true, "requires": { "escape-string-regexp": "^1.0.5" } @@ -10044,7 +38431,6 @@ "version": "5.0.1", "resolved": "https://registry.npmmirror.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz", "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", - "dev": true, "requires": { "flat-cache": "^2.0.1" } @@ -10053,7 +38439,6 @@ "version": "2.0.1", "resolved": "https://registry.npmmirror.com/flat-cache/-/flat-cache-2.0.1.tgz", "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", - "dev": true, "requires": { "flatted": "^2.0.0", "rimraf": "2.6.3", @@ -10064,7 +38449,6 @@ "version": "12.4.0", "resolved": "https://registry.npmmirror.com/globals/-/globals-12.4.0.tgz", "integrity": "sha512-BWICuzzDvDoH54NHKCseDanAhE3CeDorgDL5MT6LMXXj2WCnd9UC2szdk4AWLfjdgNBCXLUanXYcpBBKOSWGwg==", - "dev": true, "requires": { "type-fest": "^0.8.1" } @@ -10072,20 +38456,17 @@ "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmmirror.com/ignore/-/ignore-4.0.6.tgz", - "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", - "dev": true + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==" }, "import-fresh": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/import-fresh/-/import-fresh-3.3.0.tgz", "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -10095,7 +38476,6 @@ "version": "7.3.3", "resolved": "https://registry.npmmirror.com/inquirer/-/inquirer-7.3.3.tgz", "integrity": "sha512-JG3eIAj5V9CwcGvuOmoo6LB9kbAYT8HXffUl6memuszlwDC/qvFAJw49XJ5NROSFNPxp3iQg1GqkFhaY/CR0IA==", - "dev": true, "requires": { "ansi-escapes": "^4.2.1", "chalk": "^4.1.0", @@ -10116,7 +38496,6 @@ "version": "4.1.2", "resolved": "https://registry.npmmirror.com/chalk/-/chalk-4.1.2.tgz", "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", - "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -10126,7 +38505,6 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -10136,32 +38514,27 @@ "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "mimic-fn": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==" }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "mute-stream": { "version": "0.0.8", "resolved": "https://registry.npmmirror.com/mute-stream/-/mute-stream-0.0.8.tgz", - "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==", - "dev": true + "integrity": "sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==" }, "onetime": { "version": "5.1.2", "resolved": "https://registry.npmmirror.com/onetime/-/onetime-5.1.2.tgz", "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", - "dev": true, "requires": { "mimic-fn": "^2.1.0" } @@ -10169,20 +38542,17 @@ "regexpp": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/regexpp/-/regexpp-2.0.1.tgz", - "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==", - "dev": true + "integrity": "sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw==" }, "resolve-from": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==" }, "restore-cursor": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/restore-cursor/-/restore-cursor-3.1.0.tgz", "integrity": "sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==", - "dev": true, "requires": { "onetime": "^5.1.0", "signal-exit": "^3.0.2" @@ -10192,7 +38562,6 @@ "version": "2.6.3", "resolved": "https://registry.npmmirror.com/rimraf/-/rimraf-2.6.3.tgz", "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", - "dev": true, "requires": { "glob": "^7.1.3" } @@ -10200,14 +38569,12 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" }, "slice-ansi": { "version": "2.1.0", "resolved": "https://registry.npmmirror.com/slice-ansi/-/slice-ansi-2.1.0.tgz", "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", - "dev": true, "requires": { "ansi-styles": "^3.2.0", "astral-regex": "^1.0.0", @@ -10218,7 +38585,6 @@ "version": "3.2.1", "resolved": "https://registry.npmmirror.com/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, "requires": { "color-convert": "^1.9.0" } @@ -10227,7 +38593,6 @@ "version": "1.9.3", "resolved": "https://registry.npmmirror.com/color-convert/-/color-convert-1.9.3.tgz", "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, "requires": { "color-name": "1.1.3" } @@ -10235,14 +38600,12 @@ "color-name": { "version": "1.1.3", "resolved": "https://registry.npmmirror.com/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" } } }, @@ -10250,7 +38613,6 @@ "version": "4.2.3", "resolved": "https://registry.npmmirror.com/string-width/-/string-width-4.2.3.tgz", "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -10261,7 +38623,6 @@ "version": "6.0.1", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-6.0.1.tgz", "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, "requires": { "ansi-regex": "^5.0.1" } @@ -10271,14 +38632,12 @@ "strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmmirror.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz", - "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", - "dev": true + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==" }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", - "dev": true, "requires": { "has-flag": "^4.0.0" } @@ -10287,7 +38646,6 @@ "version": "5.4.6", "resolved": "https://registry.npmmirror.com/table/-/table-5.4.6.tgz", "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", - "dev": true, "requires": { "ajv": "^6.10.2", "lodash": "^4.17.14", @@ -10298,20 +38656,17 @@ "emoji-regex": { "version": "7.0.3", "resolved": "https://registry.npmmirror.com/emoji-regex/-/emoji-regex-7.0.3.tgz", - "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", - "dev": true + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==" }, "is-fullwidth-code-point": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", - "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==", - "dev": true + "integrity": "sha512-VHskAKYM8RfSFXwee5t5cbN5PZeq1Wrh6qd5bkyiXIf6UQcN6w/A0eXM9r6t8d+GYOh+o6ZhiEnb88LN/Y8m2w==" }, "string-width": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/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", @@ -10323,14 +38678,12 @@ "type-fest": { "version": "0.8.1", "resolved": "https://registry.npmmirror.com/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", - "dev": true + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" }, "write": { "version": "1.0.3", "resolved": "https://registry.npmmirror.com/write/-/write-1.0.3.tgz", "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", - "dev": true, "requires": { "mkdirp": "^0.5.1" } @@ -10341,7 +38694,8 @@ "version": "12.0.0", "resolved": "https://registry.npmmirror.com/eslint-config-standard/-/eslint-config-standard-12.0.0.tgz", "integrity": "sha512-COUz8FnXhqFitYj4DTqHzidjIL/t4mumGZto5c7DrBpvWoie+Sn3P4sLEzUGeYhRElWuFEf8K1S1EfvD1vixCQ==", - "dev": true + "dev": true, + "requires": {} }, "eslint-import-resolver-node": { "version": "0.3.6", @@ -10524,13 +38878,13 @@ "version": "4.1.0", "resolved": "https://registry.npmmirror.com/eslint-plugin-standard/-/eslint-plugin-standard-4.1.0.tgz", "integrity": "sha512-ZL7+QRixjTR6/528YNGyDotyffm5OQst/sGxKDwGb9Uqs4In5Egi4+jbobhqJoyoCM6/7v/1A5fhQ7ScMtDjaQ==", - "dev": true + "dev": true, + "requires": {} }, "eslint-plugin-vue": { "version": "6.2.2", "resolved": "https://registry.npmmirror.com/eslint-plugin-vue/-/eslint-plugin-vue-6.2.2.tgz", "integrity": "sha512-Nhc+oVAHm0uz/PkJAWscwIT4ijTrK5fqNqz9QB1D35SbbuMG1uB6Yr5AJpvPSWg+WOw7nYNswerYh0kOk64gqQ==", - "dev": true, "requires": { "natural-compare": "^1.4.0", "semver": "^5.6.0", @@ -10540,20 +38894,18 @@ "acorn": { "version": "7.4.1", "resolved": "https://registry.npmmirror.com/acorn/-/acorn-7.4.1.tgz", - "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", - "dev": true + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==" }, "acorn-jsx": { "version": "5.3.2", "resolved": "https://registry.npmmirror.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", - "dev": true + "requires": {} }, "debug": { "version": "4.3.4", "resolved": "https://registry.npmmirror.com/debug/-/debug-4.3.4.tgz", "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, "requires": { "ms": "2.1.2" } @@ -10562,7 +38914,6 @@ "version": "5.1.1", "resolved": "https://registry.npmmirror.com/eslint-scope/-/eslint-scope-5.1.1.tgz", "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, "requires": { "esrecurse": "^4.3.0", "estraverse": "^4.1.1" @@ -10572,7 +38923,6 @@ "version": "6.2.1", "resolved": "https://registry.npmmirror.com/espree/-/espree-6.2.1.tgz", "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", - "dev": true, "requires": { "acorn": "^7.1.1", "acorn-jsx": "^5.2.0", @@ -10582,20 +38932,17 @@ "lodash": { "version": "4.17.21", "resolved": "https://registry.npmmirror.com/lodash/-/lodash-4.17.21.tgz", - "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", - "dev": true + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==" }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmmirror.com/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" }, "vue-eslint-parser": { "version": "7.11.0", "resolved": "https://registry.npmmirror.com/vue-eslint-parser/-/vue-eslint-parser-7.11.0.tgz", "integrity": "sha512-qh3VhDLeh773wjgNTl7ss0VejY9bMMa0GoDG2fQVyDzRFdiU3L7fw74tWZDHNQXdZqxO3EveQroa9ct39D2nqg==", - "dev": true, "requires": { "debug": "^4.1.1", "eslint-scope": "^5.1.1", @@ -10609,8 +38956,7 @@ "semver": { "version": "6.3.0", "resolved": "https://registry.npmmirror.com/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==" } } } @@ -10629,7 +38975,6 @@ "version": "1.4.3", "resolved": "https://registry.npmmirror.com/eslint-utils/-/eslint-utils-1.4.3.tgz", "integrity": "sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q==", - "dev": true, "requires": { "eslint-visitor-keys": "^1.1.0" } @@ -10637,8 +38982,7 @@ "eslint-visitor-keys": { "version": "1.3.0", "resolved": "https://registry.npmmirror.com/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", - "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", - "dev": true + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==" }, "espree": { "version": "3.5.4", @@ -10669,7 +39013,6 @@ "version": "1.4.0", "resolved": "https://registry.npmmirror.com/esquery/-/esquery-1.4.0.tgz", "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", - "dev": true, "requires": { "estraverse": "^5.1.0" }, @@ -10677,8 +39020,7 @@ "estraverse": { "version": "5.3.0", "resolved": "https://registry.npmmirror.com/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", - "dev": true + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==" } } }, @@ -10705,8 +39047,7 @@ "esutils": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/esutils/-/esutils-2.0.3.tgz", - "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", - "dev": true + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==" }, "etag": { "version": "1.8.1", @@ -11054,8 +39395,7 @@ "fast-levenshtein": { "version": "2.0.6", "resolved": "https://registry.npmmirror.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", - "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", - "dev": true + "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==" }, "fastparse": { "version": "1.1.2", @@ -11081,6 +39421,11 @@ "websocket-driver": ">=0.5.1" } }, + "fecha": { + "version": "4.2.3", + "resolved": "https://registry.npmmirror.com/fecha/-/fecha-4.2.3.tgz", + "integrity": "sha512-OP2IUU6HeYKJi3i0z4A19kHMQoLVs4Hc+DPqqxI2h/DPZHTm/vjsfC6P0b4jCMy14XizLBqvndQ+UilD7707Jw==" + }, "figgy-pudding": { "version": "3.5.2", "resolved": "https://registry.npmmirror.com/figgy-pudding/-/figgy-pudding-3.5.2.tgz", @@ -11300,8 +39645,7 @@ "flatted": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/flatted/-/flatted-2.0.2.tgz", - "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", - "dev": true + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==" }, "flush-write-stream": { "version": "1.1.1", @@ -11451,8 +39795,7 @@ "functional-red-black-tree": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==", - "dev": true + "integrity": "sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==" }, "functions-have-names": { "version": "1.2.3", @@ -11460,6 +39803,11 @@ "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", "dev": true }, + "fuzzysearch": { + "version": "1.0.3", + "resolved": "https://registry.npmmirror.com/fuzzysearch/-/fuzzysearch-1.0.3.tgz", + "integrity": "sha512-s+kNWQuI3mo9OALw0HJ6YGmMbLqEufCh2nX/zzV5CrICQ/y4AwPxM+6TIiF9ItFCHXFCyM/BfCCmN57NTIJuPg==" + }, "g-status": { "version": "2.0.2", "resolved": "https://registry.npmmirror.com/g-status/-/g-status-2.0.2.tgz", @@ -11755,6 +40103,11 @@ "resolved": "https://registry.npmmirror.com/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" }, + "gl-vec2": { + "version": "1.3.0", + "resolved": "https://registry.npmmirror.com/gl-vec2/-/gl-vec2-1.3.0.tgz", + "integrity": "sha512-YiqaAuNsheWmUV0Sa8k94kBB0D6RWjwZztyO+trEYS8KzJ6OQB/4686gdrf59wld4hHFIvaxynO3nRxpk1Ij/A==" + }, "glob": { "version": "7.2.0", "resolved": "https://registry.npmmirror.com/glob/-/glob-7.2.0.tgz", @@ -11893,6 +40246,14 @@ } } }, + "good-listener": { + "version": "1.2.2", + "resolved": "https://registry.npmmirror.com/good-listener/-/good-listener-1.2.2.tgz", + "integrity": "sha512-goW1b+d9q/HIwbVYZzZ6SsTr4IgE+WA44A0GmPIQstuOrgsFcT7VEJ48nmr9GaRtNu0XTKacFLGnBPAM6Afouw==", + "requires": { + "delegate": "^3.1.2" + } + }, "graceful-fs": { "version": "4.2.10", "resolved": "https://registry.npmmirror.com/graceful-fs/-/graceful-fs-4.2.10.tgz", @@ -11916,6 +40277,11 @@ "pify": "^4.0.1" } }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmmirror.com/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==" + }, "handle-thing": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/handle-thing/-/handle-thing-2.0.1.tgz", @@ -12110,6 +40476,11 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, + "highlight.js": { + "version": "9.18.3", + "resolved": "https://registry.npmmirror.com/highlight.js/-/highlight.js-9.18.3.tgz", + "integrity": "sha512-zBZAmhSupHIl5sITeMqIJnYCDfAEc3Gdkqj65wC1lpI468MMQeeQkhcIAvk+RylAkxrCcI9xy9piHiXeQ1BdzQ==" + }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -12486,7 +40857,6 @@ "version": "0.4.24", "resolved": "https://registry.npmmirror.com/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", - "dev": true, "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -12783,6 +41153,11 @@ } } }, + "insert-css": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/insert-css/-/insert-css-2.0.0.tgz", + "integrity": "sha512-xGq5ISgcUP5cvGkS2MMFLtPDBtrtQPSFfC6gA6U8wHKqfjTIMZLZNxOItQnoSjdOzlXOLU/yD32RKC4SvjNbtA==" + }, "internal-ip": { "version": "4.3.0", "resolved": "https://registry.npmmirror.com/internal-ip/-/internal-ip-4.3.0.tgz", @@ -12824,6 +41199,16 @@ "loose-envify": "^1.0.0" } }, + "inversify": { + "version": "5.1.1", + "resolved": "https://registry.npmmirror.com/inversify/-/inversify-5.1.1.tgz", + "integrity": "sha512-j8grHGDzv1v+8T1sAQ+3boTCntFPfvxLCkNcxB1J8qA0lUN+fAlSyYd+RXKvaPRL4AGyPxViutBEJHNXOyUdFQ==" + }, + "inversify-inject-decorators": { + "version": "3.1.0", + "resolved": "https://registry.npmmirror.com/inversify-inject-decorators/-/inversify-inject-decorators-3.1.0.tgz", + "integrity": "sha512-/seBlVp5bXrLQS3DpKEmlgeZL6C7Tf/QITd+IMQrbBBGuCbxb7k3hRAWu9XSreNpFzLgSboz3sClLSEmGwHphw==" + }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmmirror.com/ip/-/ip-1.1.5.tgz", @@ -13160,8 +41545,7 @@ "is-promise": { "version": "2.2.2", "resolved": "https://registry.npmmirror.com/is-promise/-/is-promise-2.2.2.tgz", - "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==", - "dev": true + "integrity": "sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ==" }, "is-regex": { "version": "1.1.4", @@ -13276,8 +41660,7 @@ "isexe": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/isexe/-/isexe-2.0.0.tgz", - "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", - "dev": true + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" }, "isobject": { "version": "3.0.1", @@ -13311,6 +41694,11 @@ "integrity": "sha512-fnjC0up+0SjEJtgmmG+teeel68kutkvzfctO/KxE3qJlbunkJYAshgH3boU++gSBHP8z5/r0ts0qRIrHf0RTQQ==", "dev": true }, + "jquery": { + "version": "3.6.0", + "resolved": "https://registry.npmmirror.com/jquery/-/jquery-3.6.0.tgz", + "integrity": "sha512-JVzAR/AjBvVt2BmYhxRCSYysDsPcssdmTFnzyLEts9qNwmjmu4JTAMYubEfwVOSwpQ1I1sKKFcxhZCI2buerfw==" + }, "js-base64": { "version": "2.6.4", "resolved": "https://registry.npmmirror.com/js-base64/-/js-base64-2.6.4.tgz", @@ -13346,8 +41734,7 @@ "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmmirror.com/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.14.1", @@ -13400,8 +41787,7 @@ "json-stable-stringify-without-jsonify": { "version": "1.0.1", "resolved": "https://registry.npmmirror.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", - "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", - "dev": true + "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==" }, "json-stringify-safe": { "version": "5.0.1", @@ -13432,6 +41818,16 @@ "integrity": "sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==", "dev": true }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmmirror.com/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" + } + }, "jsprim": { "version": "1.4.2", "resolved": "https://registry.npmmirror.com/jsprim/-/jsprim-1.4.2.tgz", @@ -13679,7 +42075,6 @@ "version": "0.3.0", "resolved": "https://registry.npmmirror.com/levn/-/levn-0.3.0.tgz", "integrity": "sha512-0OO4y2iOHix2W6ujICbKIaEQXvFQHue65vUG3pb5EUomzPI90z9hsA1VsO/dbIIpC53J8gxM9Q4Oho0jrCM/yA==", - "dev": true, "requires": { "prelude-ls": "~1.1.2", "type-check": "~0.3.2" @@ -14533,12 +42928,25 @@ "escape-string-regexp": "^1.0.4" } }, + "material-colors": { + "version": "1.2.6", + "resolved": "https://registry.npmmirror.com/material-colors/-/material-colors-1.2.6.tgz", + "integrity": "sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==" + }, "math-random": { "version": "1.0.4", "resolved": "https://registry.npmmirror.com/math-random/-/math-random-1.0.4.tgz", "integrity": "sha512-rUxjysqif/BZQH2yhd5Aaq7vXMSx9NdEsQcyA07uEzIvxgI7zIr33gGsh+RU0/XjmQpCW7RsVof1vlkvQVCK5A==", "dev": true }, + "mavon-editor": { + "version": "2.10.4", + "resolved": "https://registry.npmmirror.com/mavon-editor/-/mavon-editor-2.10.4.tgz", + "integrity": "sha512-CFsBLkgt/KZBDg+SJYe2fyYv4zClY149PiwpH0rDAiiP4ae1XNs0GC8nBsoTeipsHcebDLN1QMkt3bUsnMDjQw==", + "requires": { + "xss": "^1.0.6" + } + }, "md5": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/md5/-/md5-2.3.0.tgz", @@ -15206,9 +43614,17 @@ "dev": true }, "moment": { - "version": "2.29.4", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", - "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" + "version": "2.29.1", + "resolved": "https://registry.npmmirror.com/moment/-/moment-2.29.1.tgz", + "integrity": "sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==" + }, + "moment-timezone": { + "version": "0.5.37", + "resolved": "https://registry.npmmirror.com/moment-timezone/-/moment-timezone-0.5.37.tgz", + "integrity": "sha512-uEDzDNFhfaywRl+vwXxffjjq1q0Vzr+fcQpQ1bU0kbzorfS7zVtZnCnGc8mhWmF39d4g4YriF6kwA75mJKE/Zg==", + "requires": { + "moment": ">= 2.9.0" + } }, "monaco-editor": { "version": "0.19.3", @@ -15334,7 +43750,8 @@ "nan": { "version": "2.15.0", "resolved": "https://registry.npmmirror.com/nan/-/nan-2.15.0.tgz", - "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==" + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "devOptional": true }, "nanomatch": { "version": "1.2.13", @@ -15364,8 +43781,7 @@ "natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmmirror.com/natural-compare/-/natural-compare-1.4.0.tgz", - "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", - "dev": true + "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, "ncp": { "version": "2.0.0", @@ -15387,8 +43803,7 @@ "nice-try": { "version": "1.0.5", "resolved": "https://registry.npmmirror.com/nice-try/-/nice-try-1.0.5.tgz", - "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", - "dev": true + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==" }, "no-case": { "version": "2.3.2", @@ -15843,7 +44258,8 @@ "normalize-path": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==" + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "devOptional": true }, "normalize-range": { "version": "0.1.2", @@ -16317,7 +44733,6 @@ "version": "0.8.3", "resolved": "https://registry.npmmirror.com/optionator/-/optionator-0.8.3.tgz", "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", - "dev": true, "requires": { "deep-is": "~0.1.3", "fast-levenshtein": "~2.0.6", @@ -16364,8 +44779,7 @@ "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz", - "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==", - "dev": true + "integrity": "sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==" }, "osenv": { "version": "0.1.5", @@ -16644,7 +45058,6 @@ "version": "1.0.1", "resolved": "https://registry.npmmirror.com/parent-module/-/parent-module-1.0.1.tgz", "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, "requires": { "callsites": "^3.0.0" }, @@ -16652,8 +45065,7 @@ "callsites": { "version": "3.1.0", "resolved": "https://registry.npmmirror.com/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==" } } }, @@ -16708,39 +45120,21 @@ "json-parse-better-errors": "^1.0.1" } }, - "parse-url": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.2.tgz", - "integrity": "sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ==", + "parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmmirror.com/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", "dev": true, "requires": { "is-ssh": "^1.3.0", - "normalize-url": "^6.1.0", - "parse-path": "^4.0.4", - "protocols": "^1.4.0" + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" }, "dependencies": { - "normalize-url": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", - "dev": true - }, - "parse-path": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.4.tgz", - "integrity": "sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==", - "dev": true, - "requires": { - "is-ssh": "^1.3.0", - "protocols": "^1.4.0", - "qs": "^6.9.4", - "query-string": "^6.13.8" - } - }, "query-string": { "version": "6.14.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "resolved": "https://registry.npmmirror.com/query-string/-/query-string-6.14.1.tgz", "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", "dev": true, "requires": { @@ -16752,12 +45146,32 @@ }, "strict-uri-encode": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "resolved": "https://registry.npmmirror.com/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", "integrity": "sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==", "dev": true } } }, + "parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmmirror.com/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmmirror.com/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + } + } + }, "parse5": { "version": "5.1.1", "resolved": "https://registry.npmmirror.com/parse5/-/parse5-5.1.1.tgz", @@ -16837,7 +45251,8 @@ "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmmirror.com/path-dirname/-/path-dirname-1.0.2.tgz", - "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==" + "integrity": "sha512-ALzNPpyNq9AqXMBjeymIjFDAkAFH06mHJH/cSBHAgU0s4vfpBn6b2nf8tiRLvagKD8RbTpq2FKTBg7cl9l3c7Q==", + "devOptional": true }, "path-exists": { "version": "3.0.0", @@ -16858,8 +45273,7 @@ "path-key": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/path-key/-/path-key-2.0.1.tgz", - "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==", - "dev": true + "integrity": "sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==" }, "path-parse": { "version": "1.0.7", @@ -16917,7 +45331,8 @@ "picomatch": { "version": "2.3.1", "resolved": "https://registry.npmmirror.com/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==" + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true }, "pify": { "version": "4.0.1", @@ -17017,6 +45432,22 @@ "dev": true, "optional": true }, + "polyline-miter-util": { + "version": "1.0.1", + "resolved": "https://registry.npmmirror.com/polyline-miter-util/-/polyline-miter-util-1.0.1.tgz", + "integrity": "sha512-/3u91zz6mBerBZo6qnOJOTjv7EfPhKtsV028jMyj86YpzLRNmCCFfrX7IO9tCEQ2W4x45yc+vKOezjf7u2Nd6Q==", + "requires": { + "gl-vec2": "^1.0.0" + } + }, + "polyline-normals": { + "version": "2.0.2", + "resolved": "https://registry.npmmirror.com/polyline-normals/-/polyline-normals-2.0.2.tgz", + "integrity": "sha512-dpHrAi61ymhsB4N0XlNb3YpkKJeTFnXBXDWpeH8Ucstq0TUZrCN3YK4Jlgk8ofMWN25lhGC4wnxLMv+TUK8rig==", + "requires": { + "polyline-miter-util": "^1.0.1" + } + }, "popper.js": { "version": "1.16.1", "resolved": "https://registry.npmmirror.com/popper.js/-/popper.js-1.16.1.tgz", @@ -17620,7 +46051,8 @@ "version": "1.15.0", "resolved": "https://registry.npmmirror.com/postcss-prefix-selector/-/postcss-prefix-selector-1.15.0.tgz", "integrity": "sha512-9taaTPs6I4906QC03zBBt0LfTWAhrqEWlKSj0jRlxrg1yV+O91h0wcquu6krcA5L6aEv3QnCeG8B1vZ5WT4ecQ==", - "dev": true + "dev": true, + "requires": {} }, "postcss-reduce-initial": { "version": "4.0.3", @@ -17801,8 +46233,7 @@ "prelude-ls": { "version": "1.1.2", "resolved": "https://registry.npmmirror.com/prelude-ls/-/prelude-ls-1.1.2.tgz", - "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==", - "dev": true + "integrity": "sha512-ESF23V4SKG6lVSGZgYNpbsiaAkdab6ZgOxe52p7+Kid3W3u3bxR4Vfd/o21dmN7jSt0IwgZ4v5MUd26FEtXE9w==" }, "prepend-http": { "version": "1.0.4", @@ -17833,6 +46264,17 @@ "renderkid": "^2.0.4" } }, + "probe.gl": { + "version": "3.5.0", + "resolved": "https://registry.npmmirror.com/probe.gl/-/probe.gl-3.5.0.tgz", + "integrity": "sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0", + "@probe.gl/log": "3.5.0", + "@probe.gl/stats": "3.5.0" + } + }, "process": { "version": "0.11.10", "resolved": "https://registry.npmmirror.com/process/-/process-0.11.10.tgz", @@ -17846,8 +46288,7 @@ "progress": { "version": "2.0.3", "resolved": "https://registry.npmmirror.com/progress/-/progress-2.0.3.tgz", - "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", - "dev": true + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==" }, "promise-inflight": { "version": "1.0.1", @@ -18268,6 +46709,11 @@ "picomatch": "^2.2.1" } }, + "reconnecting-websocket": { + "version": "4.4.0", + "resolved": "https://registry.npmmirror.com/reconnecting-websocket/-/reconnecting-websocket-4.4.0.tgz", + "integrity": "sha512-D2E33ceRPga0NvTDhJmphEgJ7FUYF0v4lr1ki0csq06OdlxKfugGzN0dSkxM/NfqCxYELK4KcaTOUOjTV6Dcng==" + }, "redent": { "version": "3.0.0", "resolved": "https://registry.npmmirror.com/redent/-/redent-3.0.0.tgz", @@ -18289,6 +46735,11 @@ } } }, + "reflect-metadata": { + "version": "0.1.13", + "resolved": "https://registry.npmmirror.com/reflect-metadata/-/reflect-metadata-0.1.13.tgz", + "integrity": "sha512-Ts1Y/anZELhSsjMcU605fU9RE4Oi3p5ORujwbIKXfWa+0Zxs510Qrmrce5/Jowq3cHSZSJqBjypxmHarc+vEWg==" + }, "regenerate": { "version": "1.4.2", "resolved": "https://registry.npmmirror.com/regenerate/-/regenerate-1.4.2.tgz", @@ -18307,8 +46758,7 @@ "regenerator-runtime": { "version": "0.13.9", "resolved": "https://registry.npmmirror.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" }, "regenerator-transform": { "version": "0.15.0", @@ -18392,6 +46842,11 @@ } } }, + "regl": { + "version": "1.7.0", + "resolved": "https://registry.npmmirror.com/regl/-/regl-1.7.0.tgz", + "integrity": "sha512-bEAtp/qrtKucxXSJkD4ebopFZYP0q1+3Vb2WECWv/T8yQEgKxDxJ7ztO285tAMaYZVR6mM1GgI6CCn8FROtL1w==" + }, "relateurl": { "version": "0.2.7", "resolved": "https://registry.npmmirror.com/relateurl/-/relateurl-0.2.7.tgz", @@ -18401,7 +46856,8 @@ "remove-trailing-separator": { "version": "1.1.0", "resolved": "https://registry.npmmirror.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==" + "integrity": "sha512-/hS+Y0u3aOfIETiaiirUFwDBDzmXPvO+jAfKTitUngIPzdKc6Z0LoFjM/CK5PL4C+eKwHohlHAb6H0VFfmmUsw==", + "devOptional": true }, "renderkid": { "version": "2.0.7", @@ -18704,8 +47160,7 @@ "run-async": { "version": "2.4.1", "resolved": "https://registry.npmmirror.com/run-async/-/run-async-2.4.1.tgz", - "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==", - "dev": true + "integrity": "sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==" }, "run-node": { "version": "1.0.0", @@ -18751,7 +47206,6 @@ "version": "6.6.7", "resolved": "https://registry.npmmirror.com/rxjs/-/rxjs-6.6.7.tgz", "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", - "dev": true, "requires": { "tslib": "^1.9.0" }, @@ -18759,8 +47213,7 @@ "tslib": { "version": "1.14.1", "resolved": "https://registry.npmmirror.com/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" } } }, @@ -18898,6 +47351,11 @@ } } }, + "select": { + "version": "1.1.2", + "resolved": "https://registry.npmmirror.com/select/-/select-1.1.2.tgz", + "integrity": "sha512-OwpTSOfy6xSs1+pwcNrv0RBMOzI39Lp3qQKUTPVVPRjCdNa5JH/oPRiqsesIskK8TVgmRiHwO4KXlV2Li9dANA==" + }, "select-hose": { "version": "2.0.0", "resolved": "https://registry.npmmirror.com/select-hose/-/select-hose-2.0.0.tgz", @@ -19092,7 +47550,6 @@ "version": "1.2.0", "resolved": "https://registry.npmmirror.com/shebang-command/-/shebang-command-1.2.0.tgz", "integrity": "sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==", - "dev": true, "requires": { "shebang-regex": "^1.0.0" } @@ -19100,8 +47557,7 @@ "shebang-regex": { "version": "1.0.0", "resolved": "https://registry.npmmirror.com/shebang-regex/-/shebang-regex-1.0.0.tgz", - "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==", - "dev": true + "integrity": "sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==" }, "shell-quote": { "version": "1.7.3", @@ -19122,8 +47578,7 @@ "signal-exit": { "version": "3.0.7", "resolved": "https://registry.npmmirror.com/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==" }, "simple-git": { "version": "1.132.0", @@ -19155,7 +47610,6 @@ "version": "0.2.2", "resolved": "https://registry.npmmirror.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, "requires": { "is-arrayish": "^0.3.1" }, @@ -19163,8 +47617,7 @@ "is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmmirror.com/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==" } } }, @@ -19389,6 +47842,11 @@ "is-plain-obj": "^1.0.0" } }, + "sortablejs": { + "version": "1.10.2", + "resolved": "https://registry.npmmirror.com/sortablejs/-/sortablejs-1.10.2.tgz", + "integrity": "sha512-YkPGufevysvfwn5rfdlGyrGjt7/CRHwvRPogD/lC+TnvcN29jDpCifKP+rBqf+LRldfXSTh+0CGLcSg0VIxq3A==" + }, "source-list-map": { "version": "2.0.1", "resolved": "https://registry.npmmirror.com/source-list-map/-/source-list-map-2.0.1.tgz", @@ -19646,6 +48104,14 @@ "resolved": "https://registry.npmmirror.com/sprintf-js/-/sprintf-js-1.0.3.tgz", "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" }, + "sql-formatter": { + "version": "2.3.3", + "resolved": "https://registry.npmmirror.com/sql-formatter/-/sql-formatter-2.3.3.tgz", + "integrity": "sha512-m6pqVXwsm9GkCHC/+gdPvNowI7PNoVTT6OZMWKwXJoP2MvfntfhcfyliIf4/QX6t+DirSJ6XDSiSS70YvZ87Lw==", + "requires": { + "lodash": "^4.16.0" + } + }, "sshpk": { "version": "1.17.0", "resolved": "https://registry.npmmirror.com/sshpk/-/sshpk-1.17.0.tgz", @@ -19769,6 +48235,14 @@ "integrity": "sha512-R3f198pcvnB+5IpnBlRkphuE9n46WyVl8I39W/ZUTZLz4nqSP/oLYUrcnJrw462Ds8he4YKMov2efsTIw1BDGQ==", "dev": true }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "requires": { + "safe-buffer": "~5.1.0" + } + }, "string-argv": { "version": "0.0.2", "resolved": "https://registry.npmmirror.com/string-argv/-/string-argv-0.0.2.tgz", @@ -19842,14 +48316,6 @@ "define-properties": "^1.1.3" } }, - "string_decoder": { - "version": "1.1.1", - "resolved": "https://registry.npmmirror.com/string_decoder/-/string_decoder-1.1.1.tgz", - "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", - "requires": { - "safe-buffer": "~5.1.0" - } - }, "stringify-object": { "version": "3.3.0", "resolved": "https://registry.npmmirror.com/stringify-object/-/stringify-object-3.3.0.tgz", @@ -19873,7 +48339,6 @@ "version": "5.2.0", "resolved": "https://registry.npmmirror.com/strip-ansi/-/strip-ansi-5.2.0.tgz", "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", - "dev": true, "requires": { "ansi-regex": "^4.1.0" } @@ -20278,7 +48743,8 @@ "resolved": "https://registry.npmmirror.com/ajv-keywords/-/ajv-keywords-2.1.1.tgz", "integrity": "sha512-ZFztHzVRdGLAzJmpUT9LNFLe1YiVOEylcaNpEutM26PVTCtOD919IMfD01CgbRouB42Dd9atjx1HseC15DgOZA==", "dev": true, - "optional": true + "optional": true, + "requires": {} }, "fast-deep-equal": { "version": "1.1.0", @@ -20441,8 +48907,7 @@ "text-table": { "version": "0.2.0", "resolved": "https://registry.npmmirror.com/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true + "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==" }, "thenify": { "version": "3.3.1", @@ -20476,8 +48941,7 @@ "through": { "version": "2.3.8", "resolved": "https://registry.npmmirror.com/through/-/through-2.3.8.tgz", - "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==", - "dev": true + "integrity": "sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==" }, "through2": { "version": "2.0.5", @@ -20508,6 +48972,11 @@ "integrity": "sha512-qsdtZH+vMoCARQtyod4imc2nIJwg9Cc7lPRrw9CzF8ZKR0khdr8+2nX80PBhET3tcyTtJDxAffGh2rXH4tyU8A==", "dev": true }, + "tiny-emitter": { + "version": "2.1.0", + "resolved": "https://registry.npmmirror.com/tiny-emitter/-/tiny-emitter-2.1.0.tgz", + "integrity": "sha512-NB6Dk1A9xgQPMoGqC5CVXn123gWyte215ONT5Pp5a0yt4nlEoO1ZWeCwpncaekPHXO60i47ihFnZPiRPjRMq4Q==" + }, "tinycolor2": { "version": "1.4.2", "resolved": "https://registry.npmmirror.com/tinycolor2/-/tinycolor2-1.4.2.tgz", @@ -20517,7 +48986,6 @@ "version": "0.0.33", "resolved": "https://registry.npmmirror.com/tmp/-/tmp-0.0.33.tgz", "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", - "dev": true, "requires": { "os-tmpdir": "~1.0.2" } @@ -20670,7 +49138,6 @@ "version": "0.3.2", "resolved": "https://registry.npmmirror.com/type-check/-/type-check-0.3.2.tgz", "integrity": "sha512-ZCmOJdvOWDBYJlzAoFkC+Q0+bUyEOS1ltgp1MGU03fqHG+dbi9tBFU2Rd9QKiDZFAYrhPh2JUf7rZRIuHRKtOg==", - "dev": true, "requires": { "prelude-ls": "~1.1.2" } @@ -20887,7 +49354,8 @@ "upath": { "version": "1.2.0", "resolved": "https://registry.npmmirror.com/upath/-/upath-1.2.0.tgz", - "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==" + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "devOptional": true }, "upper-case": { "version": "1.1.3", @@ -21025,8 +49493,7 @@ "v8-compile-cache": { "version": "2.3.0", "resolved": "https://registry.npmmirror.com/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==" }, "validate-npm-package-license": { "version": "3.0.4", @@ -21198,10 +49665,24 @@ "integrity": "sha512-4gDntzrifFnCEvyoO8PqyJDmguXgVPxKiIxrBKjIowvL9l+N66196+72XVYR8BBf1Uv1Fgt3bGevJ+sEmxfZzw==", "dev": true }, + "vuedraggable": { + "version": "2.24.3", + "resolved": "https://registry.npmmirror.com/vuedraggable/-/vuedraggable-2.24.3.tgz", + "integrity": "sha512-6/HDXi92GzB+Hcs9fC6PAAozK1RLt1ewPTLjK0anTYguXLAeySDmcnqE8IC0xa7shvSzRjQXq3/+dsZ7ETGF3g==", + "requires": { + "sortablejs": "1.10.2" + } + }, "vuescroll": { "version": "4.16.1", "resolved": "https://registry.npmmirror.com/vuescroll/-/vuescroll-4.16.1.tgz", - "integrity": "sha512-7fRsG2Yw5Z07LUz/IIu9barpmYiN9q+ZTC+CrVamvCbmsxyhz8mU1OuYFbfORysaUskioNMxTGDo+HOzeDfSyQ==" + "integrity": "sha512-7fRsG2Yw5Z07LUz/IIu9barpmYiN9q+ZTC+CrVamvCbmsxyhz8mU1OuYFbfORysaUskioNMxTGDo+HOzeDfSyQ==", + "requires": {} + }, + "watch-size": { + "version": "2.0.0", + "resolved": "https://registry.npmmirror.com/watch-size/-/watch-size-2.0.0.tgz", + "integrity": "sha512-M92R89dNoTPWyCD+HuUEDdhaDnh9jxPGOwlDc0u51jAgmjUvzqaEMynXSr3BaWs+QdHYk4KzibPy1TFtjLmOZQ==" }, "watchpack": { "version": "1.7.5", @@ -21791,7 +50272,6 @@ "version": "1.3.1", "resolved": "https://registry.npmmirror.com/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", - "dev": true, "requires": { "isexe": "^2.0.0" } @@ -21826,8 +50306,7 @@ "word-wrap": { "version": "1.2.3", "resolved": "https://registry.npmmirror.com/word-wrap/-/word-wrap-1.2.3.tgz", - "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", - "dev": true + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==" }, "wordwrap": { "version": "1.0.0", @@ -22073,6 +50552,15 @@ "async-limiter": "~1.0.0" } }, + "xss": { + "version": "1.0.14", + "resolved": "https://registry.npmmirror.com/xss/-/xss-1.0.14.tgz", + "integrity": "sha512-og7TEJhXvn1a7kzZGQ7ETjdQVS2UfZyTlsEdDOqvQF7GoxNfY+0YLCzBy1kPdsDDx4QuNAonQPddpsn6Xl/7sw==", + "requires": { + "commander": "^2.20.3", + "cssfilter": "0.0.10" + } + }, "xtend": { "version": "4.0.2", "resolved": "https://registry.npmmirror.com/xtend/-/xtend-4.0.2.tgz", diff --git a/web/package.json b/web/package.json index 7d905cc8d2..21b9cd5eb1 100644 --- a/web/package.json +++ b/web/package.json @@ -23,18 +23,27 @@ ] }, "dependencies": { + "@antv/g6": "^4.5.3", "axios": "0.21.1", "babel-polyfill": "6.26.0", "butterfly-dag": "4.1.23", + "clipboard": "^2.0.8", + "dexie": "2.0.4", + "dt-sql-parser": "1.2.1", "core-js": "2.6.11", "echarts": "^4.1.0", + "eslint": "6.8.0", + "eslint-plugin-vue": "6.2.2", + "highlight.js": "9.18.3", "iview": "3.5.4", "jsencrypt": "^3.2.1", "lodash": "4.17.20", "md5": "2.3.0", - "moment": "2.29.4", + "moment": "2.29.1", "monaco-editor": "0.19.3", "qs": "6.9.4", + "reconnecting-websocket": "4.4.0", + "sql-formatter": "2.3.3", "svgo": "1.3.0", "vue": "2.6.12", "vue-i18n": "8.22.1", diff --git a/web/packages/dataAssetManage/assets/styles/console.scss b/web/packages/dataAssetManage/assets/styles/console.scss new file mode 100644 index 0000000000..89d0b876e9 --- /dev/null +++ b/web/packages/dataAssetManage/assets/styles/console.scss @@ -0,0 +1,69 @@ +/*! + * Copyright 2019 WeBank + * + * 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. + * + */ + +@import '@dataspherestudio/shared/common/style/variables.scss'; + +.console-page{ + position: $relative; + width: $percent-all; + height: $percent-all; + display: flex; + flex-direction: column; + background: $background-color-base; + padding: 20px; + overflow: hidden; + + .console-page-content-head { + display: flex; + justify-content: space-between; + + .console-page-content-title { + font-size: $font-size-large; + font-weight: bold; + } + } + + .console-page-content-body { + display: flex; + height: calc(100% - 68px); + .content-body-side-nav { + width: 200px; + + .content-body-card { + padding: 10px 0 10px; + } + } + .content-body-side-right { + flex: 1; + margin-left: 20px; + background: $body-background; + border-radius: $border-radius-small; + padding: 10px; + overflow: auto; + .content-body-side-right-title { + height: 30px; + border-bottom: $border-width-base $border-style-base $border-color-split; + margin-bottom: 10px + } + .content-body-side-right-content { + overflow: auto; + } + + } + } + +} diff --git a/web/packages/dataAssetManage/directive/clipboard/clipboard.js b/web/packages/dataAssetManage/directive/clipboard/clipboard.js new file mode 100644 index 0000000000..dd8ff67096 --- /dev/null +++ b/web/packages/dataAssetManage/directive/clipboard/clipboard.js @@ -0,0 +1,49 @@ +const Clipboard = require('clipboard'); + +if (!Clipboard) { + throw new Error('you should npm install `clipboard` --save at first '); +} + +export default { + bind(el, binding) { + if (binding.arg === 'success') { + el._v_clipboard_success = binding.value; + } else if (binding.arg === 'error') { + el._v_clipboard_error = binding.value; + } else { + const clipboard = new Clipboard(el, { + text() { return binding.value; }, + action() { return binding.arg === 'cut' ? 'cut' : 'copy'; } + }); + clipboard.on('success', (e) => { + const callback = el._v_clipboard_success; + callback && callback(e) // eslint-disable-line + }); + clipboard.on('error', (e) => { + const callback = el._v_clipboard_error; + callback && callback(e) // eslint-disable-line + }); + el._v_clipboard = clipboard; + } + }, + update(el, binding) { + if (binding.arg === 'success') { + el._v_clipboard_success = binding.value; + } else if (binding.arg === 'error') { + el._v_clipboard_error = binding.value; + } else { + el._v_clipboard.text = function () { return binding.value; }; + el._v_clipboard.action = function () { return binding.arg === 'cut' ? 'cut' : 'copy'; }; + } + }, + unbind(el, binding) { + if (binding.arg === 'success') { + delete el._v_clipboard_success; + } else if (binding.arg === 'error') { + delete el._v_clipboard_error; + } else { + el._v_clipboard.destroy(); + delete el._v_clipboard; + } + } +}; diff --git a/web/packages/dataAssetManage/directive/clipboard/index.js b/web/packages/dataAssetManage/directive/clipboard/index.js new file mode 100644 index 0000000000..3783c2d4a8 --- /dev/null +++ b/web/packages/dataAssetManage/directive/clipboard/index.js @@ -0,0 +1,13 @@ +import Clipboard from './clipboard'; + +const install = (Vue) => { + Vue.directive('Clipboard', Clipboard); +}; + +if (window.Vue) { + window.clipboard = Clipboard; + Vue.use(install); // eslint-disable-line +} + +Clipboard.install = install; +export default Clipboard; diff --git a/web/packages/dataAssetManage/i18n/en.json b/web/packages/dataAssetManage/i18n/en.json new file mode 100644 index 0000000000..1124b52349 --- /dev/null +++ b/web/packages/dataAssetManage/i18n/en.json @@ -0,0 +1,14 @@ +{ + "message": { + "dataAssetManage": { + "dataAssetManage": "Data Governance", + "dataAssets": "Data Assets", + "dataOverview": "Data Overview", + "dataAssetsIndex": "Data Assets Index", + "overallMeasurement": "Overall measurement", + "menu": "Menu", + "pleaseEnterATableName": "Please enter a table name / description to search the database table", + "search": "Search" + } + } +} diff --git a/web/packages/dataAssetManage/i18n/zh.json b/web/packages/dataAssetManage/i18n/zh.json new file mode 100644 index 0000000000..c68f94c5d9 --- /dev/null +++ b/web/packages/dataAssetManage/i18n/zh.json @@ -0,0 +1,14 @@ +{ + "message": { + "dataAssetManage": { + "dataAssetManage": "数据治理", + "dataAssets": "数据资产", + "dataOverview": "数据总览", + "dataAssetsIndex": "数据资产目录", + "overallMeasurement": "总体计量", + "menu": "目录", + "pleaseEnterATableName": "请输入表名/描述搜索数据库表", + "search": "搜索" + } + } +} diff --git a/web/packages/dataAssetManage/module/common/eventBus/event-bus.js b/web/packages/dataAssetManage/module/common/eventBus/event-bus.js new file mode 100644 index 0000000000..c5dbc39b13 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/eventBus/event-bus.js @@ -0,0 +1,3 @@ +// event-bus.js +import Vue from 'vue' +export const EventBus = new Vue() diff --git a/web/packages/dataAssetManage/module/common/iCard.vue b/web/packages/dataAssetManage/module/common/iCard.vue new file mode 100644 index 0000000000..927326e7e0 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/iCard.vue @@ -0,0 +1,74 @@ + + + + + diff --git a/web/packages/dataAssetManage/module/common/navMenu.vue b/web/packages/dataAssetManage/module/common/navMenu.vue new file mode 100644 index 0000000000..ff6c2f21d2 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/navMenu.vue @@ -0,0 +1,152 @@ + + + diff --git a/web/packages/dataAssetManage/module/common/tabCard/index.vue b/web/packages/dataAssetManage/module/common/tabCard/index.vue new file mode 100644 index 0000000000..8cd0ec7ed5 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tabCard/index.vue @@ -0,0 +1,94 @@ + + + + + diff --git a/web/packages/dataAssetManage/module/common/tabList/index.scss b/web/packages/dataAssetManage/module/common/tabList/index.scss new file mode 100644 index 0000000000..4c4c91c27f --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tabList/index.scss @@ -0,0 +1,110 @@ +@import '@dataspherestudio/shared/common/style/variables.scss'; +.workflowTabContainer { + margin-left: 304px; + transition: margin-left .3s; + position: relative; + height: 100%; + box-sizing: border-box; + display: flex; + flex-direction: column; + &.tree-fold { + margin-left: 54px; + } + .tap-bar { + // background: #fff; + @include bg-color($workspace-body-bg-color, $dark-workspace-body-bg-color); + margin-bottom: $padding-25; + .topTabList { + padding: 25px $padding-25 0px; + flex: none; + display: flex; + justify-content: space-between; + align-items: center; + flex-wrap: wrap; + .topLeft { + flex: 1; + min-width: 320px; + .ivu-breadcrumb { + font-size: 21px; + /deep/.ivu-breadcrumb-item-separator { + // color: rgba(0,0,0,0.65); + @include font-color($light-text-color, $dark-text-color); + } + } + } + .buttonChange { + flex: none; + .ivu-btn { + font-size: 14px; + } + .button-group { + margin-left: 15px; + } + } + } + .bottomTapList { + padding: 0px $padding-25; + border-bottom: $border-width-base $border-style-base $border-color-base; + @include border-color($background-color-base, $dark-workspace-body-bg-color); + @include font-color($workspace-title-color, $dark-workspace-title-color); + margin-top: 12px; + flex: none; + display: flex; + align-items: center; + font-size: $font-size-large; + .bottomLeftText { + cursor: pointer; + flex: none; + font-size: $font-size-large; + padding: 0 15px; + margin-bottom: -1px; + line-height: 40px; + position: relative; + &::after { + content: ""; + border-left: 1px solid #DEE4EC; + @include border-color($border-color-base, $dark-border-color-base); + width: 0; + position: absolute; + right: -15px; + top: 12px; + height: 16px; + margin: 0 15px; + } + } + .active { + border-bottom: 2px solid $primary-color; + @include border-color($primary-color, $dark-primary-color); + } + .bottomRightContainer { + flex: 1; + height: 40px; + } + } + } + .defaultSlot { + flex: 1; + } +} + +.tab-item { + display: inline-block; + height: 40px; + line-height: 40px; + // color: $title-color; + @include font-color($workspace-title-color, $dark-workspace-title-color); + cursor: pointer; + min-width: 100px; + max-width: 200px; + overflow: hidden; + margin-right: 2px; + &.active { + height: 40px; + // color: $primary-color; + @include font-color($primary-color, $dark-primary-color); + border-radius: 4px 4px 0 0; + border-bottom: 2px solid $primary-color; + @include border-color($primary-color, $dark-primary-color); + line-height: 38px; + } +} diff --git a/web/packages/dataAssetManage/module/common/tabList/index.vue b/web/packages/dataAssetManage/module/common/tabList/index.vue new file mode 100644 index 0000000000..40b6572da9 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tabList/index.vue @@ -0,0 +1,175 @@ + + + diff --git a/web/packages/dataAssetManage/module/common/tabList/tabs.vue b/web/packages/dataAssetManage/module/common/tabList/tabs.vue new file mode 100644 index 0000000000..ee0389e168 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tabList/tabs.vue @@ -0,0 +1,80 @@ + + + diff --git a/web/packages/dataAssetManage/module/common/title.vue b/web/packages/dataAssetManage/module/common/title.vue new file mode 100644 index 0000000000..fac3fff349 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/title.vue @@ -0,0 +1,41 @@ + + + + + diff --git a/web/packages/dataAssetManage/module/common/tree/tree-item.vue b/web/packages/dataAssetManage/module/common/tree/tree-item.vue new file mode 100644 index 0000000000..acab742086 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tree/tree-item.vue @@ -0,0 +1,168 @@ + + + diff --git a/web/packages/dataAssetManage/module/common/tree/tree.vue b/web/packages/dataAssetManage/module/common/tree/tree.vue new file mode 100644 index 0000000000..2387e31164 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/tree/tree.vue @@ -0,0 +1,121 @@ + + diff --git a/web/packages/dataAssetManage/module/common/treeMenu.vue b/web/packages/dataAssetManage/module/common/treeMenu.vue new file mode 100644 index 0000000000..3b12ac0369 --- /dev/null +++ b/web/packages/dataAssetManage/module/common/treeMenu.vue @@ -0,0 +1,201 @@ + + + diff --git a/web/packages/dataAssetManage/module/components/tabCard/index.vue b/web/packages/dataAssetManage/module/components/tabCard/index.vue new file mode 100644 index 0000000000..c921307c94 --- /dev/null +++ b/web/packages/dataAssetManage/module/components/tabCard/index.vue @@ -0,0 +1,81 @@ + + + + + diff --git a/web/packages/dataAssetManage/module/dataAssetManage/assetsIndex.vue b/web/packages/dataAssetManage/module/dataAssetManage/assetsIndex.vue new file mode 100644 index 0000000000..208ac33ad5 --- /dev/null +++ b/web/packages/dataAssetManage/module/dataAssetManage/assetsIndex.vue @@ -0,0 +1,230 @@ + + + diff --git a/web/packages/dataAssetManage/module/dataAssetManage/index.js b/web/packages/dataAssetManage/module/dataAssetManage/index.js new file mode 100644 index 0000000000..1b6a4f62a9 --- /dev/null +++ b/web/packages/dataAssetManage/module/dataAssetManage/index.js @@ -0,0 +1,10 @@ +export default { + name: 'dataAssetManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue') +}; diff --git a/web/packages/dataAssetManage/module/dataAssetManage/index.vue b/web/packages/dataAssetManage/module/dataAssetManage/index.vue new file mode 100644 index 0000000000..6772889d78 --- /dev/null +++ b/web/packages/dataAssetManage/module/dataAssetManage/index.vue @@ -0,0 +1,140 @@ + + + + diff --git a/web/packages/dataAssetManage/module/dataAssetManage/overview.vue b/web/packages/dataAssetManage/module/dataAssetManage/overview.vue new file mode 100644 index 0000000000..0673db0915 --- /dev/null +++ b/web/packages/dataAssetManage/module/dataAssetManage/overview.vue @@ -0,0 +1,186 @@ + + + diff --git a/web/packages/dataAssetManage/router.js b/web/packages/dataAssetManage/router.js new file mode 100644 index 0000000000..70ff6decfb --- /dev/null +++ b/web/packages/dataAssetManage/router.js @@ -0,0 +1,61 @@ +const routes = [ + { + name: "dataAssetManage", + path: "/dataAssetManage", + redirect: "/dataAssetManage/overview", + component: () => import("./view/layout/index.vue"), + meta: { + title: "数据资产", + publicPage: true, + icon: "ios-paper" + + }, + children: [ + { + name: "overview", + path: "/dataAssetManage/overview", + component: () => import("./module/dataAssetManage/overview.vue"), + meta: { + title: "数据总览", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "assets", + path: "/dataAssetManage/assets", + redirect: "/dataAssetManage/assets/search", + component: () => import("./module/dataAssetManage/assetsIndex.vue"), + meta: { + title: "数据资产目录", + publicPage: true, + cover: "assetsSearch" + }, + children: [ + { + name: "assetsSearch", + path: "/dataAssetManage/assets/search", + component: () => import("./view/assetsSearch/index.vue"), + meta: { + title: "数据资产目录", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "assetsInfo", + path: "/dataAssetManage/assets/info/:guid", + component: () => import("./view/assetsInfo/index.vue"), + meta: { + title: "数据资产详情", + publicPage: true, + cover: "assetsInfo" + } + } + ] + } + ] + } +]; + +export default routes; diff --git a/web/packages/dataAssetManage/service/api.js b/web/packages/dataAssetManage/service/api.js new file mode 100644 index 0000000000..ef9152b1bc --- /dev/null +++ b/web/packages/dataAssetManage/service/api.js @@ -0,0 +1,123 @@ +import API_PATH from '@dataspherestudio/shared/common/config/apiPath.js' +import api from '@dataspherestudio/shared/common/service/api' + +/** + * 数据资产概要 + * @returns {Object.result} + * + */ +export const getHiveSummary = () => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveSummary`, 'get') + +/** + * 查询hive表--基础&列 + * @param {*} guid + * @returns + */ +export const getHiveTblBasic = guid => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/${guid}/basic`, {}, 'get') + +/** + * 查询hive表-分区信息 + * @param {*} guid + * @returns + */ +export const getHiveTblPartition = guid => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/${guid}/partition`, {}, 'get') + +/** + * 查询hive表--select语句 + * @param {*} guid + * @returns + */ +export const getSelectSql = guid => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/${guid}/select`, {}, 'get') + +/** + * 查询hive表--create语句 + * @param {*} guid + * @returns + */ +export const getSelectDdl = guid => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/${guid}/create`, {}, 'get') + +/** + * 搜索hive表 + * @param {query} + * @returns + */ +export const getHiveTbls = params => + api.fetch( + `${API_PATH.DATA_GOVERNANCE}hiveTbl/search?query=${params.query}&owner=${params.owner}&label=${params.label}&limit=${params.limit}&offset=${params.offset}`, + {}, + 'get' + ) + +/* + * 查询hive表--血缘 + * @param {*} guid + * @returnsL + */ +export const getLineage = guid => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/${guid}/lineage`, {}, 'get') + +/** + * 批量修改注释 + * @params {Map} + * @returns + */ +export const putCommetBulk = params => { + return api.fetch(`${API_PATH.DATA_GOVERNANCE}comment/bulk`, params, 'put') +} + +/** + * 存储量前10表 + * @params {void} + * @returns Array + */ +export const getTopStorage = () => + api.fetch(`${API_PATH.DATA_GOVERNANCE}hiveTbl/topStorage`, {}, 'get') + +/** + * 设置标签--表或列 + * @params {guid} + * @returns String + */ +export const postSetLabel = (guid, params) => + api.fetch(`${API_PATH.DATA_GOVERNANCE}label/${guid}`, params, 'post') + +/** + * 修改注释--表或列 + * @params {guid, Obiect} + * @returns String + */ +export const postSetComment = (guid, comment) => + api.fetch( + `${API_PATH.DATA_GOVERNANCE}comment/${guid}?comment=${comment}`, + {}, + 'put' + ) + +/** + * 负责人查询 + * @params {workspaceId} + * @returns Array + */ +export const getWorkspaceUsers = (workspackId) => + api.fetch( + `${API_PATH.DATA_GOVERNANCE}users/${workspackId}`, + {}, + 'get' + ) + +/** + * 标签查询 + * @params {workspaceId} + * @returns Array + */ +export const getLabels = (search) => + api.fetch( + `${API_PATH.DATA_GOVERNANCE}labels/search?query=${search}`, + {}, + 'get' + ) diff --git a/web/packages/dataAssetManage/service/db/node.js b/web/packages/dataAssetManage/service/db/node.js new file mode 100644 index 0000000000..6347b2c214 --- /dev/null +++ b/web/packages/dataAssetManage/service/db/node.js @@ -0,0 +1,103 @@ +/* + * Copyright 2019 WeBank + * + * 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. + * + */ + +import {isNil} from 'lodash'; +import { Basic } from '@dataspherestudio/shared/common/service/db/index.js'; +import { isArray } from 'util'; +/** + * @class Globalcache + * @extends {Basic} + */ +class Node extends Basic { + /** + *Creates an instance of Globalcache. + * @param {*} table + * @param {*} db + * @memberof Globalcache + */ + constructor(table) { + super(table); + } + + /** + * @param {*} nodeId + * @param {*} key + * @return {*} + */ + async getNodeCache({nodeId, key}) { + let caches = await this.get(nodeId); + if (key) { + return caches[0][key]; + } + return caches[0]; + } + + /** + * @param {*} nodeId + * @param {*} value + * @return {*} + */ + async addNodeCache({nodeId, value}) { + let cache = await this.getNodeCache({nodeId}); + if (!isNil(cache)) { + return this.update(nodeId, value) + } + return this.add(Object.assign({nodeId}, value)); + } + + + /** + * @param {*} nodeId + * @param {*} key + * @param {*} value + * @return {*} + */ + async updateNodeCache({nodeId, key, value}) { + let cache = {}; + if (key) { + if (isArray(key)) { + key.forEach((k) => { + cache[k] = value[k]; + }) + } else { + cache[key] = value[key]; + } + } else { + cache = value; + } + return nodeId ? this.update(nodeId, cache) : null; + } + + + /** + * @param {*} args + * @return {*} + */ + async removeNodeCache({nodeId, key}) { + let cache = await this.getNodeCache({nodeId}); + if (isNil(cache)) { + if (key) { + cache[key] = null; + return this.update(nodeId, cache); + } + return this.remove(nodeId); + } + } +} +const node = new Node('node'); + +export default node; diff --git a/web/packages/dataAssetManage/service/db/project.js b/web/packages/dataAssetManage/service/db/project.js new file mode 100644 index 0000000000..760a6636ea --- /dev/null +++ b/web/packages/dataAssetManage/service/db/project.js @@ -0,0 +1,118 @@ +/* + * Copyright 2019 WeBank + * + * 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. + * + */ + +import {isNil} from 'lodash'; +import { Basic } from '@dataspherestudio/shared/common/service/db/index.js'; +import { isArray } from 'util'; +/** + * @class Globalcache + * @extends {Basic} + */ +class Project extends Basic { + /** + *Creates an instance of Globalcache. + * @param {*} table + * @param {*} db + * @memberof Globalcache + */ + constructor(table) { + super(table); + } + + /** + * @param {*} projectID + * @param {*} key + * @return {*} + */ + async getProjectCache({projectID, key}) { + projectID = Number(projectID); + let caches = await this.get(projectID); + if (key) { + return caches[0][key]; + } + return caches[0]; + } + + /** + * @param {*} projectID + * @param {*} value + * @return {*} + */ + async addProjectCache({projectID, value}) { + projectID = Number(projectID); + let cache = await this.getProjectCache({projectID}); + if (!isNil(cache)) { + return this.update(projectID, value) + } + return this.add(Object.assign({projectID}, value)); + } + + + /** + * @param {*} projectID + * @param {*} key + * @param {*} value token是用于第二层比对的字段,sKey是实际写入的key,sValue是用于比对的值 + * @param {*} isDeep 是否要对第二层数据进行修改,如果需要的话,就需要在value中携带 + * @return {*} + */ + async updateProjectCache({projectID, key, value, isDeep}) { + projectID = Number(projectID); + let cache = {}; + if (key) { + if (isDeep) { + cache = await this.getProjectCache({projectID}) || {}; + let arr = cache && cache[key] || []; + arr.forEach((item) => { + if (item[value.token] === Number(value.sValue)) { + item[value.sKey] = value[value.sKey]; + } + }) + } else { + if (isArray(key)) { + key.forEach((k) => { + cache[k] = value[k]; + }) + } else { + cache[key] = value[key]; + } + } + } else { + cache = value; + } + return this.update(projectID, cache); + } + + + /** + * @param {*} args + * @return {*} + */ + async removeProjectCache({projectID, key}) { + projectID = Number(projectID); + let cache = await this.getProjectCache({projectID}); + if (isNil(cache)) { + if (key) { + cache[key] = null; + return this.update(projectID, cache); + } + return this.remove(projectID); + } + } +} +const project = new Project('project'); + +export default project; diff --git a/web/packages/dataAssetManage/utils/clipboard.js b/web/packages/dataAssetManage/utils/clipboard.js new file mode 100644 index 0000000000..7efc01c495 --- /dev/null +++ b/web/packages/dataAssetManage/utils/clipboard.js @@ -0,0 +1,43 @@ +import Vue from 'vue'; +import Clipboard from 'clipboard'; + +/** + *@returns + */ +function clipboardSuccess() { + Vue.prototype.$Message.success({ + content: '复制成功', + duration: 1.5 + }); +} + + +/** + *@returns + */ +function clipboardError() { + Vue.prototype.$Message.success({ + message: '复制失败', + duration: 1.5 + }); +} + +/** + * 把字符串中的内容放到剪切板上 + * @param {String, Object} + * @param {void} + */ +export default function handleClipboard(text, event) { + const clipboard = new Clipboard(event.target, { + text: () => text + }); + clipboard.on('success', () => { + clipboardSuccess(); + clipboard.destroy(); + }); + clipboard.on('error', () => { + clipboardError(); + clipboard.destroy(); + }); + clipboard.onClick(event); +} diff --git a/web/packages/dataAssetManage/utils/fomatSQL.js b/web/packages/dataAssetManage/utils/fomatSQL.js new file mode 100644 index 0000000000..caba9997b5 --- /dev/null +++ b/web/packages/dataAssetManage/utils/fomatSQL.js @@ -0,0 +1,23 @@ +/** + * 转换 后端SQL语句 成 html文本 + * @param (String) + * @return (String) + */ +export function fomatSqlForShow(sql) { + if ( typeof sql !== 'string' ) return '' + const arr = sql.split('@$'); + const res = arr.map((i, idx) => `

${idx+1}${i}

`) + return res.join('') +} + +/** + * + * @param {String} sql + * @return {String} + */ +export function fomatSqlForCopy(sql) { + if ( typeof sql !== 'string' ) return '' + const arr = sql.replaceAll(' ', '').split('@$'); + const res = arr.map(i => `${i}\r\n`) + return res.join('') +} diff --git a/web/packages/dataAssetManage/utils/formatDate.js b/web/packages/dataAssetManage/utils/formatDate.js new file mode 100644 index 0000000000..d3d68b5957 --- /dev/null +++ b/web/packages/dataAssetManage/utils/formatDate.js @@ -0,0 +1,11 @@ +import moment from 'moment' + +/** + * 转换时间戳到字符串 + * @param (Number) + * @return (String) + */ +export default function formatDate (value) { + if (!value) return '' + return moment(value).format("YYYY-MM-DD HH:mm") +} diff --git a/web/packages/dataAssetManage/utils/storage.js b/web/packages/dataAssetManage/utils/storage.js new file mode 100644 index 0000000000..2ab293c3b9 --- /dev/null +++ b/web/packages/dataAssetManage/utils/storage.js @@ -0,0 +1,11 @@ +export const storage = { + setItem(key, val) { + return sessionStorage.setItem(key, val) + }, + getItem(key) { + return sessionStorage.getItem(key) + }, + removeItem(key) { + return sessionStorage.removeItem(key) + } +} diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/AtlasServer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/AtlasServer.png new file mode 100644 index 0000000000..56c6f5889e Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/AtlasServer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/DataSet.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/DataSet.png new file mode 100644 index 0000000000..aa899dea20 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/DataSet.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/avro.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/avro.png new file mode 100644 index 0000000000..a43a2dabfe Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/avro.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/aws.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/aws.png new file mode 100644 index 0000000000..79097bd920 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/aws.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/azure.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/azure.png new file mode 100644 index 0000000000..b6d6e89e77 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/azure.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/db.png new file mode 100644 index 0000000000..489fcd93c8 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/AtlasServer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/AtlasServer.png new file mode 100644 index 0000000000..ab3a124795 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/AtlasServer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/DataSet.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/DataSet.png new file mode 100644 index 0000000000..5ed51de759 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/DataSet.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/avro.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/avro.png new file mode 100644 index 0000000000..c9a6172cf6 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/avro.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/aws.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/aws.png new file mode 100644 index 0000000000..d9be6f3ea0 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/aws.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/azure.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/azure.png new file mode 100644 index 0000000000..720f3ac591 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/azure.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/db.png new file mode 100644 index 0000000000..982c6867a2 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon.png new file mode 100644 index 0000000000..ef8cd242eb Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_creation.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_creation.png new file mode 100644 index 0000000000..f740467883 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_creation.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_replication.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_replication.png new file mode 100644 index 0000000000..af492dabe6 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_feed_replication.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_process.png new file mode 100644 index 0000000000..075628c589 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/falcon_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/file_system.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/file_system.png new file mode 100644 index 0000000000..8b4e50416c Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/file_system.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink.png new file mode 100644 index 0000000000..af78144be1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application.png new file mode 100644 index 0000000000..af78144be1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application_processes.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application_processes.png new file mode 100644 index 0000000000..28d4ed9168 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_application_processes.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_process.png new file mode 100644 index 0000000000..af78144be1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/flink_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/gcp.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/gcp.png new file mode 100644 index 0000000000..e7d83fe36b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/gcp.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hadoop.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hadoop.png new file mode 100644 index 0000000000..0334fc7d78 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hadoop.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase.png new file mode 100644 index 0000000000..fa6e21427d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column.png new file mode 100644 index 0000000000..ef454267bf Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column_family.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column_family.png new file mode 100644 index 0000000000..0182ec3e0f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_column_family.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_table.png new file mode 100644 index 0000000000..556a10a14d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hbase_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hdfs_path.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hdfs_path.png new file mode 100644 index 0000000000..8b4e50416c Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hdfs_path.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive.png new file mode 100644 index 0000000000..227f5b3a31 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column.png new file mode 100644 index 0000000000..35fbe48234 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column_lineage.png new file mode 100644 index 0000000000..c08f4b4200 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_column_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_db.png new file mode 100644 index 0000000000..76b5c3f8c5 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process.png new file mode 100644 index 0000000000..5cc6d78c6d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process_execution.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process_execution.png new file mode 100644 index 0000000000..ec1be80618 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_process_execution.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_storagedesc.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_storagedesc.png new file mode 100644 index 0000000000..c3930a43f4 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_storagedesc.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_table.png new file mode 100644 index 0000000000..b22e194d83 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/hive_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala.png new file mode 100644 index 0000000000..c94be973b7 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_column_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_column_lineage.png new file mode 100644 index 0000000000..7ef403bc4d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_column_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_process.png new file mode 100644 index 0000000000..7ef403bc4d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/impala_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/jms_topic.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/jms_topic.png new file mode 100644 index 0000000000..54a02c8f44 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/jms_topic.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka.png new file mode 100644 index 0000000000..ef941d3445 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer.png new file mode 100644 index 0000000000..d7e564f0fa Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_group.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_group.png new file mode 100644 index 0000000000..1bc9dadfc2 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_group.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_lineage.png new file mode 100644 index 0000000000..80248e9f07 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_consumer_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer.png new file mode 100644 index 0000000000..372cff48f1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer_lineage.png new file mode 100644 index 0000000000..c312b54807 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_producer_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_topic.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_topic.png new file mode 100644 index 0000000000..84cb234161 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/kafka_topic.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone.png new file mode 100644 index 0000000000..f498c2d149 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_bucket.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_bucket.png new file mode 100644 index 0000000000..5b0d5d159e Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_bucket.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_key.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_key.png new file mode 100644 index 0000000000..4dba49172d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_key.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_volume.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_volume.png new file mode 100644 index 0000000000..1e4326b22a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/ozone_volume.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/process.png new file mode 100644 index 0000000000..88bc1ae758 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms.png new file mode 100644 index 0000000000..84f20bae4f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_column.png new file mode 100644 index 0000000000..200a288216 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_db.png new file mode 100644 index 0000000000..6f1d1690f8 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_table.png new file mode 100644 index 0000000000..e49fc68f84 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/rdbms_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark.png new file mode 100644 index 0000000000..93f8a4d860 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_process.png new file mode 100644 index 0000000000..bf191217c1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_table.png new file mode 100644 index 0000000000..1404026ae4 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/spark_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop.png new file mode 100644 index 0000000000..359b77edf9 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_db.png new file mode 100644 index 0000000000..970ab9a6be Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_process.png new file mode 100644 index 0000000000..aae4d56092 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/sqoop_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm.png new file mode 100644 index 0000000000..cab3f7f021 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_bolt.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_bolt.png new file mode 100644 index 0000000000..f35add3ac5 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_bolt.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_spout.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_spout.png new file mode 100644 index 0000000000..841375170a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_spout.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_topology.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_topology.png new file mode 100644 index 0000000000..224a2876fb Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/storm_topology.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/table.png new file mode 100644 index 0000000000..de1e5cdff0 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/disabled/table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon.png new file mode 100644 index 0000000000..ab1c68b15a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_creation.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_creation.png new file mode 100644 index 0000000000..714e31930e Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_creation.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_replication.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_replication.png new file mode 100644 index 0000000000..714e31930e Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_feed_replication.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_process.png new file mode 100644 index 0000000000..714e31930e Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/falcon_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/file_system.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/file_system.png new file mode 100644 index 0000000000..14233ea099 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/file_system.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink.png new file mode 100644 index 0000000000..07c5c1473b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application.png new file mode 100644 index 0000000000..07c5c1473b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application_processes.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application_processes.png new file mode 100644 index 0000000000..a8af7322ca Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_application_processes.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_process.png new file mode 100644 index 0000000000..07c5c1473b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/flink_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/gcp.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/gcp.png new file mode 100644 index 0000000000..567362875a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/gcp.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hadoop.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hadoop.png new file mode 100644 index 0000000000..f8394167bd Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hadoop.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase.png new file mode 100644 index 0000000000..9f788b8d55 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column.png new file mode 100644 index 0000000000..b01300c091 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column_family.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column_family.png new file mode 100644 index 0000000000..b01300c091 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_column_family.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_table.png new file mode 100644 index 0000000000..92a0b78fdf Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hbase_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hdfs_path.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hdfs_path.png new file mode 100644 index 0000000000..14233ea099 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hdfs_path.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive.png new file mode 100644 index 0000000000..0a2eb2042a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column.png new file mode 100644 index 0000000000..4abdfc71aa Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column_lineage.png new file mode 100644 index 0000000000..f8a9f040da Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_column_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_db.png new file mode 100644 index 0000000000..c47836caa5 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process.png new file mode 100644 index 0000000000..f8a9f040da Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process_execution.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process_execution.png new file mode 100644 index 0000000000..5b2ea450af Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_process_execution.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_storagedesc.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_storagedesc.png new file mode 100644 index 0000000000..1a9692984b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_storagedesc.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_table.png new file mode 100644 index 0000000000..144081f939 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hive_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hourglass.svg b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hourglass.svg new file mode 100644 index 0000000000..aad49788c0 --- /dev/null +++ b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/hourglass.svg @@ -0,0 +1,3 @@ + + + diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala.png new file mode 100644 index 0000000000..6711fc60c0 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_column_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_column_lineage.png new file mode 100644 index 0000000000..d3db7e6159 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_column_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_process.png new file mode 100644 index 0000000000..d3db7e6159 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/impala_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/jms_topic.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/jms_topic.png new file mode 100644 index 0000000000..b215f0263f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/jms_topic.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka.png new file mode 100644 index 0000000000..fd479c332d Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer.png new file mode 100644 index 0000000000..459143c4d1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_group.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_group.png new file mode 100644 index 0000000000..157dcb422f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_group.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_lineage.png new file mode 100644 index 0000000000..ebf891983a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_consumer_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer.png new file mode 100644 index 0000000000..0844afe239 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer_lineage.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer_lineage.png new file mode 100644 index 0000000000..15a960e19c Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_producer_lineage.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_topic.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_topic.png new file mode 100644 index 0000000000..2556f3a68c Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/kafka_topic.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone.png new file mode 100644 index 0000000000..6004dc6b74 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_bucket.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_bucket.png new file mode 100644 index 0000000000..acee870507 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_bucket.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_key.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_key.png new file mode 100644 index 0000000000..b38745634a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_key.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_volume.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_volume.png new file mode 100644 index 0000000000..9222507232 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/ozone_volume.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/process.png new file mode 100644 index 0000000000..fb1aab2104 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms.png new file mode 100644 index 0000000000..cc3cb4fd12 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_column.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_column.png new file mode 100644 index 0000000000..9d3c598caa Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_column.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_db.png new file mode 100644 index 0000000000..ff40a4d290 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_table.png new file mode 100644 index 0000000000..174221fef1 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/rdbms_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark.png new file mode 100644 index 0000000000..178d5a6f5b Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_process.png new file mode 100644 index 0000000000..030da23995 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_table.png new file mode 100644 index 0000000000..78db10930f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/spark_table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop.png new file mode 100644 index 0000000000..dec730b445 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_db.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_db.png new file mode 100644 index 0000000000..d219127b7f Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_db.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_process.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_process.png new file mode 100644 index 0000000000..21eebadf17 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/sqoop_process.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm.png new file mode 100644 index 0000000000..4e95d5d40a Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_bolt.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_bolt.png new file mode 100644 index 0000000000..7ed692ff44 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_bolt.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_spout.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_spout.png new file mode 100644 index 0000000000..111a11ce68 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_spout.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_topology.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_topology.png new file mode 100644 index 0000000000..7642fe0db0 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/storm_topology.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/table.png b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/table.png new file mode 100644 index 0000000000..f1672fc089 Binary files /dev/null and b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/icon/table.png differ diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.scss b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.scss new file mode 100644 index 0000000000..d5a783420f --- /dev/null +++ b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.scss @@ -0,0 +1,47 @@ +.dagreLayout-page{ + width: 100%; + height: 100%; + position: relative; + .flow-canvas { + width: 100%; + height: 100%; + } + .point { + position: absolute; + width: 8px; + height: 8px; + border-radius: 50%; + border: 1px solid #D9D9D9; + cursor: pointer; + } + .point-1 { + top: 50px; + left: 300px; + } + .point-2 { + top: 300px; + left: 500px; + } + .operate-bar{ + position: absolute; + top: 20px; + right: 20px; + z-index: 999; + box-shadow:0 2px 3px 0 rgba(0,112,204,0.06); + border:1px solid #D9D9D9; + border-radius: 4px; + padding: 10px; + background-color: rgba(255, 255, 255, 0.8); + color:#222; + .operate-bar-title{ + height: 30px; + width: 100%; + line-height: 30px; + text-align: center; + background-color: #F66902; + color: #222; + margin-bottom: 10px; + } + + } +} diff --git a/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.vue b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.vue new file mode 100644 index 0000000000..64d05a2cfb --- /dev/null +++ b/web/packages/dataAssetManage/view/assetsInfo/components/lineage/index.vue @@ -0,0 +1,201 @@ + + + diff --git a/web/packages/dataAssetManage/view/assetsInfo/index.vue b/web/packages/dataAssetManage/view/assetsInfo/index.vue new file mode 100644 index 0000000000..c7110fb4a6 --- /dev/null +++ b/web/packages/dataAssetManage/view/assetsInfo/index.vue @@ -0,0 +1,296 @@ + + + + + diff --git a/web/packages/dataAssetManage/view/assetsSearch/index.vue b/web/packages/dataAssetManage/view/assetsSearch/index.vue new file mode 100644 index 0000000000..171566f350 --- /dev/null +++ b/web/packages/dataAssetManage/view/assetsSearch/index.vue @@ -0,0 +1,424 @@ + + + diff --git a/web/packages/dataAssetManage/view/fieldInfo/index.vue b/web/packages/dataAssetManage/view/fieldInfo/index.vue new file mode 100644 index 0000000000..34d656eb2d --- /dev/null +++ b/web/packages/dataAssetManage/view/fieldInfo/index.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/web/packages/dataAssetManage/view/layout/emptylayout.vue b/web/packages/dataAssetManage/view/layout/emptylayout.vue new file mode 100644 index 0000000000..98240aef81 --- /dev/null +++ b/web/packages/dataAssetManage/view/layout/emptylayout.vue @@ -0,0 +1,3 @@ + diff --git a/web/packages/dataAssetManage/view/layout/index.vue b/web/packages/dataAssetManage/view/layout/index.vue new file mode 100644 index 0000000000..470830eaec --- /dev/null +++ b/web/packages/dataAssetManage/view/layout/index.vue @@ -0,0 +1,19 @@ + + + + diff --git a/web/packages/dataAssetManage/view/layout/sidebar-sub-menu.vue b/web/packages/dataAssetManage/view/layout/sidebar-sub-menu.vue new file mode 100644 index 0000000000..dd958f7a34 --- /dev/null +++ b/web/packages/dataAssetManage/view/layout/sidebar-sub-menu.vue @@ -0,0 +1,61 @@ + + + diff --git a/web/packages/dataAssetManage/view/layout/sidebar.vue b/web/packages/dataAssetManage/view/layout/sidebar.vue new file mode 100644 index 0000000000..f5d8421cd9 --- /dev/null +++ b/web/packages/dataAssetManage/view/layout/sidebar.vue @@ -0,0 +1,39 @@ + + + diff --git a/web/packages/dataAssetManage/view/rangeInfo/index.vue b/web/packages/dataAssetManage/view/rangeInfo/index.vue new file mode 100644 index 0000000000..0761cd9f5c --- /dev/null +++ b/web/packages/dataAssetManage/view/rangeInfo/index.vue @@ -0,0 +1,44 @@ + + + + + diff --git a/web/packages/dataModelCenter/assets/styles/common.scss b/web/packages/dataModelCenter/assets/styles/common.scss new file mode 100644 index 0000000000..a1909b210a --- /dev/null +++ b/web/packages/dataModelCenter/assets/styles/common.scss @@ -0,0 +1,4 @@ +.page-content { + box-sizing :border-box; + padding: 20px; +} diff --git a/web/packages/dataModelCenter/i18n/en.json b/web/packages/dataModelCenter/i18n/en.json new file mode 100644 index 0000000000..e837e0dea1 --- /dev/null +++ b/web/packages/dataModelCenter/i18n/en.json @@ -0,0 +1,3 @@ +{ + "message": {} +} diff --git a/web/packages/dataModelCenter/i18n/zh.json b/web/packages/dataModelCenter/i18n/zh.json new file mode 100644 index 0000000000..e837e0dea1 --- /dev/null +++ b/web/packages/dataModelCenter/i18n/zh.json @@ -0,0 +1,3 @@ +{ + "message": {} +} diff --git a/web/packages/dataModelCenter/module/dimension/editModal.vue b/web/packages/dataModelCenter/module/dimension/editModal.vue new file mode 100644 index 0000000000..b790e94302 --- /dev/null +++ b/web/packages/dataModelCenter/module/dimension/editModal.vue @@ -0,0 +1,287 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/dimension/index.js b/web/packages/dataModelCenter/module/dimension/index.js new file mode 100644 index 0000000000..40f38d29cd --- /dev/null +++ b/web/packages/dataModelCenter/module/dimension/index.js @@ -0,0 +1,10 @@ +export default { + name: 'dimensionManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/dimension/index.vue b/web/packages/dataModelCenter/module/dimension/index.vue new file mode 100644 index 0000000000..fe05f579db --- /dev/null +++ b/web/packages/dataModelCenter/module/dimension/index.vue @@ -0,0 +1,284 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/indicators/editModal.vue b/web/packages/dataModelCenter/module/indicators/editModal.vue new file mode 100644 index 0000000000..bb53699278 --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/editModal.vue @@ -0,0 +1,986 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/indicators/index.js b/web/packages/dataModelCenter/module/indicators/index.js new file mode 100644 index 0000000000..f6acb36a57 --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/index.js @@ -0,0 +1,10 @@ +export default { + name: 'indicatorsManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/indicators/index.vue b/web/packages/dataModelCenter/module/indicators/index.vue new file mode 100644 index 0000000000..6789650add --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/index.vue @@ -0,0 +1,347 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/indicators/selectPage.vue b/web/packages/dataModelCenter/module/indicators/selectPage.vue new file mode 100644 index 0000000000..6f1e67f5aa --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/selectPage.vue @@ -0,0 +1,108 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/indicators/showVersionModal.vue b/web/packages/dataModelCenter/module/indicators/showVersionModal.vue new file mode 100644 index 0000000000..96be0b1ff1 --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/showVersionModal.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/indicators/statement.js b/web/packages/dataModelCenter/module/indicators/statement.js new file mode 100644 index 0000000000..5e104a33ec --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/statement.js @@ -0,0 +1,56 @@ +export const sourceInfoMap = { + 0: { + // 度量 + measure: "", + measureEn: "", + // 计算公式 + formula: "", + // 维度 + dimension: "", + dimensionEn: "" + }, + 1: { + // 指标 + indicatorName: "", + indicatorNameEn: "", + // 计算公式 + formula: "", + // 维度 + dimension: "", + dimensionEn: "" + }, + 2: { + // 指标 + indicatorName: "", + indicatorNameEn: "", + // 周期 + cycle: "", + cycleEn: "", + // 修饰词 + modifier: "", + modifierEn: "", + // 维度 + dimension: "", + dimensionEn: "" + }, + 3: { + // 指标 + indicatorName: "", + indicatorNameEn: "", + // 计算公式 + formula: "", + // 度量 + modifier: "", + modifierEn: "", + // 维度 + dimension: "", + dimensionEn: "" + }, + 4: { + // 计算公式 + formula: "", + // 维度 + dimension: "", + dimensionEn: "" + } +}; diff --git a/web/packages/dataModelCenter/module/indicators/versionListModal.vue b/web/packages/dataModelCenter/module/indicators/versionListModal.vue new file mode 100644 index 0000000000..156f643502 --- /dev/null +++ b/web/packages/dataModelCenter/module/indicators/versionListModal.vue @@ -0,0 +1,120 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/labels/editModal.vue b/web/packages/dataModelCenter/module/labels/editModal.vue new file mode 100644 index 0000000000..db344d00f2 --- /dev/null +++ b/web/packages/dataModelCenter/module/labels/editModal.vue @@ -0,0 +1,360 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/labels/index.js b/web/packages/dataModelCenter/module/labels/index.js new file mode 100644 index 0000000000..c37aa9bed5 --- /dev/null +++ b/web/packages/dataModelCenter/module/labels/index.js @@ -0,0 +1,10 @@ +export default { + name: 'labelsManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/labels/index.vue b/web/packages/dataModelCenter/module/labels/index.vue new file mode 100644 index 0000000000..122b386c26 --- /dev/null +++ b/web/packages/dataModelCenter/module/labels/index.vue @@ -0,0 +1,304 @@ + + + + + + diff --git a/web/packages/dataModelCenter/module/measure/editModal.vue b/web/packages/dataModelCenter/module/measure/editModal.vue new file mode 100644 index 0000000000..c08f28a3c7 --- /dev/null +++ b/web/packages/dataModelCenter/module/measure/editModal.vue @@ -0,0 +1,295 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/measure/index.js b/web/packages/dataModelCenter/module/measure/index.js new file mode 100644 index 0000000000..a371d29718 --- /dev/null +++ b/web/packages/dataModelCenter/module/measure/index.js @@ -0,0 +1,10 @@ +export default { + name: 'measureManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/measure/index.vue b/web/packages/dataModelCenter/module/measure/index.vue new file mode 100644 index 0000000000..b78b69808f --- /dev/null +++ b/web/packages/dataModelCenter/module/measure/index.vue @@ -0,0 +1,289 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableEditor/columnEditor.vue b/web/packages/dataModelCenter/module/tableEditor/columnEditor.vue new file mode 100644 index 0000000000..1b81e6c9a5 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableEditor/columnEditor.vue @@ -0,0 +1,373 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableEditor/index.js b/web/packages/dataModelCenter/module/tableEditor/index.js new file mode 100644 index 0000000000..bb8ae7dcf6 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableEditor/index.js @@ -0,0 +1,10 @@ +export default { + name: 'tableEditor', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/tableEditor/index.vue b/web/packages/dataModelCenter/module/tableEditor/index.vue new file mode 100644 index 0000000000..4dd8804b58 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableEditor/index.vue @@ -0,0 +1,721 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableEditor/selectModel.vue b/web/packages/dataModelCenter/module/tableEditor/selectModel.vue new file mode 100644 index 0000000000..861eb98b59 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableEditor/selectModel.vue @@ -0,0 +1,185 @@ + + + diff --git a/web/packages/dataModelCenter/module/tableInfo/index.js b/web/packages/dataModelCenter/module/tableInfo/index.js new file mode 100644 index 0000000000..a48d6d2a04 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableInfo/index.js @@ -0,0 +1,10 @@ +export default { + name: 'tableInfo', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/tableInfo/index.vue b/web/packages/dataModelCenter/module/tableInfo/index.vue new file mode 100644 index 0000000000..4535ade34f --- /dev/null +++ b/web/packages/dataModelCenter/module/tableInfo/index.vue @@ -0,0 +1,876 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableSearch/index.js b/web/packages/dataModelCenter/module/tableSearch/index.js new file mode 100644 index 0000000000..780f406472 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableSearch/index.js @@ -0,0 +1,10 @@ +export default { + name: 'tableSearch', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/tableSearch/index.vue b/web/packages/dataModelCenter/module/tableSearch/index.vue new file mode 100644 index 0000000000..4d9840ab5e --- /dev/null +++ b/web/packages/dataModelCenter/module/tableSearch/index.vue @@ -0,0 +1,640 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableSearch/versionListModal.vue b/web/packages/dataModelCenter/module/tableSearch/versionListModal.vue new file mode 100644 index 0000000000..6ed6a00815 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableSearch/versionListModal.vue @@ -0,0 +1,129 @@ + + + + + diff --git a/web/packages/dataModelCenter/module/tableVersionInfo/index.js b/web/packages/dataModelCenter/module/tableVersionInfo/index.js new file mode 100644 index 0000000000..58ed54d7c4 --- /dev/null +++ b/web/packages/dataModelCenter/module/tableVersionInfo/index.js @@ -0,0 +1,10 @@ +export default { + name: 'tableVersionInfo', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataModelCenter/module/tableVersionInfo/index.vue b/web/packages/dataModelCenter/module/tableVersionInfo/index.vue new file mode 100644 index 0000000000..131fc5c33d --- /dev/null +++ b/web/packages/dataModelCenter/module/tableVersionInfo/index.vue @@ -0,0 +1,420 @@ + + + + + diff --git a/web/packages/dataModelCenter/router.js b/web/packages/dataModelCenter/router.js new file mode 100644 index 0000000000..728facca4a --- /dev/null +++ b/web/packages/dataModelCenter/router.js @@ -0,0 +1,106 @@ +const routes = [ + { + name: "dataModelCenter", + path: "/dataModelCenter", + redirect: "/dataModelCenter/tableManage", + component: () => import("./view/layout/index.vue"), + meta: { + title: "数据模型中心", + publicPage: true + }, + children: [ + { + name: "tableManage", + path: "/dataModelCenter/tableManage", + component: () => import("./view/layout/emptylayout.vue"), + redirect: "/dataModelCenter/tableManage/tableSearch", + meta: { + publicPage: true, + cover: "tableSearch" + }, + children: [ + { + name: "tableSearch", + path: "/dataModelCenter/tableManage/tableSearch", + component: () => import("./view/tableManage/tableSearch/index.vue"), + meta: { + title: "数据表管理", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "tableInfo", + path: "/dataModelCenter/tableManage/tableInfo", + component: () => import("./view/tableManage/tableInfo/index.vue"), + meta: { + title: "表详情", + publicPage: true + } + }, + { + name: "tableEditor", + path: "/dataModelCenter/tableManage/tableEditor", + component: () => import("./view/tableManage/tableEditor/index.vue"), + meta: { + title: "表编辑", + publicPage: true + } + }, + { + name: "tableVersionInfo", + path: "/dataModelCenter/tableManage/tableVersionInfo", + component: () => + import("./view/tableManage/tableVersionInfo/index.vue"), + meta: { + title: "历史版本信息", + publicPage: true + } + } + ] + }, + { + name: "dimension", + path: "/dataModelCenter/dimension", + component: () => import("./view/dimension/index.vue"), + meta: { + title: "维度", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "measure", + path: "/dataModelCenter/measure", + component: () => import("./view/measure/index.vue"), + meta: { + title: "度量", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "indicators", + path: "/dataModelCenter/indicators", + component: () => import("./view/indicators/index.vue"), + meta: { + title: "指标", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "labels", + path: "/dataModelCenter/labels", + component: () => import("./view/labels/index.vue"), + meta: { + title: "标签", + publicPage: true, + icon: "ios-paper" + } + } + ] + } +]; + +export default routes; diff --git a/web/packages/dataModelCenter/service/api/common.js b/web/packages/dataModelCenter/service/api/common.js new file mode 100644 index 0000000000..8b68c32878 --- /dev/null +++ b/web/packages/dataModelCenter/service/api/common.js @@ -0,0 +1,50 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 主题域列表 + * @returns {Promise} + * + */ +export const getThemesList = () => api.fetch(`${API_PATH.DATAMODEL_PATH}themes/list`, {}, "post"); + +/** + * 分层列表 + * @param dbName {String} 可用库名称 + * @returns {Promise} + * + */ +export const getLayersList = (dbName) => api.fetch(`${API_PATH.DATAMODEL_PATH}layers/list`, { + dbName +}, "post"); + +/** + * 修饰词列表 + * @returns {Promise} + * + */ +export const getModifiersList = () => api.fetch(`${API_PATH.DATAMODEL_PATH}modifiers/list`, {}, "post"); + +/** + * 周期列表 + * @returns {Promise} + * + */ +export const getCyclesList = () => api.fetch(`${API_PATH.DATAMODEL_PATH}cycles/list`, {}, "post"); + + +/** + * 获取可用角色列表 + * @param workspaceid {String} 工作区id + * @returns {Promise} + * + */ +export const getRolesList = (workspaceid) => api.fetch(`${API_PATH.DATAMODEL_PATH}roles/${workspaceid}`, {}, "get"); + +/** + * 获取所有用户列表 + * @param workspaceid {String} 工作区id + * @returns {Promise} + * + */ +export const getUsersList = (workspaceid) => api.fetch(`${API_PATH.DATAMODEL_PATH}users/${workspaceid}`, {}, "get"); diff --git a/web/packages/dataModelCenter/service/api/dimensions.js b/web/packages/dataModelCenter/service/api/dimensions.js new file mode 100644 index 0000000000..bd222394d3 --- /dev/null +++ b/web/packages/dataModelCenter/service/api/dimensions.js @@ -0,0 +1,64 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 维度列表 + * @returns {Object.result} + * + */ +export const getDimensions = ({ + pageNum, + pageSize, + isAvailable, + owner, + name, + warehouseThemeName +}) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}dimensions/list`, + { pageNum, pageSize, isAvailable, owner, name, warehouseThemeName }, + "post" + ); + +/** + * 新增维度 + * @returns {Object.result} + * + */ +export const createDimensions = body => + api.fetch(`${API_PATH.DATAMODEL_PATH}dimensions`, body, "post"); + +/** + * 修改维度 + * @returns {Object.result} + * + */ +export const editDimensions = (id, body) => + api.fetch(`${API_PATH.DATAMODEL_PATH}dimensions/${id}`, body, "put"); + +/** + * 根据id获取维度 + * @returns {Object.result} + * + */ +export const getDimensionsById = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}dimensions/${id}`, {}, "get"); + +/** + * 启用禁用维度 + * @returns {Object.result} + * + */ +export const switchDimensionsStatus = (id, status) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}dimensions/enable/${id}`, + { isAvailable: status }, + "put" + ); + +/** + * 删除维度 + * @returns {Object.result} + */ +export const delDimensions = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}dimensions/${id}`, {}, "delete"); diff --git a/web/packages/dataModelCenter/service/api/indicators.js b/web/packages/dataModelCenter/service/api/indicators.js new file mode 100644 index 0000000000..077edc439c --- /dev/null +++ b/web/packages/dataModelCenter/service/api/indicators.js @@ -0,0 +1,109 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 指标列表 + * @returns {Object.result} + * + */ +export const getIndicators = ({ + pageNum, + pageSize, + isAvailable, + owner, + name, + indicatorType, + warehouseThemeName +}) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}indicators/list`, + { + pageNum, + pageSize, + isAvailable, + owner, + name, + indicatorType, + warehouseThemeName + }, + "post" + ); + +/** + * 新增指标 + * @returns {Object.result} + * + */ +export const createIndicators = body => + api.fetch(`${API_PATH.DATAMODEL_PATH}indicators`, body, "post"); + +/** + * 修改指标 + * @returns {Object.result} + * + */ +export const editIndicators = (id, body) => + api.fetch(`${API_PATH.DATAMODEL_PATH}indicators/${id}`, body, "put"); + +/** + * 根据id获取指标 + * @returns {Object.result} + * + */ +export const getIndicatorsById = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}indicators/${id}`, {}, "get"); + +/** + * 启用禁用指标 + * @returns {Object.result} + * + */ +export const switcIndicatorsStatus = (id, status) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}indicators/enable/${id}`, + { isAvailable: status }, + "put" + ); + +/** + * 获取版本列表 + * @returns {Object.result} + * + */ +export const getIndicatorsVersionList = name => + api.fetch( + `${API_PATH.DATAMODEL_PATH}indicators/versions/list`, + { name }, + "post" + ); + +/** + * 新增版本 + * @returns {Object.result} + * + */ +export const buildIndicatorsVersion = (id, body) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}indicators/versions/${id}`, + body, + "post" + ); + +/** + * 回退版本 + * @returns {Object.result} + * + */ +export const rollbackIndicatorsVersion = (name, version) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}indicators/versions/rollback`, + { name, version }, + "post" + ); + +/** + * 删除指标 + * @returns {Object.result} + */ +export const delIndicators = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}indicators/${id}`, {}, "delete"); diff --git a/web/packages/dataModelCenter/service/api/labels.js b/web/packages/dataModelCenter/service/api/labels.js new file mode 100644 index 0000000000..ae1392e5f5 --- /dev/null +++ b/web/packages/dataModelCenter/service/api/labels.js @@ -0,0 +1,69 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 标签列表 + * @returns {Object.result} + */ +export const getLabelList = ({ + pageNum, + pageSize, + isAvailable, + name, + owner, + warehouseThemeName +}) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}labels/list`, + { + pageNum, + pageSize, + isAvailable, + name, + owner, + warehouseThemeName + }, + "post" + ); + +/** + * 根据id获取标签 + * @returns {Object.result} + */ +export const getLabelById = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}labels/${id}`, {}, "get"); + +/** + * 更新标签 + * @returns {Object.result} + */ +export const updateLabel = (id, body) => + api.fetch(`${API_PATH.DATAMODEL_PATH}labels/${id}`, body, "put"); + +/** + * 删除标签 + * @returns {Object.result} + */ +export const delLabel = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}labels/${id}`, {}, "delete"); + +/** + * 创建标签 + * @returns {Object.result} + */ +export const createLabel = body => { + console.log(body); + return api.fetch(`${API_PATH.DATAMODEL_PATH}labels`, body, "post"); +}; + +/** + * 启用禁用指标 + * @returns {Object.result} + * + */ +export const switcLabelStatus = (id, status) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}labels/enable/${id}`, + {isAvailable: status}, + "put" + ); diff --git a/web/packages/dataModelCenter/service/api/measures.js b/web/packages/dataModelCenter/service/api/measures.js new file mode 100644 index 0000000000..e95bfd6b35 --- /dev/null +++ b/web/packages/dataModelCenter/service/api/measures.js @@ -0,0 +1,65 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 度量列表 + * @returns {Object.result} + * + */ +export const getMeasures = ({ + pageNum, + pageSize, + isAvailable, + owner, + name, + warehouseThemeName +}) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}measures/list`, + {pageNum, pageSize, isAvailable, owner, name, warehouseThemeName}, + "post" + ); + +/** + * 新增度量 + * @returns {Object.result} + * + */ +export const createMeasures = body => + api.fetch(`${API_PATH.DATAMODEL_PATH}measures`, body, "post"); + +/** + * 修改度量 + * @returns {Object.result} + * + */ +export const editMeasures = (id, body) => + api.fetch(`${API_PATH.DATAMODEL_PATH}measures/${id}`, body, "put"); + +/** + * 根据id获取度量 + * @returns {Object.result} + * + */ +export const getMeasuresById = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}measures/${id}`, {}, "get"); + +/** + * 启用禁用度量 + * @returns {Object.result} + * + */ +export const switchMeasuresStatus = (id, status) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}measures/enable/${id}`, + {isAvailable: status}, + "put" + ); + +/** + * 删除度量 + * @returns {Object.result} + * + */ +export const delMeasures = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}measures/${id}`, {}, "delete"); diff --git a/web/packages/dataModelCenter/service/api/tableManage.js b/web/packages/dataModelCenter/service/api/tableManage.js new file mode 100644 index 0000000000..5a77667aec --- /dev/null +++ b/web/packages/dataModelCenter/service/api/tableManage.js @@ -0,0 +1,230 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * @description 表搜索 + * @param name {String} 表名 + * @param warehouseLayerName {String} 分层 + * @param warehouseThemeName {String} 主题 + * @param pageSize {Number} 分页大小 + * @param pageNum {Number} 当前页 + * @param modelType {Number} 模型类型 + * @param modelName {String} 模型名字 + * @param tableType {Number} 逻辑表或物理表 + */ +export const searchTable = ({ + name, + warehouseLayerName, + warehouseThemeName, + pageSize, + pageNum, + modelType, + modelName, + tableType +}) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/list`, + { + name, + warehouseLayerName, + warehouseThemeName, + pageSize, + pageNum, + modelType, + modelName, + tableType + }, + "post" + ); + +/** + * @description 获取收藏表 + * @returns {Promise} + * @param name {String} + */ +export const getCollectList = ({name} = {}) => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/collect/list`, + {name}, + "post" + ); +}; +/** + * @description 添加收藏 + * @param + * @returns {Promise} + */ +export const addCollect = body => { + return api.fetch(`${API_PATH.DATAMODEL_PATH}tables/collect`, body, "post"); +}; +/** + * 取消收藏 + * @returns {Promise} + */ +export const delCancel = tableName => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/collect/cancel`, + {tableName}, + "post" + ); +}; + +/** + * 数据库列表 + * @returns {Promise} + */ +export const getDataBasesList = (name = "") => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/databases/list`, + {name}, + "post" + ); +}; + +/** + * 根据id获取表详情 + * @returns {Promise} + */ +export const getTableInfoById = id => { + return api.fetch(`${API_PATH.DATAMODEL_PATH}tables/${id}`, {}, "get"); +}; + +/** + * 根据name和guid获取表详情 + * @returns {Promise} + */ +export const getTableInfoByName = (name = "", guid = "") => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/name`, + {name, guid}, + "post" + ); +}; + +/** + * 分区统计信息 + * @returns {Promise} + */ +export const getTablesPartitionStats = (name = "", guid = "") => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/partition/stats`, + {name, guid}, + "post" + ); +}; + +/** + * 生成建表语句 + * @returns {Promise} + */ +export const getTablesCreateSql = (tableId = "", guid = "") => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/create/sql`, + {tableId, guid}, + "post" + ); +}; + +/** + * 获取预览信息 + * @returns {Promise} + */ +export const getTablesPreview = tableName => { + return api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/data/preview`, + {tableName}, + "post" + ); +}; + +/** + * 字典列表 + * @returns {Promise} + * + */ +export const getDictionariesList = type => + api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/dictionaries/list`, + {type}, + "post" + ); + +/** + * 新增表 + * @returns {Promise} + * + */ +export const addTable = body => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables`, body, "post"); + +/** + * 更新表 + * @returns {Promise} + * + */ +export const updateTable = (id, body) => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/${id}`, body, "put"); + +/** + * 执行表创建 + * @returns {Promise} + * + */ +export const createTable = tableId => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/create`, {tableId}, "post"); + +/** + * 版本列表 + * @returns {Promise} + * + */ +export const getVersionListByName = name => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/versions/list`, {name}, "post"); + +/** + * 版本回退 + * @returns {Promise} + * + */ +export const tableVersionRollback = (name, version) => + api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/versions/rollback`, + {name, version}, + "post" + ); + +/** + * 新增版本 + * @returns {Promise} + * + */ +export const generatorNewVersion = (id, data) => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/versions/${id}`, data, "post"); + +/** + * 检查表是否有数据 + * @returns {Promise} + * + */ +export const checkTableData = tableName => + api.fetch( + `${API_PATH.DATAMODEL_PATH}tables/check/data`, + {tableName}, + "post" + ); + +/** + * @description 删除表 + * @param {String} id + * @returns {Promise} + */ +export const deleteTableById = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/${id}`, {}, "delete"); + +/** + * 主动绑定 + * @returns {Promise} + * + */ +export const bindTable = id => + api.fetch(`${API_PATH.DATAMODEL_PATH}tables/bind/${id}`, "put"); diff --git a/web/packages/dataModelCenter/utils/clipboard.js b/web/packages/dataModelCenter/utils/clipboard.js new file mode 100644 index 0000000000..7efc01c495 --- /dev/null +++ b/web/packages/dataModelCenter/utils/clipboard.js @@ -0,0 +1,43 @@ +import Vue from 'vue'; +import Clipboard from 'clipboard'; + +/** + *@returns + */ +function clipboardSuccess() { + Vue.prototype.$Message.success({ + content: '复制成功', + duration: 1.5 + }); +} + + +/** + *@returns + */ +function clipboardError() { + Vue.prototype.$Message.success({ + message: '复制失败', + duration: 1.5 + }); +} + +/** + * 把字符串中的内容放到剪切板上 + * @param {String, Object} + * @param {void} + */ +export default function handleClipboard(text, event) { + const clipboard = new Clipboard(event.target, { + text: () => text + }); + clipboard.on('success', () => { + clipboardSuccess(); + clipboard.destroy(); + }); + clipboard.on('error', () => { + clipboardError(); + clipboard.destroy(); + }); + clipboard.onClick(event); +} diff --git a/web/packages/dataModelCenter/utils/fomatSQL.js b/web/packages/dataModelCenter/utils/fomatSQL.js new file mode 100644 index 0000000000..caba9997b5 --- /dev/null +++ b/web/packages/dataModelCenter/utils/fomatSQL.js @@ -0,0 +1,23 @@ +/** + * 转换 后端SQL语句 成 html文本 + * @param (String) + * @return (String) + */ +export function fomatSqlForShow(sql) { + if ( typeof sql !== 'string' ) return '' + const arr = sql.split('@$'); + const res = arr.map((i, idx) => `

${idx+1}${i}

`) + return res.join('') +} + +/** + * + * @param {String} sql + * @return {String} + */ +export function fomatSqlForCopy(sql) { + if ( typeof sql !== 'string' ) return '' + const arr = sql.replaceAll(' ', '').split('@$'); + const res = arr.map(i => `${i}\r\n`) + return res.join('') +} diff --git a/web/packages/dataModelCenter/utils/formatDate.js b/web/packages/dataModelCenter/utils/formatDate.js new file mode 100644 index 0000000000..239b49beaf --- /dev/null +++ b/web/packages/dataModelCenter/utils/formatDate.js @@ -0,0 +1,10 @@ +import moment from "moment"; +/** + * @description 转换时间戳到字符串 + * @param value {Number} 时间戳 + * @return {String} + */ +export default function(value) { + if (!value) return ""; + return moment(value).format("YYYY-MM-DD HH:mm"); +} diff --git a/web/packages/dataModelCenter/view/dimension/index.vue b/web/packages/dataModelCenter/view/dimension/index.vue new file mode 100644 index 0000000000..627e4aae21 --- /dev/null +++ b/web/packages/dataModelCenter/view/dimension/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/indicators/index.vue b/web/packages/dataModelCenter/view/indicators/index.vue new file mode 100644 index 0000000000..90e7380da2 --- /dev/null +++ b/web/packages/dataModelCenter/view/indicators/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/labels/index.vue b/web/packages/dataModelCenter/view/labels/index.vue new file mode 100644 index 0000000000..d65d3aade7 --- /dev/null +++ b/web/packages/dataModelCenter/view/labels/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/layout/emptylayout.vue b/web/packages/dataModelCenter/view/layout/emptylayout.vue new file mode 100644 index 0000000000..98240aef81 --- /dev/null +++ b/web/packages/dataModelCenter/view/layout/emptylayout.vue @@ -0,0 +1,3 @@ + diff --git a/web/packages/dataModelCenter/view/layout/index.vue b/web/packages/dataModelCenter/view/layout/index.vue new file mode 100644 index 0000000000..d3eacab1ea --- /dev/null +++ b/web/packages/dataModelCenter/view/layout/index.vue @@ -0,0 +1,28 @@ + + + + diff --git a/web/packages/dataModelCenter/view/layout/sidebar-sub-menu.vue b/web/packages/dataModelCenter/view/layout/sidebar-sub-menu.vue new file mode 100644 index 0000000000..dd958f7a34 --- /dev/null +++ b/web/packages/dataModelCenter/view/layout/sidebar-sub-menu.vue @@ -0,0 +1,61 @@ + + + diff --git a/web/packages/dataModelCenter/view/layout/sidebar.vue b/web/packages/dataModelCenter/view/layout/sidebar.vue new file mode 100644 index 0000000000..34a64fefb7 --- /dev/null +++ b/web/packages/dataModelCenter/view/layout/sidebar.vue @@ -0,0 +1,41 @@ + + + diff --git a/web/packages/dataModelCenter/view/measure/index.vue b/web/packages/dataModelCenter/view/measure/index.vue new file mode 100644 index 0000000000..649c37676d --- /dev/null +++ b/web/packages/dataModelCenter/view/measure/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/tableManage/tableEditor/index.vue b/web/packages/dataModelCenter/view/tableManage/tableEditor/index.vue new file mode 100644 index 0000000000..b5807c00a8 --- /dev/null +++ b/web/packages/dataModelCenter/view/tableManage/tableEditor/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/tableManage/tableInfo/index.vue b/web/packages/dataModelCenter/view/tableManage/tableInfo/index.vue new file mode 100644 index 0000000000..84221fcded --- /dev/null +++ b/web/packages/dataModelCenter/view/tableManage/tableInfo/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/tableManage/tableSearch/index.vue b/web/packages/dataModelCenter/view/tableManage/tableSearch/index.vue new file mode 100644 index 0000000000..39fd6e6f59 --- /dev/null +++ b/web/packages/dataModelCenter/view/tableManage/tableSearch/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataModelCenter/view/tableManage/tableVersionInfo/index.vue b/web/packages/dataModelCenter/view/tableManage/tableVersionInfo/index.vue new file mode 100644 index 0000000000..ff3ded6524 --- /dev/null +++ b/web/packages/dataModelCenter/view/tableManage/tableVersionInfo/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataWarehouseDesign/assets/styles/common.scss b/web/packages/dataWarehouseDesign/assets/styles/common.scss new file mode 100644 index 0000000000..a1909b210a --- /dev/null +++ b/web/packages/dataWarehouseDesign/assets/styles/common.scss @@ -0,0 +1,4 @@ +.page-content { + box-sizing :border-box; + padding: 20px; +} diff --git a/web/packages/dataWarehouseDesign/i18n/en.json b/web/packages/dataWarehouseDesign/i18n/en.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/packages/dataWarehouseDesign/i18n/en.json @@ -0,0 +1 @@ +{} diff --git a/web/packages/dataWarehouseDesign/i18n/zh.json b/web/packages/dataWarehouseDesign/i18n/zh.json new file mode 100644 index 0000000000..0967ef424b --- /dev/null +++ b/web/packages/dataWarehouseDesign/i18n/zh.json @@ -0,0 +1 @@ +{} diff --git a/web/packages/dataWarehouseDesign/module/layered/editModal.vue b/web/packages/dataWarehouseDesign/module/layered/editModal.vue new file mode 100644 index 0000000000..9f73a4707d --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/layered/editModal.vue @@ -0,0 +1,306 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/layered/index.js b/web/packages/dataWarehouseDesign/module/layered/index.js new file mode 100644 index 0000000000..5ee5da619c --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/layered/index.js @@ -0,0 +1,10 @@ +export default { + name: 'layeredManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataWarehouseDesign/module/layered/index.vue b/web/packages/dataWarehouseDesign/module/layered/index.vue new file mode 100644 index 0000000000..24f8a77af8 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/layered/index.vue @@ -0,0 +1,365 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/modifier/editModal.vue b/web/packages/dataWarehouseDesign/module/modifier/editModal.vue new file mode 100644 index 0000000000..cd367a96c1 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/modifier/editModal.vue @@ -0,0 +1,348 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/modifier/index.js b/web/packages/dataWarehouseDesign/module/modifier/index.js new file mode 100644 index 0000000000..cce9a7cb4c --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/modifier/index.js @@ -0,0 +1,10 @@ +export default { + name: 'modifierManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataWarehouseDesign/module/modifier/index.vue b/web/packages/dataWarehouseDesign/module/modifier/index.vue new file mode 100644 index 0000000000..efffd26365 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/modifier/index.vue @@ -0,0 +1,278 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/statPeriod/editModal.vue b/web/packages/dataWarehouseDesign/module/statPeriod/editModal.vue new file mode 100644 index 0000000000..c3daef79ae --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/statPeriod/editModal.vue @@ -0,0 +1,340 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/statPeriod/index.js b/web/packages/dataWarehouseDesign/module/statPeriod/index.js new file mode 100644 index 0000000000..ceebed5a83 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/statPeriod/index.js @@ -0,0 +1,10 @@ +export default { + name: 'statPeriodManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataWarehouseDesign/module/statPeriod/index.vue b/web/packages/dataWarehouseDesign/module/statPeriod/index.vue new file mode 100644 index 0000000000..138f5c2e14 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/statPeriod/index.vue @@ -0,0 +1,302 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/themeDomains/editModal.vue b/web/packages/dataWarehouseDesign/module/themeDomains/editModal.vue new file mode 100644 index 0000000000..63fb0df361 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/themeDomains/editModal.vue @@ -0,0 +1,267 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/module/themeDomains/index.js b/web/packages/dataWarehouseDesign/module/themeDomains/index.js new file mode 100644 index 0000000000..30b523b364 --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/themeDomains/index.js @@ -0,0 +1,10 @@ +export default { + name: 'themeDomainsManage', + events: [], + dispatchs: { + }, + data: { + API_PATH: process.env.VUE_APP_MN_CONFIG_PREFIX || `http://${window.location.host}/api/rest_j/v1/`, + }, + component: () => import('./index.vue'), +}; diff --git a/web/packages/dataWarehouseDesign/module/themeDomains/index.vue b/web/packages/dataWarehouseDesign/module/themeDomains/index.vue new file mode 100644 index 0000000000..2da14fad9d --- /dev/null +++ b/web/packages/dataWarehouseDesign/module/themeDomains/index.vue @@ -0,0 +1,279 @@ + + + + + diff --git a/web/packages/dataWarehouseDesign/router.js b/web/packages/dataWarehouseDesign/router.js new file mode 100644 index 0000000000..5b67832ca2 --- /dev/null +++ b/web/packages/dataWarehouseDesign/router.js @@ -0,0 +1,56 @@ +const routes = [ + { + name: "dataWarehouseDesign", + path: "/dataWarehouseDesign", + redirect: "/dataWarehouseDesign/themeDomains", + component: () => import("./view/layout/index.vue"), + meta: { + title: "数仓规划", + publicPage: true + }, + children: [ + { + name: "themeDomains", + path: "/dataWarehouseDesign/themeDomains", + component: () => import("./view/themeDomains/index.vue"), + meta: { + title: "主题域配置", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "layered", + path: "/dataWarehouseDesign/layered", + component: () => import("./view/layered/index.vue"), + meta: { + title: "分层配置", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "modifier", + path: "/dataWarehouseDesign/modifier", + component: () => import("./view/modifier/index.vue"), + meta: { + title: "修饰词管理", + publicPage: true, + icon: "ios-paper" + } + }, + { + name: "statPeriod", + path: "/dataWarehouseDesign/statPeriod", + component: () => import("./view/statPeriod/index.vue"), + meta: { + title: "统计周期管理", + publicPage: true, + icon: "ios-paper" + } + } + ] + } +]; + +export default routes; diff --git a/web/packages/dataWarehouseDesign/service/api/common.js b/web/packages/dataWarehouseDesign/service/api/common.js new file mode 100644 index 0000000000..0972648ae6 --- /dev/null +++ b/web/packages/dataWarehouseDesign/service/api/common.js @@ -0,0 +1,16 @@ +import api from "@dataspherestudio/shared/common/service/api"; +import API_PATH from "@dataspherestudio/shared/common/config/apiPath"; + +/** + * 获取可用角色列表 + * @param workspaceid {String} 工作区id + * @return {Promise} + */ +export const getRolesList = (workspaceid) => api.fetch(`${API_PATH.WAREHOUSE_PATH}workspace/${workspaceid}/principal_roles`, {}, "get"); + +/** + * 获取所有用户列表 + * @param workspaceid {String} 工作区id + * @return {Promise} + */ +export const getUsersList = (workspaceid) => api.fetch(`${API_PATH.WAREHOUSE_PATH}workspace/${workspaceid}/principal_users`, {}, "get"); diff --git a/web/packages/dataWarehouseDesign/service/api/layer.js b/web/packages/dataWarehouseDesign/service/api/layer.js new file mode 100644 index 0000000000..6da53fba54 --- /dev/null +++ b/web/packages/dataWarehouseDesign/service/api/layer.js @@ -0,0 +1,72 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 查询所有分层 + * @param isAvailable {Number} 是否启用 + * @return {Promise} + */ +export const getLayersAll = ({isAvailable = undefined}) => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/all`, {isAvailable}, "get") + +/** + * 查询所有预置分层 + * @return {Promise} + */ +export const getLayersPreset = () => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/preset`,{}, "get"); + +/** + * 分页查询自定义分层 + * @param page {Number} 当前页 + * @param size {Number} 分页数量 + * @returns {Promise} + */ +export const getLayersCustom = ({page = 1,size = 10}) => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/custom`, { page,size }, "get"); + +/** + * 新增自定义分层 + * @param body {Object} 数据体 + * @returns {Promise} + */ +export const createLayersCustom = body => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/custom`, body, "post"); + +/** + * 根据ID查询某个分层信息 + * @param id {Number} id + * @returns {Promise} + */ +export const getLayersById = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/${id}`, {}, "get"); + +/** + * 编辑分层 + * @param id {Number} id + * @param body {Object} 数据体 + * @returns {Promise} + */ +export const editLayersCustom = (id, body) => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/${id}`, body, "put"); + +/** + * 删除分层 + * @param id {Number} id + * @returns {Promise} + */ +export const deleteLayers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/${id}`, {}, "delete"); + +/** + * 禁用分层 + * @param id {Number} id + * @returns {Promise} + */ +export const disableLayers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/${id}/disable`, {}, "put"); + +/** + * 启用分层 + * @param id {Number} id + * @returns {Promise} + */ +export const enableLayers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}layers/${id}/enable`, {}, "put"); + +/** + * 获取可用库 + * @returns {Promise} + */ +export const getDbs = () => api.fetch(`${API_PATH.WAREHOUSE_PATH}dbs/hive`, {}, "get"); diff --git a/web/packages/dataWarehouseDesign/service/api/modifiers.js b/web/packages/dataWarehouseDesign/service/api/modifiers.js new file mode 100644 index 0000000000..ddf5cbde77 --- /dev/null +++ b/web/packages/dataWarehouseDesign/service/api/modifiers.js @@ -0,0 +1,55 @@ +import api from "@dataspherestudio/shared/common/service/api"; +import API_PATH from "@dataspherestudio/shared/common/config/apiPath"; + +/** + * 创建修饰词 + * @param body {Object} 数据体 + * @return {Promise} + */ +export const createModifiers = body => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers`, body, "post"); + +/** + * 删除修饰词 + * @param id {Number} id + * @return {Promise} + */ +export const deleteModifiers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers/${id}`, {}, "delete"); + +/** + * 编辑修饰词 + * @param id {Number} id + * @param body {Object} 数据体 + * @return {Promise} + */ +export const editModifiers = (id, body) => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers/${id}`, body, "put"); + +/** + * 分页获取修饰词 + * @param page {Number} 当前页 + * @param size {分页数量} 数量 + * @param name {String} 搜索名称 + * @param enabled {Boolean} 是否启用 + * @return {Promise} + */ +export const getModifiers = ({page, size, name, enabled} = {}) => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers`, {page, size, name, enabled}, "get"); + +/** + * 根据id获取 + * @param id {Number} id + * @return {Promise} + */ +export const getModifiersById = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers/${id}`, {}, "get"); + +/** + * 禁用修饰词 + * @param id {Number} id + * @return {Promise} + */ +export const disableModifiers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers/${id}/disable`, {}, "put"); + +/** + * 启用修饰词 + * @param id {Number} id + * @return {Promise} + */ +export const enableModifiers = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}modifiers/${id}/enable`, {}, "put"); diff --git a/web/packages/dataWarehouseDesign/service/api/statisticalPeriods.js b/web/packages/dataWarehouseDesign/service/api/statisticalPeriods.js new file mode 100644 index 0000000000..d29fe20488 --- /dev/null +++ b/web/packages/dataWarehouseDesign/service/api/statisticalPeriods.js @@ -0,0 +1,55 @@ +import api from "@dataspherestudio/shared/common/service/api"; +import API_PATH from "@dataspherestudio/shared/common/config/apiPath"; + +/** + * 创建统计周期 + * @param body {Object} 数据体 + * @return {Promise} + */ +export const createStatisticalPeriods = body => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods`, body, "post"); + +/** + * 删除统计周期 + * @param id {Number} 统计周期id + * @return {Promise} + */ +export const deleteStatisticalPeriods = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods/${id}`, {}, "delete"); + +/** + * 编辑统计周期 + * @param id {Number} 统计周期id + * @param body {Object} 数据体 + * @return {Promise} + */ +export const editStatisticalPeriods = (id, body) => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods/${id}`, body, "put"); + +/** + * 分页获取统计周期 + * @param page {Number} 当前页 + * @param size {分页数量} 数量 + * @param name {String} 搜索名称 + * @param enabled {Boolean} 是否启用 + * @return {Promise} + */ +export const getStatisticalPeriods = ({page, size, name, enabled} = {}) => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods`, {page, size, name, enabled}, "get"); + +/** + * 根据id获取统计周期 + * @param id {Number} 周期id + * @return {Promise} + */ +export const getStatisticalPeriodsById = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods/${id}`, {}, "get"); + +/** + * 禁用统计周期 + * @param id {Number} 周期id + * @return {Promise} + */ +export const disableStatisticalPeriods = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods/${id}/disable`, {}, "put"); + +/** + * 启用统计周期 + * @param id {Number} 周期id + * @return {Promise} + */ +export const enableStatisticalPeriods = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}statistical_periods/${id}/enable`, {}, "put"); diff --git a/web/packages/dataWarehouseDesign/service/api/theme.js b/web/packages/dataWarehouseDesign/service/api/theme.js new file mode 100644 index 0000000000..fcf82f7e76 --- /dev/null +++ b/web/packages/dataWarehouseDesign/service/api/theme.js @@ -0,0 +1,56 @@ +import API_PATH from "@dataspherestudio/shared/common/config/apiPath.js"; +import api from "@dataspherestudio/shared/common/service/api"; + +/** + * 查询主主题域 + * @param page {Number} 当前页 + * @param size {分页数量} 数量 + * @param name {String} 搜索名称 + * @param enabled {Boolean} 是否启用 + * @returns {Promise} + */ +export const getThemedomains = ({page, size, name, enabled} = {}) => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains`, {page, size, name, enabled}, "get"); + +/** + * 创建主题域 + * @param body {Object} 数据体 + * @returns {Promise} + */ +export const createThemedomains = body => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains`, body, "post"); + +/** + * 删除主题域 + * @params {id} + * @returns {Promise} + */ +export const deleteThemedomains = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains/${id}`, {}, "delete"); + +/** + * 禁用主题域 + * @param id {Number} id + * @returns {Promise} + */ +export const disableThemedomains = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains/${id}/disable`, {}, "put"); + +/** + * 启用主题域 + * @param id {Number} id + * @returns {Promise} + */ +export const enableThemedomains = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains/${id}/enable`, {}, "put"); + +/** + * 根据id获取主题 + * @param id {Number} id + * @returns {Promise} + */ +export const getThemedomainsById = id => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains/${id}`, {}, "get"); + +/** + * 更新主题 + * @param id {Number} id + * @param body {Object} 数据体 + * @returns {Promise} + */ +export const editThemedomains = (id, body) => api.fetch(`${API_PATH.WAREHOUSE_PATH}themedomains/${id}`, body, "put"); + diff --git a/web/packages/dataWarehouseDesign/utils/formatDate.js b/web/packages/dataWarehouseDesign/utils/formatDate.js new file mode 100644 index 0000000000..9c64db3f4e --- /dev/null +++ b/web/packages/dataWarehouseDesign/utils/formatDate.js @@ -0,0 +1,11 @@ +import moment from "moment"; + +/** + * 转换时间戳到字符串 + * @param (Number) + * @return (String) + */ +export default function formatDate(value) { + if (!value) return ""; + return moment(value).format("YYYY-MM-DD HH:mm"); +} diff --git a/web/packages/dataWarehouseDesign/view/layered/index.vue b/web/packages/dataWarehouseDesign/view/layered/index.vue new file mode 100644 index 0000000000..75f09bdfe8 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/layered/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataWarehouseDesign/view/layout/emptylayout.vue b/web/packages/dataWarehouseDesign/view/layout/emptylayout.vue new file mode 100644 index 0000000000..98240aef81 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/layout/emptylayout.vue @@ -0,0 +1,3 @@ + diff --git a/web/packages/dataWarehouseDesign/view/layout/index.vue b/web/packages/dataWarehouseDesign/view/layout/index.vue new file mode 100644 index 0000000000..b6cef5f965 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/layout/index.vue @@ -0,0 +1,24 @@ + + + + diff --git a/web/packages/dataWarehouseDesign/view/layout/sidebar-sub-menu.vue b/web/packages/dataWarehouseDesign/view/layout/sidebar-sub-menu.vue new file mode 100644 index 0000000000..dd958f7a34 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/layout/sidebar-sub-menu.vue @@ -0,0 +1,61 @@ + + + diff --git a/web/packages/dataWarehouseDesign/view/layout/sidebar.vue b/web/packages/dataWarehouseDesign/view/layout/sidebar.vue new file mode 100644 index 0000000000..34a64fefb7 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/layout/sidebar.vue @@ -0,0 +1,41 @@ + + + diff --git a/web/packages/dataWarehouseDesign/view/modifier/index.vue b/web/packages/dataWarehouseDesign/view/modifier/index.vue new file mode 100644 index 0000000000..3212b55adc --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/modifier/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataWarehouseDesign/view/statPeriod/index.vue b/web/packages/dataWarehouseDesign/view/statPeriod/index.vue new file mode 100644 index 0000000000..212d6ebdd7 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/statPeriod/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/dataWarehouseDesign/view/themeDomains/index.vue b/web/packages/dataWarehouseDesign/view/themeDomains/index.vue new file mode 100644 index 0000000000..ad41938893 --- /dev/null +++ b/web/packages/dataWarehouseDesign/view/themeDomains/index.vue @@ -0,0 +1,11 @@ + + diff --git a/web/packages/shared/common/config/apiPath.js b/web/packages/shared/common/config/apiPath.js index ffdd758c57..608348bbd4 100644 --- a/web/packages/shared/common/config/apiPath.js +++ b/web/packages/shared/common/config/apiPath.js @@ -6,7 +6,8 @@ export default { WORKFLOW_PATH: '/dss/workflow/', PUBLISH_PATH: '/dss/framework/release/', DATASOURCE_PATH: '/dss/data/api/datasource/', - DATA_GOVERNANCE: '/dss/data/governance/asset/', - WAREHOUSE_PATH: '/dss/data/governance/classification/' + DATAMODEL_PATH: "/datamodel/", + WAREHOUSE_PATH: "/data-warehouse/", + DATA_GOVERNANCE: "/data-assets/asset/" } diff --git a/web/packages/workspace/i18n/zh.json b/web/packages/workspace/i18n/zh.json index a2f5a87c33..e4cc9c5021 100644 --- a/web/packages/workspace/i18n/zh.json +++ b/web/packages/workspace/i18n/zh.json @@ -148,6 +148,7 @@ "baseInfo": "基本信息", "userInfo": "用户信息", "authInfo": "权限信息", + "datasourceInfo": "数据源信息", "editDataSour": "编辑数据源", "delDataSour": "删除数据源", "addDataSour": "新增数据源", diff --git a/web/packages/workspace/module/management/index.vue b/web/packages/workspace/module/management/index.vue index 3af036cf02..580306525d 100644 --- a/web/packages/workspace/module/management/index.vue +++ b/web/packages/workspace/module/management/index.vue @@ -44,12 +44,12 @@ export default { path: 'jurisdiction', children: [], }, - // { - // icon: 'add', - // name: i18n.$t('message.workspaceManagement.dataSourceAdministration'), - // path: 'dataSourceAdministration', - // children: [], - // }, + { + icon: 'add', + name: i18n.$t('message.workspaceManagement.dataSourceAdministration'), + path: 'dataSourceAdministration', + children: [], + }, ]; return { mode: '', diff --git a/web/patches/package.json b/web/patches/package.json new file mode 100644 index 0000000000..21b9cd5eb1 --- /dev/null +++ b/web/patches/package.json @@ -0,0 +1,82 @@ +{ + "name": "dataspherestudio", + "version": "1.1.4", + "private": true, + "scripts": { + "serve": "npm run postinstall && cd packages/dss && npm run serve", + "build": "npm run postinstall && cd packages/dss && npm run build", + "lint": "vue-cli-service lint --no-fix", + "fix": "vue-cli-service lint --fix", + "precommit": "lint-staged", + "postinstall": "patch-package" + }, + "husky": { + "hooks": { + "postcommit": "git update-index --again", + "pre-commit": "lint-staged" + } + }, + "lint-staged": { + "packages/**/*.{js,vue}": [ + "vue-cli-service lint --no-fix", + "git add" + ] + }, + "dependencies": { + "@antv/g6": "^4.5.3", + "axios": "0.21.1", + "babel-polyfill": "6.26.0", + "butterfly-dag": "4.1.23", + "clipboard": "^2.0.8", + "dexie": "2.0.4", + "dt-sql-parser": "1.2.1", + "core-js": "2.6.11", + "echarts": "^4.1.0", + "eslint": "6.8.0", + "eslint-plugin-vue": "6.2.2", + "highlight.js": "9.18.3", + "iview": "3.5.4", + "jsencrypt": "^3.2.1", + "lodash": "4.17.20", + "md5": "2.3.0", + "moment": "2.29.1", + "monaco-editor": "0.19.3", + "qs": "6.9.4", + "reconnecting-websocket": "4.4.0", + "sql-formatter": "2.3.3", + "svgo": "1.3.0", + "vue": "2.6.12", + "vue-i18n": "8.22.1", + "vue-router": "3.4.8", + "vuescroll": "4.16.1", + "webpack": "^4.46.0", + "worker-loader": "2.0.0" + }, + "devDependencies": { + "@kazupon/vue-i18n-loader": "0.4.1", + "@vue/cli-plugin-babel": "3.12.1", + "@vue/cli-plugin-eslint": "3.12.1", + "@vue/cli-service": "3.12.1", + "@vue/eslint-config-standard": "4.0.0", + "archiver": "3.1.1", + "babel-eslint": "10.1.0", + "copy-webpack-plugin": "4.6.0", + "csp-html-webpack-plugin": "4.0.0", + "eslint": "6.8.0", + "eslint-plugin-vue": "6.2.2", + "filemanager-webpack-plugin": "2.0.5", + "husky": "1.3.1", + "lerna": "^4.0.0", + "less-loader": "6.1.0", + "lint-staged": "8.2.1", + "monaco-editor-webpack-plugin": "1.8.2", + "node-sass": "4.14.1", + "sass-loader": "7.3.1", + "speed-measure-webpack-plugin": "1.5.0", + "svg-sprite-loader": "5.0.0", + "patch-package": "6.2.2", + "vue-cli-plugin-mockjs": "0.1.3", + "vue-template-compiler": "2.6.12", + "webpack-virtual-modules": "0.3.2" + } +}