diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 000000000..75fc3cdec Binary files /dev/null and b/.DS_Store differ diff --git a/docker-compose.yml b/docker-compose.yml index 32249e43f..324b316f6 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -1,4 +1,4 @@ -version: '3.7' +# version: '3.7' # NOTE For Red Hat or other images on the internal registry please login as follows: # 1. Be logged into the BC Gov OpenShift Console # https://console.pathfinder.gov.bc.ca:8443/console/catalog) @@ -8,6 +8,9 @@ version: '3.7' # For example: # docker login -u garywong-bc -p `oc whoami -t` docker-registry.pathfinder.gov.bc.ca services: +############################################################################################# +### Minio-Pub ### +############################################################################################# minio-public: build: context: ./openshift/docker/minio/ @@ -22,6 +25,11 @@ services: MINIO_DATA_DIR: /data entrypoint: /minio-entrypoint.sh command: server /data + networks: + - gwells-network +############################################################################################# +### Minio-Priv ### +############################################################################################# minio-private: build: context: ./openshift/docker/minio/ @@ -33,9 +41,16 @@ services: environment: MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio1234 + MINIO_DATA_DIR: /data entrypoint: /minio-entrypoint.sh command: server --address :9001 /data + networks: + - gwells-network +############################################################################################# +### CrunchyDB ### +############################################################################################# db: + platform: linux/x86_64 image: crunchydata/crunchy-postgres-gis:centos7-12.2-4.2.2 hostname: db environment: @@ -64,18 +79,38 @@ services: source: ./app/database/scripts/local_dev/setup.sql target: /pgconf/setup.sql consistency: cached + healthcheck: + test: ["CMD-SHELL", "/usr/pgsql-12/bin/pg_isready", "-d", "gwells"] + interval: 20s + timeout: 30s + retries: 5 + start_period: 120s + networks: + - gwells-network +############################################################################################# +### Tileserv ### +############################################################################################# tileserv: hostname: tileserv depends_on: - db - image: pramsey/pg_tileserv:latest + platform: linux/x86_64 + image: pramsey/pg_tileserv:20231005 + env_file: + - path: ./.env.test + required: false environment: - DATABASE_URL: postgres://ftw_reader:test1@db:5432/gwells + DATABASE_URL: "postgres://ftw_reader:${DATABASE_PASSWORD:-test1}@${GWELLS_SERVICE_HOST:-db}:${GWELLS_SERVICE_PORT:-5432}/gwells" ports: - "7800:7800" entrypoint: sh -c "sleep 10; /app/pg_tileserv" + networks: + - gwells-network +############################################################################################# +### Frontend ### +############################################################################################# frontend: - image: node:8.9.4 + image: node:14.21.3 hostname: frontend working_dir: /app/frontend environment: @@ -83,8 +118,7 @@ services: VUE_APP_AXIOS_BASE_URL: /api/ VUE_APP_VECTOR_TILE_BASE_URL: "/tiles/" VECTOR_TILE_SERVER: "http://tileserv:7800/" - CHOKIDAR_USEPOLLING: "True" - API_TARGET: "${API_TARGET}" + API_TARGET: "${API_TARGET:-http://backend:8000/}" command: /bin/bash -c " set -x && cd /app/frontend && @@ -96,40 +130,52 @@ services: - type: bind source: ./app/frontend target: /app/frontend - consistency: cached - /app/frontend/node_modules/ depends_on: - backend + networks: + - gwells-network +############################################################################################# +### Backend ### +############################################################################################# backend: - image: gwells/backend + platform: linux/x86_64 + build: + context: ./openshift/docker/backend + dockerfile: Dockerfile.dev hostname: backend + env_file: + - path: ./.env.test + required: false environment: + ENVIRONMENT: "${ENVIRONMENT:-local}" APP_CONTEXT_ROOT: gwells CSRF_COOKIE_SECURE: "False" CUSTOM_GDAL_GEOS: "False" DATABASE_NAME: gwells - DATABASE_USER: gwells - DATABASE_PASSWORD: test1 + DATABASE_USER: "${DATABASE_USER:-gwells}" + DATABASE_PASSWORD: "${DATABASE_PASSWORD:-test1}" DATABASE_SERVICE_NAME: gwells DJANGO_ADMIN_URL: admin DJANGO_DEBUG: "True" DJANGO_SECRET_KEY: secret ENABLE_ADDITIONAL_DOCUMENTS: "True" ENABLE_AQUIFERS_SEARCH: "True" - ENABLE_GOOGLE_ANALYTICS: "False" - GWELLS_SERVICE_HOST: db - GWELLS_SERVICE_PORT: 5432 + GWELLS_SERVICE_HOST: "${GWELLS_SERVICE_HOST:-db}" + GWELLS_SERVICE_PORT: "${GWELLS_SERVICE_PORT:-5432}" MINIO_ACCESS_KEY: minio MINIO_SECRET_KEY: minio1234 PYTHONUNBUFFERED: "1" SESSION_COOKIE_SECURE: "False" - SSO_AUDIENCE: gwells-test - SSO_CLIENT: gwells-test - SSO_AUTH_HOST: https://test.oidc.gov.bc.ca/auth + SSO_AUDIENCE: gwells-4121 + SSO_CLIENT: gwells-4121 + SSO_TEST_AUDIENCE: gwells-api-tests-4820 + SSO_TEST_CLIENT: gwells-api-tests-4820 + SSO_AUTH_HOST: https://test.loginproxy.gov.bc.ca/auth SSO_IDP_HINT: "undefined" SSO_PORT: 0 - SSO_REALM: gwells - SSO_PUBKEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAh+5Hc4w/PKN04avW1LX/orSyXsJ7nJiEbErMyQqCvYAEKmQUeok7Yy+r6sVuJSyQQMCExk37NY3fUQOK92J83oC/9WGij7bvlWHew810edIisechoKpLuQbw63xlj/5ifQfJ977NM1n1RQgXF4hr4MDuhGbV+PAkQGdSPfufjEFleCwj8mvjUwTFnSwE9I+Rf78DVJzCHZbpFMq9skvrpCzeNsLNNoz+k1DENQ6MKnVnbUYskG+j5NZ3g+kxfkRf2G0tw2KisLYtxUSdfwutieT2Zxglk/kZeMWS7khXWzhwjvWf5a1qM5ebreVVYNhra7MjcrkXSh0v5IBcW+122wIDAQAB + SSO_REALM: standard + SSO_PUBKEY: MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiFdv9GA83uHuy8Eu9yiZHGGF9j6J8t7FkbcpaN81GDjwbjsIJ0OJO9dKRAx6BAtTC4ubJTBJMPvQER5ikOhIeBi4o25fg61jpgsU6oRZHkCXc9gX6mrjMjbsPaf3/bjjYxP5jicBDJQeD1oRa24+tiGggoQ7k6gDEN+cRYqqNpzC/GQbkUPk8YsgroncEgu8ChMh/3ERsLV2zorchMANUq76max16mHrhtWIQxrb/STpSt4JuSlUzzBV/dcXjJe5gywZHe0jAutFhNqjHzHdgyaC4RAd3eYQo+Kl/JOgy2AZrnx+CiPmvOJKe9tAW4k4H087ng8aVE40v4HW/FEbnwIDAQAB S3_HOST: minio-public:9000 S3_PRIVATE_HOST: minio-private:9001 S3_PRIVATE_BUCKET: gwells @@ -145,29 +191,52 @@ services: S3_WELL_BUCKET: well-docs S3_WELL_EXPORT_BUCKET: gwells S3_USE_SECURE: 0 - command: /bin/bash -c " - sleep 3 && - set -x && - cd /app/backend && - mkdir -p .pip && - python3 -m pip install --upgrade pip && - python3 -m pip install ptvsd && - python3 -m pip install --cache-dir=.pip -r requirements.txt && - python3 manage.py migrate --noinput && - ./load_fixtures.sh all && - python3 manage.py createinitialrevisions && - python3 manage.py collectstatic --noinput && - python3 manage.py export --cleanup=1 --upload=1 && - python3 manage.py runserver 0.0.0.0:8000" + EMAIL_NOTIFICATION_RECIPIENT: sustainment.team@gov.bc.ca + GEOCODER_ADDRESS_API_BASE: https://geocoder.api.gov.bc.ca/addresses.json? + LOCAL: True + command: ./scripts/backend-command-script.sh volumes: - type: bind source: ./app/backend target: /app/backend consistency: cached + - type: bind + source: ./app/scripts/backend-command-script.sh + target: /app/scripts/backend-command-script.sh + consistency: cached ports: - "8000:8000" - "3000:3000" depends_on: - - db + db: + condition: service_healthy + networks: + - gwells-network + +############################################################################################# +### Volumes ### +############################################################################################# + pgadmin: + container_name: gwells-pgadmin + image: dpage/pgadmin4 + ports: + - 5050:80 + environment: + PGADMIN_DEFAULT_PASSWORD: admin + PGADMIN_DEFAULT_EMAIL: admin@gwells.com + networks: + - gwells-network + + +############################################################################################# +### Volumes ### +############################################################################################# volumes: pgdata-volume: + +############################################################################################# +### Network ### +############################################################################################# +networks: + gwells-network: + driver: "bridge" diff --git a/gwells/.env b/gwells/.env deleted file mode 100644 index f2349f539..000000000 --- a/gwells/.env +++ /dev/null @@ -1 +0,0 @@ -API_TARGET=http://backend:8000/ diff --git a/gwells/.github/ISSUE_TEMPLATE/bug.md b/gwells/.github/ISSUE_TEMPLATE/bug.md new file mode 100644 index 000000000..8f53470ab --- /dev/null +++ b/gwells/.github/ISSUE_TEMPLATE/bug.md @@ -0,0 +1,24 @@ +--- +name: Bug +about: An undesirable behaviour that needs correction +title: '' +labels: '' +assignees: '' + +--- + +**Describe the Bug** +A clear and concise description of what the bug is. + +**Expected Behaviour** +A clear and concise description of what you expected to happen. + +**Actual Behaviour** +A clear and concise description of what actually happens. + +** Steps To Reproduce** +Steps to reproduce the behaviour: +1. Go to '...' +2. Click on '....' +3. Scroll down to '....' +4. See error diff --git a/gwells/.github/ISSUE_TEMPLATE/spike.md b/gwells/.github/ISSUE_TEMPLATE/spike.md new file mode 100644 index 000000000..05e435a84 --- /dev/null +++ b/gwells/.github/ISSUE_TEMPLATE/spike.md @@ -0,0 +1,26 @@ +--- +name: Spike +about: Research options prior to development work +title: '' +labels: Spike +assignees: '' + +--- + +**Problem Description** +**In order to** (achieve some goal), (a system or persona) **needs to** (some action). + +**Solution Needs** +- Enter the non-negotiables of the solution (what are the needs vs. what are the wants) + +**Timebox** +- How much effort are we committing to this research? + +**Outcome** +Details describing the outcome of the research +- Was it successful? What direction should the work go? +- Was it unsuccessful? Discuss next steps with team + +**Additional Context** +- enter text here +- enter text here diff --git a/gwells/.github/ISSUE_TEMPLATE/task.md b/gwells/.github/ISSUE_TEMPLATE/task.md new file mode 100644 index 000000000..526d46624 --- /dev/null +++ b/gwells/.github/ISSUE_TEMPLATE/task.md @@ -0,0 +1,23 @@ +--- +name: Task +about: Any work that does not directly impact the user +title: '' +labels: Task +assignees: '' + +--- + +**Describe the task** +A clear and concise description of what the task is. + +**Purpose** +The reason why this task is needed and/or what value it adds. + +**Acceptance Criteria** +- [ ] first +- [ ] second +- [ ] third + +**Additional context** +- Add any other context about the task here. +- Or here diff --git a/gwells/.github/ISSUE_TEMPLATE/user-story.md b/gwells/.github/ISSUE_TEMPLATE/user-story.md new file mode 100644 index 000000000..a5b06661d --- /dev/null +++ b/gwells/.github/ISSUE_TEMPLATE/user-story.md @@ -0,0 +1,18 @@ +--- +name: User Story +about: This template is to be used when describing a feature from the user's perspective +title: '' +labels: User Story +assignees: '' + +--- + +**As a** *(User Type/Persona)* **I want** *(Feature/enhancement)* **So That** *(Value, why is this wanted, what is the user trying to accomplish)* + +**Additional Context** +- enter text here +- enter text here + +**Acceptance Criteria** +- [ ] Given (Context), When (action carried out), Then (expected outcome) +- [ ] Given (Context), When (action carried out), Then (expected outcome) diff --git a/gwells/.github/PULL_REQUEST_TEMPLATE.md b/gwells/.github/PULL_REQUEST_TEMPLATE.md new file mode 100644 index 000000000..55122144a --- /dev/null +++ b/gwells/.github/PULL_REQUEST_TEMPLATE.md @@ -0,0 +1,13 @@ +## Pull Request Standards + +- [ ] The title of the PR is accurate +- [ ] The title includes the type of change [`HOTFIX`, `FEATURE`, `etc`] +- [ ] The PR title includes the ticket number in format of `[GWELLS-###]` +- [ ] Documentation is updated to reflect change [`README`, `functions`, `team documents`] + +# Description + +This PR includes the following proposed change(s): + +- { List all the changes made } +- { Include any screenshots necessary } diff --git a/gwells/.github/codeowners b/gwells/.github/codeowners new file mode 100644 index 000000000..7a92af588 --- /dev/null +++ b/gwells/.github/codeowners @@ -0,0 +1,7 @@ +# Matched against repo root (asterisk) +* @bcgov/sustainment-team @DerekRoberts + +# Matched against directories +# /.github/workflows/ @mishraomp @DerekRoberts + +# See https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners diff --git a/gwells/.github/labeller.yaml b/gwells/.github/labeller.yaml new file mode 100644 index 000000000..f75dc4e6c --- /dev/null +++ b/gwells/.github/labeller.yaml @@ -0,0 +1,40 @@ +# Auto Label Git Action Config +# 'label_name' +# - path_of_diff/where/code_lives/to_base_label_upon + +# Any change to any file in .github/workflows +'GitHub Actions': + - '.github/workflows/*' + +# Any change to the docker-compose file or any dockerfile in the repo +'Docker': + - '**/Dockerfile' + - docker-compose.yml + +# Any changes to file or subfolders in /backend +'Backend': + - 'app/backend/**/*' + +# Any changes to file or subfolders in /frontend +'Frontend': + - 'app/frontend/**/*' + +# Any changes to file or subfolders in /database +'Database': + - 'app/database/**/*' + +# Any changes to file or subfolders in /scripts +'Scripts': + - 'app/scripts/**/*' + +# Any changes to file or subfolders in /openshift +'OpenShift': + - 'openshift/**/*' + +# Any changes to file of subfolders in /tests +'Testing': + - 'tests/**/*' + +# Any change to any file in any directory with a .env in name +'Environment Variables': + - '**/*.env*' diff --git a/gwells/.github/workflows/pr-labeller.yaml b/gwells/.github/workflows/pr-labeller.yaml new file mode 100644 index 000000000..d98ef3830 --- /dev/null +++ b/gwells/.github/workflows/pr-labeller.yaml @@ -0,0 +1,15 @@ +name: "Pull Request Labeler" +on: +- pull_request_target + +jobs: + triage: + permissions: + contents: read + pull-requests: write + runs-on: ubuntu-latest + steps: + - uses: actions/labeler@v4 + with: + repo-token: "${{ secrets.GITHUB_TOKEN }}" + configuration-path: .github/labeller.yaml diff --git a/gwells/.gitignore b/gwells/.gitignore index 51c997fd2..c6c9facc6 100644 --- a/gwells/.gitignore +++ b/gwells/.gitignore @@ -25,6 +25,8 @@ *.rar *.tar *.zip +!regional_areas.zip +!qaqc_well_data.zip # Logs and databases # ###################### @@ -41,7 +43,7 @@ app/backend/aquifers/fixtures/tmp/* ehthumbs.db Thumbs.db *.md5 - +.env* ################## # This repo only # @@ -91,11 +93,13 @@ app/backend/bulk *.spec pip-log.txt pip-delete-this-directory.txt +app/backend/get-pip.py # Unit test / coverage reports htmlcov/ .tox/ .coverage +**/coverage .coverage.* .cache *,cover diff --git a/gwells/Jenkinsfile b/gwells/Jenkinsfile index 1d4468fe8..6142b053b 100644 --- a/gwells/Jenkinsfile +++ b/gwells/Jenkinsfile @@ -267,8 +267,24 @@ def apiTest (String stageName, String stageUrl, String envSuffix) { --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./aquifers_v2_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./cities_api_tests.json \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./configuration_api_tests.json \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./utilities_api_tests.json \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ @@ -279,8 +295,23 @@ def apiTest (String stageName, String stageUrl, String envSuffix) { if ("dev".equalsIgnoreCase("${envSuffix}")) { sh """ newman run ./wells_search_api_tests.json \ - --global-var base_url=\$BASE_URL \ - -r cli,junit,html + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./wells_search_v2_api_tests.json \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./exports_api_tests.json \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html """ } diff --git a/gwells/Jenkinsfile.ocp4 b/gwells/Jenkinsfile.ocp4 index a43998839..8c5914e6e 100644 --- a/gwells/Jenkinsfile.ocp4 +++ b/gwells/Jenkinsfile.ocp4 @@ -126,6 +126,7 @@ def unitTestDjango (String stageName, String envProject, String envSuffix) { } } } + echo "Running Django unit tests" def ocoutput = openshift.exec( @@ -174,16 +175,6 @@ def apiTest (String stageName, String stageUrl, String envSuffix) { key:'BASE_URL', value: "https://${stageUrl}/gwells" ), - secretEnvVar( - key: 'GWELLS_API_TEST_USER', - secretName: 'apitest-secrets', - secretKey: 'username' - ), - secretEnvVar( - key: 'GWELLS_API_TEST_PASSWORD', - secretName: 'apitest-secrets', - secretKey: 'password' - ), secretEnvVar( key: 'GWELLS_API_TEST_AUTH_SERVER', secretName: 'apitest-secrets', @@ -212,64 +203,86 @@ def apiTest (String stageName, String stageUrl, String envSuffix) { newman run ./registries_api_tests.json \ --color on \ --disable-unicode \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./registries_v2_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./wells_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./wells_v2_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./submissions_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./submissions_v2_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./aquifers_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ -r cli,junit,html newman run ./aquifers_v2_api_tests.json \ - --global-var test_user=\$GWELLS_API_TEST_USER \ - --global-var test_password=\$GWELLS_API_TEST_PASSWORD \ + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./cities_api_tests.json \ + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./configuration_api_tests.json \ + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./utilities_api_tests.json \ + --color on \ + --disable-unicode \ --global-var base_url=\$BASE_URL \ --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ @@ -280,8 +293,29 @@ def apiTest (String stageName, String stageUrl, String envSuffix) { if ("dev".equalsIgnoreCase("${envSuffix}")) { sh """ newman run ./wells_search_api_tests.json \ - --global-var base_url=\$BASE_URL \ - -r cli,junit,html + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./wells_search_v2_api_tests.json \ + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html + newman run ./exports_api_tests.json \ + --color on \ + --disable-unicode \ + --global-var base_url=\$BASE_URL \ + --global-var auth_server=\$GWELLS_API_TEST_AUTH_SERVER \ + --global-var client_id=\$GWELLS_API_TEST_CLIENT_ID \ + --global-var client_secret=\$GWELLS_API_TEST_CLIENT_SECRET \ + -r cli,junit,html """ } @@ -355,9 +389,8 @@ def deployToDev() { List newObjectCopies = [] for (o in (deployTemplate + deployDBTemplate)) { - // only perform this operation on objects with 'as-copy-of' - def sourceName = o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of'] + def sourceName = (o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of']) ? o.metadata.annotations['as-copy-of'] : false if (sourceName && sourceName.length() > 0) { def selector = openshift.selector("${o.kind}/${sourceName}") if (selector.count() == 1) { @@ -514,19 +547,19 @@ def dbBackup (String envProject, String envSuffix) { def dumpTemp = "/tmp/unverified.dump" int maxBackups = 10 - // Dump to temporary file + //Dump to temporary file sh "oc rsh -n ${envProject} dc/${dcName} bash -c ' \ pg_dump -U \${PG_USER} -d \${PG_DATABASE} -Fc -f ${dumpTemp} ${dumpOpts} \ '" // Verify dump size is at least 1M - int sizeAtLeast1M = sh ( + String sizeAtLeast1M = sh ( script: "oc rsh -n ${envProject} dc/${dcName} bash -c ' \ du --threshold=1M ${dumpTemp} | wc -l \ '", returnStdout: true ) - assert sizeAtLeast1M == 1 + assert sizeAtLeast1M.toInteger() == 1 // Store verified dump sh "oc rsh -n ${envProject} dc/${dcName} bash -c ' \ @@ -544,6 +577,9 @@ def dbBackup (String envProject, String envSuffix) { } pipeline { + triggers { + cron(env.BRANCH_NAME == 'PR-1800' ? '0 7 * * 1-5' : '') + } options { timestamps() ansiColor('xterm') @@ -653,6 +689,16 @@ pipeline { echo "Build Started: ${newBuildSelector.names()}" newBuildSelector.logs("-f") echo "Build Ended: ${newBuildSelector.names()}" + + def buildStatus = "" + timeout(1) { + waitUntil { + buildStatus = newBuildSelector.object().status.phase + echo "Build Status: ${buildStatus}" + return buildStatus != "Running" + } + } + if (newBuildSelector.object().status.phase != "Complete") { error("Build ${newBuildSelector.names()} has failed!") } @@ -812,7 +858,7 @@ pipeline { for (o in (deployTemplate + deployDBTemplate)) { // only perform this operation on objects with 'as-copy-of' - def sourceName = o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of'] + def sourceName = (o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of']) ? o.metadata.annotations['as-copy-of'] : false if (sourceName && sourceName.length() > 0) { def selector = openshift.selector("${o.kind}/${sourceName}") @@ -1103,7 +1149,13 @@ pipeline { agent none when { beforeInput true - expression { env.CHANGE_TARGET == 'master' } + expression { + def buildCause = currentBuild.rawBuild.getCauses().collect { + it.getClass().getName().tokenize('.').last() + } + echo "Build Cause: ${buildCause}" + env.CHANGE_TARGET == 'master' && buildCause.toString() != '[TimerTrigger$TimerTriggerCause]' + } } input { message "Deploy to production?" @@ -1119,7 +1171,13 @@ pipeline { agent { label 'deploy' } when { beforeAgent true - expression { env.CHANGE_TARGET == 'master' } + expression { + def buildCause = currentBuild.rawBuild.getCauses().collect { + it.getClass().getName().tokenize('.').last() + } + echo "Build Cause: ${buildCause}" + env.CHANGE_TARGET == 'master' && buildCause.toString() != '[TimerTrigger$TimerTriggerCause]' + } } steps { script { @@ -1187,7 +1245,7 @@ pipeline { for (o in (deployTemplate + deployDBTemplate)) { // only perform this operation on objects with 'as-copy-of' - def sourceName = o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of'] + def sourceName = (o.metadata && o.metadata.annotations && o.metadata.annotations['as-copy-of']) ? o.metadata.annotations['as-copy-of'] : false if (sourceName && sourceName.length() > 0) { def selector = openshift.selector("${o.kind}/${sourceName}") if (selector.count() == 1) { @@ -1406,4 +1464,14 @@ pipeline { } } } + post { + always { + node('build') { + step([$class: 'Mailer', + notifyEveryUnstableBuild: true, + recipients: "Sustainment.Team@gov.bc.ca", + sendToIndividuals: true]) + } + } + } } diff --git a/gwells/Makefile b/gwells/Makefile index c332ce310..cdc580829 100644 --- a/gwells/Makefile +++ b/gwells/Makefile @@ -18,20 +18,40 @@ prep: docker-compose pull docker-compose build +docker: + docker-compose up -d + +docker-staging: + docker-compose --env-file ./.env.test up + down: docker-compose down --volumes vue: prep docker-compose up -test-node: - docker exec -ti gwells_frontend_1 /bin/bash -c "cd /app/frontend/; npm run test:unit -- --runInBand" +test-vue: + docker exec -ti gwells-frontend-1 /bin/bash -c "cd /app/frontend/; npm run test:unit -- --runInBand" + +test-vue-update: + docker exec -ti gwells-frontend-1 /bin/bash -c "cd /app/frontend/; npm run test:unit:update" + +vue-coverage: + docker exec -ti gwells-frontend-1 /bin/bash -c "cd /app/frontend/; npm run coverage:test" + +TEST_PATH ?= "." test-django: - docker exec -ti gwells_backend_1 /bin/bash -c "cd /app/backend/; python manage.py test --noinput" + docker exec -ti gwells-backend-1 /bin/bash -c "cd /app/backend/; python -m coverage run manage.py test ${TEST_PATH} --noinput" + +django-coverage: + docker exec -ti gwells-backend-1 /bin/bash -c "cd /app/backend/; coverage report" + +django-coverage-html: + docker exec -ti gwells-backend-1 /bin/bash -c "cd /app/backend/; coverage html" admin-django: - docker exec -ti gwells_backend_1 /bin/bash -c "cd /app/backend; python manage.py createsuperuser" + docker exec -ti gwells-backend-1 /bin/bash -c "cd /app/backend; python manage.py createsuperuser" backend: docker-compose pull backend @@ -40,3 +60,9 @@ backend: psql: docker-compose exec db /bin/bash -c "psql -U gwells -d gwells" + +DEFAULT_API_TEST := 'local_run_all.sh' +TEST_FILE?="$(DEFAULT_API_TEST)" + +api-tests-local: + cd tests/api-tests && "./$(TEST_FILE)" diff --git a/gwells/app/.s2i/bin/assemble b/gwells/app/.s2i/bin/assemble old mode 100644 new mode 100755 index d3b05a514..d3ce82f07 --- a/gwells/app/.s2i/bin/assemble +++ b/gwells/app/.s2i/bin/assemble @@ -30,7 +30,9 @@ mv /tmp/src/* ./ if [[ ! -z "$UPGRADE_PIP_TO_LATEST" || ! -z "$ENABLE_PIPENV" ]]; then echo "---> Upgrading pip to latest version ..." - pip install -U pip setuptools wheel + curl -s -o get-pip.py https://bootstrap.pypa.io/pip/3.6/get-pip.py && python3 get-pip.py + python3 -m pip install -U setuptools==57.4.0 wheel + rm get-pip.py fi cd backend diff --git a/gwells/app/backend/.envrc b/gwells/app/backend/.envrc index e7c989da9..7a44329b1 100644 --- a/gwells/app/backend/.envrc +++ b/gwells/app/backend/.envrc @@ -1,5 +1,5 @@ # -# Licensed under the Apache License, Version 2.0 (the "License"); +# 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 # @@ -47,7 +47,7 @@ export S3_REGISTRANT_BUCKET=gwells-registries export S3_PRIVATE_REGISTRANT_BUCKET=gwells-private-registries export S3_ROOT_BUCKET=gwells-docs export S3_USE_SECURE=1 -export SSO_IDP_HINT=idir +export SSO_IDP_HINT=undefined export ENABLE_AQUIFERS_SEARCH=True export CUSTOM_GDAL_GEOS=False diff --git a/gwells/app/backend/aquifers/change_history.py b/gwells/app/backend/aquifers/change_history.py index 89f5f26e1..82d15b616 100644 --- a/gwells/app/backend/aquifers/change_history.py +++ b/gwells/app/backend/aquifers/change_history.py @@ -136,7 +136,7 @@ def get_aquifer_reversion_history(aquifer): def get_vertical_aquifer_extents_history(aquifer): """ - Returns a list of this aquifer's vertical extent history changes + Returns a list of this aquifer's vertical extent history changes. returns a list: [{ diff --git a/gwells/app/backend/aquifers/fixtures/aquifers.json b/gwells/app/backend/aquifers/fixtures/aquifers.json index 517a9d4eb..ec8128340 100644 --- a/gwells/app/backend/aquifers/fixtures/aquifers.json +++ b/gwells/app/backend/aquifers/fixtures/aquifers.json @@ -870,6 +870,21 @@ "effective_date": "2019-11-04T19:40:43.379Z" } }, + { + "model": "aquifers.waterrightslicence", + "pk": 8, + "fields": { + "create_user": "", + "create_date": "2019-11-04T19:40:43.379Z", + "update_user": "", + "update_date": "2019-11-04T19:47:48.075Z", + "purpose": "03A", + "licence_number": 501528, + "quantity_flag": "T", + "quantity": "100000.000", + "effective_date": "2019-11-04T19:40:43.379Z" + } + }, { "model": "wells.well", "pk": 100123, @@ -984,7 +999,20 @@ "hydro_fracturing_yield_increase": null, "decommission_sealant_material": "CONCRETE", "decommission_backfill_material": "test", - "geom": "POINT(-125.376319 52.528545)" + "geom": "POINT(-125.376319 52.528545)", + "distance_to_pid": "123.45", + "geocode_distance": "543.21", + "score_address": "78.90", + "score_city": "56.78", + "cross_referenced": false, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 100123, + "fields": { + "well_tag_number": 100123 } }, { @@ -1102,7 +1130,20 @@ "hydro_fracturing_yield_increase": null, "decommission_sealant_material": "CONCRETE", "decommission_backfill_material": "test", - "geom": "POINT(-125.351850 52.461419)" + "geom": "POINT(-125.351850 52.461419)", + "distance_to_pid": "234.56", + "geocode_distance": "654.32", + "score_address": "89.01", + "score_city": "67.89", + "cross_referenced": true, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 100124, + "fields": { + "well_tag_number": 100124 } }, { @@ -1220,7 +1261,20 @@ "hydro_fracturing_yield_increase": null, "decommission_sealant_material": "CONCRETE", "decommission_backfill_material": "test", - "geom": "POINT(-125.361842 52.476454)" + "geom": "POINT(-125.361842 52.476454)", + "distance_to_pid": "345.67", + "geocode_distance": "765.43", + "score_address": "90.12", + "score_city": "78.90", + "cross_referenced": false, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 100125, + "fields": { + "well_tag_number": 100125 } }, { @@ -1242,7 +1296,7 @@ "well_subclass": "ce97445a-664e-44f1-a096-95c97ffd084e", "intended_water_use": "DWS", "well_status": "NEW", - "licences": [4, 5, 6, 7], + "licences": [4, 5, 6, 7, 8], "street_address": "6647 CHRISTENSEN ROAD", "city": "ANAHIM LAKE", "legal_lot": "A", @@ -1337,7 +1391,20 @@ "hydro_fracturing_yield_increase": null, "decommission_sealant_material": "CONCRETE", "decommission_backfill_material": "test", - "geom": "POINT(-125.381245 52.466459)" + "geom": "POINT(-125.381245 52.466459)", + "distance_to_pid": "456.78", + "geocode_distance": "876.54", + "score_address": "12.34", + "score_city": "89.01", + "cross_referenced": true, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 117042, + "fields": { + "well_tag_number": 117042 } }, { diff --git a/gwells/app/backend/aquifers/management/commands/update_aquifer_resource_section_code.py b/gwells/app/backend/aquifers/management/commands/update_aquifer_resource_section_code.py new file mode 100644 index 000000000..d059dafd4 --- /dev/null +++ b/gwells/app/backend/aquifers/management/commands/update_aquifer_resource_section_code.py @@ -0,0 +1,16 @@ +from django.core.management.base import BaseCommand +from aquifers.models import AquiferResourceSection +from collections import defaultdict +import json + +class Command(BaseCommand): + help = "Update values in the aquifer_resource_section_code table" + def update_analysis_method_codes(self): + codes_file = open("aquifers/migrations/aquifer_resource_sections.json") + aquifer_resource_sections_codes = json.load(codes_file) + for entry in aquifer_resource_sections_codes: + AquiferResourceSection.objects.update_or_create(pk=entry["pk"], defaults=entry["fields"]) + + def handle(self, *args, **options): + self.update_analysis_method_codes() + print("update_aquifer_resource_section_code.py completed successfully") diff --git a/gwells/app/backend/aquifers/migrations/0038_aquifer_resource_section_update.py b/gwells/app/backend/aquifers/migrations/0038_aquifer_resource_section_update.py new file mode 100644 index 000000000..b20b2f2f1 --- /dev/null +++ b/gwells/app/backend/aquifers/migrations/0038_aquifer_resource_section_update.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.28 on 2022-11-29 02:22 + +from django.db import migrations + +UPDATE_AQUIFER_RESOURCE_SECTION = """ + UPDATE aquifer_resource_section_code + SET name = 'Drilling and operation advisory' + WHERE name = 'Artesian advisory'; +""" + +REVERSE_UPDATE_AQUIFER_RESOURCE_SECTION = """ + UPDATE aquifer_resource_section_code + SET name = 'Artesian advisory' + WHERE name = 'Drilling and operation advisory'; +""" + +class Migration(migrations.Migration): + + dependencies = [ + ('aquifers', '0037_auto_20210224_2343'), + ] + + operations = [ + migrations.RunSQL( + UPDATE_AQUIFER_RESOURCE_SECTION, + REVERSE_UPDATE_AQUIFER_RESOURCE_SECTION + ) + ] diff --git a/gwells/app/backend/aquifers/migrations/0039_add_material_subtype_to_aquifer_view.py b/gwells/app/backend/aquifers/migrations/0039_add_material_subtype_to_aquifer_view.py new file mode 100644 index 000000000..2e1206516 --- /dev/null +++ b/gwells/app/backend/aquifers/migrations/0039_add_material_subtype_to_aquifer_view.py @@ -0,0 +1,50 @@ +# Generated by Django 2.2.28 on 2023-02-24 22:17 + +from django.db import migrations + +UPDATE_GWELLS_AQUIFER_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_aquifer_view; + CREATE VIEW postgis_ftw.gwells_aquifer_view AS + SELECT + aquifer_id, + aquifer_name, + area, + retire_date <= NOW() AS is_retired, + aquifer.effective_date <= NOW() AND aquifer.expiry_date >= NOW() AS is_published, + geom, + aquifer_material_code.description as material_type, + aquifer_subtype_code as subtype + FROM aquifer + JOIN aquifer_material_code + ON aquifer_material_code.aquifer_material_code = aquifer.aquifer_material_code + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_aquifer_view TO ftw_reader; +""" + +REVERSE_UPDATE_GWELLS_AQUIFER_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_aquifer_view; + CREATE VIEW postgis_ftw.gwells_aquifer_view AS + SELECT + aquifer_id, + aquifer_name, + area, + retire_date <= NOW() AS is_retired, + effective_date <= NOW() AND expiry_date >= NOW() AS is_published, + geom + FROM aquifer + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_aquifer_view TO ftw_reader; +""" + +class Migration(migrations.Migration): + + dependencies = [ + ('aquifers', '0038_aquifer_resource_section_update'), + ] + + operations = [ + migrations.RunSQL( + UPDATE_GWELLS_AQUIFER_VIEW_SQL, + REVERSE_UPDATE_GWELLS_AQUIFER_VIEW_SQL + ) + ] diff --git a/gwells/app/backend/aquifers/migrations/aquifer_resource_sections.json b/gwells/app/backend/aquifers/migrations/aquifer_resource_sections.json index 13b491674..d9425184d 100644 --- a/gwells/app/backend/aquifers/migrations/aquifer_resource_sections.json +++ b/gwells/app/backend/aquifers/migrations/aquifer_resource_sections.json @@ -7,7 +7,7 @@ "create_date": "2018-01-01T08:00:00Z", "update_user": "DATALOAD_USER", "update_date": "2018-01-01T08:00:00Z", - "name": "Artesian advisory" + "name": "Drilling and operation advisory" } }, { @@ -64,5 +64,16 @@ "update_date": "2018-01-01T08:00:00Z", "name": "Other information" } + }, + { + "model": "aquifers.AquiferResourceSection", + "pk": "Q", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-12-19T08:00:00Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-12-19T08:00:00Z", + "name": "Aquifer parameters" + } } ] diff --git a/gwells/app/backend/aquifers/views.py b/gwells/app/backend/aquifers/views.py index ce5d5e9ce..08c84df77 100644 --- a/gwells/app/backend/aquifers/views.py +++ b/gwells/app/backend/aquifers/views.py @@ -15,6 +15,7 @@ import csv import openpyxl from openpyxl.writer.excel import save_virtual_workbook +import requests from django_filters import rest_framework as djfilters from django.http import Http404, HttpResponse, JsonResponse, HttpResponseRedirect, StreamingHttpResponse @@ -75,10 +76,11 @@ class AquiferEditDetailsAPIViewV1(RetrieveAPIView): """List aquifers - get: return details of aquifers + get: + Returns details of an Aquifer matching aquifer_id after update. """ permission_classes = (HasAquiferEditRole,) - swagger_schema = None + lookup_field = 'aquifer_id' serializer_class = serializers.AquiferEditDetailSerializerV1 @@ -93,8 +95,14 @@ def get_queryset(self): class AquiferRetrieveUpdateAPIView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateAPIView): """List aquifers - get: return details of aquifers - patch: update aquifer + get: + Returns full set of details about an aquifer matching the provided aquifer_id. + + patch: + Updates an Aquifer. + + put: + Updates an Aquifer. """ permission_classes = (HasAquiferEditRoleOrReadOnly,) queryset = Aquifer.objects.all() @@ -126,6 +134,7 @@ def _aquifer_qs(request): qs = Aquifer.objects.all() resources__section__code = query.get("resources__section__code") hydraulic = query.get('hydraulically_connected') + notations = query.get('aquifer_notations') search = query.get('search') match_any = True @@ -136,6 +145,21 @@ def _aquifer_qs(request): if hydraulic: filters.append(Q(subtype__code__in=serializers.HYDRAULIC_SUBTYPES)) + if notations: + # Get list of aquifers from DataBC that have notations + url = "https://openmaps.gov.bc.ca/geo/pub/wfs?SERVICE=WFS&VERSION=2.0.0" + \ + "&REQUEST=GetFeature&outputFormat=json&srsName=epsg:4326" + \ + "&typeNames=WHSE_WATER_MANAGEMENT.WLS_WATER_NOTATION_AQUIFERS_SP" + \ + "&propertyName=AQUIFER_ID" + try: + resp = requests.get(url) + data = resp.json() + properties = [feature["properties"] for feature in data["features"]] + aquifer_ids = [prop["AQUIFER_ID"] for prop in properties] + filters.append(Q(aquifer_id__in=aquifer_ids)) + except Exception as e: + print("Cannot get aquifer notations, call to DataBC failed: " + e) + # ignore missing and empty string for resources__section__code qs param if resources__section__code: for code in resources__section__code.split(','): @@ -185,8 +209,11 @@ class LargeResultsSetPagination(PageNumberPagination): class AquiferListCreateAPIView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """List aquifers - get: return a list of aquifers - post: create an aquifer + get: + Returns a list of aquifers. + + post: + Create a new aquifer. """ pagination_class = LargeResultsSetPagination permission_classes = (HasAquiferEditRoleOrReadOnly,) @@ -220,80 +247,73 @@ def get_queryset(self): class AquiferResourceSectionListAPIView(ListAPIView): - """List aquifer materials codes - get: return a list of aquifer material codes + """List aquifer section codes. + get: + Returns a list of aquifer section codes. """ - - swagger_schema = None queryset = AquiferResourceSection.objects.all() serializer_class = serializers.AquiferResourceSectionSerializer class AquiferMaterialListAPIView(ListAPIView): - """List aquifer materials codes - get: return a list of aquifer material codes + """List aquifer materials codes. + get: + Returns a list of aquifer material codes. """ - swagger_schema = None queryset = AquiferMaterial.objects.all() serializer_class = serializers.AquiferMaterialSerializer class QualityConcernListAPIView(ListAPIView): - """List aquifer materials codes - get: return a list of quality concern codes + """List aquifer quality concern codes. + get: + Returns a list of quality concern codes. """ - - swagger_schema = None queryset = models.QualityConcern.objects.all() serializer_class = serializers.QualityConcernSerializer class AquiferVulnerabilityListAPIView(ListAPIView): - """List aquifer vulnerability codes - get: return a list of aquifer vulnerability codes + """List aquifer vulnerability codes. + get: + Returns a list of aquifer vulnerability codes. """ - - swagger_schema = None queryset = AquiferVulnerabilityCode.objects.all() serializer_class = serializers.AquiferVulnerabilitySerializer class AquiferSubtypeListAPIView(ListAPIView): - """List aquifer subtypes codes - get: return a list of aquifer subtype codes + """List aquifer subtypes codes. + get: + Returns a list of aquifer subtype codes. """ - - swagger_schema = None queryset = AquiferSubtype.objects.all() serializer_class = serializers.AquiferSubtypeSerializer class AquiferProductivityListAPIView(ListAPIView): - """List aquifer productivity codes - get: return a list of aquifer productivity codes + """Returns a list of aquifer productivity codes. + get: + Returns a list of aquifer productivity codes. """ - - swagger_schema = None queryset = AquiferProductivity.objects.all() serializer_class = serializers.AquiferProductivitySerializer class AquiferDemandListAPIView(ListAPIView): - """List aquifer demand codes - get: return a list of aquifer demand codes + """List aquifer demand codes. + get: + Returns a list of aquifer demand codes. """ - - swagger_schema = None queryset = AquiferDemand.objects.all() serializer_class = serializers.AquiferDemandSerializer class WaterUseListAPIView(ListAPIView): """List Water Use Codes - get: return a list of water use codes + get: + Returns a list of water use codes. """ - - swagger_schema = None queryset = models.WaterUse.objects.all() serializer_class = serializers.WaterUseSerializer @@ -302,7 +322,8 @@ class ListFiles(APIView): """ List documents associated with an aquifer - get: list files found for the aquifer identified in the uri + get: + List files found for the aquifer identified in the URI. """ @swagger_auto_schema(responses={200: openapi.Response( @@ -338,12 +359,12 @@ def get(self, request, aquifer_id, **kwargs): class AquiferNameList(ListAPIView): - """ List all aquifers in a simplified format """ + """ List all aquifers in a simplified format. """ serializer_class = serializers.AquiferSerializerBasic model = Aquifer pagination_class = None - + filter_backends = (filters.SearchFilter,) ordering = ('aquifer_id',) search_fields = ( @@ -371,16 +392,17 @@ def get(self, request, **kwargs): class AquiferHistory(APIView): """ - get: returns a history of changes to a Aquifer model record + get: + returns a history of changes to a Aquifer model record """ permission_classes = (HasAquiferEditRole,) queryset = Aquifer.objects.all() - swagger_schema = None + def get(self, request, aquifer_id, **kwargs): """ - Retrieves version history for the specified Aquifer record and creates a list of diffs - for each revision. + get: + Retrieves version history for the specified Aquifer record and creates a list of diffs for each revision. """ try: @@ -397,7 +419,8 @@ class PreSignedDocumentKey(APIView): """ Get a pre-signed document key to upload into an S3 compatible document store - post: obtain a URL that is pre-signed to allow client-side uploads + post: + Obtain a URL that is pre-signed to allow client-side uploads. """ permission_classes = (HasAquiferEditRole,) @@ -425,9 +448,10 @@ def get(self, request, aquifer_id, **kwargs): class DeleteAquiferDocument(APIView): """ - Delete a document from a S3 compatible store + Delete a document from a S3 compatible store. - delete: remove the specified object from the S3 store + delete: + Remove the specified object from the S3 store. """ permission_classes = (HasAquiferEditRole,) @@ -513,16 +537,9 @@ def delete(self, request, aquifer_id, **kwargs): @swagger_auto_schema( - operation_description=( - 'Get GeoJSON (see https://tools.ietf.org/html/rfc7946) dump of aquifers.'), - method='get', - manual_parameters=GEO_JSON_PARAMS, - responses={ - 302: openapi.Response(GEO_JSON_302_MESSAGE), - 200: openapi.Response( - 'GeoJSON data for aquifers.', - get_geojson_schema(AQUIFER_PROPERTIES, 'Polygon')) - }) + method="GET", + auto_schema=None +) @api_view(['GET']) def aquifer_geojson_v1(request, **kwargs): realtime = request.GET.get('realtime') in ('True', 'true') @@ -557,7 +574,7 @@ def aquifer_geojson_v1(request, **kwargs): 'api/v1/gis/aquifers.json') return HttpResponseRedirect(url) - +@swagger_auto_schema(method='GET', auto_schema=None) @api_view(['GET']) @cache_page(60*15) def aquifer_geojson_simplified_v1(request, **kwargs): diff --git a/gwells/app/backend/aquifers/views_v2.py b/gwells/app/backend/aquifers/views_v2.py index 3a0047e8b..036edd997 100644 --- a/gwells/app/backend/aquifers/views_v2.py +++ b/gwells/app/backend/aquifers/views_v2.py @@ -15,7 +15,7 @@ import csv import openpyxl from openpyxl.writer.excel import save_virtual_workbook - +import requests from django_filters import rest_framework as djfilters from django.http import HttpResponse, HttpResponseRedirect, StreamingHttpResponse from django.db import connection @@ -24,42 +24,37 @@ from django.contrib.gis.db.models.functions import Transform from django.views.decorators.cache import cache_page from django.utils import timezone - from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi - from rest_framework import filters from rest_framework.decorators import api_view, schema from rest_framework.response import Response from rest_framework.filters import SearchFilter, OrderingFilter from rest_framework.generics import ListAPIView, ListCreateAPIView, RetrieveUpdateAPIView, RetrieveAPIView from rest_framework.pagination import PageNumberPagination - from reversion.views import RevisionMixin - from gwells.settings.base import get_env_variable from gwells.views import AuditCreateMixin, AuditUpdateMixin from gwells.management.commands.export_databc import ( AQUIFERS_SQL_V2, - GeoJSONIterator, AQUIFER_CHUNK_SIZE, + GeoJSONIterator ) from gwells.roles import AQUIFERS_EDIT_ROLE - from aquifers import serializers, serializers_v2 from aquifers.models import Aquifer +from wells.models import Well, AquiferParameters from aquifers.filters import BoundingBoxFilterBackend from aquifers.permissions import HasAquiferEditRole, HasAquiferEditRoleOrReadOnly logger = logging.getLogger(__name__) - class AquiferEditDetailsAPIViewV2(RetrieveAPIView): """Get aquifer - get: return details of aquifers + get: + Return details of aquifers """ permission_classes = (HasAquiferEditRole,) - swagger_schema = None lookup_field = 'aquifer_id' serializer_class = serializers_v2.AquiferEditDetailSerializerV2 @@ -74,10 +69,12 @@ def get_queryset(self): class AquiferRetrieveUpdateAPIViewV2(RevisionMixin, AuditUpdateMixin, RetrieveUpdateAPIView): """Get aquifer - get: return details of aquifers - patch: update aquifer + get: + Return details of aquifers. + + patch: + Update aquifer fields with new information. """ - swagger_schema = None permission_classes = (HasAquiferEditRoleOrReadOnly,) lookup_field = 'aquifer_id' @@ -107,7 +104,10 @@ def _aquifer_qs(request): qs = Aquifer.objects.all() resources__section__code = query.get("resources__section__code") hydraulic = query.get('hydraulically_connected') + notations = query.get('aquifer_notations') + unpublished = query.get('unpublished') search = query.get('search') + aquifer_parameters = False # V2 changes to `and`-ing the filters by default unless "match_any" is explicitly set to 'true' match_any = query.get('match_any') == 'true' @@ -118,10 +118,33 @@ def _aquifer_qs(request): if hydraulic: filters.append(Q(subtype__code__in=serializers.HYDRAULIC_SUBTYPES)) + if unpublished: + now = timezone.now() + filters.append(Q(expiry_date__lt=now)) + + if notations: + # Get list of aquifers from DataBC that have notations + url = "https://openmaps.gov.bc.ca/geo/pub/wfs?SERVICE=WFS&VERSION=2.0.0" + \ + "&REQUEST=GetFeature&outputFormat=json&srsName=epsg:4326" + \ + "&typeNames=WHSE_WATER_MANAGEMENT.WLS_WATER_NOTATION_AQUIFERS_SP" + \ + "&propertyName=AQUIFER_ID" + try: + resp = requests.get(url) + data = resp.json() + properties = [feature["properties"] for feature in data["features"]] + aquifer_ids = [prop["AQUIFER_ID"] for prop in properties] + filters.append(Q(aquifer_id__in=aquifer_ids)) + except Exception as e: + print("Cannot get aquifer notations, call to DataBC failed: " + e) + # ignore missing and empty string for resources__section__code qs param + # remove Aquifer parameters code from resource__section__code if present and set a flag if resources__section__code: for code in resources__section__code.split(','): - filters.append(Q(resources__section__code=code)) + if code != 'Q': + filters.append(Q(resources__section__code=code)) + else: + aquifer_parameters = True if match_any: if len(filters) > 0: @@ -156,6 +179,22 @@ def _aquifer_qs(request): qs = qs.distinct() + # if Aquifer parameters flag is set, obtain list of wells with aquifer parameters set and compare its aquifer id against the original query set + # remove aquifers that doesn't have a match from the original query set + if (aquifer_parameters): + # Get wells that are associated with an aquifer + well_qs = Well.objects.filter(aquifer_id__isnull=False) + # Get AquiferParameter records with a non null well_tag_number + aquifer_parameter_qs = AquiferParameters.objects.filter(Q(well__isnull=False)).values() + # Make an array with just well_tag_number and strip out everything else + aquiferparameter_well_tag_array = [aquiferparameter['well_id'] for aquiferparameter in aquifer_parameter_qs] + # Filter wells queryset to get only the wells with aquifer parameters + wells_with_ap_qs = well_qs.filter(well_tag_number__in = aquiferparameter_well_tag_array) + # Make an array with just aquifer_id and strip out everything else + well_aquifer_id_array = [well.aquifer_id for well in wells_with_ap_qs] + # Filter Aquifer queryset to get only aquifers that have a well with aquifer parameters + qs = qs.filter(aquifer_id__in = well_aquifer_id_array) + return qs @@ -167,10 +206,12 @@ class LargeResultsSetPagination(PageNumberPagination): class AquiferListCreateAPIViewV2(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """List aquifers - get: return a list of aquifers - post: create an aquifer + get: + Returns a list of aquifers. + + post: + Creates a new aquifer. """ - swagger_schema = None pagination_class = LargeResultsSetPagination permission_classes = (HasAquiferEditRoleOrReadOnly,) filter_backends = (djfilters.DjangoFilterBackend, @@ -209,9 +250,10 @@ def get_queryset(self): class AquiferNameListV2(ListAPIView): - """ List all aquifers in a simplified format """ - - swagger_schema = None + """ + post: + List all aquifers in a simplified format. + """ serializer_class = serializers.AquiferSerializerBasic model = Aquifer queryset = Aquifer.objects.all() @@ -276,7 +318,6 @@ def aquifer_geojson_v2(request, **kwargs): 'api/v1/gis/aquifers.json') return HttpResponseRedirect(url) - AQUIFER_EXPORT_FIELDS_V2 = [ 'aquifer_id', 'aquifer_name', @@ -291,7 +332,6 @@ def aquifer_geojson_v2(request, **kwargs): 'mapping_year' ] - def csv_export_v2(request, **kwargs): """ Export aquifers as CSV. This is done in a vanilla functional Django view instead of DRF, diff --git a/gwells/app/backend/gwells/authentication.py b/gwells/app/backend/gwells/authentication.py index 35484ea55..d09a9a7a3 100644 --- a/gwells/app/backend/gwells/authentication.py +++ b/gwells/app/backend/gwells/authentication.py @@ -11,31 +11,58 @@ See the License for the specific language governing permissions and limitations under the License. """ +import jwt + from datetime import datetime from django.contrib.auth import get_user_model from django.utils import timezone from rest_framework import exceptions -from rest_framework_jwt.authentication import JSONWebTokenAuthentication +from rest_framework.request import Request +from rest_framework_simplejwt.authentication import JWTTokenUserAuthentication from gwells.models import Profile from gwells.roles import roles_to_groups +from gwells.settings.base import get_env_variable +KEYCLOAK_GOLD_REALM_URL = 'loginproxy.gov.bc.ca/auth/realms/standard' -class JwtOidcAuthentication(JSONWebTokenAuthentication): +class JwtOidcAuthentication(JWTTokenUserAuthentication): """ Authenticate users who provide a JSON Web Token in the request headers (e.g. Authorization: JWT xxxxxxxxx) """ - def authenticate_credentials(self, payload): + def authenticate(self, request: Request): + User = get_user_model() - # Get keycloak ID from JWT token - username = payload.get('sub') - if username is None: + + header = self.get_header(request) + if header is None: + return None + + raw_token = self.get_raw_token(header) + if raw_token is None: + return None + + jwt_string = bytes.decode(raw_token) + payload = jwt.decode(jwt_string, + "-----BEGIN PUBLIC KEY-----\n" + + get_env_variable('SSO_PUBKEY') + + "\n-----END PUBLIC KEY-----", + algorithms=['RS256'], + audience=[get_env_variable('SSO_AUDIENCE'), get_env_variable('SSO_TEST_AUDIENCE')]) + + # Get keycloak ID (if Silver) or {guid}@{idp} (if Gold) from JWT token + realm_user_id = payload.get('sub') + if realm_user_id is None: raise exceptions.AuthenticationFailed( 'JWT did not contain a "sub" attribute') - # Make sure the preferred username contains either idir\ or bceid\ - # so we know that the user is coming from a known sso authority + # Make sure the user is coming from the same Keycloak Gold integration + if not self.is_valid_integration(payload): + raise exceptions.AuthenticationFailed( + 'OAuth2 audience is invalid. This can be caused by a mismatch in the SSO integration.') + + # Make sure the user is coming from a known sso authority if not self.known_sso_authority(payload): raise exceptions.AuthenticationFailed( 'Preferred username is invalid.') @@ -46,20 +73,46 @@ def authenticate_credentials(self, payload): 'email': 'email', 'family_name': 'last_name' } - payload_profile_mapping = { - 'preferred_username': 'username', - 'name': 'name' - } + + if self.is_gold_shared_realm(payload): + payload_profile_mapping = { + 'preferred_username': 'username', + 'name': 'name' + } + else: + payload_profile_mapping = { + 'sub': 'silver_keycloak_id', + 'preferred_username': 'username', + 'name': 'name' + } # We map auth_time to user.last_login ; this is true depending on your point of view. It's the # last time the user logged into sso, which may not co-incide with the last time the user # logged into gwells. - auth_time = payload.get('auth_time') - if auth_time: - auth_time = datetime.fromtimestamp(auth_time, tz=timezone.utc) - - # Get or create a user with the keycloak ID. + if self.is_test_integration(payload): + auth_time = None + else: + auth_time = payload.get('auth_time') + if auth_time: + auth_time = datetime.fromtimestamp(auth_time, tz=timezone.utc) + + # Get or create a user with the keycloak ID (if Silver) or {guid}@{idp} (if Gold). try: - user, update = User.objects.get_or_create(username=username) + if self.is_gold_shared_realm(payload): + user, update = User.objects.get_or_create(username=realm_user_id) + else: + # During the Gold migration process, we'll be overwriting User.username with the GUID. + # Prior to this, it would otherwise store the Keycloak ID. + # But if we're still in Silver but already overwrote it, how can we retrieve users with only the KID? + # Solution: + # First grab the Profile using the KID, + # then use profile.user_id to retrieve the User (joining on Profile.user_id = User.id). + try: + profile = Profile.objects.get(silver_keycloak_id=realm_user_id) + user = User.objects.get(id=profile.user_id) + update = False + except Profile.DoesNotExist: + # Profile (and therefore User) doesn't exist, so go ahead and create a new user as usual + user, update = User.objects.get_or_create(username=realm_user_id) except: raise exceptions.AuthenticationFailed( 'Failed to retrieve or create user') @@ -94,6 +147,20 @@ def authenticate_credentials(self, payload): if source == 'preferred_username': value = value.upper() # Uppercase to match existing data setattr(profile, target, value) + # Manually combining IDP/username allows us to preserve the existing table structure meant for Silver + if self.is_gold_shared_realm(payload): + if self.is_test_integration(payload): + profile.username = 'testuser' + else: + identity_provider = payload.get('identity_provider') + if identity_provider == 'idir': + idp_username = payload.get('idir_username') + elif identity_provider == 'bceidboth': + idp_username = payload.get('bceid_username') + else: + # Fallback to {guid}@{idp} if it isn't IDIR or BCeID for some bizarre reason + profile.username = payload.get('preferred_username') + profile.username = f'{idp_username}@{identity_provider}'.upper() if not profile.name and profile.username: # When the name of the user isn't available, fallback to the username profile.name = profile.username @@ -103,17 +170,46 @@ def authenticate_credentials(self, payload): # Get the roles supplied by Keycloak for this user. try: - roles = payload.get('realm_access').get('roles') + if self.is_gold_shared_realm(payload): + roles = payload.get('client_roles') + else: + roles = payload.get('realm_access').get('roles') except: raise exceptions.AuthenticationFailed('Failed to retrieve roles') # Put user in groups based on role. roles_to_groups(user, roles) - return user + return user, jwt_string + + @staticmethod + def is_gold_shared_realm(payload): + return payload.get('iss').endswith(KEYCLOAK_GOLD_REALM_URL) + + @staticmethod + def is_valid_integration(payload): + return payload.get('aud') == get_env_variable('SSO_AUDIENCE') or \ + payload.get('aud') == get_env_variable('SSO_TEST_AUDIENCE') + + @staticmethod + def is_test_integration(payload): + return payload.get('aud') == get_env_variable('SSO_TEST_AUDIENCE') @staticmethod def known_sso_authority(payload): - preferred_username = payload.get('preferred_username') - return 'idir\\' in preferred_username or 'bceid\\' in preferred_username\ - or preferred_username == 'testuser' + + # Keycloak Gold has a dedicated IDP field that we can check... + if payload.get('iss').endswith(KEYCLOAK_GOLD_REALM_URL): + preferred_username = payload.get('preferred_username') + + if JwtOidcAuthentication.is_test_integration(payload): + return True + else: + identity_provider = payload.get('identity_provider').lower() + return identity_provider == 'idir' or identity_provider == 'bceidboth' + # ...but Silver doesn't, so have to instead look at the preferred username, + # which comes in the format "{idp}\{username}" + else: + preferred_username = payload.get('preferred_username') + return 'idir\\' in preferred_username or 'bceid\\' in preferred_username\ + or preferred_username == 'testuser' diff --git a/gwells/app/backend/gwells/documents.py b/gwells/app/backend/gwells/documents.py index d183a3489..7f5f90407 100644 --- a/gwells/app/backend/gwells/documents.py +++ b/gwells/app/backend/gwells/documents.py @@ -14,9 +14,10 @@ import sys import os import logging +import re from datetime import timedelta from django.urls import reverse -from urllib.parse import quote +from urllib.parse import quote, unquote_plus from minio import Minio from gwells.settings.base import get_env_variable @@ -92,7 +93,7 @@ def get_private_file(self, object_name: str, bucket_name): """ Generates a link to a private document with name "object_name" (name includes prefixes) """ return self.private_client.presigned_get_object( bucket_name, - object_name, + unquote_plus(object_name), expires=timedelta(minutes=12)) def create_url(self, obj, host, bucket_name, private=False): @@ -111,7 +112,7 @@ def create_url(self, obj, host, bucket_name, private=False): return 'https://{}/{}/{}'.format( host, quote(obj.bucket_name), - quote(obj.object_name) + quote(unquote_plus(obj.object_name)) ) def create_url_list(self, objects, host, bucket_name, private=False): @@ -122,11 +123,39 @@ def create_url_list(self, objects, host, bucket_name, private=False): 'url': self.create_url(document, host, bucket_name, private), # split on last occurrence of '/' and return last item (supports any or no prefixes) - 'name': document.object_name.rsplit('/', 1)[-1] + 'name': unquote_plus(document.object_name).rsplit('/', 1)[-1], + "well_number": self.extract_well_number(document.object_name), + "date_of_upload": self.extract_date_of_upload(document.object_name), + "document_type": self.extract_well_label(document.object_name), + "document_status": private }, objects) ) return urls + def extract_well_number(self, object_name): + try: + return re.findall(r'\d+', unquote_plus(object_name).rsplit('/', 1)[-1].split("_")[0])[0] + except Exception: + return "Unknown" + + def extract_date_of_upload(self, object_name): + try: + split_file_name = unquote_plus(object_name).rsplit('/', 1)[-1].split("_") + split_val = 2 if len(split_file_name) == 3 else 3 + return int(split_file_name[split_val].split(".")[0].strip()) + except Exception: + return -1 + + def extract_well_label(self, object_name): + try: + split_file_name = unquote_plus(object_name).rsplit('/', 1)[-1].split("_") + if(len(split_file_name) == 3): + return split_file_name[1] + elif(len(split_file_name) == 4): + return split_file_name[1] + "_" + split_file_name[2] + except Exception: + return "" + def get_bucket_folder(self, document_id, resource='well'): """Helper function to determine the folder for a given resource""" if resource == 'well': @@ -161,7 +190,7 @@ def format_object_name(self, object_name: str, document_id: int, resource='well' def get_documents(self, document_id: int, resource='well', include_private=False): """Retrieves a list of available documents for a well or aquifer""" - + logger.info('Get Documents for: document_id:%s, resource: %s, include_private: %s ', document_id, resource, include_private) # prefix well tag numbers with a 6 digit "folder" id # e.g. WTA 23456 goes into prefix 020000/ prefix = self.get_prefix(document_id, resource) @@ -183,9 +212,9 @@ def get_documents(self, document_id: int, resource='well', include_private=False self.public_client.list_objects( public_bucket, prefix=prefix, recursive=True), self.public_host, public_bucket) - except: + except Exception as e: logger.error( - "Could not retrieve files from public file server") + "Could not retrieve files from public file server", exc_info=e) objects['public'] = pub_objects diff --git a/gwells/app/backend/gwells/fixtures/wellsearch-codetables.json b/gwells/app/backend/gwells/fixtures/wellsearch-codetables.json index 74103740b..7337dcf0d 100644 --- a/gwells/app/backend/gwells/fixtures/wellsearch-codetables.json +++ b/gwells/app/backend/gwells/fixtures/wellsearch-codetables.json @@ -1225,7 +1225,7 @@ "create_date": "2017-07-01T08:00:00Z", "update_user": "ETL_USER", "update_date": "2017-07-01T08:00:00Z", - "description": "Dugout", + "description": "Dug", "display_order": 50, "effective_date": "2018-05-25T07:00:00Z", "expiry_date": "9999-12-31T23:59:59Z" diff --git a/gwells/app/backend/gwells/fixtures/wellsearch.json b/gwells/app/backend/gwells/fixtures/wellsearch.json index 003e1884f..fca692d08 100644 --- a/gwells/app/backend/gwells/fixtures/wellsearch.json +++ b/gwells/app/backend/gwells/fixtures/wellsearch.json @@ -845,7 +845,22 @@ "decommission_method": null, "decommission_details": null, "water_quality_characteristics": [], - "geom": "POINT(-122.540000 49.260000)" + "geom": "POINT(-122.540000 49.260000)", + "distance_to_pid": "123.45", + "geocode_distance": "543.21", + "score_address": "78.90", + "score_city": "56.78", + "cross_referenced": false, + "cross_referenced_date": "2023-02-08T17:06:47.229Z", + "cross_referenced_by": "DATA_LOAD_USER", + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 123, + "fields": { + "well_tag_number": 123 } }, { @@ -959,7 +974,20 @@ "drawdown": "190.00", "hydro_fracturing_performed": false, "hydro_fracturing_yield_increase": null, - "geom": "POINT(-122.540000 49.200000)" + "geom": "POINT(-122.540000 49.200000)", + "distance_to_pid": "234.56", + "geocode_distance": "654.32", + "score_address": "89.01", + "score_city": "67.89", + "cross_referenced": true, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 112316, + "fields": { + "well_tag_number": 112316 } }, { @@ -1073,7 +1101,20 @@ "drawdown": null, "hydro_fracturing_performed": false, "hydro_fracturing_yield_increase": null, - "geom": "POINT(-122.580000 49.230000)" + "geom": "POINT(-122.580000 49.230000)", + "distance_to_pid": "345.67", + "geocode_distance": "765.43", + "score_address": "90.12", + "score_city": "78.90", + "cross_referenced": false, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 113169, + "fields": { + "well_tag_number": 113169 } }, { @@ -1187,7 +1228,20 @@ "drawdown": null, "hydro_fracturing_performed": false, "hydro_fracturing_yield_increase": null, - "geom": "POINT(-122.590000 49.250000)" + "geom": "POINT(-122.590000 49.250000)", + "distance_to_pid": "456.78", + "geocode_distance": "876.54", + "score_address": "12.34", + "score_city": "89.01", + "cross_referenced": true, + "natural_resource_region": "Northeast" + } + }, + { + "model": "wells.wellattachment", + "pk": 112286, + "fields": { + "well_tag_number": 112286 } }, { @@ -1304,7 +1358,20 @@ "hydro_fracturing_yield_increase": null, "decommission_sealant_material": "CONCRETE", "decommission_backfill_material": "test", - "geom": "POINT(-125.360830 52.456449)" + "geom": "POINT(-125.360830 52.456449)", + "distance_to_pid": "567.89", + "geocode_distance": "987.65", + "score_address": "23.45", + "score_city": "90.12", + "cross_referenced": false, + "natural_resource_region": "South Coast" + } + }, + { + "model": "wells.wellattachment", + "pk": 20143, + "fields": { + "well_tag_number": 20143 } }, { @@ -1444,7 +1511,20 @@ ], "decommission_backfill_material": null, "decommission_sealant_material": null, - "geom": null + "geom": null, + "distance_to_pid": "678.90", + "geocode_distance": "109.87", + "score_address": "34.56", + "score_city": "12.34", + "cross_referenced": true, + "natural_resource_region": "Kootenay" + } + }, + { + "model": "wells.wellattachment", + "pk": 216265, + "fields": { + "well_tag_number": 216265 } } ] diff --git a/gwells/app/backend/gwells/management/commands/export_databc.py b/gwells/app/backend/gwells/management/commands/export_databc.py index e3685ba62..c3a8f2ed8 100644 --- a/gwells/app/backend/gwells/management/commands/export_databc.py +++ b/gwells/app/backend/gwells/management/commands/export_databc.py @@ -47,7 +47,7 @@ # contain the added data WELLS_SQL_V1 = (""" select - ST_AsGeoJSON(ST_Transform(geom, 4326)) :: json as "geometry", + ST_AsGeoJSON(ST_Transform(well.geom, 4326)) :: json as "geometry", well.well_tag_number as well_tag_number, well.identification_plate_number as identification_plate_number, SUBSTRING(well_status_code.description for 255) as well_status, @@ -208,7 +208,7 @@ WELLS_SQL_V2 = (""" select - ST_AsGeoJSON(ST_Transform(geom, 4326)) :: json as "geometry", + ST_AsGeoJSON(ST_Transform(well.geom, 4326)) :: json as "geometry", well.well_tag_number as well_tag_number, well.identification_plate_number as identification_plate_number, SUBSTRING(well_status_code.description for 255) as well_status, @@ -372,7 +372,7 @@ # stable! LITHOLOGY_SQL = (""" select - ST_AsGeoJSON(ST_Transform(geom, 4326)) :: json as "geometry", + ST_AsGeoJSON(ST_Transform(well.geom, 4326)) :: json as "geometry", well.well_tag_number, identification_plate_number, SUBSTRING(well_status_code.description for 255) as well_status, @@ -435,6 +435,61 @@ """) LITHOLOGY_CHUNK_SIZE = 10000 +PUMPING_TEST_AQUIFER_PARAMETER_SQL = (""" +SELECT + ST_AsGeoJSON(ST_Transform(well.geom, 4326))::json AS "geometry", + well.well_tag_number AS well_tag_number, + well.identification_plate_number AS identification_plate_number, + SUBSTRING(well_status_code.description FROM 1 FOR 255) AS well_status, + CASE WHEN licence_q.cur_licences > 0 + THEN 'Licensed' + ELSE 'Unlicensed' + END AS licence_status, + CONCAT('https://apps.nrs.gov.bc.ca/gwells/well/', well.well_tag_number) AS detail, + well.finished_well_depth AS finished_well_depth, + well.bedrock_depth AS bedrock_depth, + ap.start_date_pumping_test AS start_date_pumping_test, + SUBSTRING(pumping_test_description_code.description FROM 1 FOR 100) AS pumping_test_description, + ap.test_duration AS test_duration, + SUBSTRING(boundary_effect_code.description FROM 1 FOR 100) AS boundary_effect, + SUBSTRING(analysis_method_code.description FROM 1 FOR 100) AS analysis_method, + ap.storativity AS storativity, + ap.transmissivity AS transmissivity, + ap.hydraulic_conductivity AS hydraulic_conductivity, + ap.specific_yield AS specific_yield, + ap.specific_capacity AS specific_capacity, + ap.comments AS comments, + aq.aquifer_id AS aquifer_id, + SUBSTRING(aquifer_subtype_code.description FROM 1 FOR 100) AS aquifer_subtype, + CASE WHEN aquifer_material_code.aquifer_material_code IN ('G', 'S', 'GS') + THEN 'Sand and Gravel' + ELSE aquifer_material_code.description + END AS material +FROM + well +LEFT JOIN aquifer_parameters ap ON well.well_tag_number = ap.well_tag_number +LEFT JOIN aquifer aq ON well.aquifer_id = aq.aquifer_id +LEFT JOIN aquifer_material_code ON aquifer_material_code.aquifer_material_code = aq.aquifer_material_code +LEFT JOIN pumping_test_description_code ON pumping_test_description_code.pumping_test_description_code = ap.pumping_test_description_code +LEFT JOIN analysis_method_code ON analysis_method_code.analysis_method_code = ap.analysis_method_code +LEFT JOIN well_status_code ON well_status_code.well_status_code = well.well_status_code +LEFT JOIN boundary_effect_code ON boundary_effect_code.boundary_effect_code = ap.boundary_effect_code +LEFT JOIN ( + SELECT well_tag_number, COUNT(*) AS cur_licences + FROM well + JOIN well_licences ON well.well_tag_number = well_licences.well_id + GROUP BY well_tag_number +) AS licence_q ON well.well_tag_number = licence_q.well_tag_number +LEFT JOIN aquifer_subtype_code ON + aquifer_subtype_code.aquifer_subtype_code = aq.aquifer_subtype_code +WHERE + (well.well_publication_status_code = 'Published' or well.well_publication_status_code = null) AND + ap.well_tag_number is not null AND + well.geom is not null +ORDER BY well.well_tag_number; +""") + +PUMPING_TEST_AQUIFER_PARAMETER_CHUNK_SIZE = 10000 # IMPORTANT: If the underlying data structure changes (e.g. column name changes etc.), the # property names have to stay the same! This endpoint is consumed by DataBC and must remain # stable! diff --git a/gwells/app/backend/gwells/middleware.py b/gwells/app/backend/gwells/middleware.py index e8b28090f..2512bb2a1 100644 --- a/gwells/app/backend/gwells/middleware.py +++ b/gwells/app/backend/gwells/middleware.py @@ -6,6 +6,7 @@ from django.http import HttpResponseBadRequest from django.utils.deprecation import MiddlewareMixin from django.http import HttpResponse +from markupsafe import Markup from gwells.settings.base import get_env_variable @@ -40,5 +41,6 @@ def process_request(self, request, **kwargs): elif _method.upper() == 'DELETE': self.delete(request) else: + _method = Markup.escape(_method) message = 'Unsupported _method: ' + _method return HttpResponse(message, status=500) diff --git a/gwells/app/backend/gwells/migrations/0008_profile_silver_keycloak_id.py b/gwells/app/backend/gwells/migrations/0008_profile_silver_keycloak_id.py new file mode 100644 index 000000000..5b98925ce --- /dev/null +++ b/gwells/app/backend/gwells/migrations/0008_profile_silver_keycloak_id.py @@ -0,0 +1,28 @@ +# Generated by Django 2.2.28 on 2022-11-08 01:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('gwells', '0007_create_postgis_ftw_schema_20200501_2146'), + ] + + operations = [ + migrations.AddField( + model_name='profile', + name='silver_keycloak_id', + field=models.CharField(blank=True, max_length=150, null=True, unique=True), + ), + migrations.RunSQL( + ''' + UPDATE profile + SET silver_keycloak_id = auth_user.username + FROM auth_user + WHERE auth_user.id = profile.user_id; + ''', + # Column is dropped on reversal anyway, so no need to do anything + reverse_sql='' + ), + ] diff --git a/gwells/app/backend/gwells/models/__init__.py b/gwells/app/backend/gwells/models/__init__.py index 2eb5583fb..6f7fc12b9 100644 --- a/gwells/app/backend/gwells/models/__init__.py +++ b/gwells/app/backend/gwells/models/__init__.py @@ -44,6 +44,7 @@ class Profile(models.Model, DBComments): primary_key=True, default=uuid.uuid4, editable=False) username = models.CharField(max_length=100, blank=True, null=True) name = models.CharField(max_length=100, blank=True, null=True) + silver_keycloak_id = models.CharField(max_length=150, unique=True, blank=True, null=True) db_table_comment = ('Additional user information that cannot be stored on the django auth_user table.') diff --git a/gwells/app/backend/gwells/settings/__init__.py b/gwells/app/backend/gwells/settings/__init__.py index d14161f38..acacda7cd 100644 --- a/gwells/app/backend/gwells/settings/__init__.py +++ b/gwells/app/backend/gwells/settings/__init__.py @@ -12,6 +12,7 @@ # Build paths inside the project like this: os.path.join(BASE_DIR, ...) import os +import sys import datetime import logging.config from pathlib import Path @@ -23,6 +24,7 @@ BASE_DIR = str(Path(__file__).parents[2]) +TESTING = len(sys.argv) > 1 and sys.argv[1] == 'test' # Quick-start development settings - unsuitable for production # See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ @@ -47,10 +49,6 @@ # SECURITY WARNING: don't run with debug turned on in production! DEBUG = get_env_variable('DJANGO_DEBUG', 'False') == 'True' -# Controls availability of Google Analytics -ENABLE_GOOGLE_ANALYTICS = get_env_variable( - 'ENABLE_GOOGLE_ANALYTICS', 'False', strict=True) == 'True' - # Additional Documents Feature Flag ENABLE_ADDITIONAL_DOCUMENTS = get_env_variable( 'ENABLE_ADDITIONAL_DOCUMENTS', 'False', strict=True) == 'True' @@ -75,7 +73,6 @@ # django-settings-export lets us make these variables available in the templates. # This eleminate the need for setting the context for each and every view. SETTINGS_EXPORT = [ - 'ENABLE_GOOGLE_ANALYTICS', # This is only enabled for production # To temporarily disable additional documents feature 'ENABLE_ADDITIONAL_DOCUMENTS', # This allows for moving the app around without code changes @@ -265,12 +262,15 @@ public_key = get_env_variable('SSO_PUBKEY', "") -JWT_AUTH = { - 'JWT_PUBLIC_KEY': ("-----BEGIN PUBLIC KEY-----\n" + - public_key + - "\n-----END PUBLIC KEY-----"), - 'JWT_ALGORITHM': 'RS256', - 'JWT_AUDIENCE': get_env_variable('SSO_AUDIENCE') +SIMPLE_JWT = { + 'ALGORITHM': 'RS256', + 'VERIFYING_KEY': ("-----BEGIN PUBLIC KEY-----\n" + + public_key + + "\n-----END PUBLIC KEY-----"), + 'AUDIENCE': None, + 'AUTH_HEADER_TYPES': ('JWT',), + 'USER_ID_FIELD': 'username', + 'USER_ID_CLAIM': 'preferred_username', } @@ -318,6 +318,15 @@ ADD_REVERSION_ADMIN = True +# Email settings +EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend' +EMAIL_HOST = 'apps.smtp.gov.bc.ca' +EMAIL_PORT = 25 +EMAIL_USE_TLS = True +EMAIL_HOST_USER = 'no-reply@gov.bc.ca' +EMAIL_HOST_PASSWORD = '' + + # It can be very useful to disable migrations when testing. This piece of code allows one to disable # migrations by specifying an environemnt variable DISABLE_MIGRATIONS. Used in conjunction with # --keepdb, a developer can run mosts unit tests, and run them fast. diff --git a/gwells/app/backend/gwells/templates/gwells/base_spa.html b/gwells/app/backend/gwells/templates/gwells/base_spa.html index 6a2567b07..656cbb434 100644 --- a/gwells/app/backend/gwells/templates/gwells/base_spa.html +++ b/gwells/app/backend/gwells/templates/gwells/base_spa.html @@ -49,26 +49,6 @@ - - {% if settings.ENABLE_GOOGLE_ANALYTICS %} - - {% endif %} @@ -86,4 +66,4 @@ - \ No newline at end of file + diff --git a/gwells/app/backend/gwells/tests/test_documents.py b/gwells/app/backend/gwells/tests/test_documents.py new file mode 100644 index 000000000..38adb7910 --- /dev/null +++ b/gwells/app/backend/gwells/tests/test_documents.py @@ -0,0 +1,47 @@ +from django.test import TestCase +from urllib.parse import quote +from gwells.documents import MinioClient + + +class MockObject(): + def __init__(self, bucket_name, object_name): + self.bucket_name = bucket_name + self.object_name = object_name + +class DocumentsTestCase(TestCase): + + def test_document_url_with_space(self): + """ test creating a URL from an object with a space in the object key""" + minio_client = MinioClient(disable_private=True) + + test_document = MockObject("test_bucket", "test key") + test_url = minio_client.create_url(test_document, "example.com", test_document.bucket_name) + + self.assertEqual(test_url, "https://example.com/" + quote("test_bucket/test key")) + + def test_document_url_with_plus(self): + """ test creating a URL from an object key containing a plus sign """ + minio_client = MinioClient(disable_private=True) + + # use a key that contains a plus. + # if this was a real plus in the filename it should be %2B in the listing. + # spaces get encoded into + (so in this test case, this object_name originally had a space). + test_document = MockObject("test_bucket", "test+key") + + test_url = minio_client.create_url(test_document, "example.com", test_document.bucket_name) + + self.assertEqual(test_url, "https://example.com/" + quote("test_bucket/test key")) + + + def test_document_url_with_encoded_plus(self): + """ test creating a URL from and object key containing an encoded plus sign + e.g., the original filename contained a plus. + """ + minio_client = MinioClient(disable_private=True) + + # use a key that contains an encoded plus (e.g. ). + test_document = MockObject("test_bucket", "test%2Bkey") + + test_url = minio_client.create_url(test_document, "example.com", test_document.bucket_name) + + self.assertEqual(test_url, "https://example.com/" + quote("test_bucket/test+key")) diff --git a/gwells/app/backend/gwells/tests/test_utils.py b/gwells/app/backend/gwells/tests/test_utils.py new file mode 100644 index 000000000..d3046bd3c --- /dev/null +++ b/gwells/app/backend/gwells/tests/test_utils.py @@ -0,0 +1,106 @@ +""" + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +""" + +from unittest.mock import patch, Mock +from requests.exceptions import HTTPError + +from django.test import TestCase +from django.contrib.gis.geos import GEOSGeometry, Point + +from gwells.utils import geocode_bc_location + +class UtilsTestCase(TestCase): + + @patch('gwells.utils.requests.get') + def test_geocode_bc_location_success(self, mock_requests_get): + """ + Confirm that 'geocode_bc_location(...)' returns a geometry object + with valid latitude and longitude + """ + + # Mock a response from the BC Physical Address Geocoder API + # so this test does not need to rely on the availability of + # a remote API. + mock_lon = -122 + mock_lat = 49 + mock_geocode_api_response = { + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "crs": { + "type": "EPSG", + "properties": { + "code": 4326 + } + }, + "coordinates": [mock_lon, mock_lat] + } + } + ] + } + mock_requests_get.return_value = \ + Mock(status_code=200, json=lambda : mock_geocode_api_response) + + response = geocode_bc_location({"addressString": "101 main st.", "localityName": "vancouver"}) + + # Confirm that a mock API call was used instead of a real API call + mock_requests_get.assert_called_once() + + # Confirm that the 'geocode_bc_location(...)' function returned same the + # geographic coords that it received from a call to the + # BC Physical Address Geocoder API. The returned object should be an + # instance of django.contrib.gis.geos.Point. + self.assertTrue(response, Point) + self.assertEqual(response.coords[0], mock_lon) + self.assertEqual(response.coords[1], mock_lat) + + + @patch('gwells.utils.requests.get') + def test_geocode_bc_location_api_unavailable(self, mock_requests_get): + """ + Confirm that 'geocode_bc_location(...)' raises an HTTPError when + the underlying BC Physical Address Geocoder API returns an HTTP + error code + """ + mock_requests_get.side_effect = HTTPError(Mock(status=500), 'not found') + + with self.assertRaises(HTTPError): + geocode_bc_location({"addressString": "101 main st.", "localityName": "vancouver"}) + + # Confirm that a mock API call was used instead of a real API call + mock_requests_get.assert_called_once() + + @patch('gwells.utils.requests.get') + def test_geocode_bc_location_api_invalid_response(self, mock_requests_get): + """ + Confirm that 'geocode_bc_location(...)' raises an HTTPError if + the underlying BC Physical Address Geocoder API returns an HTTP + success message, but with invalid json in the body + """ + mock_geocode_api_response = "invalid json response" + mock_requests_get.return_value = \ + Mock(status_code=200, json=lambda : mock_geocode_api_response) + + with self.assertRaises(ValueError) as context_manager: + geocode_bc_location({"addressString": "101 main st.", "localityName": "vancouver"}) + + print(context_manager.exception) + + # Confirm that a mock API call was used instead of a real API call + mock_requests_get.assert_called_once() + + + \ No newline at end of file diff --git a/gwells/app/backend/gwells/urls.py b/gwells/app/backend/gwells/urls.py index 8362cc712..9f9833f69 100644 --- a/gwells/app/backend/gwells/urls.py +++ b/gwells/app/backend/gwells/urls.py @@ -84,8 +84,6 @@ def api_path_prefix(): api.KeycloakConfig.as_view(), name='keycloak'), url(r'^' + app_root_slash + api_path_prefix() + r'/config', api.GeneralConfig.as_view(), name='configuration'), - url(r'^' + app_root_slash + api_path_prefix() + r'/analytics', - api.AnalyticsConfig.as_view(), name='analytics'), url(r'^' + app_root_slash + api_path_prefix() + r'/gis/insidebc', api.InsideBC.as_view(), name='insidebc'), url(r'^' + app_root_slash + api_path_prefix() + r'/geocoding/v\d/.+\.places/(?P.+)\.json$', diff --git a/gwells/app/backend/gwells/utils.py b/gwells/app/backend/gwells/utils.py index 1080c61f6..8c882d8bb 100644 --- a/gwells/app/backend/gwells/utils.py +++ b/gwells/app/backend/gwells/utils.py @@ -1,6 +1,8 @@ from django.contrib.gis.geos import GEOSGeometry - from gwells.models import Border +import json +import requests +from requests.exceptions import HTTPError def isPointInsideBC(latitude, longitude): @@ -16,3 +18,50 @@ def isPointInsideBC(latitude, longitude): result = Border.objects.filter(geom__contains=pnt) return result.count() > 0 return False + + +def setup_parameters(options): + default_options = { + "provinceCode": "BC", + "outputSRS": 4326, + "maxResults": 1, + "minScore": 65 + } + return {**default_options, **options} + +def perform_api_request(url, params): + try: + resp = requests.get(url, params=params, timeout=10) + resp.raise_for_status() + return resp + except requests.HTTPError as e: + raise e + +def process_response(response): + try: + features = response.json().get('features') + if not features: + raise ValueError("Unable to geocode address") + return features[0] + except AttributeError: + raise ValueError("Unable to geocode address") + +def geocode_bc_location(options={}): + """ + Performs an HTTP request to the BC Physical Address Geocoder API, + returning a django.contrib.gis.geos.Point for the first result. Supports query + string parameters via the 'options' argument. Raises HTTPError for + communication issues and ValueError if no matching coordinate is found. + Example 'options': {"addressString": "101 main st.", "localityName": "Kelowna"}. + """ + params = setup_parameters(options) + url = "https://geocoder.api.gov.bc.ca/addresses.json" + response = perform_api_request(url, params) + first_feature = process_response(response) + + try: + point = GEOSGeometry(json.dumps(first_feature.get("geometry", {}))) + except TypeError: + raise ValueError("Unable to geocode address") + + return point \ No newline at end of file diff --git a/gwells/app/backend/gwells/views/__init__.py b/gwells/app/backend/gwells/views/__init__.py index 22f29c03e..812aa7dee 100644 --- a/gwells/app/backend/gwells/views/__init__.py +++ b/gwells/app/backend/gwells/views/__init__.py @@ -68,10 +68,10 @@ def health(request, **kwargs): class SurveyListCreateView(ListCreateAPIView): """ - get: returns a list of active surveys + get: + Returns a list of active surveys. """ - swagger_schema = None serializer_class = SurveySerializer queryset = Survey.objects.all() pagination_class = None @@ -87,8 +87,7 @@ def get_queryset(self): class SurveyUpdateDeleteView(RetrieveUpdateDestroyAPIView): - """ handles updating and deleting of surveys """ - swagger_schema = None + """ Handler for updating and deleting surveys. """ serializer_class = SurveySerializer queryset = Survey.objects.all() pagination_class = None diff --git a/gwells/app/backend/gwells/views/api.py b/gwells/app/backend/gwells/views/api.py index 31bd3e3e2..7e1796292 100644 --- a/gwells/app/backend/gwells/views/api.py +++ b/gwells/app/backend/gwells/views/api.py @@ -1,7 +1,8 @@ import requests import geojson from geojson import Feature, FeatureCollection, Point - +from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi from rest_framework.response import Response from rest_framework.views import APIView from django.http import JsonResponse, HttpResponse @@ -11,9 +12,7 @@ from gwells.utils import isPointInsideBC class KeycloakConfig(APIView): - """ serves keycloak config """ - - swagger_schema = None + """ Serves configuration object for Keycloak. """ def get(self, request, **kwargs): config = { @@ -29,9 +28,7 @@ def get(self, request, **kwargs): class GeneralConfig(APIView): - """ serves general configuration """ - - swagger_schema = None + """ Serves general configuration object. """ def get(self, request, **kwargs): config = { @@ -40,20 +37,24 @@ def get(self, request, **kwargs): } return Response(config) - -class AnalyticsConfig(APIView): - """ serves analytics config """ - - def get(self, request, **kwargs): - config = { - "enable_google_analytics": get_env_variable("ENABLE_GOOGLE_ANALYTICS") == "True" - } - return Response(config) - - class InsideBC(APIView): - """ Check if a given point is inside BC """ - + """ Check if a given Latitude/Longitude are inside BC """ + @swagger_auto_schema( + manual_parameters =[ + openapi.Parameter( + name='longitude', + in_=openapi.IN_QUERY, + type=openapi.TYPE_NUMBER, + description="Longitude Coordinate" + ), + openapi.Parameter( + name='latitude', + in_=openapi.IN_QUERY, + type=openapi.TYPE_NUMBER, + description="Latitude Coordinate" + ) + ] + ) def get(self, request, **kwargs): latitude = request.query_params.get('latitude') longitude = request.query_params.get('longitude') @@ -65,10 +66,12 @@ def get(self, request, **kwargs): class DataBCGeocoder(APIView): """ Looks up address using DataBC's geocoder """ - + swagger_schema = None + def get(self, request, **kwargs): query = kwargs['query'] + #default params params = { "addressString": query, "autoComplete": "true", @@ -76,6 +79,9 @@ def get(self, request, **kwargs): "brief": "true" } + #override default params with values from request + params.update(request.query_params.dict()) + search_url = "https://geocoder.api.gov.bc.ca/addresses.json" resp = requests.get(search_url, params=params) diff --git a/gwells/app/backend/gwells/views/bulk.py b/gwells/app/backend/gwells/views/bulk.py index 8ecedf773..57f1a65bf 100644 --- a/gwells/app/backend/gwells/views/bulk.py +++ b/gwells/app/backend/gwells/views/bulk.py @@ -22,10 +22,10 @@ from django.db import transaction from django.utils import timezone from django.contrib.gis.geos import Point - from aquifers.constants import AQUIFER_ID_FOR_UNCORRELATED_WELLS from aquifers.models import Aquifer, VerticalAquiferExtent, VerticalAquiferExtentsHistory -from wells.models import Well +from wells.models import Well, ActivitySubmission, FieldsProvided +from submissions.models import WellActivityCode from gwells.models.bulk import BulkWellAquiferCorrelationHistory from gwells.permissions import ( HasBulkWellAquiferCorrelationUploadRole, @@ -45,6 +45,7 @@ class BulkWellAquiferCorrelation(APIView): def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.change_log = [] + self.change_log_activity_submission = [] self.create_date = timezone.now() self.unknown_well_tag_numbers = set() self.unknown_aquifer_ids = set() @@ -96,27 +97,51 @@ def post(self, request, **kwargs): # If the correlation is changing — check if the well is inside the aquifer self.check_well_in_aquifer(well, aquifer) - if existing_aquifer_id == aquifer_id: # this well correlation is unchanged + #NOTE: This represents the intended behavior but it is temporarilly blocking a fix + # if existing_aquifer_id == aquifer_id: # this well correlation is unchanged + # change = { + # 'action': 'same' + # } + # else: + # if existing_aquifer_id is None: + # # No existing aquifer for this well? Must be a new correlation + # self.append_to_change_log(well_tag_number, aquifer_id, None) + # change = { + # 'action': 'new', + # 'aquiferId': aquifer_id + # } + # wells_to_update.append(well) + # self.append_to_change_log_activity_submission(well_tag_number, aquifer_id) + # elif existing_aquifer_id != aquifer_id: # existing ids don't match - must be a change + # self.append_to_change_log(well_tag_number, aquifer_id, existing_aquifer_id) + # change = { + # 'action': 'update', + # 'existingAquiferId': existing_aquifer_id, + # 'newAquiferId': aquifer_id + # } + # self.append_to_change_log_activity_submission(well_tag_number, aquifer_id) + # wells_to_update.append(well) + + #START: Temporary fix for aquifer reversion from bulk updates + if existing_aquifer_id is None: + # No existing aquifer for this well? Must be a new correlation + self.append_to_change_log(well_tag_number, aquifer_id, None) + change = { + 'action': 'new', + 'aquiferId': aquifer_id + } + wells_to_update.append(well) + self.append_to_change_log_activity_submission(well_tag_number, aquifer_id) + else: + self.append_to_change_log(well_tag_number, aquifer_id, existing_aquifer_id) change = { - 'action': 'same' + 'action': 'update', + 'existingAquiferId': existing_aquifer_id, + 'newAquiferId': aquifer_id } - else: - if existing_aquifer_id is None: - # No existing aquifer for this well? Must be a new correlation - self.append_to_change_log(well_tag_number, aquifer_id, None) - change = { - 'action': 'new', - 'aquiferId': aquifer_id - } - wells_to_update.append(well) - elif existing_aquifer_id != aquifer_id: # existing ids don't match - must be a change - self.append_to_change_log(well_tag_number, aquifer_id, existing_aquifer_id) - change = { - 'action': 'update', - 'existingAquiferId': existing_aquifer_id, - 'newAquiferId': aquifer_id - } - wells_to_update.append(well) + self.append_to_change_log_activity_submission(well_tag_number, aquifer_id) + wells_to_update.append(well) + #END: Temporary fix if change: changes[well_tag_number] = change @@ -217,6 +242,16 @@ def update_wells(self, wells): Well.objects.bulk_update(wells, ['aquifer']) # save the BulkWellAquiferCorrelation records BulkWellAquiferCorrelationHistory.objects.bulk_create(self.change_log) + # create a new row in activity submission table for each item in the array + for item in self.change_log_activity_submission: + activity_submission_object = ActivitySubmission.objects.create(create_user=item.create_user, + update_user=item.update_user, + create_date=item.create_date, + update_date=item.update_date, + well=item.well, + aquifer = item.aquifer, + well_activity_type=item.well_activity_type); + FieldsProvided.objects.create(activity_submission=activity_submission_object) def append_to_change_log(self, well_tag_number, to_aquifer_id, from_aquifer_id): bulk_history_item = BulkWellAquiferCorrelationHistory( @@ -227,7 +262,23 @@ def append_to_change_log(self, well_tag_number, to_aquifer_id, from_aquifer_id): create_date=self.create_date ) self.change_log.append(bulk_history_item) - + + # add activity submission objects to the array + def append_to_change_log_activity_submission(self, well_tag_number, to_aquifer_id): + well_instance = Well.objects.get(pk=well_tag_number) + aquifer_instance = Aquifer.objects.get(pk=to_aquifer_id) + well_activity_code_instance = WellActivityCode.objects.get(pk=WellActivityCode.types.staff_edit().code) + activity_submission_item = ActivitySubmission( + create_user=self.request.user.profile.username, + update_user=self.request.user.profile.username, + create_date=self.create_date, + update_date=self.create_date, + well=well_instance, + aquifer = aquifer_instance, + well_activity_type=well_activity_code_instance + ) + self.change_log_activity_submission.append(activity_submission_item) + class BulkVerticalAquiferExtents(APIView): """ diff --git a/gwells/app/backend/registries/data_migrations.py b/gwells/app/backend/registries/data_migrations.py index 19736bb1c..6fb5607a4 100644 --- a/gwells/app/backend/registries/data_migrations.py +++ b/gwells/app/backend/registries/data_migrations.py @@ -13,9 +13,10 @@ """ import os - +from django.utils import timezone from gwells.codes import CodeFixture - +from registries.models import Organization +from registries.serializers import OrganizationAdminSerializer def insert_remove_reasons(apps, schema_editor): data = { @@ -74,3 +75,30 @@ def load_subactivity_codes(apps, schema_editor): def unload_subactivity_codes(apps, schema_editor): return subactivity_codes().unload_fixture(apps, schema_editor) + +def populate_empty_geometries(apps, schema_editor): + """ + Populate the geom field for all Organizations that meet the following + criteria: + 1. 'geom' is currently null + 2. Either 'street_address' and 'city' are not null, or just 'city' is not null + 3. 'province_state' is BC + 4. The Organization's database record isn't expired + The 'geom' field is populated by executing a no-change update + on the organization serializer. This triggers the serializer to + attempt to populate the geometry by geocoding the street address + and/or city. + """ + orgs_to_update = \ + Organization.objects.filter( + geom__isnull=True, + city__isnull=False, + province_state__exact="BC", + expiry_date__gt=timezone.now() + ) + for org in orgs_to_update: + serializer = OrganizationAdminSerializer(org) + validated_data = { + "city": org.city #no change + } + serializer.update(org, validated_data) \ No newline at end of file diff --git a/gwells/app/backend/registries/fixtures/regional_areas.zip b/gwells/app/backend/registries/fixtures/regional_areas.zip new file mode 100644 index 000000000..60dcc9ca7 Binary files /dev/null and b/gwells/app/backend/registries/fixtures/regional_areas.zip differ diff --git a/gwells/app/backend/registries/fixtures/registries.json b/gwells/app/backend/registries/fixtures/registries.json index 729d4998c..34abb3936 100644 --- a/gwells/app/backend/registries/fixtures/registries.json +++ b/gwells/app/backend/registries/fixtures/registries.json @@ -8,10 +8,11 @@ "update_user": "", "update_date": "2018-10-12T18:23:11.226Z", "name": "Three Pump Company", - "street_address": "333 Pump Ave", + "street_address": "453 W 12th Ave", "city": "Vancouver", "province_state": "BC", "postal_code": "B3B3B3", + "geom": "POINT(-123.1139388 49.261317)", "main_tel": "(333) 654-0987", "fax_tel": "(333) 654-0987", "website_url": "https://www.google.ca/", @@ -28,10 +29,11 @@ "update_user": "bddfirst bddlast", "update_date": "2018-10-12T18:26:01.969Z", "name": "One DrillPump Company", - "street_address": "111 DrillPump Rd", + "street_address": "877 Goldstream Ave", "city": "Langford", "province_state": "BC", "postal_code": "C1C1C1", + "geom": "POINT(-123.504632 48.4495587)", "main_tel": "(111) 098-1234", "fax_tel": "(111) 098-1234", "website_url": "https://www.google.ca/", @@ -48,10 +50,11 @@ "update_user": "bddfirst bddlast", "update_date": "2018-10-12T18:20:35.936Z", "name": "One Drill Company", - "street_address": "111 Drill Street", + "street_address": "1 Centennial Square", "city": "Victoria", "province_state": "BC", "postal_code": "A1A 1A1", + "geom": "POINT(-123.3657434 48.4287096)", "main_tel": "(111) 456-7890", "fax_tel": "(111) 456-7890", "website_url": "https://www.google.ca/", @@ -68,10 +71,11 @@ "update_user": "", "update_date": "2018-10-12T18:20:54.873Z", "name": "Three Drill Company", - "street_address": "333 Drill Street", + "street_address": "720 Douglas St", "city": "Victoria", "province_state": "BC", "postal_code": "A3A3A3", + "geom": "POINT(-123.3674375 48.4215461)", "main_tel": "(333) 456-7890", "fax_tel": "(333) 456-7890", "website_url": "https://www.google.ca/", @@ -108,10 +112,11 @@ "update_user": "", "update_date": "2018-10-12T18:26:40.295Z", "name": "Three DrillPump Company", - "street_address": "333 DrillPump Rd", - "city": "Oakbay", + "street_address": "2167 Oak Bay Ave", + "city": "Oak Bay", "province_state": "BC", "postal_code": "C3C3C3", + "geom": "POINT(-123.3168644 48.4259489)", "main_tel": "(333) 098-1234", "fax_tel": "(333) 098-1234", "website_url": "https://www.google.ca/", @@ -128,10 +133,11 @@ "update_user": "", "update_date": "2018-10-12T18:21:50.849Z", "name": "One Pump Company", - "street_address": "111 Pump Ave", + "street_address": "455 Wallace St", "city": "Nanaimo", "province_state": "BC", "postal_code": "B1B1B1", + "geom": "POINT(-123.9379279 49.1641645)", "main_tel": "(111) 654-0987", "fax_tel": "(111) 654-0987", "website_url": "https://www.google.ca/", @@ -168,10 +174,11 @@ "update_user": "", "update_date": "2018-10-12T18:25:50.050Z", "name": "Two DrillPump Company", - "street_address": "222 DrillPump Rd", + "street_address": "20399 Douglas Cres", "city": "Langley", "province_state": "BC", "postal_code": "C2C2C2", + "geom": "POINT(-122.6575906 49.1042438)", "main_tel": "(222) 098-1234", "fax_tel": "(222) 098-1234", "website_url": "https://www.google.ca/", @@ -303,6 +310,24 @@ "effective_date": "2018-10-12T18:20:35.936Z", "expiry_date": "9999-12-31T23:59:59Z" } + }, { + "model": "registries.person", + "pk": "5a44af09-c36c-aad3-487b-55ffc643d323", + "fields": { + "create_user": "bddfirst bddlast", + "create_date": "2018-10-12T18:27:50.728Z", + "update_user": "", + "update_date": "2018-10-12T18:27:50.728Z", + "first_name": "Sally", + "surname": "Smith", + "well_driller_orcs_no": "123", + "pump_installer_orcs_no": "123", + "contact_tel": "(123) 452-1122", + "contact_cell": null, + "contact_email": "sallysmith@fakeeemail.com", + "effective_date": "2018-10-12T18:20:35.936Z", + "expiry_date": "9999-12-31T23:59:59Z" + } }, { "model": "registries.person", "pk": "8c3affb2-9619-421d-9656-c939e1b3d662", @@ -537,6 +562,19 @@ "registration_no": "" } }, { + "model": "registries.register", + "pk": "4e4c468f-3dd2-2b59-009d-d9f8a79f2412", + "fields": { + "create_user": "bddfirst bddlast", + "create_date": "2018-10-15T16:31:11.750Z", + "update_user": "", + "update_date": "2018-10-15T16:31:11.750Z", + "registries_activity": "DRILL", + "person": "5a44af09-c36c-aad3-487b-55ffc643d323", + "organization": "2b1a46a0-0c44-4ed4-9366-a458782629df", + "registration_no": "" + } + },{ "model": "registries.registriesapplication", "pk": "2eb96908-2ff0-478c-9aee-ed3eeaff52ed", "fields": { @@ -766,6 +804,29 @@ "removal_date": null, "removal_reason": null } + }, { + "model": "registries.registriesapplication", + "pk": "2242fe54-5f32-290f-c90c-33da1943ffd3", + "fields": { + "create_user": "bddfirst bddlast", + "create_date": "2018-10-15T16:31:11.752Z", + "update_user": "", + "update_date": "2018-10-15T16:31:11.752Z", + "registration": "4e4c468f-3dd2-2b59-009d-d9f8a79f2412", + "subactivity": "GEOTECH", + "file_no": null, + "proof_of_age": "BIRTH", + "registrar_notes": null, + "reason_denied": "", + "primary_certificate": "a4b2e41c-3796-4c4c-ae28-eb6ad30202d9", + "primary_certificate_no": "345324", + "current_status": "A", + "application_recieved_date": "2018-10-09", + "application_outcome_date": null, + "application_outcome_notification_date": null, + "removal_date": null, + "removal_reason": null + } }, { "model": "registries.registriesapplication", "pk": "c56c1c2e-df71-4549-bd17-87d9507f53e6", diff --git a/gwells/app/backend/registries/migrations/0006_organization_geom.py b/gwells/app/backend/registries/migrations/0006_organization_geom.py new file mode 100644 index 000000000..6976ae394 --- /dev/null +++ b/gwells/app/backend/registries/migrations/0006_organization_geom.py @@ -0,0 +1,23 @@ +# Generated by Django 2.2.28 on 2022-12-09 23:25 + +import django.contrib.gis.db.models.fields +from django.db import migrations +import registries.data_migrations + +class Migration(migrations.Migration): + + dependencies = [ + ('registries', '0005_auto_20200317_1805'), + ] + + operations = [ + migrations.AddField( + model_name='organization', + name='geom', + field=django.contrib.gis.db.models.fields.PointField(blank=True, null=True, srid=4326), + ), + migrations.RunPython( + code=registries.data_migrations.populate_empty_geometries, + reverse_code=lambda a,b: None #no action needed to reverse + ), + ] diff --git a/gwells/app/backend/registries/migrations/0007_regional_area.py b/gwells/app/backend/registries/migrations/0007_regional_area.py new file mode 100644 index 000000000..d2a33a1b9 --- /dev/null +++ b/gwells/app/backend/registries/migrations/0007_regional_area.py @@ -0,0 +1,83 @@ +# Generated by Django 2.2.28 on 2023-04-09 03:54 + +import django.contrib.gis.db.models.fields +from django.contrib.gis.geos import GEOSGeometry +from django.db import migrations, models +from registries.models import RegionalArea +import django.utils.timezone +import gwells.db_comments.model_mixins +import zipfile +import uuid +import json +import os + + +def import_regional_areas(apps, schema_editor): + # Extract the GeoJSON file from the ZIP archive + with zipfile.ZipFile(os.path.join(os.path.dirname(__file__), '../fixtures/regional_areas.zip'), 'r') as zip_file: + geojson_filename = zip_file.namelist()[0] # Assumes there is only one file in the archive + with zip_file.open(geojson_filename, 'r') as f: + geojson_data = json.load(f) + + for feature in geojson_data['features']: + name = feature['properties']['ADMIN_AREA_NAME'] + geom = GEOSGeometry(json.dumps(feature['geometry']), srid=4326) + RegionalArea.objects.create( + name=name, + geom=geom, + create_user='DATALOAD_USER', + update_user='DATALOAD_USER') + + +def reverse_import_regional_areas(apps, schema_editor): + RegionalArea.objects.all().delete() + + +CREATE_REGISTRIES_REGIONAL_AREAS_VIEW_SQL = """ + CREATE VIEW postgis_ftw.registries_regional_areas_view AS + SELECT + name, + geom, + regional_area_guid + FROM regional_area + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.registries_regional_areas_view TO ftw_reader; +""" + + +REVERSE_REGISTRIES_REGIONAL_AREAS_VIEW_SQL = """ + DROP VIEW IF EXISTS postgis_ftw.registries_regional_areas_view; +""" + + +class Migration(migrations.Migration): + + dependencies = [ + ('registries', '0006_organization_geom'), + ] + + operations = [ + migrations.CreateModel( + name='RegionalArea', + fields=[ + ('create_user', models.CharField(max_length=60)), + ('create_date', models.DateTimeField(default=django.utils.timezone.now)), + ('update_user', models.CharField(max_length=60)), + ('update_date', models.DateTimeField(default=django.utils.timezone.now)), + ('regional_area_guid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=True, serialize=False, verbose_name='Regional Area UUID')), + ('name', models.CharField(max_length=200)), + ('geom', django.contrib.gis.db.models.fields.PolygonField(srid=4326)), + ], + options={ + 'verbose_name_plural': 'Regional Areas', + 'db_table': 'regional_area', + 'ordering': ['name'], + }, + bases=(models.Model, gwells.db_comments.model_mixins.DBComments), + ), + migrations.RunPython(import_regional_areas, reverse_import_regional_areas), + migrations.RunSQL( + CREATE_REGISTRIES_REGIONAL_AREAS_VIEW_SQL, + REVERSE_REGISTRIES_REGIONAL_AREAS_VIEW_SQL + ) + ] diff --git a/gwells/app/backend/registries/migrations/0008_organization_regional_areas.py b/gwells/app/backend/registries/migrations/0008_organization_regional_areas.py new file mode 100644 index 000000000..7c89f081f --- /dev/null +++ b/gwells/app/backend/registries/migrations/0008_organization_regional_areas.py @@ -0,0 +1,134 @@ +# Generated by Django 2.2.28 on 2023-07-13 18:50 + +from django.db import migrations, models +import json +import requests +from django.contrib.gis.geos import GEOSGeometry +from requests.exceptions import HTTPError + +# This Django migration is aimed at populating 'geom' (geographic location) field +# for 'Organization' instances based on their street_address, city and state +# if not already populated. +# We also update the new field 'regional_areas' to associate each organization +# with regional areas that contain its location. +# We use the BC Physical Address Geocoder API to geolocate the organizations. + +def populate_regional_areas(apps, schema_editor): + Organization = apps.get_model('registries', 'Organization') + RegionalArea = apps.get_model('registries', 'RegionalArea') + + # We iterate over each Organization instance + for org in Organization.objects.all(): + + # If 'geom' field is None and we have sufficient data to attempt geocoding + if org.geom is None and org.street_address and org.city and org.province_state and \ + org.province_state.province_state_code == "BC": + + # Attempt to geocode using street_address + city + try: + point = geocode_bc_location({ + "addressString": org.street_address, + "localityName": org.city, + "localities": org.city + }) + except (HTTPError, ValueError): + # If above fails, attempt to geocode using city only + try: + point = geocode_bc_location({ + "localityName": org.city, + "localities": org.city, + "matchPrecision": "LOCALITY" + }) + except (HTTPError, ValueError): + # If both geocoding attempts fail, print an error and move on + point = None + print(f"Geolocation unsuccessful. Unable to determine coordinates for Organization: {org.name}.") + + # If geocoding was successful, update 'geom' field of the organization + if point: + print(f"Geolocation successful. Coordinates determined for Organization: {org.name}.") + org.geom = point + org.save() + + # After attempting to update 'geom', we iterate over each RegionalArea instance + for area in RegionalArea.objects.all(): + # Skip if either 'geom' field is None + if area.geom is None or org.geom is None: + continue + + # If the area contains the organization's location, associate the two + if area.geom.contains(org.geom): + org.regional_areas.add(area) + + +class Migration(migrations.Migration): + + dependencies = [ + ('registries', '0007_regional_area'), + ] + + operations = [ + migrations.AddField( + model_name='organization', + name='regional_areas', + field=models.ManyToManyField(blank=True, related_name='organizations', to='registries.RegionalArea'), + ), + migrations.RunPython(populate_regional_areas), + ] + +def geocode_bc_location(options={}): + """ + Makes an HTTP call to the BC Physical Address Geocoder API + (https://www2.gov.bc.ca/gov/content/data/geographic-data-services/location-services/geocoder) + using any options provided as query string parameters. (the 'options' + parameter supports any query string parameter supported by the "addresses.json" + endpoint. + If the address is successfully geocoded then this method returns a + django.contrib.gis.geos.Point object corresponding to the first result. + If a HTTP error occurs during + communication with the remote API then an HTTPError exception is + raised. If the API call succeeds but does not find a coordinate + matching the given address_string, then a ValueError is raised. + :param options: typical options are: + { + "addressString": "101 main st.", + "localityName": "Kelowna" + } + """ + default_options = { + "provinceCode": "BC", + "outputSRS": 4326, + "maxResults": 1, + "minScore": 65 + } + params = {} + params.update(default_options) + params.update(options) + + url = "https://geocoder.api.gov.bc.ca/addresses.json" + + try: + resp = requests.get(url, params=params, timeout=10) + resp.raise_for_status() + except HTTPError as e: + #caught and re-raised to be clear ane explicit which exceptions + #this method may cause + raise e + + features = [] + + try: + features = resp.json().get('features') + except AttributeError as e: + raise ValueError("Unable to geocode address") + + if not len(features): + raise ValueError("Unable to geocode address") + + first_feature = features[0] + try: + point = GEOSGeometry(json.dumps(first_feature.get("geometry", {}))) + except TypeError as e: + raise ValueError("Unable to geocode address") + + return point \ No newline at end of file diff --git a/gwells/app/backend/registries/models.py b/gwells/app/backend/registries/models.py index 55f99b5a5..862c75ab7 100644 --- a/gwells/app/backend/registries/models.py +++ b/gwells/app/backend/registries/models.py @@ -201,6 +201,15 @@ class Organization(AuditModel): blank=True, null=True, verbose_name="Email adddress", db_comment=('The email address for a company, this is different from the email for the individual ' 'who is a registered driller or pump installer.')) + geom = models.PointField( + blank=True, null=True, + srid=4326, + db_comment='Geo-referenced location of the address') + regional_areas = models.ManyToManyField( + 'RegionalArea', + related_name='organizations', + blank=True, + db_comment='The regional areas where the organization operates.') history = GenericRelation(Version) @@ -234,6 +243,21 @@ def mailing_address(self): ] return ", ".join([part for part in address if part]) + @property + def latitude(self): + if self.geom: + return self.geom.y + else: + return None + + @property + def longitude(self): + if self.geom: + return self.geom.x + else: + return None + + @reversion.register() class Person(AuditModel): person_guid = models.UUIDField( @@ -759,3 +783,34 @@ class Meta: def __str__(self): return '%s %s %s' % (self.subactivity, self.activity_code, self.well_class) + + +class RegionalArea(AuditModel): + regional_area_guid = models.UUIDField( + primary_key=True, + default=uuid.uuid4, + editable=False, + verbose_name="Regional Area UUID") + + name = models.CharField( + max_length=200, + null=False, + blank=False, + db_comment='Regional Area Administrative Name') + + geom = models.PolygonField( + srid=4326, + null=False, + blank=False, + db_comment='Regional Area polygon.' + ) + + class Meta: + db_table = 'regional_area' + ordering = ['name'] + verbose_name_plural = 'Regional Areas' + + db_table_comment = 'Regional Areas in BC used to locate drillers and pump installers.' + + def __str__(self): + return self.name diff --git a/gwells/app/backend/registries/serializers.py b/gwells/app/backend/registries/serializers.py index bf02bc206..0caa01943 100644 --- a/gwells/app/backend/registries/serializers.py +++ b/gwells/app/backend/registries/serializers.py @@ -15,7 +15,9 @@ from django.utils import timezone from django.db import transaction import logging +from requests.exceptions import HTTPError from rest_framework import serializers +from gwells.utils import geocode_bc_location from gwells.models import ProvinceStateCode from gwells.serializers import AuditModelSerializer, ProvinceStateCodeSerializer from registries.models import ( @@ -32,8 +34,8 @@ AccreditedCertificateCode, WellClassCode, PersonNote, - PersonNote, OrganizationNote, + RegionalArea ) logger = logging.getLogger(__name__) @@ -177,12 +179,75 @@ class Meta: 'display_status', 'current_status') +class OrganizationUpdateMixin(): + """ + A mixin class that adds a convenience function to populate the 'geom' + attribute from the 'street_address'. + """ -class OrganizationListSerializer(AuditModelSerializer): + def populate_geom_from_address(self, instance, validated_data): + """ + Geocodes the 'street_address' and/or 'city' to determine the + geographic coordinates. Injects these coordinates into the 'geom' property + of validated_data. + If both 'street_address' and 'city' are provided, geocodes both. If only 'city' + is provided (but not 'street_address') then geocodes only the city. + :param instance: An existing instance of Organization (optional. May be None.) + :param validated_data: The 'geom' property of this parameter is modified + """ + + street_address = validated_data.get("street_address") \ + if "street_address" in validated_data else \ + instance.street_address if instance else \ + None + city = validated_data.get("city") \ + if "city" in validated_data else \ + instance.city if instance else \ + None + prov_state = validated_data.get("province_state") \ + if "province_state" in validated_data else \ + instance.province_state if instance else \ + None + + point = None + + #try to geocode street_address + city + if street_address and city and prov_state and \ + prov_state.province_state_code == "BC": + try: + point = geocode_bc_location({ + "addressString": street_address, + "localityName": city, + "localities": city + }) + except (HTTPError, ValueError): + #silently ignore the failed geocode + pass + + #try to geocode the city only + if point == None and city and prov_state and \ + prov_state.province_state_code == "BC": + try: + point = geocode_bc_location({ + "localityName": city, + "localities": city, + "matchPrecision": "LOCALITY" + }) + except (HTTPError, ValueError): + #silently ignore the failed geocode + pass + + validated_data["geom"] = point + +class OrganizationListSerializer(AuditModelSerializer, OrganizationUpdateMixin): """ Serializes Organization model fields for "list" view. """ + def create(self, validated_data): + self.populate_geom_from_address(None, validated_data) + return super().create(validated_data) + class Meta: model = Organization fields = ( @@ -197,6 +262,9 @@ class Meta: 'fax_tel', 'email', 'website_url', + 'latitude', + 'longitude', + 'regional_areas' ) @@ -253,7 +321,6 @@ class OrganizationSerializer(AuditModelSerializer): """ Serializes Organization model fields (public fields list) """ - class Meta: model = Organization fields = ( @@ -268,10 +335,13 @@ class Meta: 'fax_tel', 'email', 'website_url', + 'latitude', + 'longitude', + 'regional_areas' ) -class OrganizationAdminSerializer(AuditModelSerializer): +class OrganizationAdminSerializer(AuditModelSerializer, OrganizationUpdateMixin): """ Serializes Organization model fields (admin fields list) """ @@ -300,9 +370,22 @@ class Meta: 'website_url', 'person_set', 'notes', - 'registrations_count' + 'registrations_count', + 'latitude', + 'longitude', + 'regional_areas' ) + def update(self, instance, validated_data): + #if the street_address, city or province have changed then also + #update the 'geom' + if (not instance.geom or\ + instance.street_address != validated_data.get("street_address")) or\ + (instance.city != validated_data.get("city")) or\ + (instance.province_state != validated_data.get("province_state")): + self.populate_geom_from_address(instance, validated_data) + return super().update(instance, validated_data) + def get_notes(self, obj): """ Get sorted notes @@ -738,3 +821,11 @@ class PersonNameSerializer(serializers.ModelSerializer): class Meta: model = Person fields = ('name', 'person_guid', 'registrations') + + +class RegionalAreaSerializer(serializers.ModelSerializer): + """Serializes regional area names for quick searching""" + + class Meta: + model = RegionalArea + fields = ('name', 'regional_area_guid',) diff --git a/gwells/app/backend/registries/tests.py b/gwells/app/backend/registries/tests.py index 379981bc9..ab37668fb 100644 --- a/gwells/app/backend/registries/tests.py +++ b/gwells/app/backend/registries/tests.py @@ -14,11 +14,14 @@ import uuid import logging import os +import json +from unittest.mock import patch from django.test import TestCase from django.core.management import call_command from django.utils.six import StringIO from django.contrib.auth.models import User, Group +from django.contrib.gis.geos import GEOSGeometry from rest_framework import status from rest_framework.reverse import reverse @@ -38,7 +41,6 @@ from registries.views import PersonListView, PersonDetailView from gwells.roles import (roles_to_groups, REGISTRIES_VIEWER_ROLE, REGISTRIES_EDIT_ROLE) - # Note: see postman/newman for more API tests. # Postman API tests include making requests with incomplete data, missing required fields etc. # They are located at {base-dir}/api-tests/ @@ -234,15 +236,17 @@ def setUp(self): self.initial_data = { 'name': 'Bobby\'s Drilling', + 'street_address': '501 Belleville St', 'city': 'Victoria', 'province_state': 'BC' } - def test_create_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_create_organization(self, mock_geocode_bc_location): """ Create a new organization object. """ - + mock_geocode_bc_location.return_value = None url = reverse('organization-list', kwargs={'version': 'v1'}) count_before = Organization.objects.count() @@ -251,7 +255,9 @@ def test_create_organization(self): self.assertEqual(response.status_code, status.HTTP_201_CREATED) self.assertEqual(Organization.objects.count(), count_before + 1) - def test_list_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_list_organization(self, mock_geocode_bc_location): + mock_geocode_bc_location.return_value = None url = reverse('organization-list', kwargs={'version': 'v1'}) new_object = self.client.post(url, self.initial_data, format='json') created_guid = new_object.data['org_guid'] @@ -262,7 +268,9 @@ def test_list_organization(self): self.assertEqual(len(created_guid), 36) self.assertContains(response, created_guid) - def test_retrieve_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_retrieve_organization(self, mock_geocode_bc_location): + mock_geocode_bc_location.return_value = None create_url = reverse('organization-list', kwargs={'version': 'v1'}) new_object = self.client.post( create_url, self.initial_data, format='json') @@ -276,7 +284,9 @@ def test_retrieve_organization(self): self.assertEqual(response.data['name'], self.initial_data['name']) self.assertEqual(response.data['city'], self.initial_data['city']) - def test_patch_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_patch_organization(self, mock_geocode_bc_location): + mock_geocode_bc_location.return_value = None new_data = { 'city': 'Duncan' } @@ -298,7 +308,9 @@ def test_patch_organization(self): self.assertEqual(response.data['name'], self.initial_data['name']) self.assertEqual(response.data['city'], new_data['city']) - def test_put_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_put_organization(self, mock_geocode_bc_location): + mock_geocode_bc_location.return_value = None new_data = { 'name': 'Betty\'s Drilling', 'city': 'Duncan', @@ -322,7 +334,9 @@ def test_put_organization(self): self.assertEqual(response.data['name'], new_data['name']) self.assertEqual(response.data['city'], new_data['city']) - def test_delete_organization(self): + @patch('registries.serializers.geocode_bc_location') + def test_delete_organization(self, mock_geocode_bc_location): + mock_geocode_bc_location.return_value = None # setup logger = logging.getLogger('django.request') previous_level = logger.getEffectiveLevel() @@ -355,12 +369,13 @@ def test_delete_organization(self): # teardown logger.setLevel(previous_level) - def test_organization_audit_fields(self): + @patch('registries.serializers.geocode_bc_location') + def test_organization_audit_fields(self, mock_geocode_bc_location): """ Test that AuditModel fields (create_user, create_date etc.) are updated when Organization objects are created. """ - + mock_geocode_bc_location.return_value = None create_url = reverse('organization-list', kwargs={'version': 'v1'}) new_object = self.client.post( create_url, self.initial_data, format='json') @@ -375,10 +390,12 @@ def test_organization_audit_fields(self): # TODO: When authentication is enforced, this line will need to change self.assertEqual(response.data['create_user'], self.user.username) - def test_create_org_not_authenticated(self): + @patch('registries.serializers.geocode_bc_location') + def test_create_org_not_authenticated(self, mock_geocode_bc_location): """ Ensure that users who are not authenticated cannot create Organization objects """ + mock_geocode_bc_location.return_value = None self.client.force_authenticate(user=None) url = reverse('organization-list', kwargs={'version': 'v1'}) data = {'name': 'Big Time Drilling Co'} @@ -387,11 +404,14 @@ def test_create_org_not_authenticated(self): self.assertEqual(response.status_code, status.HTTP_401_UNAUTHORIZED) - def test_unsafe_methods_by_unauthorized_users(self): + @patch('registries.serializers.geocode_bc_location') + def test_unsafe_methods_by_unauthorized_users(self, mock_geocode_bc_location): """ Ensure that users who are not authenticated cannot perform "unsafe" actions like UPDATE, PUT, DELETE on an object that is already in database """ + mock_geocode_bc_location.return_value = None + self.client.force_authenticate(user=None) org_object = Organization.objects.create( name='Big Time Drilling Co', province_state=self.province) @@ -416,7 +436,157 @@ def test_unsafe_methods_by_unauthorized_users(self): status.HTTP_401_UNAUTHORIZED) self.assertEqual(delete_response.status_code, status.HTTP_401_UNAUTHORIZED) - + + @patch('registries.serializers.geocode_bc_location') + def test_create_org_no_geom(self, mock_geocode_bc_location): + """ + When a new Organization is created without an address, the + geom attribute is not populated + """ + + # Note: we use a mock version of mock_geocode_bc_location(..) just in + # case the create org implementation makes a call to it. We don't + # want this test to depend on a remote API. + mock_geocode_bc_location.return_value = None + + # Create an organization with an initial address + org_data = { + "name": "test", + "province_state": "BC", + "street_address": None + } + url = reverse('organization-list', kwargs={'version': 'v1'}) + response = self.client.post(url, org_data, format='json') + + # check that the response includes the geographic coordinates + self.assertEquals(response.data.get("longitude"), None) + self.assertEquals(response.data.get("latitude"), None) + + organization = Organization.objects.get( + org_guid=response.data['org_guid']) + + # check that the organization was created and that is has a value + # in the geom attribute + self.assertTrue(organization != None) + self.assertTrue(organization.geom == None) + + def test_create_update_org_populates_geom_1(self): + """ + When a new Organization is created with an address in BC, a geometry + should be automatically populated with the geocoded value. + When that organization is updated with a different address, the + geometry should be automatically updated too. + """ + + with patch('registries.serializers.geocode_bc_location') as mock_geocode_bc_location_1: + + #create an organization with an initial address + mock_lon_1 = -124.2 + mock_lat_1 = 50.1 + mock_geocode_bc_location_1.return_value = \ + GEOSGeometry(f'POINT({mock_lon_1} {mock_lat_1})', srid=4326) + + url_1 = reverse('organization-list', kwargs={'version': 'v1'}) + response_1 = self.client.post(url_1, self.initial_data, format='json') + + # check that the mock geocode function was used instead of the + # real version + mock_geocode_bc_location_1.assert_called_once() + + # check that the response includes the geographic coordinates + self.assertEquals(response_1.data.get("longitude"), mock_lon_1) + self.assertEquals(response_1.data.get("latitude"), mock_lat_1) + + organization = Organization.objects.get( + org_guid=response_1.data['org_guid']) + + # check that the organization was created and that is has a value + # in the geom attribute + self.assertTrue(organization != None) + self.assertTrue(organization.geom != None) + + with patch('registries.serializers.geocode_bc_location') as mock_geocode_bc_location_2: + + # update the organization with a new address + mock_lon_2 = -123.9 + mock_lat_2 = 51.3 + mock_geocode_bc_location_2.return_value = \ + GEOSGeometry(f'POINT({mock_lon_2} {mock_lat_2})', srid=4326) + + url_2 = reverse('organization-detail', + kwargs={'org_guid': response_1.data['org_guid'], 'version': 'v1'}) + response_2 = self.client.patch(url_2, {"street_address": "101 NewAddress Ave."}, format='json') + + updated_org = Organization.objects.get( + org_guid=response_1.data['org_guid']) + + # check that the response includes new geographic coordinates + self.assertEquals(response_2.data.get("longitude"), mock_lon_2) + self.assertEquals(response_2.data.get("latitude"), mock_lat_2) + + # check that the updated organization has updated geometry + self.assertEquals(updated_org.latitude, mock_lat_2) + self.assertEquals(updated_org.longitude, mock_lon_2) + + def test_create_update_org_populates_geom_2(self): + """ + When a new Organization is created with an address in BC, a geometry + should be automatically populated with the geocoded value. + When that organization is updated with an incomplete address (no city), + the geometry should be reset to None + """ + + with patch('registries.serializers.geocode_bc_location') as mock_geocode_bc_location_1: + + #create an organization with an initial address + mock_lon_1 = -124.6 + mock_lat_1 = 50.8 + mock_geocode_bc_location_1.return_value = \ + GEOSGeometry(f'POINT({mock_lon_1} {mock_lat_1})', srid=4326) + + url_1 = reverse('organization-list', kwargs={'version': 'v1'}) + resp_1 = self.client.post(url_1, self.initial_data, format='json') + + # check that the mock geocode function was used instead of the + # real version + mock_geocode_bc_location_1.assert_called_once() + + # check that the response includes the geographic coordinates + self.assertEquals(resp_1.data.get("longitude"), mock_lon_1) + self.assertEquals(resp_1.data.get("latitude"), mock_lat_1) + + organization = Organization.objects.get( + org_guid=resp_1.data['org_guid']) + + # check that the organization was created and that is has a value + # in the geom attribute + self.assertTrue(organization != None) + self.assertTrue(organization.geom != None) + + with patch('registries.serializers.geocode_bc_location') as mock_geocode_bc_location_2: + + # update the organization to unset the 'city'. + # Note: use a mock version of the mock_geocode_bc_location(...) function + # just in case the the update causes a call to that function + # (it may not, but we just want to be sure this test + # doesn't depend on a remote API call). + mock_geocode_bc_location_2.return_value = None + + url_2 = reverse('organization-detail', + kwargs={'org_guid': resp_1.data['org_guid'], 'version': 'v1'}) + resp_2 = self.client.patch(url_2, {"street_address": ""}, format='json') + + updated_organization = Organization.objects.get( + org_guid=resp_1.data['org_guid']) + + # check that the response shows that the lat/lon have been cleared + self.assertEquals(resp_2.data.get("longitude"), None) + self.assertEquals(resp_2.data.get("latitude"), None) + + # check that the updated organization has no geometry + self.assertEquals(updated_organization.latitude, None) + self.assertEquals(updated_organization.longitude, None) + self.assertEquals(updated_organization.geom, None) class APIPersonTests(AuthenticatedAPITestCase): """ @@ -459,6 +629,168 @@ def test_list_people(self): self.assertEqual(len(created_guid), 36) self.assertContains(response, created_guid) + def test_list_people_within_bbox(self): + """ + Tests that the "within" parameter causes the backend to limit results to + within the specified GeoJSON geometry + """ + + surname_of_person_in_victoria = "One" + + #register one person and their organization + activity = ActivityCode.objects.get(registries_activity_code="DRILL") + person_1 = Person.objects.create( + first_name='Person', surname=surname_of_person_in_victoria) + org_1 = Organization.objects.create( + name="Victoria Drilling Company", + province_state=self.prov, + geom=GEOSGeometry('POINT(-123.35948 48.4268161)', srid=4326) #near Victoria, BC + ) + Register.objects.create( + person=person_1, + organization=org_1, + registries_activity=activity, + registration_no="F54321", + ) + + #register another person and their organization + person_2 = Person.objects.create( + first_name='Person', surname="Two") + org_2 = Organization.objects.create( + name="Kelowna Drilling Company", + province_state=self.prov, + geom=GEOSGeometry('POINT(-119.47901 49.882042)', srid=4326) #near Kelowna, BC + ) + Register.objects.create( + person=person_2, + organization=org_2, + registries_activity=activity, + registration_no="F62232", + ) + + + + # Search for drillers near Victoria. expect one result. + url = reverse('person-list', kwargs={'version': 'v1'}) + search_params = { + 'sw_long': -123.40253945033623, + 'sw_lat': 48.40057269436966, + 'ne_long': -123.26195857741126, + 'ne_lat': 48.47868009861898 + } + response = self.client.get(url, search_params, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + results = response.data.get("results") + self.assertEqual(len(results), 1) + + surname = results[0].get("surname") + self.assertEqual(surname, surname_of_person_in_victoria) + + def test_list_people_filtered_by_subactivity(self): + """ + Tests that the "subactivities" query string param causes search results to + be limited to people registered only for those subactivities + """ + + proof_of_age = ProofOfAgeCode.objects.create( + code="TESTING", + description="Testing", + display_order="1") + + #register one person and their organization + activity = ActivityCode.objects.get(registries_activity_code="DRILL") + person_1 = Person.objects.create( + first_name='Person', surname="One") + org_1 = Organization.objects.create( + name="Drilling Company A", + province_state=self.prov + ) + registration_1 = Register.objects.create( + person=person_1, + organization=org_1, + registries_activity=activity, + registration_no="F54321", + ) + RegistriesApplication.objects.create( + registration=registration_1, + proof_of_age=proof_of_age, + subactivity=SubactivityCode.objects.get(registries_subactivity_code='WATER') + ) + + #register another person and their organization + person_2 = Person.objects.create( + first_name='Person', surname="Two") + org_2 = Organization.objects.create( + name="Drilling Company B", + province_state=self.prov + ) + registration_2 = Register.objects.create( + person=person_2, + organization=org_2, + registries_activity=activity, + registration_no="F62232", + ) + RegistriesApplication.objects.create( + registration=registration_2, + proof_of_age=proof_of_age, + subactivity=SubactivityCode.objects.get(registries_subactivity_code='GEOTECH') + ) + + + # Search for drillers with subactivity 'GEOTECH' + url = reverse('person-list', kwargs={'version': 'v1'}) + search_params = { + 'subactivities': "GEOTECH" + } + response = self.client.get(url, search_params, format='json') + self.assertEqual(response.status_code, status.HTTP_200_OK) + + results = response.data.get("results") + self.assertEqual(len(results), 1) + + + subactivity = results[0].get("registrations")[0].get("applications")[0].get("subactivity") + self.assertEqual(subactivity.get("registries_subactivity_code"), "GEOTECH") + + + def test_list_people_includes_org_coords(self): + """ + Tests that latitude and longitude attributes are included in + each embedded Organization + (Person -> Registration -> Organization -> [latitude and longitude]) + """ + # Create registered driller linked to an organization + activity = ActivityCode.objects.get(registries_activity_code="DRILL") + driller = Person.objects.create( + first_name='Debbie', surname="Driller") + org = Organization.objects.create( + name="Big Time Drilling Company", + province_state=self.prov + ) + Register.objects.create( + person=driller, + organization=org, + registries_activity=activity, + registration_no="F54321", + ) + + # list all people + url = reverse('person-list', kwargs={'version': 'v1'}) + response = self.client.get(url, format='json') + + # Check that the Organization embedded under the Person has latitude + # and longitude attributes (although the values for both are None) + results = response.data.get("results") + registrations = results[0].get("registrations") + registered_org = registrations[0].get("organization") + + self.assertTrue("latitude" in registered_org) + self.assertTrue("longitude" in registered_org) + self.assertTrue(registered_org["latitude"] == None) + self.assertTrue(registered_org["longitude"] == None) + + def test_retrieve_person(self): create_url = reverse('person-list', kwargs={'version': 'v1'}) new_object = self.client.post( diff --git a/gwells/app/backend/registries/urls.py b/gwells/app/backend/registries/urls.py index e2c1c7aaa..b25d1e8e3 100644 --- a/gwells/app/backend/registries/urls.py +++ b/gwells/app/backend/registries/urls.py @@ -14,16 +14,16 @@ from django.conf.urls import url from django.views.decorators.cache import never_cache from rest_framework.documentation import include_docs_urls -from rest_framework_jwt.views import obtain_jwt_token from drf_yasg.views import get_schema_view from drf_yasg.utils import swagger_auto_schema from drf_yasg import openapi - +import os from registries import permissions from . import views from . import views_v2 from gwells.urls import api_path_prefix - +LOCAL = os.environ.get('LOCAL', False) +API_URL = 'http://localhost:8000/gwells/' if LOCAL else 'https://apps.nrs.gov.bc.ca/gwells/' schema_view = get_schema_view( openapi.Info( title="Groundwater Wells, Aquifers and Registry API", @@ -36,7 +36,8 @@ license=openapi.License(name="Open Government License - British Columbia", url="https://www2.gov.bc.ca/gov/content?id=A519A56BC2BF44E4A008B33FCF527F61"), ), - public=False, + url=API_URL, + public=LOCAL, permission_classes=(permissions.RegistriesEditOrReadOnly,) ) @@ -128,6 +129,6 @@ name='city-list-installers'), # Swagger documentation endpoint - url(r'^api/$', schema_view.with_ui('redoc', cache_timeout=None), name='api-docs'), + url(r'^api/$', schema_view.with_ui('swagger', cache_timeout=None), name='api-docs'), ] diff --git a/gwells/app/backend/registries/views.py b/gwells/app/backend/registries/views.py index 57036e7da..f9996d47c 100644 --- a/gwells/app/backend/registries/views.py +++ b/gwells/app/backend/registries/views.py @@ -13,13 +13,15 @@ """ import reversion +import re, json from collections import OrderedDict - -from django.db.models import Q, Prefetch +from django.db.models import Q, Prefetch, Count from django.http import HttpResponse, Http404, JsonResponse from django.shortcuts import get_object_or_404 from django.utils import timezone +from django.forms.models import model_to_dict from django.views.generic import TemplateView +from django.contrib.gis.geos import Polygon, GEOSException from django_filters import rest_framework as restfilters from drf_yasg import openapi from drf_yasg.utils import swagger_auto_schema @@ -50,7 +52,8 @@ RegistriesApplication, RegistriesRemovalReason, SubactivityCode, - WellClassCode) + WellClassCode, + RegionalArea) from registries.permissions import RegistriesEditPermissions, RegistriesEditOrReadOnly from registries.serializers import ( ApplicationAdminSerializer, @@ -71,18 +74,18 @@ WellClassCodeSerializer, AccreditedCertificateCodeSerializer, OrganizationNoteSerializer, - PersonNameSerializer) + PersonNameSerializer, + RegionalAreaSerializer) from gwells.change_history import generate_history_diff from gwells.views import AuditCreateMixin, AuditUpdateMixin - class OrganizationListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """ get: - Returns a list of all registered drilling organizations + Returns a list of all registered drilling organizations. post: - Creates a new drilling organization record + Creates a new drilling organization record. """ permission_classes = (RegistriesEditPermissions,) @@ -113,16 +116,16 @@ def get_queryset(self): class OrganizationDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns the specified drilling organization + Returns the specified drilling organization. put: - Replaces the specified record with a new one + Replaces the specified record with a new one. patch: - Updates a drilling organization with the fields/values provided in the request body + Updates a drilling organization with the fields/values provided in the request body. delete: - Removes the specified drilling organization record + Removes the specified drilling organization record. """ permission_classes = (RegistriesEditPermissions,) @@ -157,7 +160,22 @@ def destroy(self, request, *args, **kwargs): class PersonOptionsView(APIView): - + + def filterRegionalAreas(self, result): + """ + Modify substrings shown in the registries search to move 'Regional District of' to the back + The search uses a uuid and not the name key, so this operation is safe + Args: + result (List): List of regions from the serializer + """ + substring = '^Regional Districts? of' + for item in result: + match = re.match(substring, item['name']) + if match: + district = match.group(0) + item['name'] = item['name'].replace(match.group(0) + " ", "") + ", " + district + result.sort(key=lambda item: item['name']) + @swagger_auto_schema(auto_schema=None) def get(self, request, format=None, **kwargs): result = {} @@ -200,12 +218,28 @@ def get(self, request, format=None, **kwargs): result['province_state_codes'] = \ list(map(lambda item: ProvinceStateCodeSerializer(item).data, ProvinceStateCode.objects.all().order_by('display_order'))) - + result['regional_areas'] = \ + list(map(lambda item: RegionalAreaSerializer(item).data, + RegionalArea.objects.all().order_by('name'))) + self.filterRegionalAreas(result['regional_areas']) + return Response(result) + def person_search_qs(request): - """ Returns Person queryset, removing non-active and unregistered drillers for anonymous users """ + """ + Returns Person queryset, removing non-active and unregistered + drillers for anonymous users + Implementation note: The returned queryset is actually three related + querysets. The first is the primary query set and is is a join + across several tables. The other two querysets are + used to pre-fetch collections of related information (registrations + and applications). + Various filters can be requested (filter by 'activity', 'subactivity', + 'geographic area', etc). In general, when a filter is needed, it is applied + to each of the three querysets (or sometimes only two of them). + """ query = request.GET qs = Person.objects.filter(expiry_date__gt=timezone.now()) @@ -213,34 +247,73 @@ def person_search_qs(request): registrations_qs = Register.objects.all() applications_qs = RegistriesApplication.objects.all() + person_filters = Q() + reg_filters = Q() + appl_filters = Q() + + # Search for cities (split list and return all matches) # search comes in as a comma-separated querystring param e.g: ?city=Atlin,Lake Windermere,Duncan cities = query.get('city', None) if cities: cities = cities.split(',') - qs = qs.filter(registrations__organization__city__in=cities) - registrations_qs = registrations_qs.filter( - organization__city__in=cities) + person_filters = person_filters & Q(registrations__organization__city__in=cities) + reg_filters = reg_filters & Q(organization__city__in=cities) + + # regional areas + region_guids = query.get('region', None) + if region_guids: + region_guids = region_guids.split(',') + regional_areas = RegionalArea.objects.filter(regional_area_guid__in=region_guids) + person_filters &= Q(registrations__organization__regional_areas__in=regional_areas) + reg_filters &= Q(organization__regional_areas__in=regional_areas) + + #bbox + sw_long = query.get('sw_long') + sw_lat = query.get('sw_lat') + ne_long = query.get('ne_long') + ne_lat = query.get('ne_lat') + if sw_long and sw_lat and ne_long and ne_lat: + try: + bbox = Polygon.from_bbox((sw_long, sw_lat, ne_long, ne_lat)) + bbox.srid = 4326 + person_filters = person_filters & Q(registrations__organization__geom__bboverlaps=bbox) + reg_filters = reg_filters & Q(organization__geom__bboverlaps=bbox) + except (ValueError, GEOSException): + pass + + #Subactivities param comes as a csv list + subactivities = query.get('subactivities') + if subactivities is not None: + subactivities = subactivities.split(",") + person_filters = person_filters & \ + Q(registrations__applications__subactivity__registries_subactivity_code__in=subactivities) + reg_filters = reg_filters & \ + Q(applications__subactivity__registries_subactivity_code__in=subactivities) + appl_filters = appl_filters & \ + Q(subactivity__registries_subactivity_code__in=subactivities) activity = query.get('activity', None) status = query.get('status', None) - user_is_staff = request.user.groups.filter(name=REGISTRIES_VIEWER_ROLE).exists() if activity: if (status == 'P' or not status) and user_is_staff: # We only allow staff to filter on status # For pending, or all, we also return search where there is no registration. - qs = qs.filter(Q(registrations__registries_activity__registries_activity_code=activity) | - Q(registrations__isnull=True)) - registrations_qs = registrations_qs.filter( - registries_activity__registries_activity_code=activity) + person_filters = person_filters & \ + ( + Q(registrations__registries_activity__registries_activity_code=activity) | + Q(registrations__isnull=True) + ) + reg_filters = reg_filters & \ + Q(registries_activity__registries_activity_code=activity) else: # For all other searches, we strictly filter on activity. - qs = qs.filter( - registrations__registries_activity__registries_activity_code=activity) - registrations_qs = registrations_qs.filter( - registries_activity__registries_activity_code=activity) + person_filters = person_filters & \ + Q(registrations__registries_activity__registries_activity_code=activity) + reg_filters = reg_filters & \ + Q(registries_activity__registries_activity_code=activity) if user_is_staff: # User is logged in @@ -248,36 +321,76 @@ def person_search_qs(request): if status == 'Removed': # Things are a bit more complicated if we're looking for removed, as the current # status doesn't come in to play. - qs = qs.filter( - registrations__applications__removal_date__isnull=False) + person_filters = person_filters & \ + Q(registrations__applications__removal_date__isnull=False) + reg_filters = reg_filters & \ + Q(applications__removal_date__isnull=False) + appl_filters = appl_filters & \ + Q(removal_date__isnull=False) else: if status == 'P': # If the status is pending, we also pull in any people without registrations # or applications. - qs = qs.filter(Q(registrations__applications__current_status__code=status) | - Q(registrations__isnull=True) | - Q(registrations__applications__isnull=True), - Q(registrations__applications__removal_date__isnull=True)) + person_filters = person_filters & \ + ( + Q(registrations__applications__current_status__code=status) | + Q(registrations__isnull=True) | + Q(registrations__applications__isnull=True) + ) & \ + Q(registrations__applications__removal_date__isnull=True) + reg_filters = reg_filters & \ + ( + Q(applications__current_status__code=status) | + Q(applications__isnull=True) + ) & \ + Q(applications__removal_date__isnull=True) + appl_filters = appl_filters & \ + ( + Q(current_status__code=status) + #Q(isnull=True) + ) & \ + Q(removal_date__isnull=True) else: - qs = qs.filter( - Q(registrations__applications__current_status__code=status), - Q(registrations__applications__removal_date__isnull=True)) + person_filters = person_filters & \ + ( + Q(registrations__applications__current_status__code=status) & + Q(registrations__applications__removal_date__isnull=True) + ) + reg_filters = reg_filters & \ + ( + Q(applications__current_status__code=status) & + Q(applications__removal_date__isnull=True) + ) + appl_filters = appl_filters & \ + ( + Q(current_status__code=status) & + Q(removal_date__isnull=True) + ) else: # User is not logged in # Only show active drillers to non-admin users and public - qs = qs.filter( - Q(registrations__applications__current_status__code='A', - registrations__registries_activity=activity), - Q(registrations__applications__removal_date__isnull=True), - Q() - ) + person_filters = person_filters & \ + ( + Q(registrations__applications__current_status__code='A') & + Q(registrations__applications__removal_date__isnull=True) + ) + + reg_filters = reg_filters & \ + ( + Q(applications__current_status__code='A') & + Q(applications__removal_date__isnull=True) + ) + appl_filters= appl_filters & \ + ( + Q(current_status='A') & + Q(removal_date__isnull=True) + ) + + #apply all the "main" and "registration" filters that were chosen above + qs = qs.filter(person_filters) + registrations_qs = registrations_qs.filter(reg_filters) + applications_qs = applications_qs.filter(appl_filters) - registrations_qs = registrations_qs.filter( - Q(applications__current_status__code='A'), - Q(applications__removal_date__isnull=True)) - - applications_qs = applications_qs.filter( - current_status='A', removal_date__isnull=True) # generate applications queryset applications_qs = applications_qs \ @@ -290,7 +403,7 @@ def person_search_qs(request): .prefetch_related( 'subactivity__qualification_set', 'subactivity__qualification_set__well_class' - ).distinct() + ).distinct() # generate registrations queryset, inserting filtered applications queryset defined above registrations_qs = registrations_qs \ @@ -301,7 +414,7 @@ def person_search_qs(request): ) \ .prefetch_related( Prefetch('applications', queryset=applications_qs) - ).distinct() + ).distinct() # insert filtered registrations set qs = qs \ @@ -311,23 +424,50 @@ def person_search_qs(request): return qs.distinct() +def exclude_persons_without_registrations(request, filtered_queryset, statuses_that_disallow_empty_registrations=['A']): + """ + In the following cases perform additional filtering on the 'filtered_queryset' + to remove persons that have no registrations: + 1. when the request asked for status of *Registered* ('A') + 2. when the request asked to filter by bounding box (geographic area) + 3. when the request asked to filter by city + Implementation note: Ideally we would rely on the queryset for this + filtering, but the queryset is very complex, and it relies on + multiple 'prefetches' (extra database queries). It is most efficient to handle + this filtering post database query. + Returns an updated filtered_queryset + """ + status_disallows_people_with_no_registrations = \ + request.GET.get('status') in statuses_that_disallow_empty_registrations + is_filtered_by_bbox = request.GET.get('sw_long') != None \ + and request.GET.get('sw_lat') != None \ + and request.GET.get('ne_long') != None\ + and request.GET.get('ne_lat') != None + is_filtered_by_city = request.GET.get('city', "") != "" + if is_filtered_by_bbox or is_filtered_by_city or \ + status_disallows_people_with_no_registrations: + filtered_queryset = [f for f in filtered_queryset if len(f.registrations.all()) > 0] + return filtered_queryset class PersonListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """ get: - Returns a list of all person records + Returns a list of all person records. post: - Creates a new person record + Creates a new person record. """ permission_classes = (RegistriesEditOrReadOnly,) serializer_class = PersonAdminSerializer pagination_class = APILimitOffsetPagination - # Allow searching on name fields, names of related companies, etc. filter_backends = (restfilters.DjangoFilterBackend, - filters.SearchFilter, filters.OrderingFilter) + filters.SearchFilter, + filters.OrderingFilter + ) + + ordering_fields = ('surname', 'registrations__organization__name') ordering = ('surname',) search_fields = ( @@ -355,6 +495,7 @@ def list(self, request, **kwargs): """ List response using serializer with reduced number of fields """ queryset = self.get_queryset() filtered_queryset = self.filter_queryset(queryset) + filtered_queryset = exclude_persons_without_registrations(request, filtered_queryset) page = self.paginate_queryset(filtered_queryset) if page is not None: @@ -368,16 +509,16 @@ def list(self, request, **kwargs): class PersonDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns the specified person + Returns the specified person. put: - Replaces the specified person record with a new one + Replaces the specified person record with a new one. patch: - Updates a person with the fields/values provided in the request body + Updates a person with the fields/values provided in the request body. delete: - Removes the specified person record + Removes the specified person record. """ permission_classes = (RegistriesEditPermissions,) @@ -427,14 +568,14 @@ def destroy(self, request, *args, **kwargs): class CitiesListView(ListAPIView): """ - List of cities with a qualified, registered operator (driller or installer) + List of cities with a qualified, registered operator (driller or installer). - get: returns a list of cities with a qualified, registered operator (driller or installer) + get: + Returns a list of cities with a qualified, registered operator (driller or installer). """ serializer_class = CityListSerializer lookup_field = 'register_guid' pagination_class = None - swagger_schema = None permission_classes = (RegistriesEditOrReadOnly,) queryset = Register.objects \ .exclude(organization__city__isnull=True) \ @@ -466,10 +607,10 @@ def get_queryset(self): class RegistrationListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """ get: - List all registration records + List all registration records. post: - Create a new well driller or well pump installer registration record for a person + Create a new well driller or well pump installer registration record for a person. """ permission_classes = (RegistriesEditPermissions,) @@ -493,16 +634,16 @@ class RegistrationListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): class RegistrationDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns a well driller or well pump installer registration record + Returns a well driller or well pump installer registration record. put: - Replaces a well driller or well pump installer registration record with a new one + Replaces a well driller or well pump installer registration record with a new one. patch: - Updates a registration record with new values + Updates a registration record with new values. delete: - Removes the specified registration record from the database + Removes the specified registration record from the database. """ permission_classes = (RegistriesEditPermissions,) @@ -527,10 +668,10 @@ class RegistrationDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDest class ApplicationListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): """ get: - Returns a list of all registration applications + Returns a list of all registration applications. post: - Creates a new registries application + Creates a new registries application. """ permission_classes = (RegistriesEditPermissions,) @@ -545,16 +686,16 @@ class ApplicationListView(RevisionMixin, AuditCreateMixin, ListCreateAPIView): class ApplicationDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns the specified drilling application + Returns the specified drilling application. put: - Replaces the specified record with a new one + Replaces the specified record with a new one. patch: - Updates a drilling application with the set of values provided in the request body + Updates a drilling application with the set of values provided in the request body. delete: - Removes the specified drilling application record + Removes the specified drilling application record. """ permission_classes = (RegistriesEditPermissions,) @@ -569,7 +710,7 @@ class ApplicationDetailView(RevisionMixin, AuditUpdateMixin, RetrieveUpdateDestr class OrganizationNameListView(ListAPIView): """ - A list of organizations with only organization names + A list of organizations with only organization names. """ permission_classes = (RegistriesEditOrReadOnly,) serializer_class = OrganizationNameListSerializer @@ -585,15 +726,14 @@ def get_queryset(self): class PersonNoteListView(AuditCreateMixin, ListCreateAPIView): """ get: - Returns notes associated with a Person record + Returns notes associated with a Person record. post: - Adds a note record to the specified Person record + Adds a note record to the specified Person record. """ permission_classes = (RegistriesEditPermissions,) serializer_class = PersonNoteSerializer - swagger_schema = None def get_queryset(self): person = self.kwargs['person_guid'] @@ -611,39 +751,82 @@ def perform_create(self, serializer): class PersonNoteDetailView(AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns a PersonNote record + Returns a PersonNote record. put: - Replaces a PersonNote record with a new one + Replaces a PersonNote record with a new one. patch: - Updates a PersonNote record with the set of fields provided in the request body + Updates a PersonNote record with the set of fields provided in the request body. delete: - Removes a PersonNote record + Removes a PersonNote record. """ permission_classes = (RegistriesEditPermissions,) serializer_class = PersonNoteSerializer - swagger_schema = None + queryset = PersonNote.objects.all() + lookup_field = 'person_note_guid' + lookup_url_kwarg = 'note_guid' - def get_queryset(self): - person = self.kwargs['person'] - return PersonNote.objects.filter(person=person) +def canDelete(self, author): + """Checks if user has permission to change Notes. + Notes can only be edited by Admins and the note's creator + """ + return self.request.user.groups.filter(name="gwells_admin").exists() or \ + self.request.user.groups.filter(name="admin").exists() or \ + author == self.request.user + +def get_persons_note(self, person_guid, note_guid): + """Fetches the note requested""" + if self.queryset.filter(person_note_guid=note_guid, person=person_guid).exists(): + return self.queryset.get(person_note_guid=note_guid, person=person_guid) + return None + +def get(self, request, person_guid, note_guid, **kwargs): + note = self.get_persons_note(person_guid, note_guid) + if note: + return Response(model_to_dict(note)) + return HttpResponse(status=404) + +def delete(self, request, person_guid, note_guid, **kwargs): + """Handles deletion for Persons Notes.""" + note = self.get_persons_note(person_guid, note_guid) + if note: + if self.canDelete(note.author): + note.delete() + return HttpResponse(status=204) + return HttpResponse(status=401) + return HttpResponse(status=404) + +def patch(self, request, person_guid, note_guid, **kwargs): + """Updates a Note with new content information. + Notes can only be updated by the user who created them + """ + note = self.get_persons_note(person_guid, note_guid) + new_note_content = json.loads(request.body.decode('utf-8')).get("note", None) + if note: + if note.author == self.request.user: + if new_note_content: + note.note = new_note_content + note.save() + return HttpResponse(status=200) + return HttpResponse(status=400) + return HttpResponse(status=403) + return HttpResponse(status=404) class OrganizationNoteListView(AuditCreateMixin, ListCreateAPIView): """ get: - Returns notes associated with a Organization record + Returns notes associated with a Organization record. post: - Adds a note record to the specified Organization record + Adds a note record to the specified Organization record. """ permission_classes = (RegistriesEditPermissions,) serializer_class = OrganizationNoteSerializer - swagger_schema = None def get_queryset(self): org = self.kwargs['org_guid'] @@ -661,35 +844,72 @@ def perform_create(self, serializer): class OrganizationNoteDetailView(AuditUpdateMixin, RetrieveUpdateDestroyAPIView): """ get: - Returns a OrganizationNote record - - put: - Replaces a OrganizationNote record with a new one + Returns a OrganizationNote record. patch: - Updates a OrganizationNote record with the set of fields provided in the request body + Updates a OrganizationNote record with the set of fields provided in the request body. delete: - Removes a OrganizationNote record + Removes a OrganizationNote record. """ permission_classes = (RegistriesEditPermissions,) serializer_class = OrganizationNoteSerializer - swagger_schema = None - - def get_queryset(self): - org = self.kwargs['org_guid'] - return OrganizationNote.objects.filter(organization=org) + def canDelete(self, author): + """Checks if user has permission to change Notes. + Notes can only be edited by Admins and the note's creator + """ + return self.request.user.groups.filter(name="gwells_admin").exists() or \ + self.request.user.groups.filter(name="admin").exists() or \ + author == self.request.user + + def get_organization_note(self, org_guid, note_guid): + """Fetches the note requested""" + if OrganizationNote.objects.filter(org_note_guid=note_guid, organization=org_guid).exists(): + return OrganizationNote.objects.get(org_note_guid=note_guid, organization=org_guid) + return None + + def get(self, request, org_guid, note_guid, **kwargs): + note = self.get_organization_note(org_guid, note_guid) + if note: + return Response(model_to_dict(note)) + return HttpResponse(status=404) + + def delete(self, request, org_guid, note_guid, **kwargs): + """Handles deletion for Organization Notes.""" + note = self.get_organization_note(org_guid, note_guid) + if note: + if self.canDelete(note.author): + note.delete() + return HttpResponse(status=204) + return HttpResponse(status=401) + return HttpResponse(status=404) + + def patch(self, request, org_guid, note_guid, **kwargs): + """Updates a Note with new content information. + Notes can only be updated by the user who created them + """ + note = self.get_organization_note(org_guid, note_guid) + new_note_content = json.loads(request.body.decode('utf-8')).get("note", None) + if note: + if note.author == self.request.user: + if new_note_content: + note.note = new_note_content + note.save() + return HttpResponse(status=200) + return HttpResponse(status=400) + return HttpResponse(status=403) + return HttpResponse(status=404) class OrganizationHistory(APIView): """ - get: returns a history of changes to an Organization model record + get: + Returns a history of changes to an Organization model record. """ permission_classes = (RegistriesEditPermissions,) queryset = Organization.objects.all() - swagger_schema = None def get(self, request, org_guid, **kwargs): try: @@ -708,17 +928,17 @@ def get(self, request, org_guid, **kwargs): class PersonHistory(APIView): """ - get: returns a history of changes to a Person model record + get: + Returns a history of changes to a Person model record. """ permission_classes = (RegistriesEditPermissions,) queryset = Person.objects.all() - swagger_schema = None def get(self, request, person_guid, **kwargs): """ - Retrieves version history for the specified Person record and creates a list of diffs - for each revision. + get: + Retrieves version history for the specified Person record and creates a list of diffs for each revision. """ try: @@ -763,7 +983,7 @@ def get(self, request, person_guid, **kwargs): class PersonNameSearch(ListAPIView): - """Search for a person in the Register""" + """Search for a person in the Register.""" permission_classes = (RegistriesEditOrReadOnly,) serializer_class = PersonNameSerializer @@ -780,29 +1000,13 @@ def get_queryset(self): class ListFiles(APIView): """ - List documents associated with an aquifer - - get: list files found for the aquifer identified in the uri - """ - - @swagger_auto_schema(responses={200: openapi.Response('OK', - openapi.Schema(type=openapi.TYPE_OBJECT, properties={ - 'public': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema( - type=openapi.TYPE_OBJECT, - properties={ - 'url': openapi.Schema(type=openapi.TYPE_STRING), - 'name': openapi.Schema(type=openapi.TYPE_STRING) - } - )), - 'private': openapi.Schema(type=openapi.TYPE_ARRAY, items=openapi.Schema( - type=openapi.TYPE_OBJECT, - properties={ - 'url': openapi.Schema(type=openapi.TYPE_STRING), - 'name': openapi.Schema(type=openapi.TYPE_STRING) - } - )) - }) - )}) + List documents associated with a person in the Registry. + + get: + Returns list of files found for the person identified in the URI. + """ + + def get(self, request, person_guid, **kwargs): user_is_staff = self.request.user.groups.filter( Q(name=REGISTRIES_EDIT_ROLE) | Q(name=REGISTRIES_VIEWER_ROLE)).exists() @@ -820,13 +1024,13 @@ class PreSignedDocumentKey(APIView): """ Get a pre-signed document key to upload into an S3 compatible document store - post: obtain a URL that is pre-signed to allow client-side uploads + post: + Obtain a URL that is pre-signed to allow client-side uploads. """ queryset = Person.objects.all() permission_classes = (RegistriesEditPermissions,) - @swagger_auto_schema(auto_schema=None) def get(self, request, person_guid, **kwargs): person = get_object_or_404(self.queryset, pk=person_guid) client = MinioClient( @@ -845,15 +1049,15 @@ def get(self, request, person_guid, **kwargs): class DeleteDrillerDocument(APIView): """ - Delete a document from a S3 compatible store + Delete a document from a S3 compatible store. - delete: remove the specified object from the S3 store + delete: + Remove the specified object from the S3 store. """ queryset = Person.objects.all() permission_classes = (RegistriesEditPermissions,) - @swagger_auto_schema(auto_schema=None) def delete(self, request, person_guid, **kwargs): person = get_object_or_404(self.queryset, pk=person_guid) client = MinioClient( diff --git a/gwells/app/backend/registries/views_v2.py b/gwells/app/backend/registries/views_v2.py index 4085b9ab2..af450d43a 100644 --- a/gwells/app/backend/registries/views_v2.py +++ b/gwells/app/backend/registries/views_v2.py @@ -26,7 +26,7 @@ from registries.permissions import RegistriesEditPermissions from registries.models import Person -from .views import person_search_qs +from .views import (person_search_qs, exclude_persons_without_registrations) REGISTRY_EXPORT_HEADER_COLUMNS = [ 'person_name', @@ -97,7 +97,6 @@ class CSVExportV2(ListAPIView): of DRF, because DRF doesn't have native CSV support. """ - swagger_schema = None permission_classes = (RegistriesEditPermissions,) # Allow searching on name fields, names of related companies, etc. @@ -128,6 +127,7 @@ def get(self, request, *args, **kwargs): def list(self, request, **kwargs): queryset = self.get_queryset() filtered_queryset = self.filter_queryset(queryset) + filtered_queryset = exclude_persons_without_registrations(request, filtered_queryset) # Create the HttpResponse object with the appropriate CSV header. response = HttpResponse(content_type='text/csv') @@ -145,7 +145,6 @@ class XLSXExportV2(ListAPIView): """ Export the registry as XLSX. """ - swagger_schema = None permission_classes = (RegistriesEditPermissions,) # Allow searching on name fields, names of related companies, etc. @@ -176,6 +175,7 @@ def get(self, request, *args, **kwargs): def list(self, request, **kwargs): queryset = self.get_queryset() filtered_queryset = self.filter_queryset(queryset) + filtered_queryset = exclude_persons_without_registrations(request, filtered_queryset) mime_type = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' diff --git a/gwells/app/backend/requirements.txt b/gwells/app/backend/requirements.txt index 4d92a9e92..ed99f4db0 100644 --- a/gwells/app/backend/requirements.txt +++ b/gwells/app/backend/requirements.txt @@ -8,16 +8,15 @@ django-crispy-forms>=1.6.1 django-formtools>=2.0 django-settings-export>=1.2.1 djangorestframework>=3.11.2,<3.12 -djangorestframework-jwt==1.11.0 django-rest-multiple-models==2.1.0 requests==2.21.0 -minio>=4.0.16 +minio==7.1.16 coverage>=4.4.2 django-filter>=2.0.0,<2.1 -drf-yasg==1.20.0 +drf-yasg==1.21.7 django-cors-headers==2.2.0 django-extensions==2.0.6 -cryptography==3.3.2 +cryptography<=40.0.2 django-reversion==2.0.13 openpyxl==2.5.11 lxml==4.6.3 @@ -26,3 +25,9 @@ deepdiff>=4 urllib3>=1.24,<1.25 djangorestframework-csv==2.1.0 geojson==2.4.1 +MarkupSafe>=2.0.1 +djangorestframework-simplejwt==4.4.0 +pyjwt>=2.0,<=2.4.0 +thefuzz==0.19.0 +geopandas==0.9.0 +pyproj==3.0.1 diff --git a/gwells/app/backend/submissions/serializers.py b/gwells/app/backend/submissions/serializers.py index 145cebcc6..7e9ea7814 100644 --- a/gwells/app/backend/submissions/serializers.py +++ b/gwells/app/backend/submissions/serializers.py @@ -43,6 +43,7 @@ LinerPerforationSerializer, LithologyDescriptionSerializer, ScreenSerializer, + AquiferParametersSerializer ) from wells.models import ( ActivitySubmission, @@ -57,6 +58,8 @@ WellDisinfectedCode, WellOrientationCode, BoundaryEffectCode, + PumpingTestDescriptionCode, + AnalysisMethodCode, DriveShoeCode, FilterPackMaterialCode, FilterPackMaterialSizeCode, @@ -87,6 +90,7 @@ YieldEstimationMethodCode, ObsWellStatusCode, AquiferLithologyCode, + AquiferParameters, ) from .models import WellActivityCode @@ -108,6 +112,8 @@ class WellSubmissionListSerializer(serializers.ModelSerializer): many=True, required=False) lithologydescription_set = LithologyDescriptionSerializer( many=True, required=False) + aquifer_parameters_set = AquiferParametersSerializer( + many=True, required=False) class Meta: fields = '__all__' @@ -344,6 +350,8 @@ class WellConstructionSubmissionSerializer(WellSubmissionSerializerBase): many=True, required=False) lithologydescription_set = LithologyDescriptionSerializer( many=True, required=False) + aquifer_parameters_set = AquiferParametersSerializer( + many=True, required=False) coordinate_acquisition_code = serializers.PrimaryKeyRelatedField( queryset=CoordinateAcquisitionCode.objects.all(), @@ -361,6 +369,7 @@ def get_foreign_key_sets(self): 'screen_set': Screen, 'linerperforation_set': ActivitySubmissionLinerPerforation, 'lithologydescription_set': LithologyDescription, + 'aquifer_parameters_set': AquiferParameters, } def get_well_activity_type(self): @@ -376,7 +385,7 @@ class Meta: 'legal_lot', 'legal_plan', 'legal_district_lot', 'legal_block', 'legal_section', 'legal_township', 'legal_range', 'land_district', 'legal_pid', 'well_location_description', 'latitude', 'longitude', 'ground_elevation', 'ground_elevation_method', 'drilling_methods', - 'well_orientation_status', 'lithologydescription_set', 'casing_set', + 'well_orientation_status', 'lithologydescription_set', 'casing_set', 'aquifer_parameters_set', 'surface_seal_material', 'surface_seal_depth', 'surface_seal_thickness', 'surface_seal_method', 'backfill_type', 'backfill_depth', 'liner_material', 'liner_diameter', 'liner_thickness', 'liner_from', 'liner_to', @@ -394,8 +403,8 @@ class Meta: 'finished_well_depth', 'final_casing_stick_up', 'bedrock_depth', 'static_water_level', 'well_yield', 'artesian_flow', 'artesian_pressure', 'artesian_pressure_head', 'artesian_conditions', 'well_cap_type', 'well_disinfected_status', - 'comments', 'internal_comments', 'alternative_specs_submitted', 'consultant_company', 'consultant_name', - 'driller_name', 'person_responsible', 'company_of_person_responsible', + 'comments', 'internal_comments', 'alternative_specs_submitted', 'technical_report', 'drinking_water_protection_area_ind', 'consultant_company', + 'consultant_name', 'driller_name', 'person_responsible', 'company_of_person_responsible', 'coordinate_acquisition_code', 'create_user', 'create_date', ) @@ -414,6 +423,8 @@ class WellAlterationSubmissionSerializer(WellSubmissionSerializerBase): many=True, required=False) lithologydescription_set = LithologyDescriptionSerializer( many=True, required=False) + aquifer_parameters_set = AquiferParametersSerializer( + many=True, required=False) def get_foreign_key_sets(self): return { @@ -421,6 +432,7 @@ def get_foreign_key_sets(self): 'screen_set': Screen, 'linerperforation_set': ActivitySubmissionLinerPerforation, 'lithologydescription_set': LithologyDescription, + 'aquifer_parameters_set': AquiferParameters, } def get_well_activity_type(self): @@ -471,6 +483,7 @@ class Meta: 'well_orientation_status', 'lithologydescription_set', 'casing_set', + 'aquifer_parameters_set', 'surface_seal_material', 'surface_seal_depth', 'surface_seal_thickness', @@ -529,6 +542,8 @@ class Meta: 'comments', 'internal_comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'create_user', 'create_date', ) extra_kwargs = { @@ -548,6 +563,8 @@ class WellStaffEditSubmissionSerializer(WellSubmissionSerializerBase): many=True, required=False) lithologydescription_set = LithologyDescriptionSerializer( many=True, required=False) + aquifer_parameters_set = AquiferParametersSerializer( + many=True, required=False) # Sets person_responsible and company_of back to object, otherwise client view only gets guid def to_representation(self, instance): @@ -566,7 +583,8 @@ def get_foreign_key_sets(self): 'screen_set': Screen, 'linerperforation_set': ActivitySubmissionLinerPerforation, 'lithologydescription_set': LithologyDescription, - 'decommission_description_set': DecommissionDescription + 'decommission_description_set': DecommissionDescription, + 'aquifer_parameters_set': AquiferParameters, } class Meta: @@ -624,6 +642,7 @@ class Meta: 'well_orientation_status', 'lithologydescription_set', 'casing_set', + 'aquifer_parameters_set', 'surface_seal_material', 'surface_seal_depth', 'surface_seal_thickness', @@ -688,6 +707,8 @@ class Meta: 'comments', 'internal_comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'decommission_description_set', 'observation_well_number', 'observation_well_status', @@ -712,6 +733,8 @@ class WellDecommissionSubmissionSerializer(WellSubmissionSerializerBase): casing_set = CasingSerializer(many=True, required=False) decommission_description_set = DecommissionDescriptionSerializer( many=True, required=False) + aquifer_parameters_set = AquiferParametersSerializer( + many=True, required=False) def get_well_activity_type(self): return WellActivityCode.types.decommission() @@ -720,6 +743,7 @@ def get_foreign_key_sets(self): return { 'casing_set': Casing, 'decommission_description_set': DecommissionDescription, + 'aquifer_parameters_set': AquiferParameters, } class Meta: @@ -770,10 +794,13 @@ class Meta: 'decommission_backfill_material', 'decommission_details', 'casing_set', + 'aquifer_parameters_set', 'decommission_description_set', 'comments', 'internal_comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'create_user', 'create_date', ) extra_kwargs = { @@ -831,6 +858,22 @@ class Meta: fields = ('boundary_effect_code', 'description') +class PumpingTestDescriptionCodeSerializer(serializers.ModelSerializer): + """Serializes Aquifer Testing Description Codes/descriptions""" + + class Meta: + model = PumpingTestDescriptionCode + fields = ('pumping_test_description_code', 'description') + + +class AnalysisMethodCodeSerializer(serializers.ModelSerializer): + """Serializes Analysis Method Codes/descriptions""" + + class Meta: + model = AnalysisMethodCode + fields = ('analysis_method_code', 'description') + + class DriveShoeCodeSerializer(serializers.ModelSerializer): """Serializes Drive Shoe codes/descriptions""" @@ -1165,7 +1208,7 @@ class Meta: 'legal_lot', 'legal_plan', 'legal_district_lot', 'legal_block', 'legal_section', 'legal_township', 'legal_range', 'land_district', 'legal_pid', 'well_location_description', 'latitude', 'longitude', 'ground_elevation', 'ground_elevation_method', 'drilling_methods', - 'well_orientation_status', 'lithologydescription_set', 'casing_set', + 'well_orientation_status', 'lithologydescription_set', 'casing_set', 'aquifer_parameters_set', 'surface_seal_material', 'surface_seal_depth', 'surface_seal_thickness', 'surface_seal_method', 'backfill_type', 'backfill_depth', 'liner_material', 'liner_diameter', 'liner_thickness', 'liner_from', 'liner_to', @@ -1182,7 +1225,7 @@ class Meta: 'finished_well_depth', 'final_casing_stick_up', 'bedrock_depth', 'static_water_level', 'well_yield', 'artesian_flow', 'artesian_pressure', 'artesian_pressure_head', 'artesian_conditions', 'well_cap_type', 'well_disinfected_status', - 'comments', 'alternative_specs_submitted', 'consultant_company', 'consultant_name', + 'comments', 'alternative_specs_submitted', 'technical_report', 'drinking_water_protection_area_ind', 'consultant_company', 'consultant_name', 'driller_name', 'person_responsible', 'company_of_person_responsible', 'coordinate_acquisition_code', 'create_user', 'create_date', @@ -1285,6 +1328,7 @@ class Meta: 'well_orientation_status', 'lithologydescription_set', 'casing_set', + 'aquifer_parameters_set', 'surface_seal_material', 'surface_seal_depth', 'surface_seal_thickness', @@ -1342,6 +1386,8 @@ class Meta: 'well_disinfected_status', 'comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'create_user', 'create_date', ) @@ -1416,9 +1462,12 @@ class Meta: 'decommission_backfill_material', 'decommission_details', 'casing_set', + 'aquifer_parameters_set', 'decommission_description_set', 'comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'create_user', 'create_date', ) @@ -1609,6 +1658,8 @@ class Meta: 'comments', 'internal_comments', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'decommission_description_set', 'observation_well_number', 'observation_well_status', diff --git a/gwells/app/backend/submissions/tests.py b/gwells/app/backend/submissions/tests.py index 841e477bc..52d1e1edc 100644 --- a/gwells/app/backend/submissions/tests.py +++ b/gwells/app/backend/submissions/tests.py @@ -28,11 +28,13 @@ LithologyDescription, Screen, Well, - WellStatusCode + WellStatusCode, + AquiferParameters ) from submissions.models import ( WellActivityCode, - WELL_ACTIVITY_CODE_STAFF_EDIT, WELL_ACTIVITY_CODE_LEGACY, WELL_ACTIVITY_CODE_ALTERATION) + WELL_ACTIVITY_CODE_STAFF_EDIT, WELL_ACTIVITY_CODE_LEGACY, WELL_ACTIVITY_CODE_ALTERATION, \ + WELL_ACTIVITY_CODE_CONSTRUCTION) from gwells.models import DATALOAD_USER @@ -218,6 +220,30 @@ def test_casings_well_create_user_update_user(self): self.assertEqual(casing.create_user, self.user.username) self.assertEqual(casing.update_user, self.user.username) + def test_aquifer_parameters_well_create_user_update_user(self): + """ + Test that the well created by a construction submission, has aquifer parameters records with the + create user and update user set correctly. + """ + # Data for the construction submission. + data = { + 'aquifer_parameters_set': [ + { + 'storativity': 0.25, + 'testing_comments': 'Test comment for aquifer parameters.' + } + ] + } + # Post an construction submissions. + response = self.client.post(reverse('CON', kwargs={'version': 'v1'}), data, format='json') + self.assertEqual(response.status_code, status.HTTP_201_CREATED) + # Get the well back. + well = Well.objects.get(well_tag_number=response.data['well']) + # Get the resultant lithology record + aquifer_parameters = well.aquifer_parameters_set.all()[0] + self.assertEqual(aquifer_parameters.create_user, self.user.username) + self.assertEqual(aquifer_parameters.update_user, self.user.username) + def test_perforations_create_user_update_user(self): """ Test that the well created by a construction submission, has perforation records with the @@ -749,6 +775,272 @@ def test_alteration_well_liner_perforation(self): # We expect a liner has been created for the submission. self.assertIsNotNone(liner) + def test_comments_propagated_with_alteration_1(self): + """ + Tests that the 'comments' and 'internal_comments' submitted with + an alteration report are concatenated onto pre-existing values + from the well record. + In this test, comments from a previous construction report + are included in the following alteration report. + """ + # submit a construction report + construction_data = { + 'comments': "original comments", + 'internal_comments': "original internal comments" + } + construction_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_CONSTRUCTION, kwargs={'version': 'v1'}), construction_data, format='json') + + well_tag_number = construction_response.data['well'] + + # submit an alteration report + alteration_data = { + 'well': well_tag_number, + 'comments': 'alteration comments', + 'internal_comments': 'alteration internal comments' + } + alteration_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), alteration_data, format='json') + self.assertEqual(alteration_response.status_code, + status.HTTP_201_CREATED) + + # confirm that the 'comments' and 'internal comments' in the alteration submission + # are the concatenation of the values from the construction submission with the + # newly submitted values + alteration = ActivitySubmission.objects.get( + filing_number=alteration_response.data['filing_number']) + + self.assertTrue(alteration.comments.startswith( + construction_data.get("comments"))) + self.assertTrue(alteration.comments.endswith( + alteration_data.get("comments"))) + self.assertTrue(alteration.internal_comments.startswith( + construction_data.get("internal_comments"))) + self.assertTrue(alteration.internal_comments.endswith( + alteration_data.get("internal_comments"))) + + def test_comments_propagated_with_alteration_2(self): + """ + Tests that the 'comments' and 'internal_comments' submitted with + an alteration report are concatenated onto pre-existing values + from the well record. + """ + well = Well.objects.create( + create_user=self.user.username, + update_user=self.user.username, + comments="original comments", + internal_comments="original internal comments" + ) + well_tag_number = well.well_tag_number + + # submit an alteration report + alteration_data = { + 'well': well_tag_number, + 'comments': 'alteration comments', + 'internal_comments': 'alteration internal comments' + } + alteration_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), alteration_data, format='json') + self.assertEqual(alteration_response.status_code, + status.HTTP_201_CREATED) + + # confirm that the 'comments' and 'internal comments' in the alteration submission + # are the concatenation of the values from the construction submission with the + # newly submitted values + alteration = ActivitySubmission.objects.get( + filing_number=alteration_response.data['filing_number']) + + self.assertTrue(alteration.comments.startswith( + "original comments")) + self.assertTrue(alteration.comments.endswith( + alteration_data.get("comments"))) + self.assertTrue(alteration.internal_comments.startswith( + "original internal comments")) + self.assertTrue(alteration.internal_comments.endswith( + alteration_data.get("internal_comments"))) + + def test_comments_propagated_with_alteration_3(self): + """ + Tests that the 'comments' and 'internal_comments' submitted with + an alteration report are concatenated onto pre-existing values + from the well record. + In this test, there is an original well record and two alteration + reports. Comments from the original record should be copied to the first + alteration report, and comments from both the original record and the first + alteration report should be present in the second report. + """ + well = Well.objects.create( + create_user=self.user.username, + update_user=self.user.username, + comments="original comments", + internal_comments="original internal comments" + ) + well_tag_number = well.well_tag_number + + # submit alteration report #1 + alteration_data_1 = { + 'well': well_tag_number, + 'comments': 'alteration comments 1', + 'internal_comments': 'alteration internal comments 1' + } + alteration_response_1 = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), alteration_data_1, format='json') + self.assertEqual(alteration_response_1.status_code, + status.HTTP_201_CREATED) + + # confirm that the comments in the first alteration report are correct + alteration_1 = ActivitySubmission.objects.get( + filing_number=alteration_response_1.data['filing_number']) + + self.assertTrue(alteration_1.comments.startswith( + "original comments")) + self.assertTrue(alteration_1.comments.endswith( + alteration_data_1.get("comments"))) + self.assertTrue(alteration_1.internal_comments.startswith( + "original internal comments")) + self.assertTrue(alteration_1.internal_comments.endswith( + alteration_data_1.get("internal_comments"))) + + # submit alteration report #2 + alteration_data_2 = { + 'well': well_tag_number, + 'comments': 'alteration comments 2', + 'internal_comments': 'alteration internal comments 2' + } + alteration_response_2 = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), alteration_data_2, format='json') + self.assertEqual(alteration_response_2.status_code, + status.HTTP_201_CREATED) + + # confirm that the comments in the second alteration report are correct + alteration_2 = ActivitySubmission.objects.get( + filing_number=alteration_response_2.data['filing_number']) + + self.assertTrue(alteration_2.comments.startswith( + alteration_1.comments)) + self.assertTrue(alteration_2.comments.endswith( + alteration_data_2.get("comments"))) + self.assertTrue(alteration_2.internal_comments.startswith( + alteration_1.internal_comments)) + self.assertTrue(alteration_2.internal_comments.endswith( + alteration_data_2.get("internal_comments"))) + + def test_no_comments_propagated_with_alteration_of_unknown_well(self): + """ + Tests that an alteration report with no well_tag_number + will succeed, and the alteration comments will be saved + exactly as they appeared in the request. + """ + # submit an alteration report + alteration_data = { + 'comments': 'alteration comments', + 'internal_comments': 'alteration internal comments' + } + alteration_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), alteration_data, format='json') + self.assertEqual(alteration_response.status_code, + status.HTTP_201_CREATED) + + # confirm that the 'comments' and 'internal comments' in the alteration submission + # are the concatenation of the values from the construction submission with the + # newly submitted values + alteration = ActivitySubmission.objects.get( + filing_number=alteration_response.data['filing_number']) + + self.assertEquals(alteration.comments, alteration_data.get("comments")) + self.assertEquals(alteration.internal_comments, alteration_data.get("internal_comments")) + + + def test_comments_propagated_with_decommission(self): + """ + Tests that the 'comments' and 'internal_comments' submitted with + a decommission report are concatenated onto pre-existing values + from an earlier submission (or from the well record if no previous + submission exists). + In this test, comments from a previous staff edit + are included in the following decommission report. + """ + well = Well.objects.create( + create_user=self.user.username, + update_user=self.user.username, + comments="original comments", + internal_comments="original internal comments" + ) + well_tag_number = well.well_tag_number + + # submit a staff edit + staff_edit_data = { + 'well': well_tag_number, + 'comments': "staff edit comments", + 'internal_comments': "staff edit internal comments" + } + staff_edit_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_STAFF_EDIT, kwargs={'version': 'v1'}), staff_edit_data, format='json') + + # submit a decommission report + decommission_data = { + 'well': well_tag_number, + 'comments': 'decommission comments', + 'internal_comments': 'decommission internal comments' + } + decommission_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_ALTERATION, kwargs={'version': 'v1'}), decommission_data, format='json') + self.assertEqual(decommission_response.status_code, + status.HTTP_201_CREATED) + + # confirm that the 'comments' and 'internal comments' in the alteration submission + # are the concatenation of the values from the construction submission with the + # newly submitted values + decommission = ActivitySubmission.objects.get( + filing_number=decommission_response.data['filing_number']) + + self.assertTrue(decommission.comments.startswith( + staff_edit_data.get("comments"))) + self.assertTrue(decommission.comments.endswith( + decommission_data.get("comments"))) + self.assertTrue(decommission.internal_comments.startswith( + staff_edit_data.get("internal_comments"))) + self.assertTrue(decommission.internal_comments.endswith( + decommission_data.get("internal_comments"))) + + def test_comments_not_propagated_with_staff_edit(self): + """ + Tests that the 'comments' and 'internal_comments' included with + a STAFF_EDIT submission are saved "as is", and not concatenated + with any previous comments (as happens with alteration and decommission + submissions) + """ + # submit a construction report + construction_data = { + 'comments': "original comments", + 'internal_comments': "original internal comments" + } + construction_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_CONSTRUCTION, kwargs={'version': 'v1'}), construction_data, format='json') + + well_tag_number = construction_response.data['well'] + + # submit a staff edit + staff_edit_data = { + 'well': well_tag_number, + 'comments': "staff edit comments", + 'internal_comments': "staff edit internal comments" + } + staff_edit_response = self.client.post( + reverse(WELL_ACTIVITY_CODE_STAFF_EDIT, kwargs={'version': 'v1'}), staff_edit_data, format='json') + self.assertEqual(staff_edit_response.status_code, + status.HTTP_201_CREATED) + + # confirm that the 'comments' and 'internal comments' in the + # staff edit submission match the submitted values + staff_edit = ActivitySubmission.objects.get( + well=well_tag_number, + well_activity_type=WELL_ACTIVITY_CODE_STAFF_EDIT) + + self.assertEquals(staff_edit.comments, + staff_edit_data.get("comments")) + self.assertEquals(staff_edit.internal_comments, + staff_edit_data.get("internal_comments")) class TestPermissionsViewRights(APITestCase): diff --git a/gwells/app/backend/submissions/urls.py b/gwells/app/backend/submissions/urls.py index 3bc4654ed..1e2b757be 100644 --- a/gwells/app/backend/submissions/urls.py +++ b/gwells/app/backend/submissions/urls.py @@ -17,10 +17,9 @@ from submissions.views import (SubmissionsOptions, SubmissionListAPIView, SubmissionConstructionAPIView, SubmissionAlterationAPIView, SubmissionDecommissionAPIView, SubmissionGetAPIView, SubmissionStaffEditAPIView, - PreSignedDocumentKey,) + PreSignedDocumentKey, EmailNotification) from gwells.urls import api_path_prefix - urlpatterns = [ # Submissions form options @@ -45,8 +44,10 @@ # Edit submission url(api_path_prefix() + r'/submissions/staff_edit$', never_cache(SubmissionStaffEditAPIView().as_view()), name='STAFF_EDIT'), - # Document Uploading (submission records) url(api_path_prefix() + r'/submissions/(?P[0-9]+)/presigned_put_url$', never_cache(PreSignedDocumentKey.as_view()), name='submissions-pre-signed-url'), + # Send email notification when Coordinates are changed on drinking well + url(api_path_prefix() + r'/submissions/editwater$', + never_cache(EmailNotification.as_view()), name='send_email') ] diff --git a/gwells/app/backend/submissions/views.py b/gwells/app/backend/submissions/views.py index de0e61f71..0cba81920 100644 --- a/gwells/app/backend/submissions/views.py +++ b/gwells/app/backend/submissions/views.py @@ -11,10 +11,10 @@ See the License for the specific language governing permissions and limitations under the License. """ +from django.core.mail import send_mail import logging import sys from posixpath import join as urljoin - from django.http import JsonResponse from django.shortcuts import get_object_or_404 from django.views.generic import TemplateView @@ -25,7 +25,6 @@ from rest_framework.response import Response from rest_framework.generics import ListAPIView, ListCreateAPIView, RetrieveAPIView from rest_framework.views import APIView - from gwells.documents import MinioClient from gwells.urls import app_root from gwells.pagination import APILimitOffsetPagination @@ -50,6 +49,8 @@ WellDisinfectedCode, WellOrientationCode, BoundaryEffectCode, + PumpingTestDescriptionCode, + AnalysisMethodCode, DriveShoeCode, FilterPackMaterialCode, FilterPackMaterialSizeCode, @@ -95,6 +96,8 @@ WellDisinfectedCodeSerializer, WellOrientationCodeSerializer, BoundaryEffectCodeSerializer, + PumpingTestDescriptionCodeSerializer, + AnalysisMethodCodeSerializer, DriveShoeCodeSerializer, FilterPackMaterialCodeSerializer, FilterPackMaterialSizeCodeSerializer, @@ -132,7 +135,7 @@ YieldEstimationMethodCodeSerializer, WellStaffEditSubmissionSerializer, AquiferLithologySerializer, - LicencedStatusCodeSerializer, + LicencedStatusCodeSerializer ) @@ -157,15 +160,68 @@ def get_submission_queryset(qs): "lithologydescription_set", "linerperforation_set", "casing_set", + "aquifer_parameters_set", "screen_set", "decommission_description_set", "drilling_methods" ) \ .order_by("filing_number") +def propagate_submission_comments(request, separator="."): + """ + This method modifies the values of two attributes in the given request + object ('comments' and 'internal comments'). + For both attributes the new value is set to be the concatenation of a + previous value (from the well record) with the value provided in the request + parameter. + :param request: The Django request object to modify + :param separator: A string to insert between the previous value + and the provided value. + :return: Nothing (but the 'request' parameter object may be modified) + """ + + # no well tag number specified, so do nothing + if not "well" in request.data: + return + + attributes_to_propagate = ["comments", "internal_comments"] + well_tag_number = request.data['well'] + + # Lookup an existing well record to copy attribute values from + record_to_copy_from = None + try: + record_to_copy_from = Well.objects\ + .get(well_tag_number=well_tag_number) + except Well.DoesNotExist: + #no well found. + pass + + # If found a Well record to propagate attribute values from, + # then override the values of the target attributes in the request object + # to be the concatenation of [previous value] + [separator] + [space] + # + [new value] + if record_to_copy_from: + separator_ends_with_whitespace = separator != separator.rstrip() + # iterate over all the attributes that will be copied from the previous + # submission + for attr_name in attributes_to_propagate: + attr_value = getattr(record_to_copy_from, attr_name) + if attr_value: + updated_value = attr_value.strip() + if attr_name in request.data and request.data[attr_name]: + # concacatenate [previous value] + [separator] + + # [space] + [new value] + if not updated_value.endswith(separator): + updated_value += f"{separator}" + if not separator_ends_with_whitespace: + updated_value += " " + updated_value += request.data[attr_name] + # update the attribute value in the request object + request.data[attr_name] = updated_value + class SubmissionGetAPIView(RetrieveAPIView): - """Get a submission""" + """Get a submission.""" permission_classes = (WellsSubmissionViewerPermissions,) queryset = ActivitySubmission.objects.all() @@ -200,7 +256,8 @@ def get_serializer(self, *args, **kwargs): class SubmissionListAPIView(ListAPIView): """List submissions - get: returns a list of well activity submissions + get: + Returns a list of well activity submissions. """ permission_classes = (WellsSubmissionViewerPermissions,) @@ -262,7 +319,7 @@ def post(self, request, *args, **kwargs): class SubmissionConstructionAPIView(SubmissionBase): - """Create a construction submission""" + """Create a construction submission.""" model = ActivitySubmission serializer_class = WellConstructionSubmissionSerializer @@ -282,26 +339,40 @@ class SubmissionAlterationAPIView(SubmissionBase): permission_classes = (WellsSubmissionPermissions,) queryset = ActivitySubmission.objects.all() + def post(self, request, *args, **kwargs): + # modify the request: copy the values of 'comments' and 'internal_comments' + # from the previous Submission into the current Submission (plus add any + # newly submitted comments). + propagate_submission_comments(request) + return super().post(request, *args, **kwargs) + def get_queryset(self): return get_submission_queryset(self.queryset)\ .filter(well_activity_type=WellActivityCode.types.alteration()) class SubmissionDecommissionAPIView(SubmissionBase): - """Create a decommission submission""" + """Create a decommission submission.""" model = ActivitySubmission serializer_class = WellDecommissionSubmissionSerializer permission_classes = (WellsSubmissionPermissions,) queryset = ActivitySubmission.objects.all() + def post(self, request, *args, **kwargs): + # modify the request: copy the values of 'comments' and 'internal_comments' + # from the previous Submission into the current Submission (plus add any + # newly submitted comments). + propagate_submission_comments(request) + return super().post(request, *args, **kwargs) + def get_queryset(self): return get_submission_queryset(self.queryset)\ .filter(well_activity_type=WellActivityCode.types.decommission()) class SubmissionStaffEditAPIView(SubmissionBase): - """ Create a staff edit submission""" + """ Create a staff edit submission.""" model = ActivitySubmission serializer_class = WellStaffEditSubmissionSerializer permission_classes = (WellsEditPermissions,) @@ -320,9 +391,7 @@ def get_queryset(self): class SubmissionsOptions(APIView): - """Options required for submitting activity report forms""" - - swagger_schema = None + """Options required for submitting activity report forms.""" def get(self, request, **kwargs): options = {} @@ -352,6 +421,10 @@ def get(self, request, **kwargs): instance=WellOrientationCode.objects.all(), many=True) boundary_effect_codes = BoundaryEffectCodeSerializer( instance=BoundaryEffectCode.objects.all(), many=True) + pumping_test_description_codes = PumpingTestDescriptionCodeSerializer( + instance=PumpingTestDescriptionCode.objects.all(), many=True) + analysis_method_codes = AnalysisMethodCodeSerializer( + instance=AnalysisMethodCode.objects.all(), many=True) drive_shoe_codes = DriveShoeCodeSerializer( instance=DriveShoeCode.objects.all(), many=True) filter_pack_material = FilterPackMaterialCodeSerializer( @@ -412,11 +485,11 @@ def get(self, request, **kwargs): instance=LithologyDescriptionCode.objects.all(), many=True) licenced_status_codes = LicencedStatusCodeSerializer( instance=LicencedStatusCode.objects.all(), many=True) - + root = urljoin('/', app_root, 'api/v2/') for item in activity_codes.data: if item['code'] not in ('LEGACY'): - item['path'] = reverse(item['code'], request=request)[len(root):] + item['path'] = reverse(item['code'], kwargs={'version': 'v2'})[len(root):] options["province_codes"] = province_codes.data options["activity_types"] = activity_codes.data @@ -430,6 +503,8 @@ def get(self, request, **kwargs): options["well_disinfected_codes"] = well_disinfected_codes.data options["well_orientation_codes"] = well_orientation_codes.data options["boundary_effect_codes"] = boundary_effect_codes.data + options["pumping_test_description_codes"] = pumping_test_description_codes.data + options["analysis_method_codes"] = analysis_method_codes.data options["drive_shoe_codes"] = drive_shoe_codes.data options["filter_pack_material"] = filter_pack_material.data options["filter_pack_material_size"] = filter_pack_material_size.data @@ -468,7 +543,8 @@ class PreSignedDocumentKey(RetrieveAPIView): """ Get a pre-signed document key to upload into an S3 compatible document store - post: obtain a URL that is pre-signed to allow client-side uploads + post: + Obtain a URL that is pre-signed to allow client-side uploads. """ queryset = ActivitySubmission.objects.all() @@ -493,3 +569,63 @@ def get(self, request, submission_id, **kwargs): filename, bucket_name=bucket_name, private=is_private) return JsonResponse({"object_name": object_name, "url": url}) + + + +class EmailNotification(APIView): + """ + Send GWELLS team notification of anyone changing the GPS COORDS of a well flagged for drinking water. + """ + permission_classes = (WellsSubmissionPermissions,) + + def post(self, request, *args, **kwargs): + well_tag_number = request.query_params.get('well_tag_number') + latitude = request.query_params.get('latitude') + longitude = request.query_params.get('longitude') + initial_latitude = request.query_params.get('initialLatitude') + initial_longitude = request.query_params.get('initialLongitude') + test_env = request.query_params.get('testEnv') + + recipient = get_env_variable("EMAIL_NOTIFICATION_RECIPIENT") + subject = f'Warning: drinking water well location updated for well {well_tag_number}' + well_link = f'https://apps.nrs.gov.bc.ca/gwells/well/{well_tag_number}' + + test_env_message = '' + link_message = 'Link to well: ' + well_link + + # Instead of showing the different local/dev/test URLs, we just remove the link to the well unless it's prod + # Show a warning that this is from a test environment just to be clear + if test_env == 'true': + test_env_message = '**NOTE: THIS IS FROM A TEST ENVIRONMENT**' + link_message = '' + + # multiply longitude by -1 to get a positive value, as most people don't expect negative longitudes + # this matches what is done in the frontend (Coords.vue) + message = f''' + This is a warning: there has been a change in coordinates for well {well_tag_number}. This well has been marked as a source of drinking water. + + {test_env_message} + + {link_message} + + Previous Coordinates: + Latitude: {initial_latitude} + Longitude: {float(initial_longitude)*-1} + + New Coordinates: + Latitude: {latitude} + Longitude: {float(longitude)*-1} + + {test_env_message} + ''' + + try: + logger.info("Attempting to send mail") + send_mail(subject, message, "Sustainment.Team@gov.bc.ca", [recipient]) + logger.info("Email has been sent") + return JsonResponse({'message': 'Email sent successfully'}) + + except Exception as e: + logger.error(str(e)) + logger.error(request) + return JsonResponse({'error': str(e)}, status=500) diff --git a/gwells/app/backend/wells/admin.py b/gwells/app/backend/wells/admin.py index 6b68833f1..403d2dc0a 100644 --- a/gwells/app/backend/wells/admin.py +++ b/gwells/app/backend/wells/admin.py @@ -19,7 +19,9 @@ WaterQualityColour, FilterPackMaterialSizeCode, FilterPackMaterialCode, - Well + Well, + WellAttachment, + WellLicence ) from gwells.models.lithology import ( LithologyColourCode, LithologyHardnessCode, @@ -39,3 +41,5 @@ admin.site.register(FilterPackMaterialSizeCode) admin.site.register(FilterPackMaterialCode) admin.site.register(Well) +admin.site.register(WellAttachment) +admin.site.register(WellLicence) diff --git a/gwells/app/backend/wells/apps.py b/gwells/app/backend/wells/apps.py index 759bb7c0e..99072019b 100644 --- a/gwells/app/backend/wells/apps.py +++ b/gwells/app/backend/wells/apps.py @@ -33,3 +33,5 @@ class WellsConfig(AppConfig): def ready(self): post_migrate.connect(post_migration_callback, sender=self) + import wells.signals #noqa + import wells.utils #noqa diff --git a/gwells/app/backend/wells/change_history.py b/gwells/app/backend/wells/change_history.py index e28cf17cf..a3553dfbc 100644 --- a/gwells/app/backend/wells/change_history.py +++ b/gwells/app/backend/wells/change_history.py @@ -21,7 +21,8 @@ ScreenSerializer, LinerPerforationSerializer, DecommissionDescriptionSerializer, - LithologyDescriptionSummarySerializer + LithologyDescriptionSummarySerializer, + AquiferParametersSummarySerializer ) from wells.stack import MANY_TO_MANY_LOOKUP, merge_series from submissions.models import WELL_ACTIVITY_CODE_LEGACY, WELL_ACTIVITY_CODE_STAFF_EDIT @@ -72,7 +73,8 @@ 'screen_set': ScreenSerializer, 'linerperforation_set': LinerPerforationSerializer, 'decommission_description_set': DecommissionDescriptionSerializer, - 'lithologydescription_set': LithologyDescriptionSummarySerializer + 'lithologydescription_set': LithologyDescriptionSummarySerializer, + 'aquifer_parameters_set': AquiferParametersSummarySerializer, } ALL_SUBMISSION_FOREIGN_KEY = [ "well_activity_type", @@ -116,6 +118,7 @@ "lithologydescription_set", "linerperforation_set", "casing_set", + "aquifer_parameters_set", "screen_set", "decommission_description_set", ] diff --git a/gwells/app/backend/wells/constants.py b/gwells/app/backend/wells/constants.py index 5bffa455f..b5cf9a6d7 100644 --- a/gwells/app/backend/wells/constants.py +++ b/gwells/app/backend/wells/constants.py @@ -1,2 +1,68 @@ MAX_EXPORT_COUNT = 999999 MAX_LOCATION_COUNT = 999999 + +WELL_TAGS_PUBLIC = [ + { "text": "Well Construction Report", "value": "Well Construction" }, + { "text": "Well Alteration Report", "value": "Well Alteration" }, + { "text": "Well Decommission Report", "value": "Well Decommission" }, + { "text": "Pictures/Photos", "value": "Photo" }, + { "text": "Well Pump Installation Report", "value": "Well Pump Installation" }, + { "text": "Pumping Test Raw Data", "value": "Pumping Test Data" }, + { "text": "Directions Artesian Conditions", "value": "Directions_ArtesianConditions"}, + { "text": "Map(s)", "value": "Map" }, + { "text": "Other", "value": "Additional Details" }, +] + + +WELL_TAGS_PRIVATE = [ + { "text": "Well Inspection Report", "value": "Well Inspection" }, + { "text": "Alternative Specifications", "value": "Alternative Specs" }, + { "text": "Water Quality Report", "value": "Water Quality" }, + { "text": "Health Authority Report", "value": "Health Authority" }, + { "text": "Consultant's Report", "value": "Consultants Report" }, + { "text": "Signed Sharing Agreement", "value": "Sharing Agreement" }, + { "text": "Artesian Management Report", "value": "ArtesianMgmtReport" }, + { "text": "Pumping Test Info", "value": "Pumping Test Info" }, +] + +WELL_TAGS = [] +WELL_TAGS.extend(WELL_TAGS_PUBLIC.copy()) +WELL_TAGS.extend(WELL_TAGS_PRIVATE.copy()) + +# bc geocoder endpoint of interest +GEOCODER_ENDPOINT = "https://geocoder.api.gov.bc.ca/sites/nearest.json" +ADDRESS_COLUMNS = [ + "fullAddress", + "siteName", + "unitDesignator", + "unitNumber", + "unitNumberSuffix", + "civicNumber", + "civicNumberSuffix", + "streetName", + "streetType", + "isStreetTypePrefix", + "streetDirection", + "isStreetDirectionPrefix", + "streetQualifier", + "localityName", + "localityType", + "electoralArea", + "provinceCode", + "locationPositionalAccuracy", + "locationDescriptor", + "siteID", + "blockID", + "fullSiteDescriptor", + "accessNotes", + "siteStatus", + "siteRetireDate", + "changeDate", + "isOfficial", + "distance", +] + +WELL_ACTIVITY_CODE_CONSTRUCTION = 'CON' +WELL_ACTIVITY_CODE_DECOMMISSION = 'DEC' +WELL_ACTIVITY_CODE_ALTERATION = 'ALT' +WELL_ACTIVITY_CODE_STAFF_EDIT = 'STAFF_EDIT' \ No newline at end of file diff --git a/gwells/app/backend/wells/data_migrations.py b/gwells/app/backend/wells/data_migrations.py index 5e78dc254..c0d294bd2 100644 --- a/gwells/app/backend/wells/data_migrations.py +++ b/gwells/app/backend/wells/data_migrations.py @@ -222,6 +222,36 @@ def unload_boundary_effect_codes(apps, schema_editor): return boundary_effect_code_fixture().unload_fixture(apps, schema_editor) +def pumping_test_description_codes_fixture(): + fixture = 'migrations/pumping_test_description_codes.json' + fixture_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), fixture) + + return CodeFixture(fixture_path) + + +def load_pumping_test_description_codes(apps, schema_editor): + return pumping_test_description_codes_fixture().load_fixture(apps, schema_editor) + + +def unload_pumping_test_description_codes(apps, schema_editor): + return pumping_test_description_codes_fixture().unload_fixture(apps, schema_editor) + + +def analysis_method_codes_fixture(): + fixture = 'migrations/analysis_method_codes.json' + fixture_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), fixture) + + return CodeFixture(fixture_path) + + +def load_analysis_method_codes(apps, schema_editor): + return analysis_method_codes_fixture().load_fixture(apps, schema_editor) + + +def unload_analysis_method_codes(apps, schema_editor): + return analysis_method_codes_fixture().unload_fixture(apps, schema_editor) + + def drive_shoe_code_fixture(): fixture = 'migrations/drive_shoe_codes.json' fixture_path = os.path.join(os.path.dirname(os.path.realpath(__file__)), fixture) diff --git a/gwells/app/backend/wells/filters.py b/gwells/app/backend/wells/filters.py index fc30ac0fc..abb5907c5 100644 --- a/gwells/app/backend/wells/filters.py +++ b/gwells/app/backend/wells/filters.py @@ -14,20 +14,25 @@ import json import logging from collections import OrderedDict +from datetime import datetime, timedelta from django import forms from django.core.exceptions import FieldDoesNotExist +from django.db import connection +from django.contrib.gis.db import models from django.http import HttpRequest, QueryDict from django.contrib.gis.geos import GEOSException, Polygon, GEOSGeometry, Point from django.contrib.gis.gdal import GDALException from django.contrib.gis.db.models.functions import Transform from django.contrib.gis.measure import D -from django.db.models import Max, Min, Q, QuerySet +from django.db.models import Max, Min, Q, QuerySet, Subquery, OuterRef, \ + Case, F, DateField, When from django_filters import rest_framework as filters from django_filters.widgets import BooleanWidget from rest_framework.exceptions import ValidationError from rest_framework.filters import BaseFilterBackend, OrderingFilter from rest_framework.request import clone_request +from django.db.models.functions import Coalesce from gwells.roles import WELLS_VIEWER_ROLE from wells.models import ( @@ -37,6 +42,20 @@ WellOrientationCode, WaterQualityCharacteristic, Well, + WellAttachment, + PumpingTestDescriptionCode, + BoundaryEffectCode, + AnalysisMethodCode, + LithologyDescription, + Casing, + ActivitySubmission +) +from wells.constants import ( + WELL_TAGS, + WELL_ACTIVITY_CODE_STAFF_EDIT, + WELL_ACTIVITY_CODE_CONSTRUCTION, + WELL_ACTIVITY_CODE_DECOMMISSION, + WELL_ACTIVITY_CODE_ALTERATION, ) logger = logging.getLogger('wells_filters') @@ -212,7 +231,9 @@ class WellListFilter(AnyOrAllFilterSet): filter_pack_range = filters.RangeFilter(method='filter_filter_pack_range', label='Filter pack from/to range') liner_range = filters.RangeFilter(method='filter_liner_range', label='Liner range') - + well_document_type = filters.CharFilter(method='filter_by_document_type', + label='Contains document type') + # Don't require a choice (i.e. select box) for aquifer aquifer = filters.NumberFilter() @@ -275,14 +296,25 @@ class WellListFilter(AnyOrAllFilterSet): decommission_backfill_material = filters.CharFilter(lookup_expr='icontains') decommission_details = filters.CharFilter(lookup_expr='icontains') aquifer_vulnerability_index = filters.RangeFilter() - storativity = filters.RangeFilter() - transmissivity = filters.RangeFilter() - hydraulic_conductivity = filters.CharFilter(lookup_expr='icontains') specific_storage = filters.CharFilter(lookup_expr='icontains') - specific_yield = filters.RangeFilter() - testing_method = filters.CharFilter(lookup_expr='icontains') - testing_duration = filters.RangeFilter() - analytic_solution_type = filters.RangeFilter() + + testing_number = filters.RangeFilter(field_name='aquifer_parameters_set__testing_number') + start_date_pumping_test = filters.DateFromToRangeFilter(label='Pumping Test Date', + field_name='aquifer_parameters_set__start_date_pumping_test') + pumping_test_description = filters.ModelChoiceFilter( + queryset=PumpingTestDescriptionCode.objects.all(), field_name='aquifer_parameters_set__pumping_test_description') + test_duration = filters.RangeFilter(field_name='aquifer_parameters_set__test_duration') + boundary_effect = filters.ModelChoiceFilter( + queryset=BoundaryEffectCode.objects.all(), field_name='aquifer_parameters_set__boundary_effect') + storativity = filters.RangeFilter(field_name='aquifer_parameters_set__storativity') + transmissivity = filters.RangeFilter(field_name='aquifer_parameters_set__transmissivity') + hydraulic_conductivity = filters.RangeFilter(field_name='aquifer_parameters_set__hydraulic_conductivity') + specific_yield = filters.RangeFilter(field_name='aquifer_parameters_set__specific_yield') + specific_capacity = filters.RangeFilter(field_name='aquifer_parameters_set__specific_capacity') + analysis_method = filters.ModelChoiceFilter( + queryset=AnalysisMethodCode.objects.all(), field_name='aquifer_parameters_set__analysis_method') + comments = filters.CharFilter(lookup_expr='icontains', + field_name='aquifer_parameters_set__comments') final_casing_stick_up = filters.RangeFilter() bedrock_depth = filters.RangeFilter() static_water_level = filters.RangeFilter() @@ -309,6 +341,8 @@ class WellListFilter(AnyOrAllFilterSet): well_orientation_status = filters.ModelChoiceFilter(queryset=WellOrientationCode.objects.all()) alternative_specs_submitted = filters.BooleanFilter(widget=BooleanWidget) + technical_report = filters.BooleanFilter(widget=BooleanWidget) + drinking_water_protection_area_ind = filters.BooleanFilter(widget=BooleanWidget) hydro_fracturing_performed = filters.BooleanFilter(widget=BooleanWidget) company_of_person_responsible = filters.UUIDFilter(field_name='company_of_person_responsible') @@ -327,13 +361,18 @@ class WellListFilter(AnyOrAllFilterSet): method='filter_licenced_status', label='Licence status' ) - + licence_number = filters.NumberFilter(field_name='licence_number', + method="filter_licence_number", + label="Licence Number" + ) class Meta: model = Well fields = [ 'alteration_end_date', 'alteration_start_date', 'alternative_specs_submitted', + 'technical_report', + 'drinking_water_protection_area_ind', 'analytic_solution_type', 'aquifer', 'aquifer_lithology', @@ -395,6 +434,7 @@ class Meta: 'legal_range', 'legal_section', 'legal_township', + 'licence_number', 'licenced_status', 'liner_diameter', 'liner_from', @@ -444,6 +484,7 @@ class Meta: 'well_class', 'well_depth', 'well_disinfected_status', + 'well_document_type', 'well_identification_plate_attached', 'well_location_description', 'well_orientation_status', @@ -487,6 +528,38 @@ def filter_street_address_or_city(self, queryset, name, value): return queryset.filter(Q(street_address__icontains=value) | Q(city__icontains=value)) + def filter_licence_number(self, queryset, name, value): + raw_query = """ + SELECT DISTINCT + wl.well_id + FROM well_licences wl + LEFT JOIN aquifers_waterrightslicence aw + ON aw.wrl_sysid = wl.waterrightslicence_id + WHERE aw.licence_number = %s + """ + params = [value] + try: + if int(value): + with connection.cursor() as cursor: + cursor.execute(raw_query, params) + result = cursor.fetchall() + well_ids = [row[0] for row in result] + print(well_ids) + return queryset.filter(well_tag_number__in=well_ids) + except: + pass + logger.warning(f"[FILTER SEARCH]: invalid licence_number '{value}' was inputted.") + return queryset.filter(well_tag_number=None) + + def filter_by_document_type(self, queryset, name, value): + if any(value == entry["value"] for entry in WELL_TAGS): + filter_condition = {f"{value.lower().replace(' ', '_')}__gt": 0} + attachments = WellAttachment.objects.filter(**filter_condition).values_list('well_tag_number', flat=True) + attachments = list(map(int, attachments)) + return queryset.filter(well_tag_number__in=attachments) + logger.warning(f"[FILTER SEARCH]: invalid document_type '{value}' was inputted.") + return queryset.filter(well_tag_number=None) + def filter_combined_legal(self, queryset, name, value): lookups = ( Q(legal_lot__iexact=value) | @@ -496,7 +569,7 @@ def filter_combined_legal(self, queryset, name, value): # Check if we have a positive integer before querying the # legal_pid field. try: - int_value = int(value) + int_value = int(value.replace("-", "")) except (TypeError, ValueError): pass else: @@ -662,6 +735,8 @@ def filter_queryset(self, request, queryset, view): for group in filter_groups: try: group_params = json.loads(group) + if 'legal_pid' in group_params.keys(): + group_params['legal_pid'] = group_params['legal_pid'].replace("-", "") except ValueError as exc: raise ValidationError({ 'filter_group': 'Error parsing JSON data: {}'.format(exc), @@ -701,7 +776,6 @@ class WellListOrderingFilter(OrderingFilter): for field in Well._meta.get_fields() if field.many_to_many and not field.auto_created } - def get_ordering(self, request, queryset, view): ordering = super().get_ordering(request, queryset, view) updated_ordering = [] @@ -769,3 +843,369 @@ def filter_queryset(self, request, queryset, view): return queryset.order_by(*ordering) return queryset + + +class WellQaQcFilterBackend(filters.DjangoFilterBackend): + """ + Custom well list filtering logic for the QaQc Dashboard. + allows additional 'filter_group' params. + """ + def parse_datetime_with_fallback(self, date_str): + try: + # First, try to parse with full datetime format + return datetime.strptime(date_str, "%Y-%m-%dT%H:%M:%S.%fZ") + except ValueError: + # If it fails, parse with date-only format and assume midnight + return datetime.strptime(date_str, "%Y-%m-%d") + + + def filter_queryset(self, request, queryset, view): + try: + filter_groups = request.query_params.getlist('filter_group', []) + for group in filter_groups: + try: + group_params = json.loads(group) + except ValueError as exc: + raise ValidationError({ + 'filter_group': 'Error parsing JSON data: {}'.format(exc), + }) + + if not group_params: + continue + + q_objects = Q() + q_fields = [ + 'well_tag_number', 'identification_plate_number', 'natural_resource_region', + 'cross_referenced_by', 'create_user', 'update_user', 'internal_comments', + 'comments' + ] + date_fields = [ + 'create_date_before', 'create_date_after', + 'update_date_before', 'update_date_after', + 'cross_referenced_date_before', 'cross_referenced_date_after' + ] + + for field, value in group_params.items(): + if field in q_fields and value != 'null': + q_objects &= Q(**{f'{field}__icontains': value}) + + # Set filter date fields + elif field in date_fields: + suffix = field.split('_')[-1] # after or before + date_field = '_'.join(field.split('_')[:-1]) # remove _after or _before + # Use the new parsing function with fallback + date_value = self.parse_datetime_with_fallback(value) + if suffix == 'after': + # Set to the start of the day if only a date is provided + if len(value) <= 10: # YYYY-MM-DD is 10 characters + start_of_day = date_value + else: + start_of_day = date_value + q_objects &= Q(**{f'{date_field}__gte': start_of_day}) + elif suffix == 'before': + # Set to the end of the day if only a date is provided + if len(value) <= 10: # YYYY-MM-DD is 10 characters + end_of_day = datetime.combine(date_value, datetime.max.time()) + else: + end_of_day = date_value + q_objects &= Q(**{f'{date_field}__lte': end_of_day}) + + # Apply range filters + elif field.endswith('min') or field.endswith('max'): + range_field = '_'.join(field.split('_')[:-1]) # remove _min or _max + suffix = field.split('_')[-1] # min or max + if suffix == 'min': + q_objects &= Q(**{f'{range_field}__gte': value}) + elif suffix == 'max': + q_objects &= Q(**{f'{range_field}__lte': value}) + + # Directly handle special cases for fields like latitude and longitude + elif field in ['latitude', 'longitude'] and value == 'null': + q_objects &= Q(**{'geom__isnull': True}) + + elif field == 'intended_water_use': + q_objects &= Q(intended_water_use__intended_water_use_code=value) + + # Person responsible checks + elif field == 'person_responsible_name' and value != 'null': + q_objects &= ( + Q(person_responsible__first_name__icontains=value) | + Q(person_responsible__surname__icontains=value) + ) + + elif field == 'person_responsible_name' and value == 'null': + q_objects &= (Q(person_responsible__isnull=True) | Q(person_responsible__first_name__isnull=True) | + Q(person_responsible__first_name='') | Q(person_responsible__first_name=' ')) + + elif field == 'company_of_person_responsible_name' and value != 'null': + q_objects &= Q(company_of_person_responsible__name__icontains=value) + + elif field == 'company_of_person_responsible_name' and value == 'null': + q_objects &= (Q(company_of_person_responsible__isnull=True) | + Q(company_of_person_responsible__name__isnull=True) | + Q(company_of_person_responsible__name='') | Q(company_of_person_responsible__name=' ')) + + elif field == 'well_class': + q_objects &= Q(well_class__well_class_code=value) + + elif field == 'well_subclass' and value != '00000000-0000-0000-0000-000000000000': + q_objects &= Q(well_subclass__well_subclass_guid=value) + + # Check for null 'well_subclass' + elif field == 'well_subclass' and value == '00000000-0000-0000-0000-000000000000': + q_objects &= Q(well_subclass__well_subclass_guid__isnull=True) + + # Check for null or empty 'aquifer_lithology' + elif field == 'aquifer_lithology' and value == 'null': + # Subquery to get the last lithology description's raw data for each well + last_lithology_raw_data = Subquery( + LithologyDescription.objects.filter( + well=OuterRef('pk') + ).order_by('-end').values('lithology_raw_data')[:1] + ) + queryset = queryset.annotate( + last_lithology_raw_data=last_lithology_raw_data + ) + q_objects &= ( + Q(last_lithology_raw_data__isnull=True) | + Q(last_lithology_raw_data='') | + Q(last_lithology_raw_data=' ') + ) + + # Check for null or empty 'casing_diameter' using the subquery + elif field == 'diameter' and value == 'null': + # Subquery to get the last casing's diameter for each well + last_casing_diameter = Subquery( + Casing.objects.filter( + well=OuterRef('pk') + ).order_by('-end').values('diameter')[:1] + ) + queryset = queryset.annotate( + last_casing_diameter=last_casing_diameter + ) + q_objects &= Q(last_casing_diameter__isnull=True) + + elif field == 'well_activity_type': + # Subquery to get the well_activity_type__code of the latest ActivitySubmission + # for each well, excluding 'STAFF_EDIT' + latest_well_activity_type_code = Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') # Reference the outer Well's primary key + ).exclude( + well_activity_type__code="STAFF_EDIT" + ).order_by( + '-work_end_date' # Ensure the latest activity comes first + ).values( + 'well_activity_type__code' # Select the well_activity_type__code field + )[:1] # Limit to the first (latest) entry + ) + # Annotate the queryset with the result of the subquery + queryset = queryset.annotate( + latest_well_activity_type_code=latest_well_activity_type_code + ) + # Apply filters based on the annotated 'latest_well_activity_type_code' + if value == 'null': + q_objects &= Q(latest_well_activity_type_code__isnull=True) + else: + q_objects &= Q(latest_well_activity_type_code=value) + + elif field == 'work_start_date' and value == 'null': + queryset = queryset.annotate( + last_work_start_date=Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') + ).exclude( + well_activity_type__code=WELL_ACTIVITY_CODE_STAFF_EDIT + ).order_by('-work_end_date').annotate( + correct_start_date=Case( + When( + well_activity_type__code=WELL_ACTIVITY_CODE_CONSTRUCTION, + construction_start_date__isnull=False, + then=F('construction_start_date') + ), + When( + well_activity_type__code=WELL_ACTIVITY_CODE_ALTERATION, + alteration_start_date__isnull=False, + then=F('alteration_start_date') + ), + When( + well_activity_type__code=WELL_ACTIVITY_CODE_DECOMMISSION, + decommission_start_date__isnull=False, + then=F('decommission_start_date') + ), + default=Coalesce( + 'work_start_date', + 'construction_start_date', + 'alteration_start_date', + 'decommission_start_date', + output_field=DateField() + ), + output_field=DateField() + ) + ).values('correct_start_date')[:1], + output_field=DateField() + ) + ) + q_objects &= Q(last_work_start_date__isnull=True) + + elif field == 'work_end_date' and value == 'null': + queryset = queryset.annotate( + last_work_end_date=Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') + ).exclude( + well_activity_type__code=WELL_ACTIVITY_CODE_STAFF_EDIT + ).order_by('-work_end_date').annotate( + correct_end_date=Case( + When( + well_activity_type__code=WELL_ACTIVITY_CODE_CONSTRUCTION, + construction_end_date__isnull=False, + then=F('construction_end_date') + ), + When( + well_activity_type__code=WELL_ACTIVITY_CODE_ALTERATION, + alteration_end_date__isnull=False, + then=F('alteration_end_date') + ), + When( + well_activity_type__code=WELL_ACTIVITY_CODE_DECOMMISSION, + decommission_end_date__isnull=False, + then=F('decommission_end_date') + ), + default=Coalesce( + 'work_end_date', + 'construction_end_date', + 'alteration_end_date', + 'decommission_end_date', + output_field=DateField() + ), + output_field=DateField() + ) + ).values('correct_end_date')[:1], + output_field=DateField() + ) + ) + q_objects &= Q(last_work_end_date__isnull=True) + + # This acts as a catch all for all null field checks + elif value == 'null': + # Check if the field exists in the model + try: + field_obj = queryset.model._meta.get_field(field) + except models.FieldDoesNotExist: + continue + + # Now handling CharField, including checks for empty strings and spaces + if isinstance(field_obj, models.CharField): + q_objects &= (Q(**{f'{field}__isnull': True}) | Q(**{f'{field}': ''}) | Q(**{f'{field}': ' '})) + else: + # For other field types, just check for null + q_objects &= Q(**{f'{field}__isnull': True}) + + # Apply the combined Q object filters to the queryset + queryset = queryset.filter(q_objects) + + # Apply any custom sorting + queryset = self.sort_ordering(request, queryset) + + except Exception as e: + print(e) + return queryset + + def sort_ordering(self, request, queryset): + # Apply custom ordering on the calculated annotation fields + # If not a custom field set here, ordering will fall back + # to WellListOrderingFilter class, set in serializer + # Get ordering params + order_value = request.query_params.get('ordering', 'well_tag_number') + order_field = order_value.lstrip('-') + + # Handle custom ordering for well_subclass + if order_field == 'well_subclass': + # Annotate queryset with the description of the well subclass for ordering + queryset = queryset.annotate( + well_subclass_description=models.F('well_subclass__description') + ) + + # Determine if we are ordering in descending order + if order_value.startswith('-'): + order_value = '-well_subclass_description' + else: + order_value = 'well_subclass_description' + + # Return the queryset ordered by the annotated well subclass description + return queryset.order_by(order_value) + + if order_field not in ['aquifer_lithology', 'diameter', 'well_activity_type', + 'work_start_date', 'work_end_date']: + return queryset + + # Mapping of fields to their related order fields + related_order_mapping = { + 'aquifer_lithology': 'last_lithology_raw_data', + 'diameter': 'last_casing_diameter', + 'well_activity_type': 'latest_well_activity_type_code', + 'work_start_date': 'last_activity_start_date', + 'work_end_date': 'last_activity_end_date' + } + + # Get mapped annoation name + related_order = related_order_mapping.get(order_field, '') + + # if we're descending, then add the negative sign prefix + if order_value.startswith('-'): + related_order = f'-{related_order}' + + # print(f"ORDER VALUES: {order_value}, Descending: {order_value.startswith('-')}, Field: {order_field}") + + # Apply sorting field annotations + queryset = self.annotate_custom_fields(queryset, order_field) + + # Return ordered queryset + return queryset.order_by(related_order) + + + def annotate_custom_fields(self, queryset, field_name): + # Apply annotations for calculated fields if they are not already annotated + if field_name == 'aquifer_lithology' and not queryset.query.annotations.get('last_lithology_raw_data'): + queryset = queryset.annotate(last_lithology_raw_data=Subquery( + LithologyDescription.objects.filter( + well=OuterRef('pk') + ).order_by('-end').values('lithology_raw_data')[:1] + )) + + if field_name == 'diameter' and not queryset.query.annotations.get('last_casing_diameter'): + queryset = queryset.annotate(last_casing_diameter=Subquery( + Casing.objects.filter( + well=OuterRef('pk') + ).order_by('-end').values('diameter')[:1] + )) + + if field_name == 'well_activity_type' and not queryset.query.annotations.get('latest_well_activity_type_code'): + queryset = queryset.annotate(latest_well_activity_type_code=Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') + ).exclude( + well_activity_type__code="STAFF_EDIT" + ).order_by( + '-work_end_date' + ).values( + 'well_activity_type__code' + )[:1] + )) + + if field_name == 'work_start_date' and not queryset.query.annotations.get('last_activity_start_date'): + queryset = queryset.annotate(last_activity_start_date=Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') + ).order_by('-work_start_date').values('work_start_date')[:1] + )) + + if field_name == 'work_end_date' and not queryset.query.annotations.get('last_activity_end_date'): + queryset = queryset.annotate(last_activity_end_date=Subquery( + ActivitySubmission.objects.filter( + well=OuterRef('pk') + ).order_by('-work_end_date').values('work_end_date')[:1] + )) + + return queryset diff --git a/gwells/app/backend/wells/fixtures/qaqc_well_data.zip b/gwells/app/backend/wells/fixtures/qaqc_well_data.zip new file mode 100644 index 000000000..f367c1931 Binary files /dev/null and b/gwells/app/backend/wells/fixtures/qaqc_well_data.zip differ diff --git a/gwells/app/backend/wells/fixtures/well_detail_fixture.json b/gwells/app/backend/wells/fixtures/well_detail_fixture.json index 751e2ee4a..7b36e43ab 100644 --- a/gwells/app/backend/wells/fixtures/well_detail_fixture.json +++ b/gwells/app/backend/wells/fixtures/well_detail_fixture.json @@ -114,5 +114,14 @@ "construction_start_date": null, "well_status": null, "filter_pack_thickness": null, - "well_yield": null}} + "well_yield": null, + "distance_to_pid": "123.45", + "geocode_distance": "543.21", + "score_address": "78.90", + "score_city": "56.78", + "cross_referenced": false, + "cross_referenced_date": "2023-02-08T17:06:47.229Z", + "cross_referenced_by": "DATA_LOAD_USER", + "natural_resource_region": "Northeast" + }} ] diff --git a/gwells/app/backend/wells/management/commands/export.py b/gwells/app/backend/wells/management/commands/export.py index b1ed814fd..785ed1dff 100644 --- a/gwells/app/backend/wells/management/commands/export.py +++ b/gwells/app/backend/wells/management/commands/export.py @@ -118,6 +118,14 @@ """) STATS_SQL_V2 = STATS_SQL_V1 +""" +Aquifer Parameters v1 & v2 +""" +AQUIFER_PARAMETERS_SQL_V1 = (""" + select * from export_aquifer_parameters_v1_view +""") +AQUIFER_PARAMETERS_SQL_V2 = AQUIFER_PARAMETERS_SQL_V1 + class Command(BaseCommand): @@ -145,6 +153,7 @@ def __init__(self): 'perforation': PERFORATION_EXPORT_VIEW_V1, 'drilling_method': DRILLING_METHOD_EXPORT_VIEW_V1, 'development_method': DEVELOPMENT_METHOD_EXPORT_VIEW_V1, + 'pt_aquifer_parameters': AQUIFER_PARAMETERS_SQL_V1, 'stats': STATS_SQL_V1 } }, @@ -158,6 +167,7 @@ def __init__(self): 'perforation': PERFORATION_EXPORT_VIEW_V2, 'drilling_method': DRILLING_METHOD_EXPORT_VIEW_V2, 'development_method': DEVELOPMENT_METHOD_EXPORT_VIEW_V2, + 'pt_aquifer_parameters': AQUIFER_PARAMETERS_SQL_V2, 'stats': STATS_SQL_V2 } } diff --git a/gwells/app/backend/wells/management/commands/populate_attachments_count.py b/gwells/app/backend/wells/management/commands/populate_attachments_count.py new file mode 100644 index 000000000..b377c9059 --- /dev/null +++ b/gwells/app/backend/wells/management/commands/populate_attachments_count.py @@ -0,0 +1,138 @@ +from django.core.management.base import BaseCommand +from wells.models import WellAttachment, Well +from django.db.models import Count +from wells.constants import WELL_TAGS +from gwells.documents import MinioClient +from collections import defaultdict +import logging + +class Command(BaseCommand): + help = 'Iterate through well tags and appropriately update file counts' + # Class Constants + BATCH_SIZE = 100 + CLIENT = MinioClient(disable_private=False) + + def __init__(self): + self.formatted_well_tags = self.format_well_tags() + self.logger = logging.getLogger(__name__) + super().__init__() + + def populate_wells_with_attachment_table(self): + """Summary: + Iterates existing well objects and creates entry in Attachments table if one doesn't already exist + """ + # Batch processing: Set a limit for fetching wells without attachments + batch_size = 100 + offset = 0 + + while True: + well_tag_numbers_without_attachment = ( + Well.objects + .annotate(attachment_count=Count('wellattachment')) + .filter(attachment_count=0) + .values_list('well_tag_number', flat=True)[offset:offset + batch_size] + ) + + if not well_tag_numbers_without_attachment: + break + + well_attachments_to_create = [] + + # Iterate through each tag number and create WellAttachment instances + for tag_number in well_tag_numbers_without_attachment: + well_instance = Well.objects.get(well_tag_number=tag_number) + well_attachment_instance = WellAttachment(well_tag_number=well_instance) + well_attachments_to_create.append(well_attachment_instance) + + # Bulk create for the current batch + WellAttachment.objects.bulk_create(well_attachments_to_create) + + # Move to the next batch + offset += batch_size + + + def format_well_tags(self): + """Summary: + Formats well tags at the start to reduce runtime of functions + Returns: + Array: formatted WELL_TAGS + """ + return [tag['value'].replace(" ", "_").lower() for tag in WELL_TAGS] + + + def get_well_tags(self, offset): + """Summary: + Gets and returns up to 100 well tag numbers to reduce memory load of function + + Args: + offset (Number): Offset to reduce memory consumption in call + + Returns: + Array: well tag numbers of batch + """ + return ( + Well.objects + .values('well_tag_number')[offset: offset + self.BATCH_SIZE] + .values_list('well_tag_number', flat=True) + ) + + + def get_or_create_entry(self, well_tag_number): + if WellAttachment.objects.filter(well_tag_number=well_tag_number).exists(): + return WellAttachment.objects.get(well_tag_number=well_tag_number) + else: + well = Well.objects.get(well_tag_number=well_tag_number) + return WellAttachment.objects.create(well_tag_number=well) + + def process_well_tag(self, well_tag_number): + """Summary: + Queries for files related to a well tag and updates the counted values in the WellAttachments table + """ + response = self.CLIENT.get_documents(int(well_tag_number), resource="well", include_private=True) + hash_map = defaultdict(int) + for doc in response['public']: + split_file = doc["name"].split("_") + if len(split_file) <= 3: + value = split_file[1].replace(" ", "_").lower() + if "." in value: + value = value.split(".")[0] + else: + value = split_file[1].lower() + "_" + split_file[2].lower() + hash_map[value] = (hash_map[value] or 0) + 1 + for doc in response['private']: + split_file = doc["name"].split("_") + if len(split_file) <= 3: + value = split_file[1].replace(" ", "_").lower() + else: + value = split_file[1].lower() + "_" + split_file[2].lower() + hash_map[value] = (hash_map[value] or 0) + 1 + + if hash_map: + try: + well_attachment_entry = self.get_or_create_entry(well_tag_number) + for key, value in hash_map.items(): + if "well_record" in key: + setattr(well_attachment_entry, 'well_construction', value) + elif key in self.formatted_well_tags: + setattr(well_attachment_entry, key, value) + else: + self.logger.info("Invalid file type for well %s: %s", well_tag_number, key) + well_attachment_entry.save() + except Exception as e: + self.logger.error(e) + + + def handle(self, *args, **options): + """Summary: + Function to iterate through Minio buckets in order to get the sum of all files relating to a well, + updates WellAttachment entry corresponding to well tag number + """ + offset = 0 + self.populate_wells_with_attachment_table() + while True: + well_tag_numbers = self.get_well_tags(offset) + if not well_tag_numbers: # No tags left to iterate + break + for well_tag_number in well_tag_numbers: + self.process_well_tag(well_tag_number) + offset += self.BATCH_SIZE diff --git a/gwells/app/backend/wells/management/commands/update_analysis_method_codes.py b/gwells/app/backend/wells/management/commands/update_analysis_method_codes.py new file mode 100644 index 000000000..9c6038917 --- /dev/null +++ b/gwells/app/backend/wells/management/commands/update_analysis_method_codes.py @@ -0,0 +1,16 @@ +from django.core.management.base import BaseCommand +from wells.models import AnalysisMethodCode +from collections import defaultdict +import json + +class Command(BaseCommand): + help = "Update values in the analysis_method_code table" + def update_analysis_method_codes(self): + analysis_method_codes = open("wells/migrations/analysis_method_codes.json") + analysis_codes = json.load(analysis_method_codes) + for entry in analysis_codes: + AnalysisMethodCode.objects.update_or_create(pk=entry["pk"], defaults=entry["fields"]) + + def handle(self, *args, **options): + self.update_analysis_method_codes() + print("update_analysis_method_codes.py completed successfully") diff --git a/gwells/app/backend/wells/management/commands/update_codes.py b/gwells/app/backend/wells/management/commands/update_codes.py new file mode 100644 index 000000000..bca995185 --- /dev/null +++ b/gwells/app/backend/wells/management/commands/update_codes.py @@ -0,0 +1,19 @@ +from django.core.management import call_command +from django.core.management.base import BaseCommand +import os, fnmatch + +class Command(BaseCommand): + file_pattern = 'update_*_codes.py' + folder_path = './wells/management/commands' + help = f'Run all commands using the {file_pattern} format' + + + def handle(self, *args, **options): + matching_files = [] + for file_name in os.listdir(self.folder_path): + if fnmatch.fnmatch(file_name, self.file_pattern): + matching_files.append(file_name) + print(len(matching_files), "files found") + for file_path in matching_files: + call_command(file_path.replace(".py","")) + print("update_codes has completed successfully") diff --git a/gwells/app/backend/wells/management/commands/update_drilling_method_codes.py b/gwells/app/backend/wells/management/commands/update_drilling_method_codes.py new file mode 100644 index 000000000..4ab58522f --- /dev/null +++ b/gwells/app/backend/wells/management/commands/update_drilling_method_codes.py @@ -0,0 +1,18 @@ +from django.core.management.base import BaseCommand +from wells.models import DrillingMethodCode +from collections import defaultdict +import json + +class Command(BaseCommand): + help = "Update a value in the drilling_methods_code table" + def update_drilling_method_codes(self): + drilling_method_codes = open("gwells/fixtures/wellsearch-codetables.json") + drilling_method_codes = json.load(drilling_method_codes) + + for item in drilling_method_codes: + if item["model"] == "wells.drillingmethodcode": + DrillingMethodCode.objects.update_or_create(pk=item["pk"], defaults=item["fields"]) + + def handle(self, *args, **options): + self.update_drilling_method_codes() + print("update_drilling_method_codes.py completed successfully") diff --git a/gwells/app/backend/wells/management/commands/update_pumping_test_description_codes.py b/gwells/app/backend/wells/management/commands/update_pumping_test_description_codes.py new file mode 100644 index 000000000..a38f2d692 --- /dev/null +++ b/gwells/app/backend/wells/management/commands/update_pumping_test_description_codes.py @@ -0,0 +1,17 @@ +from django.core.management.base import BaseCommand +from wells.models import PumpingTestDescriptionCode +from collections import defaultdict +import json + +class Command(BaseCommand): + help = "Update values in the pumping_test_description_code table" + + def update_pumping_test_description_codes(self): + pumping_test_description_codes = open("wells/migrations/pumping_test_description_codes.json") + pumping_codes = json.load(pumping_test_description_codes) + for entry in pumping_codes: + PumpingTestDescriptionCode.objects.update_or_create(pk=entry["pk"], defaults=entry["fields"]) + + def handle(self, *args, **options): + self.update_pumping_test_description_codes() + print("update_pumping_test_description_codes.py completed successfully") diff --git a/gwells/app/backend/wells/migrations/0125_refactor_inline_sql_export_wells_water_1545.py b/gwells/app/backend/wells/migrations/0125_refactor_inline_sql_export_wells_water_1545.py index 86de8f905..a60573623 100644 --- a/gwells/app/backend/wells/migrations/0125_refactor_inline_sql_export_wells_water_1545.py +++ b/gwells/app/backend/wells/migrations/0125_refactor_inline_sql_export_wells_water_1545.py @@ -34,8 +34,8 @@ land_district_code as land_district_code, legal_pid as legal_pid, well_location_description as well_location_description, - st_y(geom) as latitude, - st_x(geom) as longitude, + st_y(well.geom) as latitude, + st_x(well.geom) as longitude, utm_zone_code as utm_zone_code, utm_northing as utm_northing, utm_easting as utm_easting, @@ -169,8 +169,8 @@ land_district_code as land_district_code, legal_pid as legal_pid, well_location_description as well_location_description, - st_y(geom) as "latitude_Decdeg", - st_x(geom) as "longitude_Decdeg", + st_y(well.geom) as "latitude_Decdeg", + st_x(well.geom) as "longitude_Decdeg", utm_zone_code as utm_zone_code, utm_northing as utm_northing, utm_easting as utm_easting, @@ -254,7 +254,7 @@ specific_storage as "specific_storage_1/m", specific_yield as specific_yield, testing_method as testing_method, - testing_duration as testing_duration_hours, + testing_duration as test_duration, analytic_solution_type as analytic_solution_type, boundary_effect_code as boundary_effect_code, aquifer_lithology_code as aquifer_lithology_code, diff --git a/gwells/app/backend/wells/migrations/0129_alter_well_export_views_water_1687.py b/gwells/app/backend/wells/migrations/0129_alter_well_export_views_water_1687.py index 2c9cc2788..03c45e69f 100644 --- a/gwells/app/backend/wells/migrations/0129_alter_well_export_views_water_1687.py +++ b/gwells/app/backend/wells/migrations/0129_alter_well_export_views_water_1687.py @@ -42,8 +42,8 @@ land_district_code as land_district_code, legal_pid as legal_pid, well_location_description as well_location_description, - st_y(geom) as latitude, - st_x(geom) as longitude, + st_y(well.geom) as latitude, + st_x(well.geom) as longitude, utm_zone_code as utm_zone_code, utm_northing as utm_northing, utm_easting as utm_easting, @@ -178,8 +178,8 @@ land_district_code as land_district_code, legal_pid as legal_pid, well_location_description as well_location_description, - st_y(geom) as "latitude_Decdeg", - st_x(geom) as "longitude_Decdeg", + st_y(well.geom) as "latitude_Decdeg", + st_x(well.geom) as "longitude_Decdeg", utm_zone_code as utm_zone_code, utm_northing as utm_northing, utm_easting as utm_easting, @@ -262,7 +262,7 @@ specific_storage as "specific_storage_1/m", specific_yield as specific_yield, testing_method as testing_method, - testing_duration as testing_duration_hours, + testing_duration as test_duration, analytic_solution_type as analytic_solution_type, boundary_effect_code as boundary_effect_code, aquifer_lithology_code as aquifer_lithology_code, diff --git a/gwells/app/backend/wells/migrations/0134_alter_well_export_views_water_1545_v2.py b/gwells/app/backend/wells/migrations/0134_alter_well_export_views_water_1545_v2.py index 2e70c53ce..e83e8098a 100644 --- a/gwells/app/backend/wells/migrations/0134_alter_well_export_views_water_1545_v2.py +++ b/gwells/app/backend/wells/migrations/0134_alter_well_export_views_water_1545_v2.py @@ -42,8 +42,8 @@ land_district_code as land_district_code, legal_pid as legal_pid, well_location_description as well_location_description, - st_y(geom) as "latitude_Decdeg", - st_x(geom) as "longitude_Decdeg", + st_y(well.geom) as "latitude_Decdeg", + st_x(well.geom) as "longitude_Decdeg", utm_zone_code as utm_zone_code, utm_northing as utm_northing, utm_easting as utm_easting, @@ -125,7 +125,7 @@ specific_storage as "specific_storage_1/m", specific_yield as specific_yield, testing_method as testing_method, - testing_duration as testing_duration_hours, + testing_duration as test_duration, analytic_solution_type as analytic_solution_type, boundary_effect_code as boundary_effect_code, aquifer_lithology_code as aquifer_lithology_code, diff --git a/gwells/app/backend/wells/migrations/0135_auto_20210804_2205.py b/gwells/app/backend/wells/migrations/0135_auto_20210804_2205.py new file mode 100644 index 000000000..7b60505a8 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0135_auto_20210804_2205.py @@ -0,0 +1,17 @@ +# Generated by Django 2.2.24 on 2021-08-04 22:05 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0134_alter_well_export_views_water_1545_v2'), + ] + + operations = [ + migrations.AlterModelOptions( + name='lithologydescription', + options={'ordering': ['start', 'end']}, + ) + ] diff --git a/gwells/app/backend/wells/migrations/0136_add_technical_report_field.py b/gwells/app/backend/wells/migrations/0136_add_technical_report_field.py new file mode 100644 index 000000000..9f3669070 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0136_add_technical_report_field.py @@ -0,0 +1,29 @@ +# Generated by Django 2.2.28 on 2022-12-15 06:01 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0135_auto_20210804_2205'), + ] + + operations = [ + migrations.AddField( + model_name='activitysubmission', + name='technical_report', + field=models.BooleanField(default=False, verbose_name='Technical Report'), + ), + migrations.AddField( + model_name='fieldsprovided', + name='technical_report', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='well', + name='technical_report', + field=models.BooleanField(default=False, verbose_name='Technical Report'), + ), + ] diff --git a/gwells/app/backend/wells/migrations/0137_add_hydraulic_info_postgis_well_view.py b/gwells/app/backend/wells/migrations/0137_add_hydraulic_info_postgis_well_view.py new file mode 100644 index 000000000..e5e778b17 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0137_add_hydraulic_info_postgis_well_view.py @@ -0,0 +1,63 @@ +# Generated by Django 2.2.28 on 2022-12-03 21:19 + +from django.db import migrations + +UPDATE_GWELLS_WELLS_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_well_view; + CREATE VIEW postgis_ftw.gwells_well_view AS + SELECT + well_tag_number, + aquifer_id, + artesian_conditions AS artesian, + COALESCE + (hydraulic_conductivity::text, transmissivity::text, storativity::text) + IS NOT NULL + as has_hydraulic_info, + street_address, + identification_plate_number, + observation_well_number, + obs_well_status_code AS observation_well_status_code, + ems, + well_publication_status_code = 'Published' AS is_published, + geom + FROM well + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_well_view TO ftw_reader; +""" + +REVERSE_UPDATE_GWELLS_WELLS_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_well_view; + CREATE VIEW postgis_ftw.gwells_well_view AS + SELECT + well_tag_number, + aquifer_id, + artesian_conditions AS artesian, + street_address, + identification_plate_number, + observation_well_number, + obs_well_status_code AS observation_well_status_code, + ems, + well_publication_status_code = 'Published' AS is_published, + geom + FROM well + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_well_view TO ftw_reader; +""" + +class Migration(migrations.Migration): + """ + This migration adds the field 'has_hydraulic_info' to the gwells_well_view + under the postgis_ftw schema in the gwells database. The purpose of this field + is to check whether there is legacy pump test data for a well, and then display + a different well icon on the well search map if this data exists. + """ + dependencies = [ + ('wells', '0136_add_technical_report_field'), + ] + + operations = [ + migrations.RunSQL( + UPDATE_GWELLS_WELLS_VIEW_SQL, + REVERSE_UPDATE_GWELLS_WELLS_VIEW_SQL + ) + ] diff --git a/gwells/app/backend/wells/migrations/0138_add_conductor_casing_option.py b/gwells/app/backend/wells/migrations/0138_add_conductor_casing_option.py new file mode 100644 index 000000000..96fcd1e4f --- /dev/null +++ b/gwells/app/backend/wells/migrations/0138_add_conductor_casing_option.py @@ -0,0 +1,54 @@ +# Generated by Django 2.2.28 on 2023-02-25 00:24 + +from django.db import migrations + +INSERT_CONDUCTOR_CASING_CODE = """ + UPDATE casing_code + SET display_order = 4 + WHERE casing_code = 'OPEN'; + + INSERT INTO casing_Code ( + casing_code, + create_user, + create_date, + update_user, + update_date, + effective_date, + expiry_date, + description, + display_order + ) + VALUES ( + 'CONDUCTOR', + 'DATALOAD_USER', + '2020-01-01T08:00:00Z', + 'DATALOAD_USER', + '2020-01-01T08:00:00Z', + '2020-01-01T08:00:00Z', + '9999-12-31T23:59:59Z', + 'Conductor casing', + 2 + ); +""" + +REMOVE_CONDUCTOR_CASING_CODE = """ + DELETE FROM casing_code + WHERE casing_code = 'CONDUCTOR'; + + UPDATE casing_code + SET display_order = 2 + WHERE casing_code = 'OPEN'; +""" + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0137_add_hydraulic_info_postgis_well_view'), + ] + + operations = [ + migrations.RunSQL( + INSERT_CONDUCTOR_CASING_CODE, + REMOVE_CONDUCTOR_CASING_CODE + ) + ] diff --git a/gwells/app/backend/wells/migrations/0139_add_aquifer_parameters.py b/gwells/app/backend/wells/migrations/0139_add_aquifer_parameters.py new file mode 100644 index 000000000..638e3dceb --- /dev/null +++ b/gwells/app/backend/wells/migrations/0139_add_aquifer_parameters.py @@ -0,0 +1,193 @@ +# Generated by Django 2.2.28 on 2023-03-18 21:17 + +from django.db import migrations, models +from django.utils.timezone import utc +import django.db.models.deletion +import django.utils.timezone +import gwells.db_comments.model_mixins +import wells.data_migrations +import datetime +import uuid + +MIGRATE_HYDRAULIC_TABLE_INFO = """ + INSERT INTO aquifer_parameters ( + aquifer_parameters_guid, + well_tag_number, + storativity, + transmissivity, + hydraulic_conductivity, + specific_yield, + test_duration, + comments, + create_user, + update_user, + create_date, + update_date + ) + SELECT + public.uuid_generate_v4() AS aquifer_parameters_guid, + w.well_tag_number, + w.storativity, + w.transmissivity, + w.hydraulic_conductivity, + w.specific_yield, + w.testing_duration, + w.testing_method, + 'WELLS', + 'WELLS', + now(), + now() + FROM + well w + WHERE + w.storativity IS NOT NULL + OR w.transmissivity IS NOT NULL + OR w.hydraulic_conductivity IS NOT NULL + OR w.specific_yield IS NOT NULL + OR w.testing_duration IS NOT NULL + OR w.testing_method IS NOT NULL; +""" + +REVERSE_MIGRATE_HYDRAULIC_TABLE_INFO = """ + DROP TABLE aquifer_parameters; + DROP TABLE pumping_test_description_code; + DROP TABLE analysis_method_code; +""" + +CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL = """ +DROP VIEW IF EXISTS export_aquifer_parameters_v1_view; +CREATE OR REPLACE view export_aquifer_parameters_v1_view as +SELECT + ap.well_tag_number, + ap.testing_number, + ap.start_date_pumping_test, + tt.description AS pumping_test_description, + ap.test_duration, + be.description AS boundary_effect, + ap.storativity, + ap.transmissivity, + ap.hydraulic_conductivity, + ap.specific_yield, + ap.specific_capacity, + am.description AS analysis_method, + ap.comments +FROM + aquifer_parameters AS ap +LEFT JOIN + pumping_test_description_code AS tt ON ap.pumping_test_description_code = tt.pumping_test_description_code +LEFT JOIN + boundary_effect_code AS be ON ap.boundary_effect_code = be.boundary_effect_code +LEFT JOIN + analysis_method_code AS am ON ap.analysis_method_code = am.analysis_method_code +INNER JOIN + well ON ap.well_tag_number = well.well_tag_number +WHERE + well.well_publication_status_code = 'Published' OR well.well_publication_status_code IS NULL +ORDER BY + ap.testing_number; +""" + +REVERSE_CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL = """ +DROP VIEW IF EXISTS export_aquifer_parameters_v1_view; +""" + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0138_add_conductor_casing_option'), + ] + + operations = [ + migrations.CreateModel( + name='PumpingTestDescriptionCode', + fields=[ + ('create_user', models.CharField(max_length=60)), + ('create_date', models.DateTimeField(default=django.utils.timezone.now)), + ('update_user', models.CharField(max_length=60)), + ('update_date', models.DateTimeField(default=django.utils.timezone.now)), + ('display_order', models.PositiveIntegerField()), + ('effective_date', models.DateTimeField(default=django.utils.timezone.now)), + ('expiry_date', models.DateTimeField(default=datetime.datetime(9999, 12, 31, 23, 59, 59, 999999, tzinfo=utc))), + ('pumping_test_description_code', models.CharField(db_column='pumping_test_description_code', editable=False, max_length=50, primary_key=True, serialize=False)), + ('description', models.CharField(max_length=100)), + ], + options={ + 'db_table': 'pumping_test_description_code', + 'ordering': ['display_order', 'description'], + }, + bases=(models.Model, gwells.db_comments.model_mixins.DBComments), + ), + migrations.CreateModel( + name='AnalysisMethodCode', + fields=[ + ('create_user', models.CharField(max_length=60)), + ('create_date', models.DateTimeField(default=django.utils.timezone.now)), + ('update_user', models.CharField(max_length=60)), + ('update_date', models.DateTimeField(default=django.utils.timezone.now)), + ('display_order', models.PositiveIntegerField()), + ('effective_date', models.DateTimeField(default=django.utils.timezone.now)), + ('expiry_date', models.DateTimeField(default=datetime.datetime(9999, 12, 31, 23, 59, 59, 999999, tzinfo=utc))), + ('analysis_method_code', models.CharField(db_column='analysis_method_code', editable=False, max_length=50, primary_key=True, serialize=False)), + ('description', models.CharField(max_length=100)), + ], + options={ + 'db_table': 'analysis_method_code', + 'ordering': ['display_order', 'description'], + }, + bases=(models.Model, gwells.db_comments.model_mixins.DBComments), + ), + migrations.CreateModel( + name='AquiferParameters', + fields=[ + ('testing_number', models.AutoField(primary_key=True, serialize=False, verbose_name='Testing Number')), + ('aquifer_parameters_guid', models.UUIDField(default=uuid.uuid4, editable=False, primary_key=False, serialize=False)), + ('activity_submission', models.ForeignKey(blank=True, db_column='filing_number', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='aquifer_parameters_set', to='wells.ActivitySubmission')), + ('well', models.ForeignKey(blank=True, db_column='well_tag_number', null=True, on_delete=django.db.models.deletion.PROTECT, related_name='aquifer_parameters_set', to='wells.Well')), + ('start_date_pumping_test', models.DateField(null=True, verbose_name='Start date of pumping test')), + ('pumping_test_description', models.ForeignKey(blank=True, db_column='pumping_test_description_code', null='True', on_delete=django.db.models.deletion.PROTECT, to='wells.PumpingTestDescriptionCode', verbose_name='Testing Description')), + ('test_duration', models.PositiveIntegerField(blank=True, null=True)), + ('boundary_effect', models.ForeignKey(blank=True, db_column='boundary_effect_code', null=True, on_delete=django.db.models.deletion.PROTECT, to='wells.BoundaryEffectCode', verbose_name='Boundary Effect')), + ('storativity', models.DecimalField(blank=True, decimal_places=7, max_digits=8, null=True, verbose_name='Storativity')), + ('transmissivity', models.DecimalField(blank=True, decimal_places=10, max_digits=30, null=True, verbose_name='Transmissivity')), + ('hydraulic_conductivity', models.TextField(blank=True, max_length=100, null=True, verbose_name='Hydraulic Conductivity')), + ('specific_yield', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Specific Yield')), + ('specific_capacity', models.DecimalField(blank=True, decimal_places=2, max_digits=5, null=True, verbose_name='Specific Yield')), + ('analysis_method', models.ForeignKey(blank=True, db_column='analysis_method_code', null='True', on_delete=django.db.models.deletion.PROTECT, to='wells.AnalysisMethodCode', verbose_name='Analysis Method')), + ('comments', models.TextField(blank=True, max_length=350, null=True, verbose_name='Testing Comments')), + ('create_user', models.CharField(max_length=60)), + ('create_date', models.DateTimeField(default=django.utils.timezone.now)), + ('update_user', models.CharField(max_length=60)), + ('update_date', models.DateTimeField(default=django.utils.timezone.now)), + ], + options={ + 'db_table': 'aquifer_parameters', + 'ordering': ['start_date_pumping_test'], + }, + bases=(models.Model, gwells.db_comments.model_mixins.DBComments), + ), + migrations.AddField( + model_name='fieldsprovided', + name='aquifer_parameters_set', + field=models.BooleanField(default=False), + ), + migrations.RunSQL( + sql='CREATE EXTENSION IF NOT EXISTS "uuid-ossp";', + reverse_sql='DROP EXTENSION IF EXISTS "uuid-ossp";', + ), + migrations.RunSQL( + MIGRATE_HYDRAULIC_TABLE_INFO, + REVERSE_MIGRATE_HYDRAULIC_TABLE_INFO + ), + migrations.RunPython( + code=wells.data_migrations.load_pumping_test_description_codes, + reverse_code=wells.data_migrations.unload_pumping_test_description_codes + ), + migrations.RunPython( + code=wells.data_migrations.load_analysis_method_codes, + reverse_code=wells.data_migrations.unload_analysis_method_codes + ), + migrations.RunSQL( + CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL, + REVERSE_CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL + ) + ] diff --git a/gwells/app/backend/wells/migrations/0140_auto_20230727_1921.py b/gwells/app/backend/wells/migrations/0140_auto_20230727_1921.py new file mode 100644 index 000000000..692e5bc94 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0140_auto_20230727_1921.py @@ -0,0 +1,72 @@ +# Generated by Django 2.2.28 on 2023-07-27 19:21 + +from django.db import migrations, models + +DROP_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL = """ +DROP VIEW IF EXISTS export_aquifer_parameters_v1_view; +""" + +CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL = """ +CREATE OR REPLACE view export_aquifer_parameters_v1_view as +SELECT + ap.well_tag_number, + ap.testing_number, + ap.start_date_pumping_test, + tt.description AS pumping_test_description, + ap.test_duration, + be.description AS boundary_effect, + ap.storativity, + ap.transmissivity, + ap.hydraulic_conductivity, + ap.specific_yield, + ap.specific_capacity, + am.description AS analysis_method, + ap.comments +FROM + aquifer_parameters AS ap +LEFT JOIN + pumping_test_description_code AS tt ON ap.pumping_test_description_code = tt.pumping_test_description_code +LEFT JOIN + boundary_effect_code AS be ON ap.boundary_effect_code = be.boundary_effect_code +LEFT JOIN + analysis_method_code AS am ON ap.analysis_method_code = am.analysis_method_code +INNER JOIN + well ON ap.well_tag_number = well.well_tag_number +WHERE + well.well_publication_status_code = 'Published' OR well.well_publication_status_code IS NULL +ORDER BY + ap.testing_number; +""" + + +def convert_hydraulic_conductivity(apps, schema_editor): + AquiferParameters = apps.get_model('wells', 'AquiferParameters') + for ap in AquiferParameters.objects.all(): + try: + ap.hydraulic_conductivity = float(ap.hydraulic_conductivity) + ap.save() + except (ValueError, TypeError): + ap.hydraulic_conductivity = None # set value to None if conversion to float fails + ap.save() + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0139_add_aquifer_parameters'), + ] + + operations = [ + migrations.RunPython(convert_hydraulic_conductivity), + migrations.RunSQL( + DROP_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL + ), + migrations.AlterField( + model_name='aquiferparameters', + name='hydraulic_conductivity', + field=models.DecimalField(blank=True, decimal_places=10, max_digits=30, null=True, verbose_name='Hydraulic Conductivity'), + ), + migrations.RunSQL( + CREATE_EXPORT_AQUIFER_PARAMETERS_VIEW_V1_SQL + ), + ] diff --git a/gwells/app/backend/wells/migrations/0141_add_drinking_water_protection_area_ind.py b/gwells/app/backend/wells/migrations/0141_add_drinking_water_protection_area_ind.py new file mode 100644 index 000000000..17acd388b --- /dev/null +++ b/gwells/app/backend/wells/migrations/0141_add_drinking_water_protection_area_ind.py @@ -0,0 +1,30 @@ +# Generated by Django 2.2.28 on 2023-08-11 18:10 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0140_auto_20230727_1921'), + ] + + operations = [ + migrations.AddField( + model_name='activitysubmission', + name='drinking_water_protection_area_ind', + field=models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=False, verbose_name='Drinking Water Protection Area'), + ), + migrations.AddField( + model_name='fieldsprovided', + name='drinking_water_protection_area_ind', + field=models.BooleanField(default=False), + ), + migrations.AddField( + model_name='well', + name='drinking_water_protection_area_ind', + field=models.BooleanField(choices=[(False, 'No'), (True, 'Yes')], default=False, verbose_name='Drinking Water Protection Area'), + ) + ] diff --git a/gwells/app/backend/wells/migrations/0142_auto_20231109_2145.py b/gwells/app/backend/wells/migrations/0142_auto_20231109_2145.py new file mode 100644 index 000000000..0131152c3 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0142_auto_20231109_2145.py @@ -0,0 +1,36 @@ +# Generated by Django 2.2.28 on 2023-11-09 21:45 + +from django.db import migrations, models +import django.db.models.deletion + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0141_add_drinking_water_protection_area_ind'), + ] + + operations = [ + migrations.CreateModel( + name='WellAttachment', + fields=[ + ('well_construction', models.PositiveSmallIntegerField(default=0)), + ('well_alteration', models.PositiveSmallIntegerField(default=0)), + ('well_decommission', models.PositiveSmallIntegerField(default=0)), + ('photo', models.PositiveSmallIntegerField(default=0)), + ('well_pump_installation', models.PositiveSmallIntegerField(default=0)), + ('pumping_test', models.PositiveSmallIntegerField(default=0)), + ('map', models.PositiveSmallIntegerField(default=0)), + ('additional_well_details', models.PositiveSmallIntegerField(default=0)), + ('well_inspection', models.PositiveSmallIntegerField(default=0)), + ('alternative_specs', models.PositiveSmallIntegerField(default=0)), + ('water_quality', models.PositiveSmallIntegerField(default=0)), + ('health_authority', models.PositiveSmallIntegerField(default=0)), + ('consultants_report', models.PositiveSmallIntegerField(default=0)), + ('well_tag_number', models.ForeignKey(blank=True, on_delete=django.db.models.deletion.PROTECT, to='wells.Well')), + ], + options={ + 'db_table': 'well_attachment_count', + }, + ), + ] diff --git a/gwells/app/backend/wells/migrations/0143_attach_attachments_to_wells.py b/gwells/app/backend/wells/migrations/0143_attach_attachments_to_wells.py new file mode 100644 index 000000000..8165e1af4 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0143_attach_attachments_to_wells.py @@ -0,0 +1,46 @@ +from django.db import migrations, models + +from django.db.models import Count + +def populate_wells_with_attachment_table(apps, schema_editor): + Well = apps.get_model('wells', 'Well') + WellAttachment = apps.get_model('wells', 'WellAttachment') + + # Batch processing: Set a limit for fetching wells without attachments + batch_size = 100 + offset = 0 + + while True: + well_tag_numbers_without_attachment = ( + Well.objects + .annotate(attachment_count=Count('wellattachment')) + .filter(attachment_count=0) + .values_list('well_tag_number', flat=True)[offset:offset + batch_size] + ) + + if not well_tag_numbers_without_attachment: + break + + well_attachments_to_create = [] + + # Iterate through each tag number and create WellAttachment instances + for tag_number in well_tag_numbers_without_attachment: + well_instance = Well.objects.get(well_tag_number=tag_number) + well_attachment_instance = WellAttachment(well_tag_number=well_instance) + well_attachments_to_create.append(well_attachment_instance) + + # Bulk create for the current batch + WellAttachment.objects.bulk_create(well_attachments_to_create) + + # Move to the next batch + offset += batch_size + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0142_auto_20231109_2145'), + ] + operations = [ + migrations.RunPython(populate_wells_with_attachment_table), + ] diff --git a/gwells/app/backend/wells/migrations/0144_auto_20231123_2254.py b/gwells/app/backend/wells/migrations/0144_auto_20231123_2254.py new file mode 100644 index 000000000..09c1bb956 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0144_auto_20231123_2254.py @@ -0,0 +1,48 @@ +# Generated by Django 2.2.28 on 2023-11-23 22:54 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import uuid + +############### +# Update WellAttachment Model to new fields +############### +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0143_attach_attachments_to_wells'), + ] + + operations = [ + migrations.RenameField( + model_name='wellattachment', + old_name='additional_well_details', + new_name='additional_details', + ), + migrations.RenameField( + model_name='wellattachment', + old_name='pumping_test', + new_name='pumping_test_data', + ), + migrations.AddField( + model_name='wellattachment', + name='directions_artesian_conditions', + field=models.PositiveSmallIntegerField(default=0), + ), + migrations.AddField( + model_name='wellattachment', + name='pumping_test_info', + field=models.PositiveSmallIntegerField(default=0), + ), + migrations.AddField( + model_name='wellattachment', + name='sharing_agreement', + field=models.PositiveSmallIntegerField(default=0), + ), + migrations.AddField( + model_name='wellattachment', + name='artesianmgmtreport', + field=models.PositiveSmallIntegerField(default=0) + ) + ] diff --git a/gwells/app/backend/wells/migrations/0145_auto_20231127_2105.py b/gwells/app/backend/wells/migrations/0145_auto_20231127_2105.py new file mode 100644 index 000000000..aabfc9b85 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0145_auto_20231127_2105.py @@ -0,0 +1,20 @@ +# Generated by Django 2.2.28 on 2023-11-27 21:05 + +from django.db import migrations, models +import django.db.models.deletion +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0144_auto_20231123_2254'), + ] + + operations = [ + migrations.RenameField( + model_name='wellattachment', + old_name='directions_artesian_conditions', + new_name='directions_artesianconditions', + ), + ] diff --git a/gwells/app/backend/wells/migrations/0146_add_aquifer_parameters_to_wells_view.py b/gwells/app/backend/wells/migrations/0146_add_aquifer_parameters_to_wells_view.py new file mode 100644 index 000000000..d3cbfbbf4 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0146_add_aquifer_parameters_to_wells_view.py @@ -0,0 +1,47 @@ + +from django.db import migrations + +UPDATE_GWELLS_WELLS_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_well_view; + CREATE VIEW postgis_ftw.gwells_well_view AS + SELECT + well_tag_number, + aquifer_id, + artesian_conditions AS artesian, + COALESCE + (hydraulic_conductivity::text, transmissivity::text, storativity::text) + IS NOT NULL + as has_hydraulic_info, + street_address, + identification_plate_number, + observation_well_number, + obs_well_status_code AS observation_well_status_code, + ems, + well_publication_status_code = 'Published' AS is_published, + geom, + EXISTS ( + SELECT 1 + FROM aquifer_parameters + WHERE aquifer_parameters.well_tag_number = well.well_tag_number + ) as has_aquifer_parameters + FROM well + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_well_view TO ftw_reader; +""" + +class Migration(migrations.Migration): + """ + This migration adds the field 'has_aquifer_parameters' to the gwells_well_view + under the postgis_ftw schema in the gwells database. The purpose of this field + is to check whether there is existing pump test/aquifer parameter data for a well, and then display + a different well icon on the well search map if this data exists. + """ + dependencies = [ + ('wells', '0145_auto_20231127_2105'), + ] + + operations = [ + migrations.RunSQL( + UPDATE_GWELLS_WELLS_VIEW_SQL + ) + ] diff --git a/gwells/app/backend/wells/migrations/0147_auto_20240105_qaqc.py b/gwells/app/backend/wells/migrations/0147_auto_20240105_qaqc.py new file mode 100644 index 000000000..e11adb0b4 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0147_auto_20240105_qaqc.py @@ -0,0 +1,56 @@ +# Generated by Django 2.2.28 on 2024-01-05 02:20 + +from django.db import migrations, models +import django.db.models.deletion +import django.utils.timezone +import uuid + + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0146_add_aquifer_parameters_to_wells_view'), + ] + + operations = [ + migrations.AddField( + model_name='well', + name='distance_to_pid', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=14, null=True, verbose_name='Distance to PID'), + ), + migrations.AddField( + model_name='well', + name='geocode_distance', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=14, null=True, verbose_name='Geocode Distance'), + ), + migrations.AddField( + model_name='well', + name='score_address', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True, verbose_name='Score for Address'), + ), + migrations.AddField( + model_name='well', + name='score_city', + field=models.DecimalField(blank=True, decimal_places=2, max_digits=7, null=True, verbose_name='Score for City'), + ), + migrations.AddField( + model_name='well', + name='cross_referenced', + field=models.BooleanField(default=False, verbose_name='Cross Referenced'), + ), + migrations.AddField( + model_name='well', + name='cross_referenced_date', + field=models.DateTimeField(null=True, default=None), + ), + migrations.AddField( + model_name='well', + name='cross_referenced_by', + field=models.CharField(null=True, blank=True, max_length=100), + ), + migrations.AddField( + model_name='well', + name='natural_resource_region', + field=models.CharField(null=True, blank=True, max_length=200), + ), + ] diff --git a/gwells/app/backend/wells/migrations/0148_auto_20240105_qaqc_data.py b/gwells/app/backend/wells/migrations/0148_auto_20240105_qaqc_data.py new file mode 100644 index 000000000..f137747f9 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0148_auto_20240105_qaqc_data.py @@ -0,0 +1,74 @@ +from django.db import migrations +import csv +import zipfile +import os + +def import_well_data(apps, schema_editor): + Well = apps.get_model('wells', 'Well') + well_count = Well.objects.count() + dev_threshold = 500 + + if well_count < dev_threshold: + print("Skipping qaqc data migration as it seems to be a non-production environment.") + return + + process_wells(Well, get_well_data()) + +def get_well_data(): + migration_dir = os.path.dirname(__file__) + with zipfile.ZipFile(os.path.join(migration_dir, '../fixtures/qaqc_well_data.zip'), 'r') as zip_file: + csv_filename = zip_file.namelist()[0] + with zip_file.open(csv_filename, 'r') as csvfile: + return csv.DictReader(csvfile.read().decode('utf-8').splitlines()) + +def process_wells(Well, reader): + batch_size = 1000 # Adjust batch size if there are memory issues + wells_to_update = [] + count = 0 + + for row in reader: + try: + well_instance = Well.objects.get(well_tag_number=row['well_tag_number']) + update_well_attributes(well_instance, row) + wells_to_update.append(well_instance) + count += 1 + + # Process in batches of batch_size + if count % batch_size == 0: + Well.objects.bulk_update(wells_to_update, ['geocode_distance', 'distance_to_pid', 'score_address', + 'score_city', 'cross_referenced', 'cross_referenced_date', + 'cross_referenced_by', 'natural_resource_region']) + wells_to_update = [] # Reset the list after updating + + except Well.DoesNotExist: + print(f"Well with tag number {row['well_tag_number']} not found.") + except ValueError as e: + print(f"Error processing well {row['well_tag_number']}: {e}") + + # Update any remaining wells in the list + if wells_to_update: + Well.objects.bulk_update(wells_to_update, ['geocode_distance', 'distance_to_pid', 'score_address', + 'score_city', 'cross_referenced', 'cross_referenced_date', + 'cross_referenced', 'natural_resource_region']) + +def update_well_attributes(well, row): + fields_to_update = ['distance_geocode', 'distance_to_matching_pid', 'score_address', 'score_city'] + for field in fields_to_update: + setattr(well, 'geocode_distance' if field == 'distance_geocode' else field, + float(row[field]) if row[field] else None) + + well.cross_referenced = row['xref_ind'] == 'True' + if well.cross_referenced: + well.cross_referenced_date = well.update_date + well.cross_referenced_by = well.update_user + well.natural_resource_region = row['nr_region_name'] if row['nr_region_name'] else None + +class Migration(migrations.Migration): + + dependencies = [ + ('wells', '0147_auto_20240105_qaqc'), + ] + + operations = [ + migrations.RunPython(import_well_data, reverse_code=migrations.RunPython.noop), + ] diff --git a/gwells/app/backend/wells/migrations/0149_add_well_status_to_view.py b/gwells/app/backend/wells/migrations/0149_add_well_status_to_view.py new file mode 100644 index 000000000..236b2b607 --- /dev/null +++ b/gwells/app/backend/wells/migrations/0149_add_well_status_to_view.py @@ -0,0 +1,48 @@ + +from django.db import migrations + +UPDATE_GWELLS_WELLS_VIEW_SQL = """ + DROP VIEW postgis_ftw.gwells_well_view; + CREATE VIEW postgis_ftw.gwells_well_view AS + SELECT + well_tag_number, + aquifer_id, + artesian_conditions AS artesian, + well_status_code as well_status_code, + COALESCE + (hydraulic_conductivity::text, transmissivity::text, storativity::text) + IS NOT NULL + as has_hydraulic_info, + street_address, + identification_plate_number, + observation_well_number, + obs_well_status_code AS observation_well_status_code, + ems, + well_publication_status_code = 'Published' AS is_published, + geom, + EXISTS ( + SELECT 1 + FROM aquifer_parameters + WHERE aquifer_parameters.well_tag_number = well.well_tag_number + ) as has_aquifer_parameters + FROM well + WHERE geom IS NOT NULL; + GRANT SELECT ON postgis_ftw.gwells_well_view TO ftw_reader; +""" + +class Migration(migrations.Migration): + """ + This migration adds the field 'has_aquifer_parameters' to the gwells_well_view + under the postgis_ftw schema in the gwells database. The purpose of this field + is to check whether there is existing pump test/aquifer parameter data for a well, and then display + a different well icon on the well search map if this data exists. + """ + dependencies = [ + ('wells', '0148_auto_20240105_qaqc_data'), + ] + + operations = [ + migrations.RunSQL( + UPDATE_GWELLS_WELLS_VIEW_SQL + ) + ] diff --git a/gwells/app/backend/wells/migrations/analysis_method_codes.json b/gwells/app/backend/wells/migrations/analysis_method_codes.json new file mode 100644 index 000000000..c55d15582 --- /dev/null +++ b/gwells/app/backend/wells/migrations/analysis_method_codes.json @@ -0,0 +1,99 @@ +[{ + "model": "wells.AnalysisMethodCode", + "pk": "TH", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Theis", + "display_order": 0, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } +}, +{ + "model": "wells.AnalysisMethodCode", + "pk": "CJ", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Cooper-Jacob", + "display_order": 1, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.AnalysisMethodCode", + "pk": "HJ", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Hantush-Jacob", + "display_order": 2, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.AnalysisMethodCode", + "pk": "N", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Neuman", + "display_order": 3, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.AnalysisMethodCode", + "pk": "B", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Boulton", + "display_order": 4, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.AnalysisMethodCode", + "pk": "PC", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Papadopulos-Cooper", + "display_order": 5, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.AnalysisMethodCode", + "pk": "OTHER", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Other", + "display_order": 6, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + } +] diff --git a/gwells/app/backend/wells/migrations/pumping_test_description_codes.json b/gwells/app/backend/wells/migrations/pumping_test_description_codes.json new file mode 100644 index 000000000..fbee9a28b --- /dev/null +++ b/gwells/app/backend/wells/migrations/pumping_test_description_codes.json @@ -0,0 +1,85 @@ +[{ + "model": "wells.PumpingTestDescriptionCode", + "pk": "ST", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Step Test", + "display_order": 0, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } +}, +{ + "model": "wells.PumpingTestDescriptionCode", + "pk": "PTPW", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Pumping test - pumping well", + "display_order": 1, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.PumpingTestDescriptionCode", + "pk": "PTOW", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Pumping test - observation well", + "display_order": 2, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.PumpingTestDescriptionCode", + "pk": "RTPW", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Recovery test - pumping well", + "display_order": 3, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.PumpingTestDescriptionCode", + "pk": "RTOW", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Recovery test - observation well", + "display_order": 4, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + }, + { + "model": "wells.PumpingTestDescriptionCode", + "pk": "OTHER", + "fields": { + "create_user": "DATALOAD_USER", + "create_date": "2023-03-31T17:42:52.421Z", + "update_user": "DATALOAD_USER", + "update_date": "2023-03-31T17:42:52.421Z", + "description": "Other", + "display_order": 5, + "effective_date": "2013-11-07T05:28:00.402Z", + "expiry_date": "9999-12-31T23:59:59Z" + } + } +] diff --git a/gwells/app/backend/wells/models.py b/gwells/app/backend/wells/models.py index 3dfa6277a..3c9c2b0b1 100644 --- a/gwells/app/backend/wells/models.py +++ b/gwells/app/backend/wells/models.py @@ -13,16 +13,14 @@ """ import uuid -import math import reversion from decimal import Decimal from django.core.validators import MinValueValidator from django.utils import timezone -from django.dispatch import receiver -from django.db.models.signals import pre_save + from django.contrib.gis.db import models -from django.contrib.gis.gdal import SpatialReference, CoordTransform + from gwells.models import AuditModel, ProvinceStateCode, ScreenIntakeMethodCode, ScreenMaterialCode,\ ScreenOpeningCode, ScreenBottomCode, ScreenTypeCode, ScreenAssemblyTypeCode, CodeTableModel,\ @@ -34,6 +32,7 @@ LithologyMoistureCode, SurficialMaterialCode) from gwells.db_comments.patch_fields import patch_fields + # from aquifers.models import Aquifer patch_fields() @@ -44,7 +43,6 @@ WELL_STATUS_CODE_ALTERATION = 'ALTERATION' WELL_STATUS_CODE_OTHER = 'OTHER' - class DecommissionMethodCode(CodeTableModel): decommission_method_code = models.CharField(primary_key=True, max_length=10, editable=False, verbose_name="Code") @@ -198,6 +196,40 @@ def __str__(self): return self.description +class PumpingTestDescriptionCode(CodeTableModel): + """ + The pumping test method description in aquifer pumping tests. + """ + pumping_test_description_code = models.CharField(primary_key=True, max_length=10, editable=False) + description = models.CharField(max_length=100) + + class Meta: + db_table = 'pumping_test_description_code' + ordering = ['display_order', 'description'] + + db_table_comment = ('Type of the pumping test method used for aquifer pumping tests.') + + def __str__(self): + return self.description + + +class AnalysisMethodCode(CodeTableModel): + """ + The analysis method used in aquifer pumping tests. + """ + analysis_method_code = models.CharField(primary_key=True, max_length=10, editable=False) + description = models.CharField(max_length=100) + + class Meta: + db_table = 'analysis_method_code' + ordering = ['display_order', 'description'] + + db_table_comment = ('The analysis method used in aquifer pumping tests.') + + def __str__(self): + return self.description + + class WellDisinfectedCode(CodeTableModel): """ The status on whether the well has been disinfected or not. @@ -957,6 +989,16 @@ class Well(AuditModelStructure): db_comment=('Indicates if an alternative specification was used for siting of a water supply' ' well, or a permanent dewatering well, or for the method used for decommissioning a' ' well.')) + + technical_report = models.BooleanField(default=False, verbose_name='Technical Report', + db_comment=('Highlights the existence of a technical assessment ' + 'or Environmental Flow Needs report.')) + + drinking_water_protection_area_ind = models.BooleanField( + default=False, + verbose_name='Drinking Water Protection Area', + choices=((False, 'No'), (True, 'Yes')), + db_comment=('Indicate if a well is in a delineated capture zone for drinking water.')) well_yield_unit = models.ForeignKey( WellYieldUnitCode, db_column='well_yield_unit_code', on_delete=models.PROTECT, blank=True, null=True) @@ -1105,6 +1147,31 @@ class Well(AuditModelStructure): recommended_pump_rate = models.DecimalField(max_digits=7, decimal_places=2, blank=True, null=True, verbose_name='Recommended pump rate', validators=[MinValueValidator(Decimal('0.00'))]) + # QaQc Fields for internal use + geocode_distance = models.DecimalField( + null=True, blank=True, max_digits=12, decimal_places=2, verbose_name='Geocode Distance', + db_comment='Distance calculated during geocoding process.') + distance_to_pid = models.DecimalField( + null=True, blank=True, max_digits=12, decimal_places=2, verbose_name='Distance to PID', + db_comment='Distance to the Property Identification Description.') + score_address = models.DecimalField( + null=True, blank=True, max_digits=7, decimal_places=2, verbose_name='Score for Address', + db_comment='Score representing the accuracy or confidence of the address geocoding.') + score_city = models.DecimalField( + null=True, blank=True, max_digits=7, decimal_places=2, verbose_name='Score for City', + db_comment='Score representing the accuracy or confidence of the city geocoding.') + cross_referenced = models.BooleanField( + default=False, verbose_name='Cross Referenced', + db_comment='Indicates if the record has been cross-referenced by an internal team member.') + cross_referenced_date = models.DateTimeField( + null=True, verbose_name='Cross Referenced Date', + db_comment='The date when a well was cross referenced by an internal team member.') + cross_referenced_by = models.CharField( + max_length=100, blank=True, null=True, + verbose_name="Internal team member who cross referenced well.") + natural_resource_region = models.CharField( + max_length=250, blank=True, null=True, verbose_name="Natural Resource Region", + db_comment='The Natural Resource Region the well is located within.') class Meta: db_table = 'well' @@ -1152,6 +1219,8 @@ def longitude(self): db_column_supplemental_comments = { "alternative_specs_submitted":"Indicates if an alternative specification was used for siting of a water supply well or a permanent dewatering well, or if an alternative specification was used for decommissioning a well.", + "technical_report":"Highlights the existence of a technical assessment or Environmental Flow Needs report.", + "drinking_water_protection_area_ind": "Indicate if a well is in a delineated capture zone for drinking water.", "aquifer_id":"System generated sequential number assigned to each aquifer. It is widely used by groundwater staff as it is the only consistent unique identifier for a mapped aquifer. It is also commonly referred to as Aquifer Number.", "artesian_flow":"Measurement of the artesian well's water flow that occurs naturally due to inherent water pressure in the well. Pressure within the aquifer forces the groundwater to rise above the land surface naturally without using a pump. Flowing artesian wells can flow on an intermittent or continuous basis. Recorded in US Gallons Per Minute.", "artesian_pressure":"Pressure of the water coming out of an artesian well as measured at the time of construction. Measured in PSI (pounds per square inch).", @@ -1236,19 +1305,6 @@ def longitude(self): } -@receiver(pre_save, sender=Well) -def update_utm(sender, instance, **kwargs): - if instance.geom and (-180 < instance.geom.x < 180): # only update utm when geom is valid - utm_zone = math.floor((instance.geom.x + 180) / 6) + 1 - coord_transform = CoordTransform(SpatialReference(4326), SpatialReference(32600 + utm_zone)) - utm_point = instance.geom.transform(coord_transform, clone=True) - - instance.utm_zone_code = utm_zone - # We round to integers because easting/northing is only precise to 1m. The DB column is also an integer type. - instance.utm_easting = round(utm_point.x) - instance.utm_northing = round(utm_point.y) - - class CasingMaterialCode(CodeTableModel): """ The material used for casing a well, e.g., Cement, Plastic, Steel. @@ -1619,6 +1675,16 @@ class ActivitySubmission(AuditModelStructure): null=True, verbose_name='Alternative specs submitted (if required)', choices=((False, 'No'), (True, 'Yes'))) + technical_report = models.BooleanField(default=False, verbose_name='Technical Report', + db_comment=('Highlights the existence of a technical assessment ' + 'or Environmental Flow Needs report.')) + + drinking_water_protection_area_ind = models.BooleanField( + default=False, + verbose_name='Drinking Water Protection Area', + choices=((False, 'No'), (True, 'Yes')), + db_comment=('Indicate if a well is in a delineated capture zone for drinking water.')) + well_yield_unit = models.ForeignKey( WellYieldUnitCode, db_column='well_yield_unit_code', on_delete=models.PROTECT, blank=True, null=True) # want to be integer in future @@ -1736,6 +1802,8 @@ class Meta: db_table_comment = 'Submission of data and information related to a groundwater wells.' db_column_supplemental_comments = { "alternative_specs_submitted":"Indicates if an alternative specification was used for siting of a water supply well, or a permanent dewatering well, or for the method used for decommissioning a well.", + "technical_report":"Highlights the existence of a technical assessment or Environmental Flow Needs report.", + "drinking_water_protection_area_ind": "Indicate if a well is in a delineated capture zone for drinking water.", "analytic_solution_type":"Mathematical formulation used to estimate hydraulic parameters.", "aquifer_id":"System generated sequential number assigned to each aquifer. It is widely used by groundwater staff as it is the only consistent unique identifier for a mapped aquifer. It is also commonly referred to as Aquifer Number.", "artesian_conditions": "Artesian conditions arise when there is a movement of groundwater from a recharge area under a confining formation to a point of discharge at a lower elevation. An example of this is a natural spring, or in the example of the drilling industry, a flowing water well.", @@ -1952,6 +2020,8 @@ class FieldsProvided(models.Model): comments = models.BooleanField(default=False) internal_comments = models.BooleanField(default=False) alternative_specs_submitted = models.BooleanField(default=False) + technical_report = models.BooleanField(default=False) + drinking_water_protection_area_ind = models.BooleanField(default=False) well_yield_unit = models.BooleanField(default=False) diameter = models.BooleanField(default=False) ems = models.BooleanField(default=False) @@ -1985,6 +2055,7 @@ class FieldsProvided(models.Model): recommended_pump_rate = models.BooleanField(default=False) lithologydescription_set = models.BooleanField(default=False) casing_set = models.BooleanField(default=False) + aquifer_parameters_set = models.BooleanField(default=False) decommission_description_set = models.BooleanField(default=False) screen_set = models.BooleanField(default=False) linerperforation_set = models.BooleanField(default=False) @@ -2093,7 +2164,7 @@ class LithologyDescription(AuditModel): class Meta: db_table = 'lithology_description' - ordering = ["lithology_sequence_number"] + ordering = ["start", "end"] db_table_comment = ('Describes the different lithologic qualities, characteristics, and materials found ' 'at different depths while drilling.') @@ -2420,3 +2491,173 @@ class DecommissionDescription(AuditModel): db_table_comment = ('A cross refernce table maintaining the list of wells that have been decomissioned' ' and the materials used to fill the well when decomissioned. E.g. Bentonite chips,' ' Native sand or gravel, Commercial gravel/pea gravel.') + + +class AquiferParameters(AuditModel): + """ + Aquifer Parameter information from well pumping tests + + There can be many pumping tests done for a well so there may be many aquifer parameter records per well + """ + aquifer_parameters_guid = models.UUIDField( + primary_key=False, default=uuid.uuid4, editable=False) + + testing_number = models.AutoField( + primary_key=True, verbose_name='Testing Number', + db_comment=('The testing number is automatically assigned to each pumping test record that gets created')) + + activity_submission = models.ForeignKey(ActivitySubmission, db_column='filing_number', + on_delete=models.PROTECT, blank=True, null=True, + related_name='aquifer_parameters_set') + well = models.ForeignKey( + Well, db_column='well_tag_number', on_delete=models.PROTECT, + blank=True, null=True, + related_name='aquifer_parameters_set', + db_comment=('The file number assigned to a particular well in the in the province\'s Groundwater ' + 'Wells and Aquifers application.')) + + start_date_pumping_test = models.DateField( + null=True, verbose_name='Start date of pumping test', + db_comment='The date when the analysis started.') + + pumping_test_description = models.ForeignKey(PumpingTestDescriptionCode, db_column='pumping_test_description_code', + on_delete=models.PROTECT, blank=True, null=True, + verbose_name='Testing Type', + db_comment='Valid codes for the testing types used in ' + 'pumping test analysis. i.e. ST, PTPW, PTOW, RT, OTHER') + + test_duration = models.PositiveIntegerField(blank=True, null=True) + + boundary_effect = models.ForeignKey(BoundaryEffectCode, db_column='boundary_effect_code', + on_delete=models.PROTECT, blank=True, null=True, + verbose_name='Boundary Effect', + db_comment='Valid codes for the boundaries observed in ' + 'pumping test analysis. i.e. CH, NF.') + + storativity = models.DecimalField( + max_digits=8, decimal_places=7, blank=True, null=True, verbose_name='Storativity') + + transmissivity = models.DecimalField( + max_digits=30, decimal_places=10, blank=True, null=True, verbose_name='Transmissivity') + + hydraulic_conductivity = models.DecimalField( + max_digits=30, decimal_places=10, blank=True, null=True, verbose_name='Hydraulic Conductivity') + + specific_yield = models.DecimalField( + max_digits=5, decimal_places=2, blank=True, null=True, verbose_name='Specific Yield') + + specific_capacity = models.DecimalField( + max_digits=5, decimal_places=2, blank=True, null=True, verbose_name='Specific Yield') + + analysis_method = models.ForeignKey(AnalysisMethodCode, db_column='analysis_method_code', + on_delete=models.PROTECT, blank=True, null=True, + verbose_name='Analysis Method', + db_comment='Valid codes for the analysis methods used in ' + 'pumping test analysis. i.e. TH, CJ, HJ, N, B, PC, OTHER') + + comments = models.TextField( + max_length=350, + blank=True, + null=True, + verbose_name='Testing Comments') + + class Meta: + ordering = ["start_date_pumping_test"] + db_table = 'aquifer_parameters' + + db_table_comment = ('Aquifer parameter testing stats from well pumping tests.') + + db_column_supplemental_comments = { + "testing_number":"System generated sequential number assigned to each pumping test record.", + "aquifer_parameters_guid":"System generated unique guid assigned to each pumping test record.", + "well_tag_number":"System generated sequential number assigned to each well. It is widely used by groundwater staff as it is the only consistent unique identifier for each well. It is different from a well ID plate number.", + "start_date_pumping_test":"Start date of the pumping test.", + "pumping_test_description_code":"Identification of the testing method (e.g.basic pumping test, pumping test with monitoring wells, single-well-response/slug test, constant head).", + "test_duration":"The duration of the hydraulic testing period. For consistency, do not include the recovery period.", + "boundary_effect_code":"Valid codes for the boundaries observed in pumping test analysis. i.e. CH, NF.", + "storativity":"Storativity estimated from hydraulic testing (dimensionless).", + "transmissivity":"Transmissivity estimated from hydraulic testing.", + "hydraulic_conductivity":"Hydraulic conductivity estimated from hydraulic testing in metres per second.", + "specific_yield":"Specific Yield estimated from hydraulic testing (dimensionless).", + "specific_capacity":"Specific Capacity.", + "analysis_method_code":"The mathematical solution to the groundwater flow equation used to fit the observational data and estimate hydraulic parameters e.g. Theis 1935", + "comments":"Any additional comments about the pumping test.", + } + + def __str__(self): + if self.activity_submission: + return 'activity_submission {} {}'.format(self.activity_submission, self.aquifer_parameters_guid) + else: + return 'well {} {}'.format(self.well, self.aquifer_parameters_guid) + + def as_dict(self): + return { + "testing_number": self.testing_number, + "aquifer_parameters_guid": self.aquifer_parameters_guid, + "well_tag_number": self.well, + "start_date_pumping_test": self.start_date_pumping_test, + "pumping_test_description_code": self.pumping_test_description, + "test_duration": self.test_duration, + "storativity": self.storativity, + "transmissivity": self.transmissivity, + "hydraulic_conductivity": self.hydraulic_conductivity, + "specific_yield": self.specific_yield, + "specific_capacity": self.specific_capacity, + "analysis_method": self.analysis_method, + "comments": self.comments + } + +class WellAttachment(models.Model): + id = models.AutoField(primary_key=True) + well_tag_number = models.ForeignKey(Well, on_delete=models.PROTECT, blank=True, null = False) + # Public Tags + well_construction = models.PositiveSmallIntegerField(default=0) + well_alteration = models.PositiveSmallIntegerField(default=0) + well_decommission = models.PositiveSmallIntegerField(default=0) + photo = models.PositiveSmallIntegerField(default=0) + well_pump_installation = models.PositiveSmallIntegerField(default=0) + pumping_test_data = models.PositiveSmallIntegerField(default=0) + directions_artesianconditions = models.PositiveSmallIntegerField(default=0) + map = models.PositiveSmallIntegerField(default=0) + additional_details = models.PositiveSmallIntegerField(default=0) + # Private Tags + well_inspection = models.PositiveSmallIntegerField(default=0) + artesianmgmtreport = models.PositiveSmallIntegerField(default=0) + alternative_specs = models.PositiveSmallIntegerField(default=0) + water_quality = models.PositiveSmallIntegerField(default=0) + health_authority = models.PositiveSmallIntegerField(default=0) + consultants_report = models.PositiveSmallIntegerField(default=0) + sharing_agreement = models.PositiveSmallIntegerField(default=0) + pumping_test_info = models.PositiveSmallIntegerField(default=0) + class Meta: + db_table = "well_attachment_count" + + + def __str__(self): + template = "{} File count: {}\n" + return_string = "Files for WTN: {}\n".format(self.well_tag_number) + return_string += template.format('Well Construction',self.well_construction) + return_string += template.format('Well Alteration',self.well_alteration) + return_string += template.format('Well Decommission',self.well_decommission) + return_string += template.format('Well Photos',self.photo) + return_string += template.format('Well Pump Installations',self.well_pump_installation) + return_string += template.format('Pumping Test',self.pumping_test_data) + return_string += template.format('Map',self.map) + return_string += template.format('Additional Detail',self.additional_details) + return_string += template.format('Well Inspections',self.well_inspection) + return_string += template.format('Alternative Specs',self.alternative_specs) + return_string += template.format('Water Quality',self.water_quality) + return_string += template.format('Health Authority',self.health_authority) + return_string += "{} File count: {}".format('Consultants Report',self.consultants_report) + + return return_string + +class WellLicence(models.Model): + id = models.IntegerField(primary_key=True) + well_id = models.IntegerField() + waterrightslicence_id = models.IntegerField() + class Meta: + db_table = "well_licences" + managed = False + def __str__(self): + return "Well Number: " + str(self.well_id) + ", License #: " + str(self.waterrightslicence_id) diff --git a/gwells/app/backend/wells/renderers.py b/gwells/app/backend/wells/renderers.py index d71b6d0df..f48866d07 100644 --- a/gwells/app/backend/wells/renderers.py +++ b/gwells/app/backend/wells/renderers.py @@ -140,6 +140,25 @@ "artesian_pressure_head": "Artesian Pressure head", "artesian_conditions": "Artesian Conditions", "alternative_specs_submitted": "Alt specs submitted", + "technical_report": "Technical Report", + "drinking_water_protection_area_ind": "Drinking Water Protection Area", + "well_activity_type": "Work/Report Type", + "work_start_date": "Work Start Date", + "work_end_date": "Work End Date", + "create_user": "Created By", + "create_date": "Created Date", + "update_date": "Updated Date", + "update_user": "Updated By", + "natural_resource_region": "Natural Resource Region", + "comments": "Comments", + "internal_comments": "Internal Comments", + "cross_referenced": "Cross Referenced", + "cross_referenced_date": "Cross Referenced Date", + "cross_referenced_by": "Cross Referenced By", + "geocode_distance": "Geocode Distance", + "distance_to_pid": "Distance to Matching PID", + "score_address": "Score Address", + "score_city": "Score City" } diff --git a/gwells/app/backend/wells/serializers.py b/gwells/app/backend/wells/serializers.py index c2497e8ea..2d5ded322 100644 --- a/gwells/app/backend/wells/serializers.py +++ b/gwells/app/backend/wells/serializers.py @@ -34,7 +34,8 @@ LinerPerforation, LithologyDescription, Screen, - Well + Well, + AquiferParameters ) from submissions.models import WellActivityCode @@ -184,6 +185,72 @@ class Meta: } +class AquiferParametersSerializer(serializers.ModelSerializer): + """Serializes aquifer parameters for well""" + class Meta: + model = AquiferParameters + fields = ( + 'testing_number', + 'well', + 'start_date_pumping_test', + 'pumping_test_description', + 'test_duration', + 'boundary_effect', + 'storativity', + 'transmissivity', + 'hydraulic_conductivity', + 'specific_yield', + 'specific_capacity', + 'analysis_method', + 'comments' + ) + + +class AquiferParametersSummarySerializer(serializers.ModelSerializer): + """Serializes aquifer parameters for well summary""" + class Meta: + model = AquiferParameters + fields = ( + 'testing_number', + 'well', + 'start_date_pumping_test', + 'pumping_test_description', + 'test_duration', + 'boundary_effect', + 'storativity', + 'transmissivity', + 'hydraulic_conductivity', + 'specific_yield', + 'specific_capacity', + 'analysis_method', + 'comments' + ) + +class AquiferParametersStackerSerializer(serializers.ModelSerializer): + class Meta: + model = AquiferParameters + fields = ( + 'testing_number', + 'well', + 'start_date_pumping_test', + 'pumping_test_description', + 'test_duration', + 'boundary_effect', + 'storativity', + 'transmissivity', + 'hydraulic_conductivity', + 'specific_yield', + 'specific_capacity', + 'analysis_method', + 'comments', + 'create_user', + 'update_user' + ) + extra_kwargs = { + 'create_user': {'required': True}, + 'update_user': {'required': True} + } + class DecommissionDescriptionSerializer(serializers.ModelSerializer): """Serializes Decommission Descriptions""" @@ -480,6 +547,7 @@ class Meta: class WellDetailSerializer(AuditModelSerializer): casing_set = CasingSummarySerializer(many=True) + aquifer_parameters_set = AquiferParametersSummarySerializer(many=True) screen_set = ScreenSerializer(many=True) linerperforation_set = LinerPerforationSerializer(many=True) decommission_description_set = DecommissionDescriptionSerializer(many=True) @@ -639,6 +707,8 @@ class Meta: "well_disinfected_status", "comments", "alternative_specs_submitted", + "technical_report", + "drinking_water_protection_area_ind", "well_yield_unit", "diameter", "observation_well_number", @@ -676,6 +746,7 @@ class Meta: "recommended_pump_depth", "recommended_pump_rate", "casing_set", + "aquifer_parameters_set", "screen_set", "linerperforation_set", "decommission_description_set", @@ -713,6 +784,7 @@ class Meta: class WellDetailAdminSerializer(AuditModelSerializer): casing_set = CasingSerializer(many=True) + aquifer_parameters_set = AquiferParametersSerializer(many=True) screen_set = ScreenSerializer(many=True) linerperforation_set = LinerPerforationSerializer(many=True) decommission_description_set = DecommissionDescriptionSerializer(many=True) @@ -765,6 +837,7 @@ def get_is_published(self, instance): class WellStackerSerializer(AuditModelSerializer): casing_set = CasingStackerSerializer(many=True) + aquifer_parameters_set = AquiferParametersStackerSerializer(many=True) screen_set = ScreenStackerSerializer(many=True) linerperforation_set = LinerPerforationStackerSerializer(many=True) decommission_description_set = DecommissionDescriptionStackerSerializer(many=True) @@ -786,6 +859,7 @@ def update(self, instance, validated_data): # of this section. The composite section is responsible for that. FOREIGN_KEYS = { 'casing_set': Casing, + 'aquifer_parameters_set': AquiferParameters, 'screen_set': Screen, 'linerperforation_set': LinerPerforation, 'decommission_description_set': DecommissionDescription, diff --git a/gwells/app/backend/wells/serializers_v2.py b/gwells/app/backend/wells/serializers_v2.py index 0c1e6e596..ffcba2a96 100644 --- a/gwells/app/backend/wells/serializers_v2.py +++ b/gwells/app/backend/wells/serializers_v2.py @@ -13,12 +13,12 @@ """ import logging from decimal import Decimal - +from django.db import connection from rest_framework import serializers from django.contrib.gis.geos import Point from gwells.utils import isPointInsideBC -from wells.models import Well, DevelopmentMethodCode +from wells.models import Well, DevelopmentMethodCode, ActivitySubmission from aquifers.models import VerticalAquiferExtent, Aquifer from aquifers.serializers_v2 import AquiferDetailSerializerV2 @@ -27,8 +27,15 @@ LithologyDescriptionSummarySerializer, WellDetailSerializer as WellDetailSerializerV1 ) +from wells.constants import ( + WELL_ACTIVITY_CODE_STAFF_EDIT, + WELL_ACTIVITY_CODE_CONSTRUCTION, + WELL_ACTIVITY_CODE_DECOMMISSION, + WELL_ACTIVITY_CODE_ALTERATION, +) from aquifers.serializers import HYDRAULIC_SUBTYPES +COMPANY_OF_PERSON_RESPONSIBLE_NAME_FIELD = 'company_of_person_responsible.name' logger = logging.getLogger(__name__) @@ -37,6 +44,7 @@ class WellLocationSerializerV2(serializers.ModelSerializer): """ serializes well locations """ artesian = serializers.SerializerMethodField() + well_status = serializers.SerializerMethodField() class Meta: model = Well @@ -49,12 +57,18 @@ class Meta: 'city', 'ems', 'artesian', - 'aquifer_id' + 'well_status', + 'aquifer_id', + 'storativity', + 'transmissivity', + 'hydraulic_conductivity' ) def get_artesian(self, obj): return obj.artesian_conditions + def get_well_status(self, obj): + return obj.well_status.description if obj.well_status else None class WellVerticalAquiferExtentSerializerV2(serializers.ModelSerializer): aquifer_id = serializers.IntegerField() @@ -135,18 +149,17 @@ def create(self, validated_data): well = Well.objects.get(well_tag_number=well_tag_number) validated_data['well'] = well return super().create(validated_data) - - + class WellListSerializerV2(serializers.ModelSerializer): """Serializes a well record""" - + licence_number = serializers.SerializerMethodField(source='get_licence_number') legal_pid = serializers.SerializerMethodField() drilling_company = serializers.ReadOnlyField( source='company_of_person_responsible.org_guid') company_of_person_responsible = serializers.ReadOnlyField( source='company_of_person_responsible.org_guid') company_of_person_responsible_name = serializers.ReadOnlyField( - source='company_of_person_responsible.name') + source=COMPANY_OF_PERSON_RESPONSIBLE_NAME_FIELD) person_responsible = serializers.ReadOnlyField( source='person_responsible.person_guid') person_responsible_name = serializers.ReadOnlyField(source='person_responsible.name') @@ -156,6 +169,10 @@ def get_legal_pid(self, instance): if instance.legal_pid is None: return instance.legal_pid return "{0:0>9}".format(instance.legal_pid) + + def get_licence_number(self, instance): + licence_numbers = instance.licences.values_list('licence_number', flat=True).distinct() + return list(licence_numbers) class Meta: model = Well @@ -282,9 +299,11 @@ class Meta: "well_disinfected_status", "static_water_level", "alternative_specs_submitted", + "technical_report", + "drinking_water_protection_area_ind", + "licence_number" ) - class WellListAdminSerializerV2(WellListSerializerV2): class Meta: model = Well @@ -310,7 +329,7 @@ class WellExportSerializerV2(WellListSerializerV2): licenced_status = serializers.SlugRelatedField(read_only=True, slug_field='description') land_district = serializers.SlugRelatedField(read_only=True, slug_field='name') drilling_company = serializers.CharField(read_only=True, - source='company_of_person_responsible.name') + source=COMPANY_OF_PERSON_RESPONSIBLE_NAME_FIELD) ground_elevation_method = serializers.SlugRelatedField(read_only=True, slug_field='description') surface_seal_material = serializers.SlugRelatedField(read_only=True, slug_field='description') @@ -450,3 +469,166 @@ class WellDetailSerializer(WellDetailSerializerV1): class Meta(WellDetailSerializerV1.Meta): ref_name = "well_detail_v2" + + +class ActivitySubmissionMixin: + def get_last_activity(self, obj): + # Cache the last activity in the instance to avoid repeated queries. + if not hasattr(obj, '_last_activity'): + obj._last_activity = ActivitySubmission.objects.filter( + well=obj + ).exclude( + well_activity_type__code=WELL_ACTIVITY_CODE_STAFF_EDIT + ).order_by('-work_end_date').first() + return obj._last_activity + + def get_well_activity_type(self, obj): + last_activity = self.get_last_activity(obj) + return last_activity.well_activity_type.code if last_activity else None + + def get_work_start_date(self, obj): + activity_type = self.get_well_activity_type(obj) + if activity_type == WELL_ACTIVITY_CODE_CONSTRUCTION: + order_field = '-construction_start_date' + elif activity_type == WELL_ACTIVITY_CODE_ALTERATION: + order_field = '-alteration_start_date' + elif activity_type == WELL_ACTIVITY_CODE_DECOMMISSION: + order_field = '-decommission_start_date' + else: + order_field = '-work_start_date' # Default order field if none of the conditions are met + + filter_field = order_field.strip('-') + last_activity = ActivitySubmission.objects.filter( + well=obj, + **{f'{filter_field}__isnull': False} + ).order_by(order_field).first() + return getattr(last_activity, order_field.strip('-'), None) if last_activity else None + + def get_work_end_date(self, obj): + activity_type = self.get_well_activity_type(obj) + if activity_type == WELL_ACTIVITY_CODE_CONSTRUCTION: + order_field = '-construction_end_date' + elif activity_type == WELL_ACTIVITY_CODE_ALTERATION: + order_field = '-alteration_end_date' + elif activity_type == WELL_ACTIVITY_CODE_DECOMMISSION: + order_field = '-decommission_end_date' + else: + order_field = '-work_end_date' # Default order field if none of the conditions are met + + filter_field = order_field.strip('-') + last_activity = ActivitySubmission.objects.filter( + well=obj, + **{f'{filter_field}__isnull': False} + ).order_by(order_field).first() + return getattr(last_activity, order_field.strip('-'), None) if last_activity else None + + +class MislocatedWellsSerializer(ActivitySubmissionMixin, serializers.ModelSerializer): + company_of_person_responsible_name = serializers.ReadOnlyField( + source=COMPANY_OF_PERSON_RESPONSIBLE_NAME_FIELD) + + well_activity_type = serializers.SerializerMethodField() + work_start_date = serializers.SerializerMethodField() + work_end_date = serializers.SerializerMethodField() + + class Meta: + model = Well + fields = [ + 'well_tag_number', + 'geocode_distance', + 'distance_to_pid', + 'score_address', + 'score_city', + 'well_activity_type', + 'work_start_date', + 'work_end_date', + 'company_of_person_responsible_name', + 'natural_resource_region', + 'create_date', + 'create_user', + 'internal_comments' + ] + + +class CrossReferencingSerializer(ActivitySubmissionMixin, serializers.ModelSerializer): + well_activity_type = serializers.SerializerMethodField() + work_start_date = serializers.SerializerMethodField() + work_end_date = serializers.SerializerMethodField() + + class Meta: + model = Well + fields = [ + 'well_tag_number', + 'well_activity_type', + 'work_start_date', + 'work_end_date', + 'create_user', + 'create_date', + 'update_date', + 'update_user', + 'natural_resource_region', + 'comments', + 'internal_comments', + 'cross_referenced', + 'cross_referenced_date', + 'cross_referenced_by' + ] + + +class RecordComplianceSerializer(ActivitySubmissionMixin, serializers.ModelSerializer): + company_of_person_responsible_name = serializers.ReadOnlyField( + source=COMPANY_OF_PERSON_RESPONSIBLE_NAME_FIELD) + person_responsible_name = serializers.ReadOnlyField(source='person_responsible.name') + + # Serializer methods for the last ActivitySubmission's work types + well_activity_type = serializers.SerializerMethodField() + work_start_date = serializers.SerializerMethodField() + work_end_date = serializers.SerializerMethodField() + + # last_lithology_raw_data + aquifer_lithology = serializers.SerializerMethodField() + # Serializer method field for the last casing's diameter + diameter = serializers.SerializerMethodField() + # Expose well_subclass uuid to convert to string + well_subclass = serializers.SerializerMethodField() + + def get_well_subclass(self, obj): + # This method will convert the UUID to a string + return str(obj.well_subclass) if obj.well_subclass else None + + def get_aquifer_lithology(self, obj): + # Fetch the last LithologyDescription based on the sequence number + last_lithology = obj.lithologydescription_set.order_by('-end').first() + # Return the raw data if it exists, otherwise return None + return last_lithology.lithology_raw_data if last_lithology else None + + def get_diameter(self, obj): + # Fetch the last Casing based on the 'end' field + last_casing = obj.casing_set.order_by('-end').first() + # Return the diameter if it exists, otherwise return None + return last_casing.diameter if last_casing else None + + class Meta: + model = Well + fields = [ + 'well_tag_number', + 'identification_plate_number', + 'well_subclass', + 'well_class', + 'latitude', + 'longitude', + 'finished_well_depth', + 'diameter', + 'surface_seal_depth', + 'surface_seal_thickness', + 'aquifer_lithology', + 'well_activity_type', + 'work_start_date', + 'work_end_date', + 'person_responsible_name', + 'company_of_person_responsible_name', + 'create_date', + 'create_user', + 'natural_resource_region', + 'internal_comments' + ] diff --git a/gwells/app/backend/wells/signals.py b/gwells/app/backend/wells/signals.py new file mode 100644 index 000000000..0925ddb72 --- /dev/null +++ b/gwells/app/backend/wells/signals.py @@ -0,0 +1,110 @@ +import math +from django.utils import timezone +from django.dispatch import receiver +from django.db.models.signals import pre_save +from django.contrib.gis.gdal import SpatialReference, CoordTransform +from wells.models import Well +from gwells.settings import TESTING +from wells.utils import calculate_geocode_distance, calculate_pid_distance_for_well, \ + calculate_score_address, calculate_score_city, calculate_natural_resource_region_for_well, \ + reverse_geocode + +@receiver(pre_save, sender=Well) +def update_utm(sender, instance, **kwargs): + if instance.geom and (-180 < instance.geom.x < 180): # only update utm when geom is valid + utm_zone = math.floor((instance.geom.x + 180) / 6) + 1 + coord_transform = CoordTransform(SpatialReference(4326), SpatialReference(32600 + utm_zone)) + utm_point = instance.geom.transform(coord_transform, clone=True) + + instance.utm_zone_code = utm_zone + # We round to integers because easting/northing is only precise to 1m. The DB column is also an integer type. + instance.utm_easting = round(utm_point.x) + instance.utm_northing = round(utm_point.y) + +if not TESTING: + @receiver(pre_save, sender=Well) + def update_well(sender, instance, **kwargs): + """ + Signal receiver that triggers before a Well instance is saved. + + For new Well instances, it calculates and sets various geographical and scoring fields. + For existing Well instances, it recalculates these fields if the geographical location (geom) has changed. + + Parameters: + sender (Model Class): The model class that sent the signal. Should always be the Well model. + instance (Well instance): The instance of Well being saved. + kwargs: Additional keyword arguments. Not used in this function. + """ + + def is_valid_geom(geom): + """ + Helper function to check if the geom attribute is valid. + A valid geom should be non-null and must have both latitude and longitude. + """ + return geom and hasattr(geom, 'x') and hasattr(geom, 'y') + + def contains_cross_reference_comment(comments): + """ + Helper function to check if comments contain any of the specified search terms + indicating a cross-reference. + """ + search_terms = ["x-ref'd", "x-ref", "cross-ref", "cross r", "cross-r", "ref'd", "referenced", "refd", "xref", "x-r", "x r"] + comments_lower = comments.lower() if comments is not None else '' + return any(term in comments_lower for term in search_terms) + + try: + if instance._state.adding and not instance.pk: + # Handling new instance creation + if is_valid_geom(instance.geom): + set_well_attributes(instance) + else: + # Handling updates to existing instances + original_instance = sender.objects.get(pk=instance.pk) + geom_changed = original_instance.geom != instance.geom + address_changed = original_instance.street_address != instance.street_address + city_changed = original_instance.city != instance.city + pid_changed = original_instance.legal_pid != instance.legal_pid + + if (geom_changed or address_changed or city_changed or pid_changed) and is_valid_geom(instance.geom): + set_well_attributes(instance) + + # If comments indicate a cross-reference, set cross-reference attributes + if instance.comments and contains_cross_reference_comment(instance.comments): + set_cross_reference_attributes(instance) + + except Exception as e: + print(f"Error in update_well for Well ID {instance.pk}: {str(e)}") + + +def set_cross_reference_attributes(instance): + """ + Sets cross-reference attributes for a Well instance + when a user has set the comment to include one of + the cross referenced values. + """ + if not instance.cross_referenced: # Only update if not already set + instance.cross_referenced = True + instance.cross_referenced_date = timezone.now() + instance.cross_referenced_by = instance.update_user + + +def set_well_attributes(instance): + """ + Set attributes for a Well instance based on its geographical location. + + Parameters: + instance (Well instance): The instance of Well being processed. + """ + # Calculate distance scores + instance.geocode_distance = calculate_geocode_distance(instance) + instance.distance_to_pid = calculate_pid_distance_for_well(instance) + + # Geocode point to address + geocoded_address = reverse_geocode(instance.longitude, instance.latitude) + + # Calculate address scores + instance.score_address = calculate_score_address(instance, geocoded_address) + instance.score_city = calculate_score_city(instance, geocoded_address) + + # Calculate natural resource region of well + instance.natural_resource_region = calculate_natural_resource_region_for_well(instance) \ No newline at end of file diff --git a/gwells/app/backend/wells/stack.py b/gwells/app/backend/wells/stack.py index 5f2cef200..5b132e046 100644 --- a/gwells/app/backend/wells/stack.py +++ b/gwells/app/backend/wells/stack.py @@ -23,14 +23,14 @@ WELL_ACTIVITY_CODE_CONSTRUCTION, WELL_ACTIVITY_CODE_DECOMMISSION, WELL_ACTIVITY_CODE_LEGACY,\ WELL_ACTIVITY_CODE_STAFF_EDIT import submissions.serializers -from wells.models import Well, ActivitySubmission, ActivitySubmissionLinerPerforation, FieldsProvided, \ +from wells.models import Well, ActivitySubmission, ActivitySubmissionLinerPerforation, FieldsProvided, WellAttachment, \ WellStatusCode, WELL_STATUS_CODE_CONSTRUCTION,\ WELL_STATUS_CODE_DECOMMISSION, WELL_STATUS_CODE_ALTERATION, WELL_STATUS_CODE_OTHER, LithologyDescription,\ - Casing, Screen, LinerPerforation, DecommissionDescription, LithologyDescription + Casing, Screen, LinerPerforation, DecommissionDescription, LithologyDescription, AquiferParameters from wells.serializers import WellStackerSerializer, CasingStackerSerializer, ScreenStackerSerializer,\ LinerPerforationStackerSerializer, DecommissionDescriptionStackerSerializer,\ - LithologyDescriptionStackerSerializer + LithologyDescriptionStackerSerializer, AquiferParametersStackerSerializer import reversion @@ -69,6 +69,7 @@ # define this relationship. FOREIGN_KEY_MODEL_LOOKUP = { 'casing_set': Casing, + 'aquifer_parameters_set': AquiferParameters, 'screen_set': Screen, 'linerperforation_set': ActivitySubmissionLinerPerforation, 'decommission_description_set': DecommissionDescription, @@ -79,6 +80,7 @@ # define this relationship. FOREIGN_KEY_SERIALIZER_LOOKUP = { 'casing_set': CasingStackerSerializer, + 'aquifer_parameters_set': AquiferParametersStackerSerializer, 'screen_set': ScreenStackerSerializer, 'linerperforation_set': LinerPerforationStackerSerializer, 'decommission_description_set': DecommissionDescriptionStackerSerializer, @@ -98,6 +100,8 @@ KEY_VALUE_LOOKUP = { 'well_publication_status': 'well_publication_status_code', 'boundary_effect': 'boundary_effect_code', + 'pumping_test_description': 'pumping_test_description_code', + 'analysis_method': 'analysis_method_code', 'well_disinfected_status': 'well_disinfected_code', 'well_orientation_status': 'well_orientation_code', 'drive_shoe_status': 'drive_shoe_code', @@ -208,11 +212,13 @@ def process(self, filing_number) -> Well: create_user=submission.create_user, create_date=submission.create_date, update_date=submission.update_date) + # If there's no well as yet - then this necessarily has to be the 1st submission, so we just # re-query it as a collection, and call stack. submissions = ActivitySubmission.objects.filter(filing_number=filing_number) well = self._stack(submissions, well) submission.well = well + WellAttachment.objects.create(well_tag_number=well) submission.save() return well diff --git a/gwells/app/backend/wells/tests/test_signals.py b/gwells/app/backend/wells/tests/test_signals.py new file mode 100644 index 000000000..ad309d075 --- /dev/null +++ b/gwells/app/backend/wells/tests/test_signals.py @@ -0,0 +1,41 @@ +from django.test import TestCase +from django.contrib.gis.geos import Point +from wells.models import Well +from wells.signals import update_utm + +class TestSignals(TestCase): + def test_update_utm__no_geom__well_not_updated(self): + well = Well(geom=None) + + update_utm(sender=None, instance=well) + + self.assertEqual(well.utm_zone_code, None) + self.assertEqual(well.utm_easting, None) + self.assertEqual(well.utm_northing, None) + + def test_update_utm__geom_longitude_below_valid_range__well_not_updated(self): + well = Well(geom="POINT(-181.00 49.26)") + + update_utm(sender=None, instance=well) + + self.assertEqual(well.utm_zone_code, None) + self.assertEqual(well.utm_easting, None) + self.assertEqual(well.utm_northing, None) + + def test_update_utm__geom_longitude_above_valid_range__well_not_updated(self): + well = Well(geom="POINT(181.00 49.26)") + + update_utm(sender=None, instance=well) + + self.assertEqual(well.utm_zone_code, None) + self.assertEqual(well.utm_easting, None) + self.assertEqual(well.utm_northing, None) + + def test_update_utm__geom_valid__well_updated(self): + well = Well(geom="POINT(-122.540000 49.260000)") + + update_utm(sender=None, instance=well) + + self.assertEqual(well.utm_zone_code, 10) + self.assertEqual(well.utm_easting, 533470) + self.assertEqual(well.utm_northing, 5456461) diff --git a/gwells/app/backend/wells/urls.py b/gwells/app/backend/wells/urls.py index d6e50121a..0053f5dc5 100644 --- a/gwells/app/backend/wells/urls.py +++ b/gwells/app/backend/wells/urls.py @@ -73,6 +73,10 @@ url(api_path_prefix() + r'/wells/(?P[0-9]+)/files$', never_cache(views.ListFiles.as_view()), name='file-list'), + # Increment/Decrement count of files for a given well during uploads + url(api_path_prefix() + r'/wells/(?P[0-9]+)/sum$', + never_cache(views.FileSumView.as_view()), name='file-sums'), + # Extract files url(api_path_prefix() + r'/wells/extracts$', views.ListExtracts.as_view(), name='extract-list'), @@ -108,7 +112,35 @@ url(api_path_prefix() + r'/gis/lithology$', views.lithology_geojson, name='well-lithology-geojson'), + # 'Pumping Test and Aquifer Parameters' endpoint for DataBC + url(r'api/v2/gis/aquifer-parameters$', + views.aquifer_pump_params, name='aquifers-parameters'), + # Well Licensing status endpoint from e-Licensing. url(api_path_prefix() + r'/wells/licensing$', - views.well_licensing, name='well-licensing') + views.well_licensing, name='well-licensing'), + + # get geocoder address + url(api_path_prefix() + r'/wells/geocoder$', + views.AddressGeocoder.as_view(), name='address-geocoder'), + + # QA/QC Endpoints + url(api_path_prefix() + r'/qaqc/crossreferencing$', + never_cache(views_v2.CrossReferencingListView.as_view()), name='qaqc-cross-referencing'), + + url(api_path_prefix() + r'/qaqc/mislocatedwells$', + never_cache(views_v2.MislocatedWellsListView.as_view()), name='qaqc-mislocated-wells'), + + url(api_path_prefix() + r'/qaqc/recordcompliance$', + never_cache(views_v2.RecordComplianceListView.as_view()), name='qaqc-record-compliance'), + + # Download URLs for QA/QC Endpoints + url(api_path_prefix() + r'/qaqc/crossreferencing/download$', + never_cache(views_v2.CrossReferencingDownloadView.as_view()), name='qaqc-cross-referencing-download'), + + url(api_path_prefix() + r'/qaqc/mislocatedwells/download$', + never_cache(views_v2.MislocatedWellsDownloadView.as_view()), name='qaqc-mislocated-wells-download'), + + url(api_path_prefix() + r'/qaqc/recordcompliance/download$', + never_cache(views_v2.RecordComplianceDownloadView.as_view()), name='qaqc-record-compliance-download'), ] diff --git a/gwells/app/backend/wells/utils.py b/gwells/app/backend/wells/utils.py new file mode 100644 index 000000000..dfffaaf88 --- /dev/null +++ b/gwells/app/backend/wells/utils.py @@ -0,0 +1,267 @@ +import json +import requests +import geopandas as gpd +from time import sleep +from shapely.geometry import Point +from django.contrib.gis.geos import GEOSGeometry +from wells.constants import ADDRESS_COLUMNS, GEOCODER_ENDPOINT +from thefuzz import fuzz +from django.db.models import Case, When, Value, DateField, F +from wells.models import Well +from pyproj import Proj, transform + +WELL_STATUS_CODE_CONSTRUCTION = 'CONSTRUCTION' +WELL_STATUS_CODE_ALTERATION = 'ALTERATION' +WELL_STATUS_CODE_DECOMMISSION = 'DECOMMISSION' +EPSG_4326 = 'epsg:4326' +EPSG_3005 = 'epsg:3005' + +def calculate_pid_distance_for_well(well): + """ + Calculate the distance from a single well to the nearest parcel using a WFS query. + :param well: A well instance with latitude, longitude attributes + :return: Distance to the nearest parcel in meters + """ + # Define projections + proj_4326 = Proj(init=EPSG_4326) # WGS 84 + proj_3005 = Proj(init=EPSG_3005) # NAD83 / BC Albers, uses meters + + # Transform the well's point to NAD83 / BC Albers + x_3005, y_3005 = transform(proj_4326, proj_3005, well.longitude, well.latitude) + well_point_3005 = Point(x_3005, y_3005) + + # Define base URL and parameters for the WFS request + base_url = "https://openmaps.gov.bc.ca/geo/pub/wfs" + params = { + "service": "WFS", + "version": "2.0.0", + "request": "GetFeature", + "typeName": "WHSE_CADASTRE.PMBC_PARCEL_FABRIC_POLY_SVW", + "outputFormat": "json", + "srsName": "EPSG:3005", # Ensure the response is in the same projection as the well point + "CQL_FILTER": f"PID_NUMBER={well.legal_pid}" + } + + # Construct and make the request + response = requests.get(f"{base_url}?{'&'.join([f'{k}={v}' for k, v in params.items()])}") + if response.status_code != 200: + print("Error making request to WFS service.") + return None + + # Load response into GeoDataFrame, already in EPSG:3005 + data = response.json() + parcels_gdf = gpd.GeoDataFrame.from_features(data["features"], crs="EPSG:3005") + + if parcels_gdf.empty: + print("No parcels found for the specified PID.") + return None + + # Calculate distances in meters from the well to each parcel + parcels_gdf["distance"] = parcels_gdf.geometry.distance(well_point_3005) + + # Return the minimum distance + min_distance = parcels_gdf["distance"].min() + + return round(min_distance) + + +def calculate_natural_resource_region_for_well(well): + """ + Retrieve the natural resource region name that a well is within using a WFS query. + :param well: A well instance with latitude, longitude attributes + :return: Natural Resource Region name + """ + # convert between projections + proj_4326 = Proj(init=EPSG_4326) # WGS 84 + proj_3005 = Proj(init=EPSG_3005) # NAD83 / BC Albers + + # Transform the point + x_3005, y_3005 = transform(proj_4326, proj_3005, well.longitude, well.latitude) + + # Base URL for the WFS request + base_url = "https://openmaps.gov.bc.ca/geo/pub/wfs" + params = { + "service": "WFS", + "version": "2.0.0", + "request": "GetFeature", + "typeName": "WHSE_ADMIN_BOUNDARIES.ADM_NR_REGIONS_SPG", + "outputFormat": "json", + "srsName": "EPSG:4326", + "CQL_FILTER": f"CONTAINS(SHAPE, POINT({x_3005} {y_3005}))", + "propertyName": "REGION_NAME,ORG_UNIT_NAME" + } + + # Construct the request URL + request_url = f"{base_url}?{'&'.join([f'{k}={v}' for k, v in params.items()])}" + + # Make the request + response = requests.get(request_url) + if response.status_code != 200: + print("Error making request to WFS service.") + return None + + # Load response into GeoDataFrame + data = response.json() + regions_gdf = gpd.GeoDataFrame.from_features(data["features"]) + + if regions_gdf.empty: + print("No natural resource regions found near well location.") + return None + + # Assuming the well can only be in one region, return the name of the first region found + return regions_gdf.iloc[0]['ORG_UNIT_NAME'] + + +def geocode(options={}): + """ + Performs an HTTP request to the BC Physical Address Geocoder API, + returning a django.contrib.gis.geos.Point for the first result. Supports query + string parameters via the 'options' argument. Raises HTTPError for + communication issues and ValueError if no matching coordinate is found. + Example 'options': {"addressString": "101 main st.", "localityName": "Kelowna"}. + """ + url = "https://geocoder.api.gov.bc.ca/addresses.json" + try: + response = requests.get(url, params=options) + + # Check if response status is ok + if response.status_code == 200: + data = response.json() + first_feature = data.get("features", [])[0] if data.get("features") else None + + if first_feature: + geometry = first_feature.get("geometry", {}) + # Directly extract coordinates to create a shapely Point + coordinates = geometry.get("coordinates", []) + if coordinates: + # Note the order: GeoJSON specifies coordinates as [longitude, latitude] + shapely_point = Point(coordinates[0], coordinates[1]) + return shapely_point + else: + raise ValueError("Geometry coordinates not found.") + else: + raise ValueError("No matching coordinate found for the given address.") + else: + response.raise_for_status() # This will raise an HTTPError if the response was an error + except Exception as e: + print(f"Error during geocoding: {e}") + return None + + +def reverse_geocode( + x, + y, + distance_start=200, + distance_increment=200, + distance_max=2000, +): + """ + Provided a location as x/y coordinates (EPSG:4326), request an address + from BC Geocoder within given distance_start (metres) + + If no result is found, request using an expanding search radius in + distance_increment steps, until distance_max is reached. + + A dict with 'distance' = 99999 is returned if no result is found. + + """ + try: + result = False + distance = distance_start + # expand the search distance until we get a result or hit the max distance + while result is False and distance <= distance_max: + params = { + "point": str(x) + "," + str(y), + "apikey": 'fake_api_key', # api key not required to be valid + "outputFormat": "json", + "maxDistance": distance, + } + r = requests.get(GEOCODER_ENDPOINT, params=params) + + # pause for 2s per request if near limit of 1000 requests/min + if int(r.headers["RateLimit-Remaining"]) < 30: + sleep(2) + if r.status_code == 200: + result = True + else: + distance = distance + distance_increment + if r.status_code == 200: + address = r.json().get("properties", {}) + if address: # Check if address is not empty + address["distance"] = distance + return address + # If no address return we default to an empty result + empty_result = dict([(k, "") for k in ADDRESS_COLUMNS]) + empty_result["distance"] = 99999 + return empty_result + except Exception as e: + print("geocode error:", e) + + +def calculate_geocode_distance(well): + """ + Calculates the geodesic distance between a well's location and its geocoded address. + + :param well: An object that contains the well's address, city, longitude, and latitude. + :return: The distance in meters between the well's actual location and its geocoded address. + """ + # Prepare the geocode request options with the well's street address and city + options = {"addressString": well.street_address or '', "localityName": well.city or ''} + + # Check if both addressString and localityName are empty, return None if true + if not options["addressString"].strip() and not options["localityName"].strip(): + print("Both addressString and localityName are empty. Skipping geocode.") + return None + + # Geocode the address to get a point representation (assuming WKT format) + geocoded_point = geocode(options) + well_point = Point(well.longitude, well.latitude) + + # Initialize projections for WGS84 and UTM Zone 10N (example) + proj_wgs84 = Proj(init='EPSG:4326') + proj_utm = Proj(init='epsg:32610') + # Transform the geocoded point and the well's location from WGS84 to UTM coordinates + x1, y1 = transform(proj_wgs84, proj_utm, geocoded_point.x, geocoded_point.y) + x2, y2 = transform(proj_wgs84, proj_utm, well_point.x, well_point.y) + # Calculate the distance between the points in meters within the UTM projection + distance_meters = Point(x1, y1).distance(Point(x2, y2)) + + return round(distance_meters) + + +def calculate_score_address(well, geocoded_address): + """ + Calculates the similarity score between the well's address and the geocoded address. + + :param well: An object that contains the well's street address. + :param geocoded_address: A dictionary containing the full address as geocoded. + :return: A similarity score or None if geocoded_address is not provided. + """ + if not geocoded_address: + # Return None if there's no geocoded address to compare with + return None + # Ensure the well's address is lowercased, using an empty string if address is None + street_address_lower = well.street_address.lower() if well.street_address is not None else '' + # Safely get the lowercased full address from geocoded_address, default to an empty string + geocoded_address_lower = geocoded_address.get('fullAddress', '').lower() + # Calculate and return the fuzzy similarity score between the two addresses + return fuzz.token_set_ratio(street_address_lower, geocoded_address_lower) + + +def calculate_score_city(well, geocoded_address): + """ + Calculates the similarity score between the well's city and the geocoded city. + + :param well: An object that contains the well's city. + :param geocoded_address: A dictionary containing the city name as 'localityName'. + :return: A similarity score or None if geocoded_address is not provided. + """ + if not geocoded_address: + # Return None if there's no geocoded address to compare with + return None + # Ensure the well's city is lowercased, using an empty string if city is None + city_lower = well.city.lower() if well.city is not None else '' + # Safely get the lowercased locality name from geocoded_address, default to an empty string + locality_name_lower = geocoded_address.get('localityName', '').lower() + # Calculate and return the fuzzy similarity score between the two city names + return fuzz.token_set_ratio(city_lower, locality_name_lower) \ No newline at end of file diff --git a/gwells/app/backend/wells/views.py b/gwells/app/backend/wells/views.py index 7122c3e91..99465cdab 100644 --- a/gwells/app/backend/wells/views.py +++ b/gwells/app/backend/wells/views.py @@ -46,8 +46,15 @@ from gwells.settings.base import get_env_variable from gwells.open_api import ( get_geojson_schema, get_model_feature_schema, GEO_JSON_302_MESSAGE, GEO_JSON_PARAMS) -from gwells.management.commands.export_databc import (WELLS_SQL_V1, LITHOLOGY_SQL, GeoJSONIterator, - LITHOLOGY_CHUNK_SIZE, WELL_CHUNK_SIZE) +from gwells.management.commands.export_databc import ( + GeoJSONIterator, + LITHOLOGY_CHUNK_SIZE, + LITHOLOGY_SQL, + WELL_CHUNK_SIZE, + PUMPING_TEST_AQUIFER_PARAMETER_CHUNK_SIZE, + PUMPING_TEST_AQUIFER_PARAMETER_SQL, + WELLS_SQL_V1, +) from submissions.serializers import WellSubmissionListSerializer from submissions.models import WellActivityCode @@ -70,10 +77,12 @@ LithologyHardnessCode, LithologyMaterialCode, Well, + WellAttachment, WellClassCode, WellYieldUnitCode, WellStatusCode, ) + from wells.change_history import get_well_history from wells.renderers import WellListCSVRenderer, WellListExcelRenderer from wells.serializers import ( @@ -89,8 +98,7 @@ WellLithologySerializer, ) from wells.permissions import WellsEditPermissions, WellsEditOrReadOnly -from wells.constants import MAX_EXPORT_COUNT, MAX_LOCATION_COUNT - +from wells.constants import MAX_EXPORT_COUNT, MAX_LOCATION_COUNT, WELL_TAGS logger = logging.getLogger(__name__) @@ -98,7 +106,8 @@ class WellDetail(RetrieveAPIView): """ Return well detail. - This view is open to all, and has no permissions. + get: + Returns information about a well given the well_tag_number. Unpublished wells are filtered if user is not authenticated. """ serializer_class = WellDetailSerializer @@ -128,7 +137,8 @@ class ListExtracts(APIView): """ List well extracts - get: list well extracts + get: + list well extracts """ @swagger_auto_schema(auto_schema=None) def get(self, request, **kwargs): @@ -191,12 +201,12 @@ class ListFiles(APIView): """ List documents associated with a well (e.g. well construction report) - get: list files found for the well identified in the uri + get: + List uploaded files associated with the well identified in the URI. """ @swagger_auto_schema(responses={200: openapi.Response('OK', LIST_FILES_OK)}) def get(self, request, tag, **kwargs): - well = get_object_or_404(Well, pk=tag) if well.well_publication_status\ @@ -215,11 +225,60 @@ def get(self, request, tag, **kwargs): return Response(documents) +class FileSumView(APIView): + """ + Handler for Updating File counts for a well. Bridge method to keep database records for files stored in S3 buckets. + Primarily used for Advanced Search function 'Wells containing File of type n' + + get: + Increments or decrements the count for files stored of a given type. + """ + + def get(self, request, tag, **kwargs): + # Verify user has permissions to edit wells + if not self.request.user.groups.filter(name=WELLS_EDIT_ROLE).exists(): + return HttpResponse(status=403) + increment = self.request.query_params.get('inc') + document_type = self.request.query_params.get('documentType') + + # Verify we have correct query params, and the document type is valid + if self.request.query_params.get('documentType') == None \ + or increment == None \ + or not any(item['value'] == document_type for item in WELL_TAGS): + return HttpResponse(status=400) + + attachment = document_type.replace(' ', "_").lower() + try: + # Create entry to WellAttachment in event it does not already have one + if not WellAttachment.objects.filter(well_tag_number=tag).exists(): + well = Well.objects.get(well_tag_number=tag) + WellAttachment.objects.create(well_tag_number=well) + + if increment == "true": + well_attach = WellAttachment.objects.get(well_tag_number=tag) + setattr(well_attach, attachment, getattr(well_attach, attachment) + 1) + well_attach.save() + return HttpResponse("Count updated successfully", status=200) + elif increment == "false": + well_attach = WellAttachment.objects.get(well_tag_number=tag) + if getattr(well_attach, attachment) > 0: + setattr(well_attach, attachment, getattr(well_attach, attachment) - 1) + well_attach.save() + return HttpResponse("File count decreased", status=200) + else: + return HttpResponse("Cannot have negative number of files", status=400) + else: + return HttpResponse("Invalid value for qs: increment", status=400) + + except Exception as e: + print(e) + return HttpResponse(400) class WellListAPIViewV1(ListAPIView): """List and create wells - get: returns a list of wells + get: + Returns a list of wells. """ permission_classes = (WellsEditOrReadOnly,) @@ -262,7 +321,10 @@ def get_queryset(self): class WellTagSearchAPIView(ListAPIView): - """ seach for wells by tag or owner """ + """ + get: + Search for wells by tag or owner. + """ permission_classes = (WellsEditOrReadOnly,) model = Well @@ -294,7 +356,9 @@ def get(self, request, **kwargs): class WellSubmissionsListAPIView(ListAPIView): """ lists submissions for a well See also: submissions.SubmissionListAPIView (list all submission records) - get: returns submission records for a given well + + get: + Returns submission records for a given well. """ permission_classes = (WellsEditPermissions,) @@ -311,9 +375,10 @@ def get_queryset(self): class WellLocationListAPIViewV1(ListAPIView): - """ returns well locations for a given search + """ Returns well locations for a given search. - get: returns a list of wells with locations only + get: + Returns a list of wells with locations only. """ permission_classes = (WellsEditOrReadOnly,) model = Well @@ -338,7 +403,12 @@ def get_queryset(self): return qs def get(self, request, **kwargs): - """ cancels request if too many wells are found""" + """ + Cancels request if too many wells are found. + + get: + Returns compact set of well information data for populating the maps. + """ qs = self.get_queryset() locations = self.filter_queryset(qs) @@ -507,9 +577,10 @@ def list(self, request, **kwargs): class PreSignedDocumentKey(APIView): """ - Get a pre-signed document key to upload into an S3 compatible document store + Get a pre-signed document key to upload into an S3 compatible document store. - post: obtain a URL that is pre-signed to allow client-side uploads + post: + Obtain a URL that is pre-signed to allow client-side uploads. """ queryset = Well.objects.all() @@ -540,9 +611,10 @@ def get(self, request, tag, **kwargs): class DeleteWellDocument(APIView): """ - Delete a document from a S3 compatible store + Delete a document from a S3 compatible store. - delete: remove the specified object from the S3 store + delete: + Remove the specified object from the S3 store. """ queryset = Well.objects.all() @@ -573,16 +645,16 @@ def delete(self, request, tag, **kwargs): class WellHistory(APIView): """ - get: returns a history of changes to a Well model record + get: + Returns a history of changes to a Well model record. """ permission_classes = (WellsEditPermissions,) queryset = Well.objects.all() - swagger_schema = None def get(self, request, well_id, **kwargs): """ - Retrieves version history for the specified Well record and creates a list of diffs - for each revision. + get: + Retrieves version history for the specified Well record and creates a list of diffs for each revision. """ try: well = Well.objects.get(well_tag_number=well_id) @@ -631,15 +703,8 @@ def get(self, request, well_id, **kwargs): @swagger_auto_schema( - operation_description=('Get GeoJSON (see https://tools.ietf.org/html/rfc7946) dump of wells.'), - method='get', - manual_parameters=GEO_JSON_PARAMS, - responses={ - 302: openapi.Response(GEO_JSON_302_MESSAGE), - 200: openapi.Response( - 'GeoJSON data for well.', - get_geojson_schema(WELL_PROPERTIES, 'Point')) - } + method="GET", + auto_schema=None ) @api_view(['GET']) def well_geojson(request, **kwargs): @@ -653,7 +718,7 @@ def well_geojson(request, **kwargs): bounds_sql = '' if sw_long and sw_lat and ne_long and ne_lat: - bounds_sql = 'and geom @ ST_MakeEnvelope(%s, %s, %s, %s, 4326)' + bounds_sql = 'and well.geom @ ST_MakeEnvelope(%s, %s, %s, %s, 4326)' bounds = (sw_long, sw_lat, ne_long, ne_lat) iterator = GeoJSONIterator( @@ -710,16 +775,8 @@ def well_geojson(request, **kwargs): @swagger_auto_schema( - operation_description=('Get GeoJSON (see https://tools.ietf.org/html/rfc7946) dump of well ' - 'lithology.'), - method='get', - manual_parameters=GEO_JSON_PARAMS, - responses={ - 302: openapi.Response(GEO_JSON_302_MESSAGE), - 200: openapi.Response( - 'GeoJSON data for well lithology.', - get_geojson_schema(LITHOLOGY_PROPERTIES, 'Point')) - } + method="GET", + auto_schema=None ) @api_view(['GET']) def lithology_geojson(request, **kwargs): @@ -733,7 +790,7 @@ def lithology_geojson(request, **kwargs): bounds_sql = '' if sw_long and sw_lat and ne_long and ne_lat: - bounds_sql = 'and geom @ ST_MakeEnvelope(%s, %s, %s, %s, 4326)' + bounds_sql = 'and well.geom @ ST_MakeEnvelope(%s, %s, %s, %s, 4326)' bounds = (sw_long, sw_lat, ne_long, ne_lat) iterator = GeoJSONIterator( @@ -751,56 +808,52 @@ def lithology_geojson(request, **kwargs): 'api/v1/gis/lithology.json') return HttpResponseRedirect(url) - +@swagger_auto_schema(method='GET', auto_schema=None) @api_view(['GET']) def well_licensing(request, **kwargs): tag = request.GET.get('well_tag_number') - e_licensing_url = get_env_variable('E_LICENSING_URL') - api_success = False - - headers = { - 'content_type': 'application/json', - 'AuthUsername': get_env_variable('E_LICENSING_AUTH_USERNAME'), - 'AuthPass': get_env_variable('E_LICENSING_AUTH_PASSWORD') - } - - if e_licensing_url: - try: - response = requests.get(e_licensing_url + '{}'.format(tag), headers=headers) - if response.ok: - try: - licence = response.json()[-1] # Use the latest licensing value, fails purposely if empty array - licence_status = 'Licensed' if licence.get('authorization_status') == 'ACTIVE' else 'Unlicensed' - data = { - 'status': licence_status, - 'number': licence.get('authorization_number'), - 'date': licence.get('authorization_status_date') - } - api_success = True - except: - pass - except: - pass - - if not api_success: - well = Well.objects.get(well_tag_number=tag) - data = { - 'status': well.licenced_status.description, - 'number': '', - 'date': '' - } - - return HttpResponse(json.dumps(data), content_type="application/json") + try: + if tag and tag.isnumeric(): + well = Well.objects.get(well_tag_number=tag) + raw_query = """ + SELECT DISTINCT + aw.licence_number + FROM well_licences wl + LEFT JOIN aquifers_waterrightslicence aw + ON aw.wrl_sysid = wl.waterrightslicence_id + WHERE well_id = %s + """ + + with connection.cursor() as cursor: + cursor.execute(raw_query, [tag]) + result = cursor.fetchall() + flattened_result = [value for row in result for value in row] + data = { + 'status': well.licenced_status.description, + 'number': flattened_result, + 'date': '' + } + return JsonResponse(data) + except Exception: + return HttpResponse(status=500) + return HttpResponse(status=400) + + # Deprecated. Use WellSubsurface instead class WellScreens(ListAPIView): - """ returns well screen info for a range of wells """ + """ + Returns well screen info for a range of wells + + get: + Returns a compact list of wells including screen_set fields + """ + model = Well serializer_class = WellDrawdownSerializer filter_backends = (GeometryFilterBackend, RadiusFilterBackend) - swagger_schema = None def get_queryset(self): qs = Well.objects.all() \ @@ -847,12 +900,16 @@ def get_queryset(self): class WellLithology(ListAPIView): - """ returns lithology info for a range of wells """ + """ + Returns the lithologydescription_set information for a range of wells. + + get: + Returns list of wells with lat/long and lithologydescription_set information. + """ model = Well serializer_class = WellLithologySerializer filter_backends = (GeometryFilterBackend,) - swagger_schema = None def get_queryset(self): qs = Well.objects.all() @@ -874,3 +931,53 @@ def get_queryset(self): qs = qs.filter(well_tag_number__in=wells) return qs +class AddressGeocoder(APIView): + """ + Address Autocomplete Request handler + + get: + Takes Partial Address Values and returns list of possible auto complete values + """ + def get(self, request,**kwargs): + GEOCODER_ADDRESS_URL = get_env_variable('GEOCODER_ADDRESS_API_BASE') + self.request.query_params.get('searchTag') + response = requests.get(GEOCODER_ADDRESS_URL) + # Check if the request was successful (status code 200) + if response.status_code == 200: + data = response.json() + # Create a Django JsonResponse object and return it + return JsonResponse(data) + else: + # If the request was not successful, return an appropriate HTTP response + return JsonResponse({'error': f"Error: {response.status_code} - {response.text}"}, status=500) + +@api_view(['GET']) +def aquifer_pump_params(request, **kwargs): + realtime = request.GET.get('realtime') in ('True', 'true') + if realtime: + sw_long = request.query_params.get('sw_long') + sw_lat = request.query_params.get('sw_lat') + ne_long = request.query_params.get('ne_long') + ne_lat = request.query_params.get('ne_lat') + bounds = None + bounds_sql = '' + + if sw_long and sw_lat and ne_long and ne_lat: + bounds_sql = 'and well.geom @ ST_MakeEnvelope(%s, %s, %s, %s, 4326)' + bounds = (sw_long, sw_lat, ne_long, ne_lat) + + iterator = GeoJSONIterator( + PUMPING_TEST_AQUIFER_PARAMETER_SQL.format(bounds=bounds_sql), PUMPING_TEST_AQUIFER_PARAMETER_CHUNK_SIZE, + connection.cursor(), + bounds) + response = StreamingHttpResponse((item for item in iterator), + content_type='application/json') + response['Content-Disposition'] = 'attachment; filename="pumpingTestAquiferParameters.json"' + return response + else: + # Generating spatial data realtime is much too slow, + # so we have to redirect to a pre-generated instance. + url = 'https://{}/{}/{}'.format( + get_env_variable('S3_HOST'), + get_env_variable('S3_WELL_EXPORT_BUCKET'), + 'api/v2/gis/pumpingTestAquiferParameters.json') + return HttpResponseRedirect(url) diff --git a/gwells/app/backend/wells/views_v2.py b/gwells/app/backend/wells/views_v2.py index 501f06a6f..b026ee57e 100644 --- a/gwells/app/backend/wells/views_v2.py +++ b/gwells/app/backend/wells/views_v2.py @@ -20,8 +20,8 @@ from django.contrib.gis.db.models.functions import Distance from django.contrib.gis.geos import GEOSException, GEOSGeometry from django.contrib.gis.gdal import GDALException -from django.db.models import FloatField -from django.db.models.functions import Cast +from django.db.models.functions import Cast, Lower +from django.db.models import FloatField, Q, Case, When, F, Value, DateField from rest_framework import status, filters from rest_framework.exceptions import PermissionDenied, NotFound, ValidationError @@ -36,9 +36,11 @@ WellListFilterBackend, WellListOrderingFilter, GeometryFilterBackend, - RadiusFilterBackend + RadiusFilterBackend, + WellQaQcFilterBackend ) -from wells.models import Well +from wells.models import Well, WellAttachment, \ + WELL_STATUS_CODE_ALTERATION, WELL_STATUS_CODE_CONSTRUCTION, WELL_STATUS_CODE_DECOMMISSION from wells.serializers_v2 import ( WellLocationSerializerV2, WellVerticalAquiferExtentSerializerV2, @@ -47,7 +49,10 @@ WellExportSerializerV2, WellExportAdminSerializerV2, WellSubsurfaceSerializer, - WellDetailSerializer + WellDetailSerializer, + MislocatedWellsSerializer, + CrossReferencingSerializer, + RecordComplianceSerializer ) from wells.permissions import WellsEditOrReadOnly from wells.renderers import WellListCSVRenderer, WellListExcelRenderer @@ -65,11 +70,11 @@ class WellLocationListV2APIView(ListAPIView): - """ returns well locations for a given search + """ Returns well locations for a given search. - get: returns a list of wells with locations only + get: + Returns a list of wells with locations only. """ - swagger_schema = None permission_classes = (WellsEditOrReadOnly,) model = Well pagination_class = apiLimitedPagination(MAX_LOCATION_COUNT) @@ -150,7 +155,11 @@ def geoJSONResponse(self): "identification_plate_number", "street_address", "city", + "well_status", "artesian_conditions", + "storativity", + "transmissivity", + "hydraulic_conductivity" ] locations = self.filter_queryset(qs) @@ -176,9 +185,8 @@ def geoJSONResponse(self): class WellAquiferListV2APIView(ListAPIView): """ - Returns a list of aquifers with depth information for a well + Returns a list of aquifers with depth information for a well. """ - swagger_schema = None permission_classes = (HasAquiferEditRole,) ordering = ('start',) serializer_class = WellVerticalAquiferExtentSerializerV2 @@ -317,10 +325,10 @@ def log_history(self, vertical_aquifer_extent, username, timestamp): class WellListAPIViewV2(ListAPIView): """List and create wells - get: returns a list of wells + get: + Returns a list of wells. """ - swagger_schema = None permission_classes = (WellsEditOrReadOnly,) model = Well pagination_class = APILimitOffsetPagination @@ -363,7 +371,6 @@ def get_queryset(self): class WellExportListAPIViewV2(ListAPIView): """Returns CSV or Excel data for wells. """ - swagger_schema = None permission_classes = (WellsEditOrReadOnly,) model = Well @@ -512,13 +519,16 @@ def list(self, request, *args, **kwargs): class WellSubsurface(ListAPIView): - """ Returns well subsurface info within a gemoetry or a list of wells """ - """ This replaces WellScreen with the additional aquifer and lithology info""" + """ + This replaces WellScreen with the additional aquifer and lithology info + + get: + Returns well subsurface info within a geometry or a list of wells. + """ model = Well serializer_class = WellSubsurfaceSerializer filter_backends = (GeometryFilterBackend, RadiusFilterBackend) - swagger_schema = None def get_queryset(self): qs = Well.objects.all() \ @@ -568,5 +578,110 @@ class WellDetail(WellDetailV1): """ Return well detail. This view is open to all, and has no permissions. + + get: + Returns details for a given well matching the well_tag_number. """ serializer_class = WellDetailSerializer + +# QaQc Views + +class MislocatedWellsListView(ListAPIView): + """ + API view to retrieve mislocated wells. + """ + serializer_class = MislocatedWellsSerializer + + swagger_schema = None + permission_classes = (WellsEditOrReadOnly,) + model = Well + pagination_class = APILimitOffsetPagination + + # Allow searching on name fields, names of related companies, etc. + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, + filters.SearchFilter) + + ordering = ('well_tag_number',) + + def get_queryset(self): + """ + This view should return a list of all mislocated wells + for the currently authenticated user. + """ + queryset = Well.objects.all() + + return queryset + + +class RecordComplianceListView(ListAPIView): + serializer_class = RecordComplianceSerializer + + swagger_schema = None + permission_classes = (WellsEditOrReadOnly,) + model = Well + pagination_class = APILimitOffsetPagination + + # Allow searching on name fields, names of related companies, etc. + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, + filters.SearchFilter) + ordering = ('well_tag_number',) + + def get_queryset(self): + queryset = Well.objects.all() + + return queryset + + +class CrossReferencingListView(ListAPIView): + serializer_class = CrossReferencingSerializer + + swagger_schema = None + permission_classes = (WellsEditOrReadOnly,) + model = Well + pagination_class = APILimitOffsetPagination + + # Allow searching on name fields, names of related companies, etc. + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, + filters.SearchFilter) + ordering = ('well_tag_number',) + + def get_queryset(self): + """ + Optionally restricts the returned wells to those that have certain keywords like 'x-ref'd' or 'cross-ref' + in their internal_comments. + """ + queryset = Well.objects.filter(cross_referenced=True) + + return queryset + +# Download Views for QaQc + +class MislocatedWellsDownloadView(WellExportListAPIViewV2): + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, filters.SearchFilter) + + def get_queryset(self): + return Well.objects.all() + + def get_serializer_class(self): + return MislocatedWellsSerializer + + +class RecordComplianceDownloadView(WellExportListAPIViewV2): + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, filters.SearchFilter) + + def get_queryset(self): + return Well.objects.all() + + def get_serializer_class(self): + return RecordComplianceSerializer + + +class CrossReferencingDownloadView(WellExportListAPIViewV2): + filter_backends = (WellListOrderingFilter, WellQaQcFilterBackend, filters.SearchFilter) + + def get_queryset(self): + # Return wells that have been cross-referenced + return Well.objects.filter(cross_referenced=True) + + def get_serializer_class(self): + return CrossReferencingSerializer \ No newline at end of file diff --git a/gwells/app/database/README.md b/gwells/app/database/README.md index 9314014a9..b8570fa28 100644 --- a/gwells/app/database/README.md +++ b/gwells/app/database/README.md @@ -48,4 +48,4 @@ The administrator account details are recorded as an OpenShift Secret (i.e. PROD Currently, these values are used as part of the automatic step to create the admin account: `python manage.py post-deploy` -This is currently in the ./scripts/gwells-deploy.sh script and called in the mid-lifecycle hook; this will be moved into the Pipeline, at the approate Stage. +This is currently in the ./scripts/gwells-deploy.sh script and called in the mid-lifecycle hook; this will be moved into the Pipeline, at the appropriate Stage. diff --git a/gwells/app/database/scripts/local_dev/setup.sql b/gwells/app/database/scripts/local_dev/setup.sql index 5e240d8bc..69c5d8521 100644 --- a/gwells/app/database/scripts/local_dev/setup.sql +++ b/gwells/app/database/scripts/local_dev/setup.sql @@ -7,6 +7,7 @@ create extension postgis_tiger_geocoder; create extension pg_stat_statements; create extension pgaudit; create extension plr; +create extension "uuid-ossp"; alter user postgres password 'PG_ROOT_PASSWORD'; @@ -31,6 +32,7 @@ create extension postgis_tiger_geocoder; create extension pg_stat_statements; create extension pgaudit; create extension plr; +create extension "uuid-ossp"; \c "PG_DATABASE" "PG_USER"; diff --git a/gwells/app/frontend/jest.config.js b/gwells/app/frontend/jest.config.js index 76b6e6d81..bf28a52f6 100644 --- a/gwells/app/frontend/jest.config.js +++ b/gwells/app/frontend/jest.config.js @@ -15,7 +15,7 @@ module.exports = { '/node_modules/' ], moduleNameMapper: { - ".+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$": "babel-jest", + '.+\\.(css|styl|less|sass|scss|svg|png|jpg|ttf|woff|woff2)$': 'babel-jest', '^@/(.*)$': '/src/$1' }, snapshotSerializers: [ diff --git a/gwells/app/frontend/package-lock.json b/gwells/app/frontend/package-lock.json index 8ab9c5677..37069eba9 100644 --- a/gwells/app/frontend/package-lock.json +++ b/gwells/app/frontend/package-lock.json @@ -4,733 +4,1007 @@ "lockfileVersion": 1, "requires": true, "dependencies": { - "@babel/code-frame": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.0.0.tgz", - "integrity": "sha512-OfC2uemaknXr87bdLUkWog7nYuliM9Ij5HUcajsVcMCpQrcLmtxRbVFTIqmcSkSeYRBFBRxs2FiUqFJDLdiebA==", + "@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", "dev": true, "requires": { - "@babel/highlight": "7.0.0" + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@babel/code-frame": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.21.4.tgz", + "integrity": "sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g==", + "requires": { + "@babel/highlight": "^7.18.6" } }, + "@babel/compat-data": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.4.tgz", + "integrity": "sha512-/DYyDpeCfaVinT40FPGdkkb+lYSKvsVuMjDAG7jPOWWiM1ibOaB9CXJAlc4d1QpP/U2q2P9jbrSlClKSErd55g==", + "dev": true + }, "@babel/core": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.4.5.tgz", - "integrity": "sha512-OvjIh6aqXtlsA8ujtGKfC7LYWksYSX8yQcM8Ay3LuvVeQ63lcOKgoZWVqcpFwkd29aYU9rVx7jxhfhiEDV9MZA==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.4.4", - "@babel/helpers": "7.4.4", - "@babel/parser": "7.4.5", - "@babel/template": "7.4.4", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4", - "convert-source-map": "1.6.0", - "debug": "4.1.1", - "json5": "2.1.0", - "lodash": "4.17.15", - "resolve": "1.11.0", - "semver": "5.7.0", - "source-map": "0.5.7" + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.23.7.tgz", + "integrity": "sha512-+UpDgowcmqe36d4NwqvKsyPMlOLNGMsfMmQ5WGCu+siCe3t3dfe9njrzGfdN4qq+bcNUt0+Vw6haRxBOycs4dw==", + "dev": true, + "requires": { + "@ampproject/remapping": "^2.2.0", + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-module-transforms": "^7.23.3", + "@babel/helpers": "^7.23.7", + "@babel/parser": "^7.23.6", + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6", + "convert-source-map": "^2.0.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.2.3", + "semver": "^6.3.1" }, "dependencies": { + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/compat-data": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.23.5.tgz", + "integrity": "sha512-uU27kfDRlhfKl+w1U6vp16IuvSLtjAxdArVXPa9BvLkrr7CYIsxH5adpHObeAGY/41+syctUWOZ140a2Rvkgjw==", + "dev": true + }, + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.23.6.tgz", + "integrity": "sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.23.5", + "@babel/helper-validator-option": "^7.23.5", + "browserslist": "^4.22.2", + "lru-cache": "^5.1.1", + "semver": "^6.3.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-module-imports": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.22.15.tgz", + "integrity": "sha512-0pYVBnDKZO2fnSPCrgM/6WMc7eS20Fbok+0r88fp+YtWVLZrp4CkafFGIp+W0VKw4a22sgebPT99y+FDNMdP4w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.15" + } + }, + "@babel/helper-module-transforms": { + "version": "7.23.3", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.23.3.tgz", + "integrity": "sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==", + "dev": true, + "requires": { + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-module-imports": "^7.22.15", + "@babel/helper-simple-access": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/helper-validator-identifier": "^7.22.20" + } + }, + "@babel/helper-simple-access": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.22.5.tgz", + "integrity": "sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.23.5.tgz", + "integrity": "sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==", + "dev": true + }, + "@babel/helpers": { + "version": "7.23.8", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.8.tgz", + "integrity": "sha512-KDqYz4PiOWvDFrdHLPhKtCThtIcKVy6avWD2oG4GEvyQ+XDZwHD4YQd+H2vNMnq2rkdxsDkU82T+Vk8U/WXHRQ==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/traverse": "^7.23.7", + "@babel/types": "^7.23.6" + } + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, + "browserslist": { + "version": "4.22.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", + "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + } + }, + "caniuse-lite": { + "version": "1.0.30001576", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001576.tgz", + "integrity": "sha512-ff5BdakGe2P3SQsMsiqmt1Lc8221NR1VzHj5jXN5vBny9A6fpze94HiVV/n7XRosOlsShJcvMv5mdnpjOGCEgg==", + "dev": true + }, + "convert-source-map": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz", + "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==", + "dev": true + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" } }, - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "electron-to-chromium": { + "version": "1.4.630", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.630.tgz", + "integrity": "sha512-osHqhtjojpCsACVnuD11xO5g9xaCyw7Qqn/C2KParkMv42i8jrJJgx3g7mkHfpxwhy9MnOJr8+pKOdZ7qzgizg==", "dev": true - } - } - }, - "@babel/generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.4.4.tgz", - "integrity": "sha512-53UOLK6TVNqKxf7RUh8NE851EHRxOOeVXKbK2bivdb+iziMyk03Sr4eaE9OELCbyZAAafAKPDwF2TPUES5QbxQ==", - "dev": true, - "requires": { - "@babel/types": "7.4.4", - "jsesc": "2.5.2", - "lodash": "4.17.15", - "source-map": "0.5.7", - "trim-right": "1.0.1" - }, - "dependencies": { - "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true + }, + "update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } } } }, "@babel/helper-annotate-as-pure": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.0.0.tgz", - "integrity": "sha512-3UYcJUj9kvSLbLbUIfQTqzcy5VX7GRZ/CCDrnOaZorFFM01aXp1+GJwuFGV4NDDoAS+mOUyHcO6UD/RfqOks3Q==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", + "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-builder-binary-assignment-operator-visitor": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.1.0.tgz", - "integrity": "sha512-qNSR4jrmJ8M1VMM9tibvyRAHXQs2PmaksQF7c1CGJNipfe3D8p+wgNwgso/P2A2r2mdgBWAXljNWR0QRZAMW8w==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.18.9.tgz", + "integrity": "sha512-yFQ0YCHoIqarl8BCRwBL8ulYUaZpz3bNsA7oFepAzee+8/+ImtADXNOmO5vJvsPff3qi+hvpkY/NYBTrBQgdNw==", "dev": true, "requires": { - "@babel/helper-explode-assignable-expression": "7.1.0", - "@babel/types": "7.4.4" + "@babel/helper-explode-assignable-expression": "^7.18.6", + "@babel/types": "^7.18.9" } }, - "@babel/helper-call-delegate": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-call-delegate/-/helper-call-delegate-7.4.4.tgz", - "integrity": "sha512-l79boDFJ8S1c5hvQvG+rc+wHw6IuH7YldmRKsYtpbawsxURu/paVy57FZMomGK22/JckepaikOkY0MoAmdyOlQ==", + "@babel/helper-compilation-targets": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.21.4.tgz", + "integrity": "sha512-Fa0tTuOXZ1iL8IeDFUWCzjZcn+sJGd9RZdH9esYVjEejGmzf+FFYQpMi/kZUk2kPy/q1H3/GPw7np8qar/stfg==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "7.4.4", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/compat-data": "^7.21.4", + "@babel/helper-validator-option": "^7.21.0", + "browserslist": "^4.21.3", + "lru-cache": "^5.1.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, "@babel/helper-create-class-features-plugin": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.4.4.tgz", - "integrity": "sha512-UbBHIa2qeAGgyiNR9RszVF7bUHEdgS4JAUNT8SiqrAN6YJVxlOxeLr5pBzb5kan302dejJ9nla4RyKcR1XT6XA==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.21.4.tgz", + "integrity": "sha512-46QrX2CQlaFRF4TkwfTt6nJD7IHq8539cCL7SDpqWSDeJKY1xylKKY5F/33mJhLZ3mFvKv2gGrVS6NkyF6qs+Q==", "dev": true, "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/helper-member-expression-to-functions": "7.0.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.4.4", - "@babel/helper-split-export-declaration": "7.4.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-member-expression-to-functions": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0", + "@babel/helper-split-export-declaration": "^7.18.6" } }, - "@babel/helper-define-map": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-define-map/-/helper-define-map-7.4.4.tgz", - "integrity": "sha512-IX3Ln8gLhZpSuqHJSnTNBWGDE9kdkTEWl21A/K7PQ00tseBwbqCHTvNLHSBd9M0R5rER4h5Rsvj9vw0R5SieBg==", + "@babel/helper-create-regexp-features-plugin": { + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.21.4.tgz", + "integrity": "sha512-M00OuhU+0GyZ5iBBN9czjugzWrEq2vDpf/zCYHxxf93ul/Q5rv+a5h+/+0WnI1AebHNVtl5bFV0qsJoH23DbfA==", "dev": true, "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/types": "7.4.4", - "lodash": "4.17.15" + "@babel/helper-annotate-as-pure": "^7.18.6", + "regexpu-core": "^5.3.1" } }, - "@babel/helper-explode-assignable-expression": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.1.0.tgz", - "integrity": "sha512-NRQpfHrJ1msCHtKjbzs9YcMmJZOg6mQMmGRB+hbamEdG5PNpaSm95275VD92DvJKuyl0s2sFiDmMZ+EnnvufqA==", + "@babel/helper-define-polyfill-provider": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.3.3.tgz", + "integrity": "sha512-z5aQKU4IzbqCC1XH0nAqfsFLMVSo22SBKUc0BxGrLkolTdPTructy0ToNnlO2zA4j9Q/7pjMZf0DSY+DSTYzww==", "dev": true, "requires": { - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/helper-compilation-targets": "^7.17.7", + "@babel/helper-plugin-utils": "^7.16.7", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, - "@babel/helper-function-name": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.1.0.tgz", - "integrity": "sha512-A95XEoCpb3TO+KZzJ4S/5uW5fNe26DjBGqf1o9ucyLyCmi1dXq/B3c8iaWTfBk3VvetUxl16e8tIrd5teOCfGw==", + "@babel/helper-environment-visitor": { + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", + "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", + "dev": true + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.18.6.tgz", + "integrity": "sha512-eyAYAsQmB80jNfg4baAtLeWAQHfHFiR483rzFK+BhETlGZaQC9bsfrugfXDCbRHLQbIA7U5NxhhOxN7p/dWIcg==", "dev": true, "requires": { - "@babel/helper-get-function-arity": "7.0.0", - "@babel/template": "7.4.4", - "@babel/types": "7.4.4" + "@babel/types": "^7.18.6" } }, - "@babel/helper-get-function-arity": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.0.0.tgz", - "integrity": "sha512-r2DbJeg4svYvt3HOS74U4eWKsUAMRH01Z1ds1zx8KNTPtpTL5JAsdFv8BNyOpVqdFhHkkRDIg5B4AsxmkjAlmQ==", + "@babel/helper-function-name": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", + "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/template": "^7.20.7", + "@babel/types": "^7.21.0" } }, "@babel/helper-hoist-variables": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.4.4.tgz", - "integrity": "sha512-VYk2/H/BnYbZDDg39hr3t2kKyifAm1W6zHRfhx8jGjIHpQEBv9dry7oQ2f3+J703TLu69nYdxsovl0XYfcnK4w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", + "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-member-expression-to-functions": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.0.0.tgz", - "integrity": "sha512-avo+lm/QmZlv27Zsi0xEor2fKcqWG56D5ae9dzklpIaY7cQMK5N8VSpaNVPPagiqmy7LrEjK1IWdGMOqPu5csg==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.21.0.tgz", + "integrity": "sha512-Muu8cdZwNN6mRRNG6lAYErJ5X3bRevgYR2O8wN0yn7jJSnGDu6eG59RfT29JHxGUovyfrh6Pj0XzmR7drNVL3Q==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.21.0" } }, "@babel/helper-module-imports": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.0.0.tgz", - "integrity": "sha512-aP/hlLq01DWNEiDg4Jn23i+CXxW/owM4WpDLFUbpjxe4NS3BhLVZQ5i7E0ZrxuQ/vwekIeciyamgB1UIYxxM6A==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.21.4.tgz", + "integrity": "sha512-orajc5T2PsRYUN3ZryCEFeMDYwyw09c/pZeaQEZPH0MpKzSvn3e0uXsDBu3k03VI+9DBiRo+l22BfKTpKwa/Wg==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.21.4" } }, "@babel/helper-module-transforms": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.4.4.tgz", - "integrity": "sha512-3Z1yp8TVQf+B4ynN7WoHPKS8EkdTbgAEy0nU0rs/1Kw4pDgmvYH3rz3aI11KgxKCba2cn7N+tqzV1mY2HMN96w==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", + "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-simple-access": "7.1.0", - "@babel/helper-split-export-declaration": "7.4.4", - "@babel/template": "7.4.4", - "@babel/types": "7.4.4", - "lodash": "4.17.15" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-simple-access": "^7.20.2", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/helper-validator-identifier": "^7.19.1", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.21.2", + "@babel/types": "^7.21.2" } }, "@babel/helper-optimise-call-expression": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.0.0.tgz", - "integrity": "sha512-u8nd9NQePYNQV8iPWu/pLLYBqZBa4ZaY1YWRFMuxrid94wKI1QNt67NEZ7GAe5Kc/0LLScbim05xZFWkAdrj9g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.18.6.tgz", + "integrity": "sha512-HP59oD9/fEHQkdcbgFCnbmgH5vIQTJbxh2yf+CdM89/glUNnuzr87Q8GIjGEnOktTROemO0Pe0iPAYbqZuOUiA==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.18.6" } }, "@babel/helper-plugin-utils": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz", - "integrity": "sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", + "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", "dev": true }, - "@babel/helper-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-regex/-/helper-regex-7.4.4.tgz", - "integrity": "sha512-Y5nuB/kESmR3tKjU8Nkn1wMGEx1tjJX076HBMeL3XLQCu6vA/YRzuTW0bbb+qRnXvQGn+d6Rx953yffl8vEy7Q==", - "dev": true, - "requires": { - "lodash": "4.17.15" - } - }, "@babel/helper-remap-async-to-generator": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.1.0.tgz", - "integrity": "sha512-3fOK0L+Fdlg8S5al8u/hWE6vhufGSn0bN09xm2LXMy//REAF8kDCrYoOBKYmA8m5Nom+sV9LyLCwrFynA8/slg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.18.9.tgz", + "integrity": "sha512-dI7q50YKd8BAv3VEfgg7PS7yD3Rtbi2J1XMXaalXO0W0164hYLnh8zpjRS0mte9MfVp/tltvr/cfdXPvJr1opA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-wrap-function": "7.2.0", - "@babel/template": "7.4.4", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-wrap-function": "^7.18.9", + "@babel/types": "^7.18.9" } }, "@babel/helper-replace-supers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.4.4.tgz", - "integrity": "sha512-04xGEnd+s01nY1l15EuMS1rfKktNF+1CkKmHoErDppjAAZL+IUBZpzT748x262HF7fibaQPhbvWUl5HeSt1EXg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.20.7.tgz", + "integrity": "sha512-vujDMtB6LVfNW13jhlCrp48QNslK6JXi7lQG736HVbHz/mbf4Dc7tIRh1Xf5C0rF7BP8iiSxGMCmY6Ci1ven3A==", "dev": true, "requires": { - "@babel/helper-member-expression-to-functions": "7.0.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-member-expression-to-functions": "^7.20.7", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/template": "^7.20.7", + "@babel/traverse": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/helper-simple-access": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.1.0.tgz", - "integrity": "sha512-Vk+78hNjRbsiu49zAPALxTb+JUQCz1aolpd8osOF16BGnLtseD21nbHgLPGUwrXEurZgiCOUmvs3ExTu4F5x6w==", + "version": "7.20.2", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", + "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", "dev": true, "requires": { - "@babel/template": "7.4.4", - "@babel/types": "7.4.4" + "@babel/types": "^7.20.2" } }, - "@babel/helper-split-export-declaration": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.4.4.tgz", - "integrity": "sha512-Ro/XkzLf3JFITkW6b+hNxzZ1n5OQ80NvIUdmHspih1XAhtN3vPTuUFT4eQnela+2MaZ5ulH+iyP513KJrxbN7Q==", + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.20.0", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.20.0.tgz", + "integrity": "sha512-5y1JYeNKfvnT8sZcK9DVRtpTbGiomYIHviSP3OQWmDPU3DeH4a1ZlT/N2lyQ5P8egjcRaT/Y9aNqUxK0WsnIIg==", "dev": true, "requires": { - "@babel/types": "7.4.4" + "@babel/types": "^7.20.0" } }, - "@babel/helper-wrap-function": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.2.0.tgz", - "integrity": "sha512-o9fP1BZLLSrYlxYEYyl2aS+Flun5gtjTIG8iln+XuEzQTs0PLagAGSXUcqruJwD5fM48jzIEggCKpIfWTcR7pQ==", + "@babel/helper-split-export-declaration": { + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", + "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", "dev": true, "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/template": "7.4.4", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/types": "^7.18.6" } }, - "@babel/helpers": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.4.4.tgz", - "integrity": "sha512-igczbR/0SeuPR8RFfC7tGrbdTbFL3QTvH6D+Z6zNxnTe//GyqmtHmDkzrqDmyZ3eSwPqB/LhyKoU5DXsp+Vp2A==", + "@babel/helper-string-parser": { + "version": "7.19.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", + "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.19.1", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", + "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==" + }, + "@babel/helper-validator-option": { + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", + "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.20.5.tgz", + "integrity": "sha512-bYMxIWK5mh+TgXGVqAtnu5Yn1un+v8DDZtqyzKRLUzrh70Eal2O3aZ7aPYiMADO4uKlkzOiRiZ6GX5q3qxvW9Q==", "dev": true, "requires": { - "@babel/template": "7.4.4", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4" + "@babel/helper-function-name": "^7.19.0", + "@babel/template": "^7.18.10", + "@babel/traverse": "^7.20.5", + "@babel/types": "^7.20.5" } }, "@babel/highlight": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.0.0.tgz", - "integrity": "sha512-UFMC4ZeFC48Tpvj7C8UgLvtkaUuovQX+5xNWrsIoMG8o2z+XFKjKaN9iVmS84dPwVN00W4wPmqvYoZF3EGAsfw==", - "dev": true, + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", + "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", "requires": { - "chalk": "2.4.2", - "esutils": "2.0.2", - "js-tokens": "4.0.0" + "@babel/helper-validator-identifier": "^7.18.6", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" } }, "@babel/parser": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.4.5.tgz", - "integrity": "sha512-9mUqkL1FF5T7f0WDFfAoDdiMVPWsdD1gZYzSnaXsxUCUqzuch/8of9G3VUSNiZmMBoRxT3neyVsqeiL/ZPcjew==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.4.tgz", + "integrity": "sha512-alVJj7k7zIxqBZ7BTRhz0IqJFxW1VJbm6N8JbcYhQ186df9ZBPbZBmWSqAMXwHGsCJdYks7z/voa3ibiS5bCIw==", "dev": true }, "@babel/plugin-proposal-async-generator-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.2.0.tgz", - "integrity": "sha512-+Dfo/SCQqrwx48ptLVGLdE39YtWRuKc/Y9I5Fy0P1DDBB9lsAHpjcEJQt+4IifuSOSTLBKJObJqMvaO1pIE8LQ==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.20.7.tgz", + "integrity": "sha512-xMbiLsn/8RK7Wq7VeVytytS2L6qE69bXPB10YCmMdDZbKF4okCqY74pI/jJQ/8U0b/F6NrT2+14b8/P9/3AMGA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0", - "@babel/plugin-syntax-async-generators": "7.2.0" + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9", + "@babel/plugin-syntax-async-generators": "^7.8.4" } }, "@babel/plugin-proposal-class-properties": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.4.4.tgz", - "integrity": "sha512-WjKTI8g8d5w1Bc9zgwSz2nfrsNQsXcCf9J9cdCvrJV6RF56yztwm4TmJC0MgJ9tvwO9gUA/mcYe89bLdGfiXFg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.18.6.tgz", + "integrity": "sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-create-class-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-proposal-decorators": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.4.4.tgz", - "integrity": "sha512-z7MpQz3XC/iQJWXH9y+MaWcLPNSMY9RQSthrLzak8R8hCj0fuyNk+Dzi9kfNe/JxxlWQ2g7wkABbgWjW36MTcw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.21.0.tgz", + "integrity": "sha512-MfgX49uRrFUTL/HvWtmx3zmpyzMMr4MTj3d527MLlr/4RTT9G/ytFFP7qet2uM2Ve03b+BkpWUpK+lRXnQ+v9w==", "dev": true, "requires": { - "@babel/helper-create-class-features-plugin": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-decorators": "7.2.0" + "@babel/helper-create-class-features-plugin": "^7.21.0", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "@babel/plugin-syntax-decorators": "^7.21.0" } }, "@babel/plugin-proposal-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.2.0.tgz", - "integrity": "sha512-MAFV1CA/YVmYwZG0fBQyXhmj0BHCB5egZHCKWIFVv/XCxAeVGIHfos3SwDck4LvCllENIAg7xMKOG5kH0dzyUg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.18.6.tgz", + "integrity": "sha512-lr1peyn9kOdbYc0xr0OdHTZ5FMqS6Di+H0Fz2I/JwMzGmzJETNeOFq2pBySw6X/KFL5EWDjlJuMsUGRFb8fQgQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-json-strings": "7.2.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-json-strings": "^7.8.3" } }, "@babel/plugin-proposal-object-rest-spread": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.4.4.tgz", - "integrity": "sha512-dMBG6cSPBbHeEBdFXeQ2QLc5gUpg4Vkaz8octD4aoW/ISO+jBOcsuxYL7bsb5WSu8RLP6boxrBIALEHgoHtO9g==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.20.7.tgz", + "integrity": "sha512-d2S98yCiLxDVmBmE8UjGcfPvNEUbA1U5q5WxaWFUGRzJSVAZqm5W6MbPct0jxnegUZ0niLeNX+IOzEs7wYg9Dg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-object-rest-spread": "7.2.0" + "@babel/compat-data": "^7.20.5", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.20.7" } }, "@babel/plugin-proposal-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-mgYj3jCcxug6KUcX4OBoOJz3CMrwRfQELPQ5560F70YQUBZB7uac9fqaWamKR1iWUzGiK2t0ygzjTScZnVz75g==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.18.6.tgz", + "integrity": "sha512-Q40HEhs9DJQyaZfUjjn6vE8Cv4GmMHCYuMGIWUnlxH6400VGxOuwWsPt4FxXxJkC/5eOzgn0z21M9gMT4MOhbw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/plugin-syntax-optional-catch-binding": "7.2.0" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" } }, "@babel/plugin-proposal-unicode-property-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.4.4.tgz", - "integrity": "sha512-j1NwnOqMG9mFUOH58JTFsA/+ZYzQLUZ/drqWUqxCYLGeu2JFZL8YrNC9hBxKmWtAuOCHPcRpgv7fhap09Fb4kA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.18.6.tgz", + "integrity": "sha512-2BShG/d5yoZyXZfVePH91urL5wTG6ASZU9M4o03lKK8u8UW1y08OMttBSOADTcJrnPMpvDXRG3G8fyLh4ovs8w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.4.4", - "regexpu-core": "4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-syntax-async-generators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.2.0.tgz", - "integrity": "sha512-1ZrIRBv2t0GSlcwVoQ6VgSLpLgiN/FVQUzt9znxo7v2Ov4jJrs8RY8tv0wvDmFN3qIdMKWrmMMW6yZ0G19MfGg==", + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-decorators": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.2.0.tgz", - "integrity": "sha512-38QdqVoXdHUQfTpZo3rQwqQdWtCn5tMv4uV6r2RMfTqNBuv4ZBhz79SfaQWKTVmxHjeFv/DnXVC/+agHCklYWA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.21.0.tgz", + "integrity": "sha512-tIoPpGBR8UuM4++ccWN3gifhVvQu7ZizuR1fklhRJrd5ewgbkUS+0KVFeWWxELtn18NTLoW32XV7zyOgIAiz+w==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-syntax-dynamic-import": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.2.0.tgz", - "integrity": "sha512-mVxuJ0YroI/h/tbFTPGZR8cv6ai+STMKNBq0f8hFxsxWjl94qqhsb+wXbpNMDPU3cfR1TIsVFzU3nXyZMqyK4w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-json-strings": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.2.0.tgz", - "integrity": "sha512-5UGYnMSLRE1dqqZwug+1LISpA403HzlSfsg6P9VXU6TBjcSHeNlw4DxDx7LgpF+iKZoOG/+uzqoRHTdcUpiZNg==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-jsx": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.2.0.tgz", - "integrity": "sha512-VyN4QANJkRW6lDBmENzRszvZf3/4AXaj9YR7GwrWeeN9tEBPuXbmDYVU9bYBN0D70zCWVwUy0HWq2553VCb6Hw==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.21.4.tgz", + "integrity": "sha512-5hewiLct5OKyh6PLKEYaFclcqtIgCb6bmELouxjF6up5q3Sov7rOayW4RwhbaBL0dit8rA80GNfY+UuDp2mBbQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-syntax-object-rest-spread": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.2.0.tgz", - "integrity": "sha512-t0JKGgqk2We+9may3t0xDdmneaXmyxq0xieYcKHxIsrJO64n1OiMWNUtc5gQK1PA0NpdCRrtZp4z+IUaKugrSA==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-syntax-optional-catch-binding": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.2.0.tgz", - "integrity": "sha512-bDe4xKNhb0LI7IvZHiA13kff0KEfaGX/Hv4lMA9+7TEc63hMNvfKo6ZFpXhKuEp+II/q35Gc4NoMeDZyaUbj9w==", + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.8.0" } }, "@babel/plugin-transform-arrow-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.2.0.tgz", - "integrity": "sha512-ER77Cax1+8/8jCB9fo4Ud161OZzWN5qawi4GusDuRLcDbDG+bIGYY20zb2dfAFdTRGzrfq2xZPvF0R64EHnimg==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.20.7.tgz", + "integrity": "sha512-3poA5E7dzDomxj9WXWwuD6A5F3kc7VXwIJO+E+J8qtDtS+pXPAhrgEyh+9GBwBgPq1Z+bB+/JD60lp5jsN7JPQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-async-to-generator": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.4.4.tgz", - "integrity": "sha512-YiqW2Li8TXmzgbXw+STsSqPBPFnGviiaSp6CYOq55X8GQ2SGVLrXB6pNid8HkqkZAzOH6knbai3snhP7v0fNwA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.20.7.tgz", + "integrity": "sha512-Uo5gwHPT9vgnSXQxqGtpdufUiWp96gk7yiP4Mp5bm1QMkEmLXBO7PAGYbKoJ6DhAwiNkcHFBol/x5zZZkL/t0Q==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-remap-async-to-generator": "7.1.0" + "@babel/helper-module-imports": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-remap-async-to-generator": "^7.18.9" } }, "@babel/plugin-transform-block-scoped-functions": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.2.0.tgz", - "integrity": "sha512-ntQPR6q1/NKuphly49+QiQiTN0O63uOwjdD6dhIjSWBI5xlrbUFh720TIpzBhpnrLfv2tNH/BXvLIab1+BAI0w==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.18.6.tgz", + "integrity": "sha512-ExUcOqpPWnliRcPqves5HJcJOvHvIIWfuS4sroBUenPuMdmW+SMHDakmtS7qOo13sVppmUijqeTv7qqGsvURpQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-block-scoping": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.4.4.tgz", - "integrity": "sha512-jkTUyWZcTrwxu5DD4rWz6rDB5Cjdmgz6z7M7RLXOJyCUkFBawssDGcGh8M/0FTSB87avyJI1HsTwUXp9nKA1PA==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.21.0.tgz", + "integrity": "sha512-Mdrbunoh9SxwFZapeHVrwFmri16+oYotcZysSzhNIVDwIAb1UV+kvnxULSYq9J3/q5MDG+4X6w8QVgD1zhBXNQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "lodash": "4.17.15" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-classes": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.4.4.tgz", - "integrity": "sha512-/e44eFLImEGIpL9qPxSRat13I5QNRgBLu2hOQJCF7VLy/otSM/sypV1+XaIw5+502RX/+6YaSAPmldk+nhHDPw==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.21.0.tgz", + "integrity": "sha512-RZhbYTCEUAe6ntPehC4hlslPWosNHDox+vAs4On/mCLRLfoDVHf6hVEd7kuxr1RnHwJmxFfUM3cZiZRmPxJPXQ==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-define-map": "7.4.4", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-optimise-call-expression": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.4.4", - "@babel/helper-split-export-declaration": "7.4.4", - "globals": "11.12.0" + "@babel/helper-annotate-as-pure": "^7.18.6", + "@babel/helper-compilation-targets": "^7.20.7", + "@babel/helper-environment-visitor": "^7.18.9", + "@babel/helper-function-name": "^7.21.0", + "@babel/helper-optimise-call-expression": "^7.18.6", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-replace-supers": "^7.20.7", + "@babel/helper-split-export-declaration": "^7.18.6", + "globals": "^11.1.0" } }, "@babel/plugin-transform-computed-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.2.0.tgz", - "integrity": "sha512-kP/drqTxY6Xt3NNpKiMomfgkNn4o7+vKxK2DDKcBG9sHj51vHqMBGy8wbDS/J4lMxnqs153/T3+DmCEAkC5cpA==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.20.7.tgz", + "integrity": "sha512-Lz7MvBK6DTjElHAmfu6bfANzKcxpyNPeYBGEafyA6E5HtRpjpZwU+u7Qrgz/2OR0z+5TvKYbPdphfSaAcZBrYQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/template": "^7.20.7" } }, "@babel/plugin-transform-destructuring": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.4.4.tgz", - "integrity": "sha512-/aOx+nW0w8eHiEHm+BTERB2oJn5D127iye/SUQl7NjHy0lf+j7h4MKMMSOwdazGq9OxgiNADncE+SRJkCxjZpQ==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.21.3.tgz", + "integrity": "sha512-bp6hwMFzuiE4HqYEyoGJ/V2LeIWn+hLVKc4pnj++E5XQptwhtcGmSayM029d/j2X1bPKGTlsyPwAubuU22KhMA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-dotall-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.4.4.tgz", - "integrity": "sha512-P05YEhRc2h53lZDjRPk/OektxCVevFzZs2Gfjd545Wde3k+yFDbXORgl2e0xpbq8mLcKJ7Idss4fAg0zORN/zg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.18.6.tgz", + "integrity": "sha512-6S3jpun1eEbAxq7TdjLotAsl4WpQI9DxfkycRcKrjhQYzU87qpXdknpBg/e+TdcMehqGnLFi7tnFUBR02Vq6wg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.4.4", - "regexpu-core": "4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-duplicate-keys": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.2.0.tgz", - "integrity": "sha512-q+yuxW4DsTjNceUiTzK0L+AfQ0zD9rWaTLiUqHA8p0gxx7lu1EylenfzjeIWNkPy6e/0VG/Wjw9uf9LueQwLOw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.18.9.tgz", + "integrity": "sha512-d2bmXCtZXYc59/0SanQKbiWINadaJXqtvIQIzd4+hNwkWBgyCd5F/2t1kXoUdvPMrxzPvhK6EMQRROxsue+mfw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-exponentiation-operator": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.2.0.tgz", - "integrity": "sha512-umh4hR6N7mu4Elq9GG8TOu9M0bakvlsREEC+ialrQN6ABS4oDQ69qJv1VtR3uxlKMCQMCvzk7vr17RHKcjx68A==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.18.6.tgz", + "integrity": "sha512-wzEtc0+2c88FVR34aQmiz56dxEkxr2g8DQb/KfaFa1JYXOFVsbhvAonFN6PwVWj++fKmku8NP80plJ5Et4wqHw==", "dev": true, "requires": { - "@babel/helper-builder-binary-assignment-operator-visitor": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-for-of": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.4.4.tgz", - "integrity": "sha512-9T/5Dlr14Z9TIEXLXkt8T1DU7F24cbhwhMNUziN3hB1AXoZcdzPcTiKGRn/6iOymDqtTKWnr/BtRKN9JwbKtdQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.21.0.tgz", + "integrity": "sha512-LlUYlydgDkKpIY7mcBWvyPPmMcOphEyYA27Ef4xpbh1IiDNLr0kZsos2nf92vz3IccvJI25QUwp86Eo5s6HmBQ==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-function-name": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.4.4.tgz", - "integrity": "sha512-iU9pv7U+2jC9ANQkKeNF6DrPy4GBa4NWQtl6dHB4Pb3izX2JOEvDTFarlNsBj/63ZEzNNIAMs3Qw4fNCcSOXJA==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.18.9.tgz", + "integrity": "sha512-WvIBoRPaJQ5yVHzcnJFor7oS5Ls0PYixlTYE63lCj2RtdQEl15M68FXQlxnG6wdraJIXRdR7KI+hQ7q/9QjrCQ==", "dev": true, "requires": { - "@babel/helper-function-name": "7.1.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-compilation-targets": "^7.18.9", + "@babel/helper-function-name": "^7.18.9", + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-literals": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.2.0.tgz", - "integrity": "sha512-2ThDhm4lI4oV7fVQ6pNNK+sx+c/GM5/SaML0w/r4ZB7sAneD/piDJtwdKlNckXeyGK7wlwg2E2w33C/Hh+VFCg==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.18.9.tgz", + "integrity": "sha512-IFQDSRoTPnrAIrI5zoZv73IFeZu2dhu6irxQjY9rNjTT53VmKg9fenjvoiOWOkJ6mm4jKVPtdMzBY98Fp4Z4cg==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-modules-amd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.2.0.tgz", - "integrity": "sha512-mK2A8ucqz1qhrdqjS9VMIDfIvvT2thrEsIQzbaTdc5QFzhDjQv2CkJJ5f6BXIkgbmaoax3zBr2RyvV/8zeoUZw==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.20.11.tgz", + "integrity": "sha512-NuzCt5IIYOW0O30UvqktzHYR2ud5bOWbY0yaxWZ6G+aFzOMJvrs5YHNikrbdaT15+KNO31nPOy5Fim3ku6Zb5g==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-modules-commonjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.4.4.tgz", - "integrity": "sha512-4sfBOJt58sEo9a2BQXnZq+Q3ZTSAUXyK3E30o36BOGnJ+tvJ6YSxF0PG6kERvbeISgProodWuI9UVG3/FMY6iw==", + "version": "7.21.2", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.21.2.tgz", + "integrity": "sha512-Cln+Yy04Gxua7iPdj6nOV96smLGjpElir5YwzF0LBPKoPlLDNJePNlrGGaybAJkd0zKRnOVXOgizSqPYMNYkzA==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-simple-access": "7.1.0" + "@babel/helper-module-transforms": "^7.21.2", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-simple-access": "^7.20.2" } }, "@babel/plugin-transform-modules-systemjs": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.4.4.tgz", - "integrity": "sha512-MSiModfILQc3/oqnG7NrP1jHaSPryO6tA2kOMmAQApz5dayPxWiHqmq4sWH2xF5LcQK56LlbKByCd8Aah/OIkQ==", + "version": "7.20.11", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.20.11.tgz", + "integrity": "sha512-vVu5g9BPQKSFEmvt2TA4Da5N+QVS66EX21d8uoOihC+OCpUoGvzVsXeqFdtAEfVa5BILAeFt+U7yVmLbQnAJmw==", "dev": true, "requires": { - "@babel/helper-hoist-variables": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-hoist-variables": "^7.18.6", + "@babel/helper-module-transforms": "^7.20.11", + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-validator-identifier": "^7.19.1" } }, "@babel/plugin-transform-modules-umd": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.2.0.tgz", - "integrity": "sha512-BV3bw6MyUH1iIsGhXlOK6sXhmSarZjtJ/vMiD9dNmpY8QXFFQTj+6v92pcfy1iqa8DeAfJFwoxcrS/TUZda6sw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.18.6.tgz", + "integrity": "sha512-dcegErExVeXcRqNtkRU/z8WlBLnvD4MRnHgNs3MytRO1Mn1sHRyhbcpYbVMGclAqOjdW+9cfkdZno9dFdfKLfQ==", "dev": true, "requires": { - "@babel/helper-module-transforms": "7.4.4", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-module-transforms": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-named-capturing-groups-regex": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.4.5.tgz", - "integrity": "sha512-z7+2IsWafTBbjNsOxU/Iv5CvTJlr5w4+HGu1HovKYTtgJ362f7kBcQglkfmlspKKZ3bgrbSGvLfNx++ZJgCWsg==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.20.5.tgz", + "integrity": "sha512-mOW4tTzi5iTLnw+78iEq3gr8Aoq4WNRGpmSlrogqaiCBoR1HFhpU4JkpQFOHfeYx3ReVIFWOQJS4aZBRvuZ6mA==", "dev": true, "requires": { - "regexp-tree": "0.1.10" + "@babel/helper-create-regexp-features-plugin": "^7.20.5", + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-new-target": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.4.4.tgz", - "integrity": "sha512-r1z3T2DNGQwwe2vPGZMBNjioT2scgWzK9BCnDEh+46z8EEwXBq24uRzd65I7pjtugzPSj921aM15RpESgzsSuA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.18.6.tgz", + "integrity": "sha512-DjwFA/9Iu3Z+vrAn+8pBUGcjhxKguSMlsFqeCKbhb9BAV756v0krzVK04CRDi/4aqmk8BsHb4a/gFcaA5joXRw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-object-super": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.2.0.tgz", - "integrity": "sha512-VMyhPYZISFZAqAPVkiYb7dUe2AsVi2/wCT5+wZdsNO31FojQJa9ns40hzZ6U9f50Jlq4w6qwzdBB2uwqZ00ebg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.18.6.tgz", + "integrity": "sha512-uvGz6zk+pZoS1aTZrOvrbj6Pp/kK2mp45t2B+bTDre2UgsZZ8EZLSJtUg7m/no0zOJUWgFONpB7Zv9W2tSaFlA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-replace-supers": "7.4.4" + "@babel/helper-plugin-utils": "^7.18.6", + "@babel/helper-replace-supers": "^7.18.6" } }, "@babel/plugin-transform-parameters": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.4.4.tgz", - "integrity": "sha512-oMh5DUO1V63nZcu/ZVLQFqiihBGo4OpxJxR1otF50GMeCLiRx5nUdtokd+u9SuVJrvvuIh9OosRFPP4pIPnwmw==", + "version": "7.21.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.21.3.tgz", + "integrity": "sha512-Wxc+TvppQG9xWFYatvCGPvZ6+SIUxQ2ZdiBP+PHYMIjnPXD+uThCshaz4NZOnODAtBjjcVQQ/3OKs9LW28purQ==", "dev": true, "requires": { - "@babel/helper-call-delegate": "7.4.4", - "@babel/helper-get-function-arity": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2" } }, "@babel/plugin-transform-regenerator": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.4.5.tgz", - "integrity": "sha512-gBKRh5qAaCWntnd09S8QC7r3auLCqq5DI6O0DlfoyDjslSBVqBibrMdsqO+Uhmx3+BlOmE/Kw1HFxmGbv0N9dA==", + "version": "7.20.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.20.5.tgz", + "integrity": "sha512-kW/oO7HPBtntbsahzQ0qSE3tFvkFwnbozz3NWFhLGqH75vLEg+sCGngLlhVkePlCs3Jv0dBBHDzCHxNiFAQKCQ==", "dev": true, "requires": { - "regenerator-transform": "0.14.0" + "@babel/helper-plugin-utils": "^7.20.2", + "regenerator-transform": "^0.15.1" } }, "@babel/plugin-transform-runtime": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.4.4.tgz", - "integrity": "sha512-aMVojEjPszvau3NRg+TIH14ynZLvPewH4xhlCW1w6A3rkxTS1m4uwzRclYR9oS+rl/dr+kT+pzbfHuAWP/lc7Q==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.21.4.tgz", + "integrity": "sha512-1J4dhrw1h1PqnNNpzwxQ2UBymJUF8KuPjAAnlLwZcGhHAIqUigFW7cdK6GHoB64ubY4qXQNYknoUeks4Wz7CUA==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0", - "resolve": "1.11.0", - "semver": "5.7.0" + "@babel/helper-module-imports": "^7.21.4", + "@babel/helper-plugin-utils": "^7.20.2", + "babel-plugin-polyfill-corejs2": "^0.3.3", + "babel-plugin-polyfill-corejs3": "^0.6.0", + "babel-plugin-polyfill-regenerator": "^0.4.1", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + } } }, "@babel/plugin-transform-shorthand-properties": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.2.0.tgz", - "integrity": "sha512-QP4eUM83ha9zmYtpbnyjTLAGKQritA5XW/iG9cjtuOI8s1RuL/3V6a3DeSHfKutJQ+ayUfeZJPcnCYEQzaPQqg==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.18.6.tgz", + "integrity": "sha512-eCLXXJqv8okzg86ywZJbRn19YJHU4XUa55oz2wbHhaQVn/MM+XhukiT7SYqp/7o00dg52Rj51Ny+Ecw4oyoygw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-spread": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.2.2.tgz", - "integrity": "sha512-KWfky/58vubwtS0hLqEnrWJjsMGaOeSBn90Ezn5Jeg9Z8KKHmELbP1yGylMlm5N6TPKeY9A2+UaSYLdxahg01w==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.20.7.tgz", + "integrity": "sha512-ewBbHQ+1U/VnH1fxltbJqDeWBU1oNLG8Dj11uIv3xVf7nrQu0bPGe5Rf716r7K5Qz+SqtAOVswoVunoiBtGhxw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.20.2", + "@babel/helper-skip-transparent-expression-wrappers": "^7.20.0" } }, "@babel/plugin-transform-sticky-regex": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.2.0.tgz", - "integrity": "sha512-KKYCoGaRAf+ckH8gEL3JHUaFVyNHKe3ASNsZ+AlktgHevvxGigoIttrEJb8iKN03Q7Eazlv1s6cx2B2cQ3Jabw==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.18.6.tgz", + "integrity": "sha512-kfiDrDQ+PBsQDO85yj1icueWMfGfJFKN1KCkndygtu/C9+XUfydLC8Iv5UYJqRwy4zk8EcplRxEOeLyjq1gm6Q==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.4.4" + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/plugin-transform-template-literals": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.4.4.tgz", - "integrity": "sha512-mQrEC4TWkhLN0z8ygIvEL9ZEToPhG5K7KDW3pzGqOfIGZ28Jb0POUkeWcoz8HnHvhFy6dwAT1j8OzqN8s804+g==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.18.9.tgz", + "integrity": "sha512-S8cOWfT82gTezpYOiVaGHrCbhlHgKhQt8XH5ES46P2XWmX92yisoZywf5km75wv5sYcXDUCLMmMxOLCtthDgMA==", "dev": true, "requires": { - "@babel/helper-annotate-as-pure": "7.0.0", - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-typeof-symbol": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.2.0.tgz", - "integrity": "sha512-2LNhETWYxiYysBtrBTqL8+La0jIoQQnIScUJc74OYvUGRmkskNY4EzLCnjHBzdmb38wqtTaixpo1NctEcvMDZw==", + "version": "7.18.9", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.18.9.tgz", + "integrity": "sha512-SRfwTtF11G2aemAZWivL7PD+C9z52v9EvMqH9BuYbabyPuKUvSWks3oCg6041pT925L4zVFqaVBeECwsmlguEw==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0" + "@babel/helper-plugin-utils": "^7.18.9" } }, "@babel/plugin-transform-unicode-regex": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.4.4.tgz", - "integrity": "sha512-il+/XdNw01i93+M9J9u4T7/e/Ue/vWfNZE4IRUQjplu2Mqb/AFTDimkw2tdEdSH50wuQXZAbXSql0UphQke+vA==", + "version": "7.18.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.18.6.tgz", + "integrity": "sha512-gE7A6Lt7YLnNOL3Pb9BNeZvi+d8l7tcRrG4+pwJjK9hD2xX4mEvjlQW60G9EEmfXVYRPv9VRQcyegIVHCql/AA==", "dev": true, "requires": { - "@babel/helper-plugin-utils": "7.0.0", - "@babel/helper-regex": "7.4.4", - "regexpu-core": "4.5.4" + "@babel/helper-create-regexp-features-plugin": "^7.18.6", + "@babel/helper-plugin-utils": "^7.18.6" } }, "@babel/preset-env": { @@ -739,155 +1013,287 @@ "integrity": "sha512-2mwqfYMK8weA0g0uBKOt4FE3iEodiHy9/CW0b+nWXcbL+pGzLx8ESYc+j9IIxr6LTDHWKgPm71i9smo02bw+gA==", "dev": true, "requires": { - "@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.4.4", - "@babel/plugin-proposal-optional-catch-binding": "7.2.0", - "@babel/plugin-proposal-unicode-property-regex": "7.4.4", - "@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.4.4", - "@babel/plugin-transform-block-scoped-functions": "7.2.0", - "@babel/plugin-transform-block-scoping": "7.4.4", - "@babel/plugin-transform-classes": "7.4.4", - "@babel/plugin-transform-computed-properties": "7.2.0", - "@babel/plugin-transform-destructuring": "7.4.4", - "@babel/plugin-transform-dotall-regex": "7.4.4", - "@babel/plugin-transform-duplicate-keys": "7.2.0", - "@babel/plugin-transform-exponentiation-operator": "7.2.0", - "@babel/plugin-transform-for-of": "7.4.4", - "@babel/plugin-transform-function-name": "7.4.4", - "@babel/plugin-transform-literals": "7.2.0", - "@babel/plugin-transform-modules-amd": "7.2.0", - "@babel/plugin-transform-modules-commonjs": "7.4.4", - "@babel/plugin-transform-modules-systemjs": "7.4.4", - "@babel/plugin-transform-modules-umd": "7.2.0", - "@babel/plugin-transform-named-capturing-groups-regex": "7.4.5", - "@babel/plugin-transform-new-target": "7.4.4", - "@babel/plugin-transform-object-super": "7.2.0", - "@babel/plugin-transform-parameters": "7.4.4", - "@babel/plugin-transform-regenerator": "7.4.5", - "@babel/plugin-transform-shorthand-properties": "7.2.0", - "@babel/plugin-transform-spread": "7.2.2", - "@babel/plugin-transform-sticky-regex": "7.2.0", - "@babel/plugin-transform-template-literals": "7.4.4", - "@babel/plugin-transform-typeof-symbol": "7.2.0", - "@babel/plugin-transform-unicode-regex": "7.4.4", - "browserslist": "4.6.0", - "invariant": "2.2.4", - "js-levenshtein": "1.1.6", - "semver": "5.7.0" - } + "@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" + } + }, + "@babel/regjsgen": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/@babel/regjsgen/-/regjsgen-0.8.0.tgz", + "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==", + "dev": true }, "@babel/runtime": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.4.5.tgz", - "integrity": "sha512-TuI4qpWZP6lGOGIuGWtp9sPluqYICmbk8T/1vpSysqJxRPkudh/ofFWyqdcMsDf2s7KvDL4/YHgKyvcS3g9CJQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.21.0.tgz", + "integrity": "sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw==", "dev": true, "requires": { - "regenerator-runtime": "0.13.2" + "regenerator-runtime": "^0.13.11" } }, "@babel/runtime-corejs2": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.4.5.tgz", - "integrity": "sha512-5yLuwzvIDecKwYMzJtiarky4Fb5643H3Ao5jwX0HrMR5oM5mn2iHH9wSZonxwNK0oAjAFUQAiOd4jT7/9Y2jMQ==", + "version": "7.21.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs2/-/runtime-corejs2-7.21.0.tgz", + "integrity": "sha512-hVFDLYkuthnvQwWoOniPSq+RWyQTiimVdMXQJujoiSX8maFh/62+qRImGkRpeRflsVXXSMFS4HgNe3X9fuw5ww==", "dev": true, "requires": { - "core-js": "2.6.8", - "regenerator-runtime": "0.13.2" + "core-js": "^2.6.12", + "regenerator-runtime": "^0.13.11" } }, "@babel/template": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.4.4.tgz", - "integrity": "sha512-CiGzLN9KgAvgZsnivND7rkA+AeJ9JB0ciPOD4U59GKbQP2iQl+olF1l76kJOupqidozfZ32ghwBEJDhnk9MEcw==", + "version": "7.20.7", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", + "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.4.5", - "@babel/types": "7.4.4" + "@babel/code-frame": "^7.18.6", + "@babel/parser": "^7.20.7", + "@babel/types": "^7.20.7" } }, "@babel/traverse": { - "version": "7.4.5", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.4.5.tgz", - "integrity": "sha512-Vc+qjynwkjRmIFGxy0KYoPj4FdVDxLej89kMHFsWScq999uX+pwcX4v9mWRjW0KcAYTPAuVQl2LKP1wEVLsp+A==", - "dev": true, - "requires": { - "@babel/code-frame": "7.0.0", - "@babel/generator": "7.4.4", - "@babel/helper-function-name": "7.1.0", - "@babel/helper-split-export-declaration": "7.4.4", - "@babel/parser": "7.4.5", - "@babel/types": "7.4.4", - "debug": "4.1.1", - "globals": "11.12.0", - "lodash": "4.17.15" + "version": "7.23.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.7.tgz", + "integrity": "sha512-tY3mM8rH9jM0YHFGyfC0/xf+SB5eKUu7HPj7/k3fpi9dAlsMc5YbQvDi0Sh2QTPXqMhyaAtzAr807TIyfQrmyg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.23.5", + "@babel/generator": "^7.23.6", + "@babel/helper-environment-visitor": "^7.22.20", + "@babel/helper-function-name": "^7.23.0", + "@babel/helper-hoist-variables": "^7.22.5", + "@babel/helper-split-export-declaration": "^7.22.6", + "@babel/parser": "^7.23.6", + "@babel/types": "^7.23.6", + "debug": "^4.3.1", + "globals": "^11.1.0" }, "dependencies": { + "@babel/code-frame": { + "version": "7.23.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", + "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.23.4", + "chalk": "^2.4.2" + } + }, + "@babel/generator": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.23.6.tgz", + "integrity": "sha512-qrSfCYxYQB5owCmGLbl8XRpX1ytXlpueOb0N0UmQwA073KZxejgQTzAmJezxvpwQD9uGtK2shHdi55QT+MbjIw==", + "dev": true, + "requires": { + "@babel/types": "^7.23.6", + "@jridgewell/gen-mapping": "^0.3.2", + "@jridgewell/trace-mapping": "^0.3.17", + "jsesc": "^2.5.1" + } + }, + "@babel/helper-environment-visitor": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.22.20.tgz", + "integrity": "sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==", + "dev": true + }, + "@babel/helper-function-name": { + "version": "7.23.0", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.23.0.tgz", + "integrity": "sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==", + "dev": true, + "requires": { + "@babel/template": "^7.22.15", + "@babel/types": "^7.23.0" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.22.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.22.5.tgz", + "integrity": "sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.22.6", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.22.6.tgz", + "integrity": "sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==", + "dev": true, + "requires": { + "@babel/types": "^7.22.5" + } + }, + "@babel/helper-string-parser": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz", + "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==", + "dev": true + }, + "@babel/helper-validator-identifier": { + "version": "7.22.20", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", + "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "dev": true + }, + "@babel/highlight": { + "version": "7.23.4", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", + "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.22.20", + "chalk": "^2.4.2", + "js-tokens": "^4.0.0" + } + }, + "@babel/parser": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.6.tgz", + "integrity": "sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ==", + "dev": true + }, + "@babel/template": { + "version": "7.22.15", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.22.15.tgz", + "integrity": "sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.22.13", + "@babel/parser": "^7.22.15", + "@babel/types": "^7.22.15" + } + }, + "@babel/types": { + "version": "7.23.6", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz", + "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==", + "dev": true, + "requires": { + "@babel/helper-string-parser": "^7.23.4", + "@babel/helper-validator-identifier": "^7.22.20", + "to-fast-properties": "^2.0.0" + } + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, "@babel/types": { - "version": "7.4.4", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.4.4.tgz", - "integrity": "sha512-dOllgYdnEFOebhkKCjzSVFqw/PmmB8pH6RGOWkY4GsboQNd47b1fBThBSwlHAq9alF9vc1M3+6oqR47R50L0tQ==", + "version": "7.21.4", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.4.tgz", + "integrity": "sha512-rU2oY501qDxE8Pyo7i/Orqma4ziCOrby0/9mvbDUGEfvZjb279Nk9k19e2fiCxHbRRpY2ZyrgW1eq22mvmOIzA==", "dev": true, "requires": { - "esutils": "2.0.2", - "lodash": "4.17.15", - "to-fast-properties": "2.0.0" + "@babel/helper-string-parser": "^7.19.4", + "@babel/helper-validator-identifier": "^7.19.1", + "to-fast-properties": "^2.0.0" } }, + "@braintree/sanitize-url": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-6.0.2.tgz", + "integrity": "sha512-Tbsj02wXCbqGmzdnXNk0SOF19ChhRU70BsroIi4Pm6Ehp56in6vch94mfbdQ17DozxkL3BAVjbZ4Qc1a0HFRAg==" + }, "@geolonia/mbgl-gesture-handling": { "version": "1.0.13", "resolved": "https://registry.npmjs.org/@geolonia/mbgl-gesture-handling/-/mbgl-gesture-handling-1.0.13.tgz", "integrity": "sha512-nGGDU2xAC/c7OLTaufLkHUOx5oFIj8Q7L6V0QbWrwfk3gvuJhV7GS7SqqvbdaItIw+skAFKcafaO+2+kN+REvA==" }, "@hapi/address": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.0.0.tgz", - "integrity": "sha512-mV6T0IYqb0xL1UALPFplXYQmR0twnXG0M6jUswpquqT2sD12BOiCiLy3EvMp/Fy7s3DZElC4/aPjEjo2jeZpvw==", + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@hapi/address/-/address-2.1.4.tgz", + "integrity": "sha512-QD1PhQk+s31P1ixsX0H0Suoupp3VMXzIVMSwobR3F3MSUO2YCV0B7xqLcUw/Bh8yuvd3LhpyqLQWTNcRmp6IdQ==", + "dev": true + }, + "@hapi/bourne": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@hapi/bourne/-/bourne-1.3.2.tgz", + "integrity": "sha512-1dVNHT76Uu5N3eJNTYcvxee+jzX4Z9lfciqRRHCU27ihbUcYi+iSc2iml5Ke1LXe1SyJCLA0+14Jh4tXJgOppA==", "dev": true }, "@hapi/hoek": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-6.2.4.tgz", - "integrity": "sha512-HOJ20Kc93DkDVvjwHyHawPwPkX44sIrbXazAUDiUXaY2R9JwQGo2PhFfnQtdrsIe4igjG2fPgMra7NYw7qhy0A==", + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/@hapi/hoek/-/hoek-8.5.1.tgz", + "integrity": "sha512-yN7kbciD87WzLGc5539Tn0sApjyiGHAJgKvG9W8C7O+6c7qmoQMfVs0W4bX17eqz6C78QJqqFrtgdK5EWf6Qow==", "dev": true }, "@hapi/joi": { - "version": "15.0.3", - "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.0.3.tgz", - "integrity": "sha512-z6CesJ2YBwgVCi+ci8SI8zixoj8bGFn/vZb9MBPbSyoxsS2PnWYjHcyTM17VLK6tx64YVK38SDIh10hJypB+ig==", + "version": "15.1.1", + "resolved": "https://registry.npmjs.org/@hapi/joi/-/joi-15.1.1.tgz", + "integrity": "sha512-entf8ZMOK8sc+8YfeOlM8pCfg3b5+WZIKBfUaaJT8UsjAAPjartzxIYm3TIbjvA4u+u++KbcXD38k682nVHDAQ==", "dev": true, "requires": { - "@hapi/address": "2.0.0", - "@hapi/hoek": "6.2.4", - "@hapi/topo": "3.1.0" + "@hapi/address": "2.x.x", + "@hapi/bourne": "1.x.x", + "@hapi/hoek": "8.x.x", + "@hapi/topo": "3.x.x" } }, "@hapi/topo": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.0.tgz", - "integrity": "sha512-gZDI/eXOIk8kP2PkUKjWu9RW8GGVd2Hkgjxyr/S7Z+JF+0mr7bAlbw+DkTRxnD580o8Kqxlnba9wvqp5aOHBww==", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/@hapi/topo/-/topo-3.1.6.tgz", + "integrity": "sha512-tAag0jEcjwH+P2quUfipd7liWCNX2F8NvYjQp2wtInsZxnMlypdw0FtAOLxtvvkO+GSRRbmNi8m/5y42PQJYCQ==", "dev": true, "requires": { - "@hapi/hoek": "6.2.4" + "@hapi/hoek": "^8.3.0" } }, "@intervolga/optimize-cssnano-plugin": { @@ -896,9 +1302,56 @@ "integrity": "sha512-zN69TnSr0viRSU6cEDIcuPcP67QcpQ6uHACg58FiN9PDrU6SLyGW3MR4tiISbYxy1kDWAVPwD+XwQTWE5cigAA==", "dev": true, "requires": { - "cssnano": "4.1.10", - "cssnano-preset-default": "4.0.7", - "postcss": "7.0.16" + "cssnano": "^4.0.0", + "cssnano-preset-default": "^4.0.0", + "postcss": "^7.0.0" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, + "requires": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", + "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", + "dev": true + }, + "@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.18", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.18.tgz", + "integrity": "sha512-w+niJYzMHdd7USdiH2U6869nqhD2nbfZXND5Yp93qIbEmnDNk7PD48o+YchRVpzMU7M6jVCbenTR7PA1FLQ9pA==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "3.1.0", + "@jridgewell/sourcemap-codec": "1.4.14" + }, + "dependencies": { + "@jridgewell/sourcemap-codec": { + "version": "1.4.14", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", + "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", + "dev": true + } } }, "@mapbox/fusspot": { @@ -906,8 +1359,8 @@ "resolved": "https://registry.npmjs.org/@mapbox/fusspot/-/fusspot-0.4.0.tgz", "integrity": "sha512-6sys1vUlhNCqMvJOqPEPSi0jc9tg7aJ//oG1A16H3PXoIt9whtNngD7UzBHUVTH15zunR/vRvMtGNVsogm1KzA==", "requires": { - "is-plain-obj": "1.1.0", - "xtend": "4.0.1" + "is-plain-obj": "^1.1.0", + "xtend": "^4.0.1" } }, "@mapbox/geojson-types": { @@ -921,16 +1374,16 @@ "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" }, "@mapbox/mapbox-gl-geocoder": { - "version": "4.5.1", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-geocoder/-/mapbox-gl-geocoder-4.5.1.tgz", - "integrity": "sha512-ydn8CuMAayqIRdSHng4U5HtGaId1MM+boaGVh6C4vp+fBsPlMDNSvzhh9QBtmTEdO6+iEW4oKblBkJ8Krc8cXA==", + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-geocoder/-/mapbox-gl-geocoder-4.7.4.tgz", + "integrity": "sha512-9PIilTgqnoSCVtzJ1MnE4f1siWIpC9GO5MPaKTOspb7hXIvcgFOp44PSWP+WlDTHoEze3Dz3WQuppti6TVWjyg==", "requires": { - "@mapbox/mapbox-sdk": "0.5.0", - "lodash.debounce": "4.0.8", - "nanoid": "2.1.11", - "subtag": "0.5.0", - "suggestions": "1.7.0", - "xtend": "4.0.1" + "@mapbox/mapbox-sdk": "^0.13.2", + "lodash.debounce": "^4.0.6", + "nanoid": "^2.0.1", + "subtag": "^0.5.0", + "suggestions": "^1.6.0", + "xtend": "^4.0.1" } }, "@mapbox/mapbox-gl-supported": { @@ -939,17 +1392,30 @@ "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==" }, "@mapbox/mapbox-sdk": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/@mapbox/mapbox-sdk/-/mapbox-sdk-0.5.0.tgz", - "integrity": "sha512-BYD527EQZLkrwM8vvYDEvHgPs3R4sQFgMoTZaElpwwHxcDba/kmiE3wUaPzyIT3GcGkJJeXSihLrL23Tfo99kQ==", - "requires": { - "@mapbox/fusspot": "0.4.0", - "@mapbox/parse-mapbox-token": "0.2.0", - "@mapbox/polyline": "1.1.0", - "eventemitter3": "3.1.2", - "got": "8.3.2", - "is-plain-obj": "1.1.0", - "xtend": "4.0.1" + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-sdk/-/mapbox-sdk-0.13.7.tgz", + "integrity": "sha512-JZjBsAVSBv7lX7gQPOQwftBGHIUcvL/tPKFxAL+SCT7u1n+eRH052XebOTkl28pNm7Du6DpKAs1GvgUnDcFFDQ==", + "requires": { + "@mapbox/fusspot": "^0.4.0", + "@mapbox/parse-mapbox-token": "^0.2.0", + "@mapbox/polyline": "^1.0.0", + "eventemitter3": "^3.1.0", + "form-data": "^3.0.0", + "got": "^11.8.5", + "is-plain-obj": "^1.1.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "form-data": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", + "integrity": "sha512-RHkBKtLWUVwd7SqRIvCZMEvAMoGUp0XU+seQiZejj0COz3RI3hWP4sCv3gZWWLjJTd7rGwcsF5eKZGii0r/hbg==", + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + } + } } }, "@mapbox/parse-mapbox-token": { @@ -957,7 +1423,7 @@ "resolved": "https://registry.npmjs.org/@mapbox/parse-mapbox-token/-/parse-mapbox-token-0.2.0.tgz", "integrity": "sha512-BjeuG4sodYaoTygwXIuAWlZV6zUv4ZriYAQhXikzx+7DChycMUQ9g85E79Htat+AsBg+nStFALehlOhClYm5cQ==", "requires": { - "base-64": "0.1.0" + "base-64": "^0.1.0" } }, "@mapbox/point-geometry": { @@ -966,125 +1432,11 @@ "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" }, "@mapbox/polyline": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-1.1.0.tgz", - "integrity": "sha512-NwiMS+AA/ZLIgd69YYXtQ0jtIBu8nQuVaRr4NxBoRjEd9ddKDoe4q8a51Ukk7Vj+jwQtbupqmvoLni1QhnJ4Pg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@mapbox/polyline/-/polyline-1.2.1.tgz", + "integrity": "sha512-sn0V18O3OzW4RCcPoUIVDWvEGQaBNH9a0y5lgqrf5hUycyw1CzrhEoxV5irzrMNXKCkw1xRsZXcaVbsVZggHXA==", "requires": { - "meow": "5.0.0" - }, - "dependencies": { - "camelcase": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", - "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=" - }, - "camelcase-keys": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", - "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", - "requires": { - "camelcase": "4.1.0", - "map-obj": "2.0.0", - "quick-lru": "1.1.0" - } - }, - "indent-string": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", - "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=" - }, - "load-json-file": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", - "requires": { - "graceful-fs": "4.1.15", - "parse-json": "4.0.0", - "pify": "3.0.0", - "strip-bom": "3.0.0" - } - }, - "map-obj": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", - "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=" - }, - "meow": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", - "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", - "requires": { - "camelcase-keys": "4.2.0", - "decamelize-keys": "1.1.0", - "loud-rejection": "1.6.0", - "minimist-options": "3.0.2", - "normalize-package-data": "2.5.0", - "read-pkg-up": "3.0.0", - "redent": "2.0.0", - "trim-newlines": "2.0.0", - "yargs-parser": "10.1.0" - } - }, - "parse-json": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", - "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" - } - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - }, - "read-pkg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", - "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", - "requires": { - "load-json-file": "4.0.0", - "normalize-package-data": "2.5.0", - "path-type": "3.0.0" - } - }, - "read-pkg-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", - "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", - "requires": { - "find-up": "2.1.0", - "read-pkg": "3.0.0" - } - }, - "redent": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-2.0.0.tgz", - "integrity": "sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo=", - "requires": { - "indent-string": "3.2.0", - "strip-indent": "2.0.0" - } - }, - "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=" - }, - "trim-newlines": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", - "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=" - }, - "yargs-parser": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-10.1.0.tgz", - "integrity": "sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ==", - "requires": { - "camelcase": "4.1.0" - } - } + "meow": "^9.0.0" } }, "@mapbox/tiny-sdf": { @@ -1102,7 +1454,7 @@ "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", "requires": { - "@mapbox/point-geometry": "0.1.0" + "@mapbox/point-geometry": "~0.1.0" } }, "@mapbox/whoots-js": { @@ -1116,8 +1468,8 @@ "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", "dev": true, "requires": { - "call-me-maybe": "1.0.1", - "glob-to-regexp": "0.3.0" + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" } }, "@nodelib/fs.stat": { @@ -1127,13 +1479,58 @@ "dev": true }, "@nuxt/opencollective": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.2.2.tgz", - "integrity": "sha512-ie50SpS47L+0gLsW4yP23zI/PtjsDRglyozX2G09jeiUazC1AJlGPZo0JUs9iuCDUoIgsDEf66y7/bSfig0BpA==", + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@nuxt/opencollective/-/opencollective-0.3.3.tgz", + "integrity": "sha512-6IKCd+gP0HliixqZT/p8nW3tucD6Sv/u/eR2A9X4rxT/6hXlMzA4GZQzq4d2qnBAwSwGpmKyzkyTjNjrhaA25A==", "requires": { - "chalk": "2.4.2", - "consola": "2.7.1", - "node-fetch": "2.6.0" + "chalk": "^4.1.0", + "consola": "^2.15.0", + "node-fetch": "^2.6.7" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "requires": { + "has-flag": "^4.0.0" + } + } } }, "@sentry/browser": { @@ -1144,7 +1541,7 @@ "@sentry/core": "5.7.1", "@sentry/types": "5.7.1", "@sentry/utils": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sentry/core": { @@ -1156,7 +1553,7 @@ "@sentry/minimal": "5.7.1", "@sentry/types": "5.7.1", "@sentry/utils": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sentry/hub": { @@ -1166,7 +1563,7 @@ "requires": { "@sentry/types": "5.7.1", "@sentry/utils": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sentry/integrations": { @@ -1176,7 +1573,7 @@ "requires": { "@sentry/types": "5.7.1", "@sentry/utils": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sentry/minimal": { @@ -1186,7 +1583,7 @@ "requires": { "@sentry/hub": "5.7.1", "@sentry/types": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sentry/types": { @@ -1200,13 +1597,13 @@ "integrity": "sha512-nhirUKj/qFLsR1i9kJ5BRvNyzdx/E2vorIsukuDrbo8e3iZ11JMgCOVrmC8Eq9YkHBqgwX4UnrPumjFyvGMZ2Q==", "requires": { "@sentry/types": "5.7.1", - "tslib": "1.9.3" + "tslib": "^1.9.3" } }, "@sindresorhus/is": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-0.7.0.tgz", - "integrity": "sha512-ONhaKPIufzzrlNbqtWFFd+jlnemX6lJAgq9ZeiZtS7I1PIf/la7CW4m83rTXRnVnsMbW2k56pGYu7AUFJD9Pow==" + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/@sindresorhus/is/-/is-4.6.0.tgz", + "integrity": "sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw==" }, "@soda/friendly-errors-webpack-plugin": { "version": "1.7.1", @@ -1214,9 +1611,9 @@ "integrity": "sha512-cWKrGaFX+rfbMrAxVv56DzhPNqOJPZuNIS2HGMELtgGzb+vsMzyig9mml5gZ/hr2BGtSLV+dP2LUEuAL8aG2mQ==", "dev": true, "requires": { - "chalk": "1.1.3", - "error-stack-parser": "2.0.2", - "string-width": "2.1.1" + "chalk": "^1.1.3", + "error-stack-parser": "^2.0.0", + "string-width": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -1237,11 +1634,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "strip-ansi": { @@ -1250,7 +1647,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -1261,6 +1658,56 @@ } } }, + "@szmarczak/http-timer": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/@szmarczak/http-timer/-/http-timer-4.0.6.tgz", + "integrity": "sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==", + "requires": { + "defer-to-connect": "^2.0.0" + } + }, + "@turf/helpers": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/helpers/-/helpers-6.5.0.tgz", + "integrity": "sha512-VbI1dV5bLFzohYYdgqwikdMVpe7pJ9X3E+dlr425wa2/sMJqYDhTO++ec38/pcPvPE6oD9WEEeU3Xu3gza+VPw==" + }, + "@turf/intersect": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/intersect/-/intersect-6.5.0.tgz", + "integrity": "sha512-2legGJeKrfFkzntcd4GouPugoqPUjexPZnOvfez+3SfIMrHvulw8qV8u7pfVyn2Yqs53yoVCEjS5sEpvQ5YRQg==", + "requires": { + "@turf/helpers": "^6.5.0", + "@turf/invariant": "^6.5.0", + "polygon-clipping": "^0.15.3" + } + }, + "@turf/invariant": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@turf/invariant/-/invariant-6.5.0.tgz", + "integrity": "sha512-Wv8PRNCtPD31UVbdJE/KVAWKe7l6US+lJItRR/HOEW3eh+U/JwRCSUl/KZ7bmjM/C+zLNoreM2TU6OoLACs4eg==", + "requires": { + "@turf/helpers": "^6.5.0" + } + }, + "@types/cacheable-request": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/@types/cacheable-request/-/cacheable-request-6.0.3.tgz", + "integrity": "sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==", + "requires": { + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" + } + }, + "@types/chart.js": { + "version": "2.9.37", + "resolved": "https://registry.npmjs.org/@types/chart.js/-/chart.js-2.9.37.tgz", + "integrity": "sha512-9bosRfHhkXxKYfrw94EmyDQcdjMaQPkU1fH2tDxu8DWXxf1mjzWQAV4laJF51ZbC2ycYwNDvIm1rGez8Bug0vg==", + "requires": { + "moment": "^2.10.2" + } + }, "@types/events": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/events/-/events-3.0.0.tgz", @@ -1273,9 +1720,22 @@ "integrity": "sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w==", "dev": true, "requires": { - "@types/events": "3.0.0", - "@types/minimatch": "3.0.3", - "@types/node": "12.0.2" + "@types/events": "*", + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/http-cache-semantics": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/http-cache-semantics/-/http-cache-semantics-4.0.1.tgz", + "integrity": "sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==" + }, + "@types/keyv": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/@types/keyv/-/keyv-3.1.4.tgz", + "integrity": "sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==", + "requires": { + "@types/node": "*" } }, "@types/minimatch": { @@ -1284,17 +1744,20 @@ "integrity": "sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA==", "dev": true }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==" + }, "@types/node": { "version": "12.0.2", "resolved": "https://registry.npmjs.org/@types/node/-/node-12.0.2.tgz", - "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==", - "dev": true + "integrity": "sha512-5tabW/i+9mhrfEOUcLDu2xBPsHJ+X5Orqy9FKpale3SjDA17j5AEpYq5vfy3oAeAHGcvANRCO3NV3d2D6q3NiA==" }, "@types/normalize-package-data": { "version": "2.4.0", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.0.tgz", - "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==", - "dev": true + "integrity": "sha512-f5j5b/Gf71L+dbqxIpQ4Z2WlmI/mPJ0fOkGGmFgtb6sAu97EPczzbS3/tJKxmcYDj55OX6ssqwDAWOHIYDRDGA==" }, "@types/q": { "version": "1.5.2", @@ -1302,6 +1765,14 @@ "integrity": "sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw==", "dev": true }, + "@types/responselike": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@types/responselike/-/responselike-1.0.0.tgz", + "integrity": "sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==", + "requires": { + "@types/node": "*" + } + }, "@types/strip-bom": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/@types/strip-bom/-/strip-bom-3.0.0.tgz", @@ -1315,154 +1786,175 @@ "dev": true }, "@vue/babel-helper-vue-jsx-merge-props": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.0.0.tgz", - "integrity": "sha512-6tyf5Cqm4m6v7buITuwS+jHzPlIPxbFzEhXR5JGZpbrvOcp1hiQKckd305/3C7C36wFekNTQSxAtgeM0j0yoUw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-helper-vue-jsx-merge-props/-/babel-helper-vue-jsx-merge-props-1.4.0.tgz", + "integrity": "sha512-JkqXfCkUDp4PIlFdDQ0TdXoIejMtTHP67/pvxlgeY+u5k3LEdKuWZ3LK6xkxo52uDoABIVyRwqVkfLQJhk7VBA==", "dev": true }, "@vue/babel-plugin-transform-vue-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.0.0.tgz", - "integrity": "sha512-U+JNwVQSmaLKjO3lzCUC3cNXxprgezV1N+jOdqbP4xWNaqtWUCJnkjTVcgECM18A/AinDKPcUUeoyhU7yxUxXQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-plugin-transform-vue-jsx/-/babel-plugin-transform-vue-jsx-1.4.0.tgz", + "integrity": "sha512-Fmastxw4MMx0vlgLS4XBX0XiBbUFzoMGeVXuMV08wyOfXdikAFqBTuYPR0tlk+XskL19EzHc39SgjrPGY23JnA==", "dev": true, "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/plugin-syntax-jsx": "7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "1.0.0", - "html-tags": "2.0.0", - "lodash.kebabcase": "4.1.1", - "svg-tags": "1.0.0" + "@babel/helper-module-imports": "^7.0.0", + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "html-tags": "^2.0.0", + "lodash.kebabcase": "^4.1.1", + "svg-tags": "^1.0.0" } }, "@vue/babel-preset-app": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.8.0.tgz", - "integrity": "sha512-A2NBzIVdtNq52foc+P+yQ/7rSm2q2oPpn2FJVW4hFgaWVOL+HaOLCjWDEQyEeMbRZvyOVHMuom097u3p2H2Rfw==", - "dev": true, - "requires": { - "@babel/helper-module-imports": "7.0.0", - "@babel/plugin-proposal-class-properties": "7.4.4", - "@babel/plugin-proposal-decorators": "7.4.4", - "@babel/plugin-syntax-dynamic-import": "7.2.0", - "@babel/plugin-syntax-jsx": "7.2.0", - "@babel/plugin-transform-runtime": "7.4.4", - "@babel/preset-env": "7.3.4", - "@babel/runtime": "7.4.5", - "@babel/runtime-corejs2": "7.4.5", - "@vue/babel-preset-jsx": "1.0.0", - "babel-plugin-dynamic-import-node": "2.2.0", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-app/-/babel-preset-app-3.12.1.tgz", + "integrity": "sha512-Zjy5jQaikV1Pz+ri0YgXFS7q4/5wCxB5tRkDOEIt5+4105u0Feb/pvH20nVL6nx9GyXrECFfcm7Yxr/z++OaPQ==", + "dev": true, + "requires": { + "@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.8" + "core-js": "^2.6.5" } }, "@vue/babel-preset-jsx": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.0.0.tgz", - "integrity": "sha512-5CbDu/QHS+TtQNw5aYAffiMxBBB2Eo9+RJpS8X+6FJbdG5Rvc4TVipEqkrg0pJviWadNg7TEy0Uz4o7VNXeIZw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-preset-jsx/-/babel-preset-jsx-1.4.0.tgz", + "integrity": "sha512-QmfRpssBOPZWL5xw7fOuHNifCQcNQC1PrOo/4fu6xlhlKJJKSA3HqX92Nvgyx8fqHZTUGMPHmFA+IDqwXlqkSA==", + "dev": true, + "requires": { + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "@vue/babel-sugar-composition-api-inject-h": "^1.4.0", + "@vue/babel-sugar-composition-api-render-instance": "^1.4.0", + "@vue/babel-sugar-functional-vue": "^1.4.0", + "@vue/babel-sugar-inject-h": "^1.4.0", + "@vue/babel-sugar-v-model": "^1.4.0", + "@vue/babel-sugar-v-on": "^1.4.0" + } + }, + "@vue/babel-sugar-composition-api-inject-h": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-inject-h/-/babel-sugar-composition-api-inject-h-1.4.0.tgz", + "integrity": "sha512-VQq6zEddJHctnG4w3TfmlVp5FzDavUSut/DwR0xVoe/mJKXyMcsIibL42wPntozITEoY90aBV0/1d2KjxHU52g==", + "dev": true, + "requires": { + "@babel/plugin-syntax-jsx": "^7.2.0" + } + }, + "@vue/babel-sugar-composition-api-render-instance": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-composition-api-render-instance/-/babel-sugar-composition-api-render-instance-1.4.0.tgz", + "integrity": "sha512-6ZDAzcxvy7VcnCjNdHJ59mwK02ZFuP5CnucloidqlZwVQv5CQLijc3lGpR7MD3TWFi78J7+a8J56YxbCtHgT9Q==", "dev": true, "requires": { - "@vue/babel-helper-vue-jsx-merge-props": "1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "1.0.0", - "@vue/babel-sugar-functional-vue": "1.0.0", - "@vue/babel-sugar-inject-h": "1.0.0", - "@vue/babel-sugar-v-model": "1.0.0", - "@vue/babel-sugar-v-on": "1.0.0" + "@babel/plugin-syntax-jsx": "^7.2.0" } }, "@vue/babel-sugar-functional-vue": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.0.0.tgz", - "integrity": "sha512-XE/jNaaorTuhWayCz+QClk5AB9OV5HzrwbzEC6sIUY0J60A28ONQKeTwxfidW42egOkqNH/UU6eE3KLfmiDj0Q==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-functional-vue/-/babel-sugar-functional-vue-1.4.0.tgz", + "integrity": "sha512-lTEB4WUFNzYt2In6JsoF9sAYVTo84wC4e+PoZWSgM6FUtqRJz7wMylaEhSRgG71YF+wfLD6cc9nqVeXN2rwBvw==", "dev": true, "requires": { - "@babel/plugin-syntax-jsx": "7.2.0" + "@babel/plugin-syntax-jsx": "^7.2.0" } }, "@vue/babel-sugar-inject-h": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.0.0.tgz", - "integrity": "sha512-NxWU+DqtbZgfGvd25GPoFMj+rvyQ8ZA1pHj8vIeqRij+vx3sXoKkObjA9ulZunvWw5F6uG9xYy4ytpxab/X+Hg==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-inject-h/-/babel-sugar-inject-h-1.4.0.tgz", + "integrity": "sha512-muwWrPKli77uO2fFM7eA3G1lAGnERuSz2NgAxuOLzrsTlQl8W4G+wwbM4nB6iewlKbwKRae3nL03UaF5ffAPMA==", "dev": true, "requires": { - "@babel/plugin-syntax-jsx": "7.2.0" + "@babel/plugin-syntax-jsx": "^7.2.0" } }, "@vue/babel-sugar-v-model": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.0.0.tgz", - "integrity": "sha512-Pfg2Al0io66P1eO6zUbRIgpyKCU2qTnumiE0lao/wA/uNdb7Dx5Tfd1W6tO5SsByETPnEs8i8+gawRIXX40rFw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-model/-/babel-sugar-v-model-1.4.0.tgz", + "integrity": "sha512-0t4HGgXb7WHYLBciZzN5s0Hzqan4Ue+p/3FdQdcaHAb7s5D9WZFGoSxEZHrR1TFVZlAPu1bejTKGeAzaaG3NCQ==", "dev": true, "requires": { - "@babel/plugin-syntax-jsx": "7.2.0", - "@vue/babel-helper-vue-jsx-merge-props": "1.0.0", - "@vue/babel-plugin-transform-vue-jsx": "1.0.0", - "camelcase": "5.3.1", - "html-tags": "2.0.0", - "svg-tags": "1.0.0" + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-helper-vue-jsx-merge-props": "^1.4.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0", + "html-tags": "^2.0.0", + "svg-tags": "^1.0.0" } }, "@vue/babel-sugar-v-on": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.0.0.tgz", - "integrity": "sha512-2aqJaDLKdSSGlxZU+GjFERaSNUaa6DQreV+V/K4W/6Lxj8520/r1lChWEa/zuAoPD2Vhy0D2QrqqO+I0D6CkKw==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@vue/babel-sugar-v-on/-/babel-sugar-v-on-1.4.0.tgz", + "integrity": "sha512-m+zud4wKLzSKgQrWwhqRObWzmTuyzl6vOP7024lrpeJM4x2UhQtRDLgYjXAw9xBXjCwS0pP9kXjg91F9ZNo9JA==", "dev": true, "requires": { - "@babel/plugin-syntax-jsx": "7.2.0", - "@vue/babel-plugin-transform-vue-jsx": "1.0.0", - "camelcase": "5.3.1" + "@babel/plugin-syntax-jsx": "^7.2.0", + "@vue/babel-plugin-transform-vue-jsx": "^1.4.0", + "camelcase": "^5.0.0" } }, "@vue/cli-overlay": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.8.0.tgz", - "integrity": "sha512-4hY/+r9OwpMb7BPFnQGKftMC8CrfbV00REEFOij52+L4swQw+m879+5zX3Z0xHfPftw6JyaqJB0rmQ0ILI6Ovw==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-overlay/-/cli-overlay-3.12.1.tgz", + "integrity": "sha512-Bym92EN+lj+cNRN2ozbYyH+V8DMXWGbCDUk+hiJ4EYDBZfBkZKvalk1/mOBFwyxiopnnbOEBAAhL/UuMQ1xARg==", "dev": true }, "@vue/cli-plugin-babel": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.8.0.tgz", - "integrity": "sha512-VLWvpgDM+HN2FZu1x+r9pisombDTK1k+RPNPeslnwjGjrUXmKNAamXL1ZIsPwsj6k6PpWPN4jetBIMqcBzBu6Q==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-babel/-/cli-plugin-babel-3.12.1.tgz", + "integrity": "sha512-Zetvz8PikLCGomeKOKu8pC9YQ7cfxs7pGpvEOzaxGdhMnebhjAYR6i6dOB57A6N5lhxQksXCtYTv26QgfiIpdg==", "dev": true, "requires": { - "@babel/core": "7.4.5", - "@vue/babel-preset-app": "3.8.0", - "@vue/cli-shared-utils": "3.8.0", - "babel-loader": "8.0.6", - "webpack": "4.28.4" + "@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" } }, "@vue/cli-plugin-eslint": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.8.0.tgz", - "integrity": "sha512-18LDJmjH0DDw9T4+RbrSVk4xkF8t8RDRsEPJLPurno1YVJodIkQ6lqVu82faVgtvPyCoqiaicoTq/iwi1avoLQ==", - "dev": true, - "requires": { - "@vue/cli-shared-utils": "3.8.0", - "babel-eslint": "10.0.1", - "eslint": "4.19.1", - "eslint-loader": "2.1.2", - "eslint-plugin-vue": "4.7.1", - "globby": "9.2.0", - "webpack": "4.28.4" + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-eslint/-/cli-plugin-eslint-3.12.1.tgz", + "integrity": "sha512-tVTZlEZsy3sQbO4LLWFK11yzlWwqVAqaM+IY+BeWHITBzEJKh2KmouG+x6x/reXiU3qROsMJ4Ej3Hs8buSMWyQ==", + "dev": true, + "requires": { + "@vue/cli-shared-utils": "^3.12.1", + "babel-eslint": "^10.0.1", + "eslint": "^4.19.1", + "eslint-loader": "^2.1.2", + "eslint-plugin-vue": "^4.7.1", + "globby": "^9.2.0", + "webpack": "^4.0.0", + "yorkie": "^2.0.0" }, "dependencies": { "ajv": { "version": "5.5.2", "resolved": "https://registry.npmjs.org/ajv/-/ajv-5.5.2.tgz", - "integrity": "sha1-c7Xuyj+rZT49P5Qis0GtQiBdyWU=", + "integrity": "sha512-Ajr4IcMXq/2QmMkEmSvxqfLN5zGmJ92gHXAeOXq1OekoH2rfDNsgdDoL2f7QaRCy7G/E6TpxBVdRuNraMztGHw==", "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "optional": true }, @@ -1473,9 +1965,9 @@ "dev": true, "optional": true, "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "eslint": { @@ -1485,44 +1977,44 @@ "dev": true, "optional": true, "requires": { - "ajv": "5.5.2", - "babel-code-frame": "6.26.0", - "chalk": "2.4.2", - "concat-stream": "1.6.2", - "cross-spawn": "5.1.0", - "debug": "3.2.6", - "doctrine": "2.1.0", - "eslint-scope": "3.7.3", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "2.0.0", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.4", - "globals": "11.12.0", - "ignore": "3.3.10", - "imurmurhash": "0.1.4", - "inquirer": "3.3.0", - "is-resolvable": "1.1.0", - "js-yaml": "3.13.1", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "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.3", - "regexpp": "1.1.0", - "require-uncached": "1.0.3", - "semver": "5.7.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", + "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" + "text-table": "~0.2.0" } }, "eslint-plugin-vue": { @@ -1532,7 +2024,7 @@ "dev": true, "optional": true, "requires": { - "vue-eslint-parser": "2.0.3" + "vue-eslint-parser": "^2.0.3" } }, "eslint-scope": { @@ -1542,8 +2034,8 @@ "dev": true, "optional": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "fast-deep-equal": { @@ -1553,21 +2045,6 @@ "dev": true, "optional": true }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "json-schema-traverse": { "version": "0.3.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.3.1.tgz", @@ -1582,8 +2059,8 @@ "dev": true, "optional": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "strip-ansi": { @@ -1593,7 +2070,7 @@ "dev": true, "optional": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } }, "yallist": { @@ -1606,89 +2083,106 @@ } }, "@vue/cli-plugin-unit-jest": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.8.0.tgz", - "integrity": "sha512-8kvoh6NZYY7FjuqRorqo47VTi62a3u69+oAxqBiIOkc28OGaju/FrL0Vm95vRB8tMkU6EPXKVRtCjPz8R2QeZA==", + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-plugin-unit-jest/-/cli-plugin-unit-jest-3.12.1.tgz", + "integrity": "sha512-Cc9Kq4+RaUN1yfNVb7c9hVDNXo2tFTWHgwooCL3XWMu2iL+pDawQt8ZeSqauDY95JoMeEAVy2xBimjL+7jo/jw==", "dev": true, "requires": { - "@vue/cli-shared-utils": "3.8.0", - "babel-jest": "23.6.0", - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "jest": "23.6.0", - "jest-serializer-vue": "2.0.2", - "jest-transform-stub": "2.0.0", + "@vue/cli-shared-utils": "^3.12.1", + "babel-jest": "^23.6.0", + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.2", + "jest": "^23.6.0", + "jest-serializer-vue": "^2.0.2", + "jest-transform-stub": "^2.0.0", "jest-watch-typeahead": "0.2.1", - "vue-jest": "3.0.4" + "vue-jest": "^3.0.4" } }, "@vue/cli-service": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.8.0.tgz", - "integrity": "sha512-ipJF4RHjyLyLC4oLx+JM1Jk6tiIG0KjCFAqfOscQ44K4CdyS03oFMAUR+SZYy/UXKccMnoeY6Ld4YrGXSytQsg==", - "dev": true, - "requires": { - "@intervolga/optimize-cssnano-plugin": "1.0.6", - "@soda/friendly-errors-webpack-plugin": "1.7.1", - "@vue/cli-overlay": "3.8.0", - "@vue/cli-shared-utils": "3.8.0", - "@vue/component-compiler-utils": "2.6.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.1.0", - "autoprefixer": "9.5.1", - "browserslist": "4.6.0", - "cache-loader": "2.0.1", - "case-sensitive-paths-webpack-plugin": "2.2.0", - "chalk": "2.4.2", - "cli-highlight": "2.1.1", - "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", - "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.6.0", - "minimist": "1.2.0", - "ora": "3.4.0", - "portfinder": "1.0.20", - "postcss-loader": "3.0.0", - "read-pkg": "5.1.1", - "semver": "6.1.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.3.0", - "thread-loader": "2.1.2", - "url-loader": "1.1.2", - "vue-loader": "15.7.0", - "webpack": "4.28.4", - "webpack-bundle-analyzer": "3.3.2", - "webpack-chain": "4.12.1", - "webpack-dev-server": "3.4.1", - "webpack-merge": "4.2.1", - "yorkie": "2.0.0" + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-service/-/cli-service-3.12.1.tgz", + "integrity": "sha512-PDxNrTGnSKzeV1ruFlsRIAO8JcPizwT0EJXq9GeyooU+p+sOkv7aKkCBJQVYNjZapD1NOGWx6CvAAC/wAW+gew==", + "dev": true, + "requires": { + "@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" }, "dependencies": { + "@vue/component-compiler-utils": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/@vue/component-compiler-utils/-/component-compiler-utils-3.3.0.tgz", + "integrity": "sha512-97sfH2mYNU+2PzGrmK2haqffDpVASuib9/w2/noxiFi31Z54hW+q3izKQXXQZSNhtiUpAI36uSuYepeBe4wpHQ==", + "dev": true, + "requires": { + "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", + "prettier": "^1.18.2 || ^2.0.0", + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" + } + }, "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "cliui": { @@ -1697,24 +2191,131 @@ "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", "dev": true, "requires": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" } }, + "cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "requires": { + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } + } + }, + "default-gateway": { + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/default-gateway/-/default-gateway-5.0.5.tgz", + "integrity": "sha512-z2RnruVmj8hVMmAnEJMTIJNijhKCDiGjbLP+BHJFOT7ld3Bo5qcIBpVYDniqhbMIIf+jZDlkP2MkPXiQy/DBLA==", + "dev": true, + "requires": { + "execa": "^3.3.0" + } + }, + "execa": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-3.4.0.tgz", + "integrity": "sha512-r9vdGQk4bmCuK1yKQu1KTwcT2zwfWdbdaXfCtAh+5nU/4fSX+JAb7vZGvI5naJrQlvONrEB20jeruESI69530g==", + "dev": true, + "requires": { + "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" + } + }, + "get-stream": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "is-stream": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "merge-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", + "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", + "dev": true + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "npm-run-path": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", + "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", + "dev": true, + "requires": { + "path-key": "^3.0.0" + } + }, + "onetime": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", + "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", "dev": true, "requires": { - "ms": "2.1.1" + "mimic-fn": "^2.1.0" } }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "p-finally": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-2.0.1.tgz", + "integrity": "sha512-vpm09aKwq6H9phqRQzecoDpD8TmVyGw70qmWlyq5onxY7tqyTTFVvxMykxQSQKILBSFlbXpypIw2T1Ml7+DDtw==", "dev": true }, "parse-json": { @@ -1723,26 +2324,70 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "postcss-selector-parser": { + "version": "6.0.11", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.11.tgz", + "integrity": "sha512-zbARubNdogI9j7WY4nQJBiNqQf3sLS3wCP4WfOidu+p28LofJqDH1tcXypGrcmMHhDk2t9wGhCsYe/+szLTy1g==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" } }, + "prettier": { + "version": "2.8.7", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.7.tgz", + "integrity": "sha512-yPngTo3aXUUmyuTjeTUT75txrf+aMh9FiD7q9ZE/i6r0bPb22g4FsE6Y338PQX1bmfy08i9QQCB7/rcUAVntfw==", + "dev": true, + "optional": true + }, "read-pkg": { "version": "5.1.1", "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.1.1.tgz", "integrity": "sha512-dFcTLQi6BZ+aFUaICg7er+/usEoqFdQxiEBsEMNGoipenihtxxtdrQuBXvyANCEI8VuUIVYFgeHGx9sLLvim4w==", "dev": true, "requires": { - "@types/normalize-package-data": "2.4.0", - "normalize-package-data": "2.5.0", - "parse-json": "4.0.0", - "type-fest": "0.4.1" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^4.0.0", + "type-fest": "^0.4.1" } }, "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true }, "string-width": { @@ -1751,9 +2396,18 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" } }, "wrap-ansi": { @@ -1762,37 +2416,43 @@ "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true } } }, "@vue/cli-shared-utils": { - "version": "3.8.0", - "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.8.0.tgz", - "integrity": "sha512-wn1L8pmQnotfftHOYm0VeXs2+cQTySd73uhWXwyO6pT0ehjqlY5c2RTipClmFF3Q+YCYjwlNpsV650F3l1tV8w==", - "dev": true, - "requires": { - "@hapi/joi": "15.0.3", - "chalk": "2.4.2", - "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.88.0", - "request-promise-native": "1.0.7", - "semver": "6.1.0", - "string.prototype.padstart": "3.0.0" + "version": "3.12.1", + "resolved": "https://registry.npmjs.org/@vue/cli-shared-utils/-/cli-shared-utils-3.12.1.tgz", + "integrity": "sha512-jFblzRFjutGwu5utOKdVlPlsbA1lBUNNQlAThzNqej+JtTKJjnvjlhjKX0Gq0oOny5FjKWhoyfQ74p9h1qE6JQ==", + "dev": true, + "requires": { + "@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" }, "dependencies": { "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -1803,15 +2463,15 @@ "integrity": "sha512-IHjxt7LsOFYc0DkTncB7OXJL7UzwOLPPQCfEUNyxL2qt+tF12THV+EO33O1G2Uk4feMSWua3iD39Itszx0f0bw==", "dev": true, "requires": { - "consolidate": "0.15.1", - "hash-sum": "1.0.2", - "lru-cache": "4.1.5", - "merge-source-map": "1.1.0", - "postcss": "7.0.16", - "postcss-selector-parser": "5.0.0", + "consolidate": "^0.15.1", + "hash-sum": "^1.0.2", + "lru-cache": "^4.1.2", + "merge-source-map": "^1.1.0", + "postcss": "^7.0.14", + "postcss-selector-parser": "^5.0.0", "prettier": "1.16.3", - "source-map": "0.6.1", - "vue-template-es2015-compiler": "1.9.1" + "source-map": "~0.6.1", + "vue-template-es2015-compiler": "^1.9.0" }, "dependencies": { "lru-cache": { @@ -1820,8 +2480,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "source-map": { @@ -1844,11 +2504,11 @@ "integrity": "sha512-bQghq1cw1BuMRHNhr3tRpAJx1tpGy0QtajQX873kLtA9YVuOIoXR7nAWnTN09bBHnSUh2N288vMsqPi2fI4Hzg==", "dev": true, "requires": { - "eslint-config-standard": "12.0.0", - "eslint-plugin-import": "2.17.3", - "eslint-plugin-node": "8.0.1", - "eslint-plugin-promise": "4.1.1", - "eslint-plugin-standard": "4.0.0" + "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" } }, "@vue/preload-webpack-plugin": { @@ -1863,8 +2523,8 @@ "integrity": "sha512-yX4sxEIHh4M9yAbLA/ikpEnGKMNBCnoX98xE1RwxfhQVcn0MaXNSj1Qmac+ZydTj6VBSEVukchBogXBTwc+9iA==", "dev": true, "requires": { - "dom-event-types": "1.0.0", - "lodash": "4.17.15" + "dom-event-types": "^1.0.0", + "lodash": "^4.17.4" } }, "@vue/web-component-wrapper": { @@ -1873,190 +2533,12 @@ "integrity": "sha512-Xn/+vdm9CjuC9p3Ae+lTClNutrVhsXpzxvoTXXtoys6kVRX9FkueSUAqSWAyZntmVLlR4DosBV4pH8y5Z/HbUw==", "dev": true }, - "@webassemblyjs/ast": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.7.11.tgz", - "integrity": "sha512-ZEzy4vjvTzScC+SH8RBssQUawpaInUdMTYwYYLh54/s8TuT0gBLuyUnppKsVyZEi876VmmStKsUs28UxPgdvrA==", - "dev": true, - "requires": { - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11" - } - }, - "@webassemblyjs/floating-point-hex-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.7.11.tgz", - "integrity": "sha512-zY8dSNyYcgzNRNT666/zOoAyImshm3ycKdoLsyDw/Bwo6+/uktb7p4xyApuef1dwEBo/U/SYQzbGBvV+nru2Xg==", - "dev": true - }, - "@webassemblyjs/helper-api-error": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.7.11.tgz", - "integrity": "sha512-7r1qXLmiglC+wPNkGuXCvkmalyEstKVwcueZRP2GNC2PAvxbLYwLLPr14rcdJaE4UtHxQKfFkuDFuv91ipqvXg==", - "dev": true - }, - "@webassemblyjs/helper-buffer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.7.11.tgz", - "integrity": "sha512-MynuervdylPPh3ix+mKZloTcL06P8tenNH3sx6s0qE8SLR6DdwnfgA7Hc9NSYeob2jrW5Vql6GVlsQzKQCa13w==", - "dev": true - }, - "@webassemblyjs/helper-code-frame": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.7.11.tgz", - "integrity": "sha512-T8ESC9KMXFTXA5urJcyor5cn6qWeZ4/zLPyWeEXZ03hj/x9weSokGNkVCdnhSabKGYWxElSdgJ+sFa9G/RdHNw==", - "dev": true, - "requires": { - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/helper-fsm": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.7.11.tgz", - "integrity": "sha512-nsAQWNP1+8Z6tkzdYlXT0kxfa2Z1tRTARd8wYnc/e3Zv3VydVVnaeePgqUzFrpkGUyhUUxOl5ML7f1NuT+gC0A==", - "dev": true - }, - "@webassemblyjs/helper-module-context": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.7.11.tgz", - "integrity": "sha512-JxfD5DX8Ygq4PvXDucq0M+sbUFA7BJAv/GGl9ITovqE+idGX+J3QSzJYz+LwQmL7fC3Rs+utvWoJxDb6pmC0qg==", - "dev": true - }, - "@webassemblyjs/helper-wasm-bytecode": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.7.11.tgz", - "integrity": "sha512-cMXeVS9rhoXsI9LLL4tJxBgVD/KMOKXuFqYb5oCJ/opScWpkCMEz9EJtkonaNcnLv2R3K5jIeS4TRj/drde1JQ==", - "dev": true - }, - "@webassemblyjs/helper-wasm-section": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.7.11.tgz", - "integrity": "sha512-8ZRY5iZbZdtNFE5UFunB8mmBEAbSI3guwbrsCl4fWdfRiAcvqQpeqd5KHhSWLL5wuxo53zcaGZDBU64qgn4I4Q==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11" - } - }, - "@webassemblyjs/ieee754": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.7.11.tgz", - "integrity": "sha512-Mmqx/cS68K1tSrvRLtaV/Lp3NZWzXtOHUW2IvDvl2sihAwJh4ACE0eL6A8FvMyDG9abes3saB6dMimLOs+HMoQ==", - "dev": true, - "requires": { - "@xtuc/ieee754": "1.2.0" - } - }, - "@webassemblyjs/leb128": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.7.11.tgz", - "integrity": "sha512-vuGmgZjjp3zjcerQg+JA+tGOncOnJLWVkt8Aze5eWQLwTQGNgVLcyOTqgSCxWTR4J42ijHbBxnuRaL1Rv7XMdw==", - "dev": true, - "requires": { - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/utf8": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.7.11.tgz", - "integrity": "sha512-C6GFkc7aErQIAH+BMrIdVSmW+6HSe20wg57HEC1uqJP8E/xpMjXqQUxkQw07MhNDSDcGpxI9G5JSNOQCqJk4sA==", - "dev": true - }, - "@webassemblyjs/wasm-edit": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.7.11.tgz", - "integrity": "sha512-FUd97guNGsCZQgeTPKdgxJhBXkUbMTY6hFPf2Y4OedXd48H97J+sOY2Ltaq6WGVpIH8o/TGOVNiVz/SbpEMJGg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/helper-wasm-section": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-opt": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "@webassemblyjs/wast-printer": "1.7.11" - } - }, - "@webassemblyjs/wasm-gen": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.7.11.tgz", - "integrity": "sha512-U/KDYp7fgAZX5KPfq4NOupK/BmhDc5Kjy2GIqstMhvvdJRcER/kUsMThpWeRP8BMn4LXaKhSTggIJPOeYHwISA==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wasm-opt": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.7.11.tgz", - "integrity": "sha512-XynkOwQyiRidh0GLua7SkeHvAPXQV/RxsUeERILmAInZegApOUAIJfRuPYe2F7RcjOC9tW3Cb9juPvAC/sCqvg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-buffer": "1.7.11", - "@webassemblyjs/wasm-gen": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11" - } - }, - "@webassemblyjs/wasm-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.7.11.tgz", - "integrity": "sha512-6lmXRTrrZjYD8Ng8xRyvyXQJYUQKYSXhJqXOBLw24rdiXsHAOlvw5PhesjdcaMadU/pyPQOJ5dHreMjBxwnQKg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-wasm-bytecode": "1.7.11", - "@webassemblyjs/ieee754": "1.7.11", - "@webassemblyjs/leb128": "1.7.11", - "@webassemblyjs/utf8": "1.7.11" - } - }, - "@webassemblyjs/wast-parser": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.7.11.tgz", - "integrity": "sha512-lEyVCg2np15tS+dm7+JJTNhNWq9yTZvi3qEhAIIOaofcYlUp0UR5/tVqOwa/gXYr3gjwSZqw+/lS9dscyLelbQ==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/floating-point-hex-parser": "1.7.11", - "@webassemblyjs/helper-api-error": "1.7.11", - "@webassemblyjs/helper-code-frame": "1.7.11", - "@webassemblyjs/helper-fsm": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, - "@webassemblyjs/wast-printer": { - "version": "1.7.11", - "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.7.11.tgz", - "integrity": "sha512-m5vkAsuJ32QpkdkDOUPGSltrg8Cuk3KBx4YrmAGQwCZPRdUHXxG4phIOuuycLemHFr74sWL9Wthqss4fzdzSwg==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/wast-parser": "1.7.11", - "@xtuc/long": "4.2.1" - } - }, "@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", "integrity": "sha512-DX8nKgqcGwsc0eJSqYt5lwP4DH5FlHnmuWWBRy7X0NcaGR0ZtuyeESgMwTYVEtxmsNGY+qit4QYT/MIYTOTPeA==", "dev": true }, - "@xtuc/long": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.1.tgz", - "integrity": "sha512-FZdkNBDqBRHKQ2MEbSC17xnPFOhZxeJ2YGSfr2BKf3sujG49Qe3bB+rGCwQfIaA7WHnGeGkSijX4FuBCdrzW/g==", - "dev": true - }, "abab": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.0.tgz", @@ -2070,44 +2552,35 @@ "dev": true }, "accepts": { - "version": "1.3.7", - "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", - "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", "dev": true, "requires": { - "mime-types": "2.1.24", - "negotiator": "0.6.2" + "mime-types": "~2.1.34", + "negotiator": "0.6.3" } }, "acorn": { - "version": "5.7.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.3.tgz", - "integrity": "sha512-T/zvzYRfbVojPWahDsE5evJdHb3oJoQfFbsrKM7w5Zcs++Tr257tia3BmMP8XYVjp1S9RZXQMh7gao96BlqZOw==", + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", "dev": true }, - "acorn-dynamic-import": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/acorn-dynamic-import/-/acorn-dynamic-import-3.0.0.tgz", - "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", - "dev": true, - "requires": { - "acorn": "5.7.3" - } - }, "acorn-globals": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.2.tgz", "integrity": "sha512-BbzvZhVtZP+Bs1J1HcwrQe8ycfO0wStkSGxuul3He3GkHOIZ6eTqOkPuw9IP1X3+IkOo4wiJmwkobzXYz4wewQ==", "dev": true, "requires": { - "acorn": "6.1.1", - "acorn-walk": "6.1.1" + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true } } @@ -2119,7 +2592,7 @@ "dev": true, "optional": true, "requires": { - "acorn": "3.3.0" + "acorn": "^3.0.4" }, "dependencies": { "acorn": { @@ -2144,15 +2617,15 @@ "dev": true }, "ajv": { - "version": "6.10.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.10.0.tgz", - "integrity": "sha512-nffhOpkymDECQyR0mnsUtoCE8RlX38G0rYP+wgLWFyZuUyuuojSSvi/+euOiQBIn63whYwYVIIH1TvE3tu4OEg==", + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, "requires": { - "fast-deep-equal": "2.0.1", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.4.1", - "uri-js": "4.2.2" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" } }, "ajv-errors": { @@ -2176,7 +2649,7 @@ "amdefine": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", - "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "integrity": "sha512-S2Hw0TtNkMJhIabBwIojKL9YHO5T0n5eNqWJ7Lrlel/zDbftQpxpapi8tZs3X1HWa+u+QeydGmzzNU0m09+Rcg==", "dev": true }, "ansi-colors": { @@ -2191,16 +2664,16 @@ "integrity": "sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ==", "dev": true }, - "ansi-html": { - "version": "0.0.7", - "resolved": "https://registry.npmjs.org/ansi-html/-/ansi-html-0.0.7.tgz", - "integrity": "sha1-gTWEAhliqenm/QOflA0S9WynhZ4=", + "ansi-html-community": { + "version": "0.0.8", + "resolved": "https://registry.npmjs.org/ansi-html-community/-/ansi-html-community-0.0.8.tgz", + "integrity": "sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==", "dev": true }, "ansi-regex": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", - "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", "dev": true }, "ansi-styles": { @@ -2208,7 +2681,7 @@ "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "requires": { - "color-convert": "1.9.3" + "color-convert": "^1.9.0" } }, "any-promise": { @@ -2223,8 +2696,8 @@ "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", "dev": true, "requires": { - "micromatch": "3.1.10", - "normalize-path": "2.1.1" + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" }, "dependencies": { "normalize-path": { @@ -2233,7 +2706,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } } } @@ -2244,7 +2717,7 @@ "integrity": "sha1-126/jKlNJ24keja61EpLdKthGZE=", "dev": true, "requires": { - "default-require-extensions": "1.0.0" + "default-require-extensions": "^1.0.0" } }, "aproba": { @@ -2260,13 +2733,13 @@ "dev": true }, "are-we-there-yet": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", - "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.7.tgz", + "integrity": "sha512-nxwy40TuMiUGqMyRHgCSWZ9FM4VAoRP4xUYSTv5ImRog+h9yISPbVH7H8fASCIzYn9wlEv4zvFL7uKDMCFQm3g==", "dev": true, "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" } }, "argparse": { @@ -2275,7 +2748,7 @@ "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { - "sprintf-js": "1.0.3" + "sprintf-js": "~1.0.2" } }, "arr-diff": { @@ -2302,16 +2775,11 @@ "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", "dev": true }, - "array-filter": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/array-filter/-/array-filter-0.0.1.tgz", - "integrity": "sha1-fajPLiZijtcygDWB/SH2fKzS7uw=", - "dev": true - }, "array-find-index": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", - "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=" + "integrity": "sha512-M1HQyIXcBGtVywBt8WVdim+lrNaK7VHp99Qt5pSNziXznKHViIBbXWtfRTpEFpF/c4FdfxNAsCCwPp5phBYJtw==", + "dev": true }, "array-flatten": { "version": "1.1.1", @@ -2320,34 +2788,25 @@ "dev": true }, "array-includes": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.0.3.tgz", - "integrity": "sha1-GEtI9i2S10UrsxsyMWXH+L0CJm0=", + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.6.tgz", + "integrity": "sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4", + "get-intrinsic": "^1.1.3", + "is-string": "^1.0.7" } }, - "array-map": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-map/-/array-map-0.0.0.tgz", - "integrity": "sha1-iKK6tz0c97zVwbEYoAP2b2ZfpmI=", - "dev": true - }, - "array-reduce": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/array-reduce/-/array-reduce-0.0.0.tgz", - "integrity": "sha1-FziZ0//Rx9k4PkR5Ul2+J4yrXys=", - "dev": true - }, "array-union": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/array-union/-/array-union-1.0.2.tgz", "integrity": "sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk=", "dev": true, "requires": { - "array-uniq": "1.0.3" + "array-uniq": "^1.0.1" } }, "array-uniq": { @@ -2373,7 +2832,7 @@ "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": "~2.1.0" } }, "asn1.js": { @@ -2382,9 +2841,9 @@ "integrity": "sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "assert": { @@ -2393,7 +2852,7 @@ "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", "dev": true, "requires": { - "object-assign": "4.1.1", + "object-assign": "^4.1.1", "util": "0.10.3" }, "dependencies": { @@ -2403,12 +2862,6 @@ "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", "dev": true }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "util": { "version": "0.10.3", "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", @@ -2439,12 +2892,12 @@ "dev": true }, "async": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/async/-/async-2.6.2.tgz", - "integrity": "sha512-H1qVYh1MYhEEFLsP97cVKqCGo7KfCyTt6uEWqsTBr9SO84oK9Uwbyd/yCW+6rKJLHksBNUVWZDAjfS+Ccx0Bbg==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/async/-/async-2.6.4.tgz", + "integrity": "sha512-mzo5dfJYwAn29PeiJ0zvwTo04zj8HDJj0Mn8TD7sno7q12prdbnasKJHhkm2c1LgrhlJ0teaea8860oxi51mGA==", "dev": true, "requires": { - "lodash": "4.17.15" + "lodash": "^4.17.14" } }, "async-each": { @@ -2456,7 +2909,7 @@ "async-foreach": { "version": "0.1.3", "resolved": "https://registry.npmjs.org/async-foreach/-/async-foreach-0.1.3.tgz", - "integrity": "sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI=", + "integrity": "sha512-VUeSMD8nEGBWaZK4lizI1sf3yEC7pnAQ/mrI7pC2fBz2s/tq5jWWEngTwaf0Gruu/OoXRGLGg1XFqpYBiGTYJA==", "dev": true }, "async-limiter": { @@ -2468,8 +2921,7 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" }, "atob": { "version": "2.1.2", @@ -2483,14 +2935,20 @@ "integrity": "sha512-KJSzkStUl3wP0D5sdMlP82Q52JLy5+atf2MHAre48+ckWkXgixmfHyWmA77wFDy6jTHU6mIgXv6hAQ2mf1PjJQ==", "dev": true, "requires": { - "browserslist": "4.6.0", - "caniuse-lite": "1.0.30000971", - "normalize-range": "0.1.2", - "num2fraction": "1.2.2", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.5.4", + "caniuse-lite": "^1.0.30000957", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.14", + "postcss-value-parser": "^3.3.1" } }, + "available-typed-arrays": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", + "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", + "dev": true + }, "aws-sign2": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", @@ -2504,18 +2962,11 @@ "dev": true }, "axios": { - "version": "0.21.1", - "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.1.tgz", - "integrity": "sha512-dKQiRHxGD9PPRIUNIWvZhPTPpl1rf/OxTYKsqKUDjBwYylTvV7SjSHJb9ratfyzM6wCdLCOYLzs73qpg5c4iGA==", + "version": "0.21.4", + "resolved": "https://registry.npmjs.org/axios/-/axios-0.21.4.tgz", + "integrity": "sha512-ut5vewkiu8jjGBdqpM44XxjuCjq9LAKeHVmoVfHVzy8eHgxxq8SbAVQNovDA8mVi05kP0Ea/n/UzcSHcTJQfNg==", "requires": { - "follow-redirects": "1.13.1" - }, - "dependencies": { - "follow-redirects": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.13.1.tgz", - "integrity": "sha512-SSG5xmZh1mkPGyKzjZP8zLjltIfpW32Y5QpdNJyjcfGxK3qo3NDDkZOZSFiGn1A6SclQxY9GzEwAHQ3dmYRWpg==" - } + "follow-redirects": "^1.14.0" } }, "babel-code-frame": { @@ -2524,9 +2975,9 @@ "integrity": "sha1-Y/1D99weO7fONZR9uP42mj9Yx0s=", "dev": true, "requires": { - "chalk": "1.1.3", - "esutils": "2.0.2", - "js-tokens": "3.0.2" + "chalk": "^1.1.3", + "esutils": "^2.0.2", + "js-tokens": "^3.0.2" }, "dependencies": { "ansi-regex": { @@ -2547,11 +2998,11 @@ "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "js-tokens": { @@ -2566,7 +3017,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -2589,12 +3040,12 @@ "integrity": "sha512-z7OT1iNV+TjOwHNLLyJk+HN+YVWX+CLE6fPD2SymJZOZQBs+QIexFjhm4keGTm8MW9xr4EC9Q0PbaLB24V5GoQ==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "@babel/parser": "7.4.5", - "@babel/traverse": "7.4.5", - "@babel/types": "7.4.4", + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.0.0", + "@babel/traverse": "^7.0.0", + "@babel/types": "^7.0.0", "eslint-scope": "3.7.1", - "eslint-visitor-keys": "1.0.0" + "eslint-visitor-keys": "^1.0.0" }, "dependencies": { "eslint-scope": { @@ -2603,8 +3054,8 @@ "integrity": "sha1-PWPD7f2gLgbgGkUq2IyqzHzctug=", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } } } @@ -2615,14 +3066,14 @@ "integrity": "sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA==", "dev": true, "requires": { - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "detect-indent": "4.0.0", - "jsesc": "1.3.0", - "lodash": "4.17.15", - "source-map": "0.5.7", - "trim-right": "1.0.1" + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "detect-indent": "^4.0.0", + "jsesc": "^1.3.0", + "lodash": "^4.17.4", + "source-map": "^0.5.7", + "trim-right": "^1.0.1" }, "dependencies": { "jsesc": { @@ -2645,8 +3096,8 @@ "integrity": "sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-template": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-template": "^6.24.1" } }, "babel-jest": { @@ -2655,8 +3106,8 @@ "integrity": "sha512-lqKGG6LYXYu+DQh/slrQ8nxXQkEkhugdXsU6St7GmhVS7Ilc/22ArwqXNJrf0QaOBjZB0360qZMwXqDYQHXaew==", "dev": true, "requires": { - "babel-plugin-istanbul": "4.1.6", - "babel-preset-jest": "23.2.0" + "babel-plugin-istanbul": "^4.1.6", + "babel-preset-jest": "^23.2.0" } }, "babel-loader": { @@ -2665,10 +3116,10 @@ "integrity": "sha512-4BmWKtBOBm13uoUwd08UwjZlaw3O9GWf456R9j+5YykFZ6LUIjIKLc0zEZf+hauxPOJs96C8k6FvYD09vWzhYw==", "dev": true, "requires": { - "find-cache-dir": "2.1.0", - "loader-utils": "1.2.3", - "mkdirp": "0.5.1", - "pify": "4.0.1" + "find-cache-dir": "^2.0.0", + "loader-utils": "^1.0.2", + "mkdirp": "^0.5.1", + "pify": "^4.0.1" } }, "babel-messages": { @@ -2677,16 +3128,16 @@ "integrity": "sha1-8830cDhYA1sqKVHG7F7fbGLyYw4=", "dev": true, "requires": { - "babel-runtime": "6.26.0" + "babel-runtime": "^6.22.0" } }, "babel-plugin-dynamic-import-node": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.2.0.tgz", - "integrity": "sha512-fP899ELUnTaBcIzmrW7nniyqqdYWrWuJUyPWHxFa/c7r7hS6KC8FscNfLlBNIoPSc55kYMGEEKjPjJGCLbE1qA==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", "dev": true, "requires": { - "object.assign": "4.1.0" + "object.assign": "^4.1.0" } }, "babel-plugin-istanbul": { @@ -2695,10 +3146,10 @@ "integrity": "sha512-PWP9FQ1AhZhS01T/4qLSKoHGY/xvkZdVBGlKM/HuxxS3+sC66HhTNR7+MpbO/so/cz/wY94MeSWJuP1hXIPfwQ==", "dev": true, "requires": { - "babel-plugin-syntax-object-rest-spread": "6.13.0", - "find-up": "2.1.0", - "istanbul-lib-instrument": "1.10.2", - "test-exclude": "4.2.3" + "babel-plugin-syntax-object-rest-spread": "^6.13.0", + "find-up": "^2.1.0", + "istanbul-lib-instrument": "^1.10.1", + "test-exclude": "^4.2.1" } }, "babel-plugin-jest-hoist": { @@ -2713,29 +3164,51 @@ "integrity": "sha512-tjR0GvSndzPew/Iayf4uICWZqjBwnlMWjSx6brryfQ81F9rxBVqwDJtFCV8oOs0+vJeefK9TmdZtkIFdFe1UnA==", "dev": true, "requires": { - "find-babel-config": "1.2.0", - "glob": "7.1.4", - "pkg-up": "2.0.0", - "reselect": "3.0.1", - "resolve": "1.11.0" + "find-babel-config": "^1.1.0", + "glob": "^7.1.2", + "pkg-up": "^2.0.0", + "reselect": "^3.0.1", + "resolve": "^1.4.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.3.3.tgz", + "integrity": "sha512-8hOdmFYFSZhqg2C/JgLUQ+t52o5nirNwaWM2B9LWteozwIvM14VSwdsCAUET10qT+kmySAlseadmfeeSWFCy+Q==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.17.7", + "@babel/helper-define-polyfill-provider": "^0.3.3", + "semver": "^6.1.1" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true } } }, + "babel-plugin-polyfill-corejs3": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.6.0.tgz", + "integrity": "sha512-+eHqR6OPcBhJOGgsIar7xoAB1GcSwVUA3XjAd7HJNzOXT4wv6/H7KIdA/Nc60cvUlDbKApmqNvD1B1bzOt4nyA==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3", + "core-js-compat": "^3.25.1" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.4.1.tgz", + "integrity": "sha512-NtQGmyQDXjQqQ+IzRkBVwEOz9lQ4zxAQZgoAYEtU9dJjnl1Oc98qnN7jcp+bE7O7aYzVpavXE3/VKXNzUbh7aw==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.3.3" + } + }, "babel-plugin-syntax-object-rest-spread": { "version": "6.13.0", "resolved": "https://registry.npmjs.org/babel-plugin-syntax-object-rest-spread/-/babel-plugin-syntax-object-rest-spread-6.13.0.tgz", @@ -2748,10 +3221,10 @@ "integrity": "sha512-CV9ROOHEdrjcwhIaJNBGMBCodN+1cfkwtM1SbUHmvyy35KGT7fohbpOxkE2uLz1o6odKK2Ck/tz47z+VqQfi9Q==", "dev": true, "requires": { - "babel-plugin-transform-strict-mode": "6.24.1", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-types": "6.26.0" + "babel-plugin-transform-strict-mode": "^6.24.1", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-types": "^6.26.0" } }, "babel-plugin-transform-strict-mode": { @@ -2760,8 +3233,8 @@ "integrity": "sha1-1fr3qleKZbvlkc9e2uBKDGcCB1g=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-types": "6.26.0" + "babel-runtime": "^6.22.0", + "babel-types": "^6.24.1" } }, "babel-preset-jest": { @@ -2770,8 +3243,8 @@ "integrity": "sha1-jsegOhOPABoaj7HoETZSvxpV2kY=", "dev": true, "requires": { - "babel-plugin-jest-hoist": "23.2.0", - "babel-plugin-syntax-object-rest-spread": "6.13.0" + "babel-plugin-jest-hoist": "^23.2.0", + "babel-plugin-syntax-object-rest-spread": "^6.13.0" } }, "babel-register": { @@ -2780,13 +3253,13 @@ "integrity": "sha1-btAhFz4vy0htestFxgCahW9kcHE=", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-runtime": "6.26.0", - "core-js": "2.6.8", - "home-or-tmp": "2.0.0", - "lodash": "4.17.15", - "mkdirp": "0.5.1", - "source-map-support": "0.4.18" + "babel-core": "^6.26.0", + "babel-runtime": "^6.26.0", + "core-js": "^2.5.0", + "home-or-tmp": "^2.0.0", + "lodash": "^4.17.4", + "mkdirp": "^0.5.1", + "source-map-support": "^0.4.15" }, "dependencies": { "babel-core": { @@ -2795,25 +3268,25 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "debug": { @@ -2855,7 +3328,7 @@ "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", "dev": true, "requires": { - "source-map": "0.5.7" + "source-map": "^0.5.6" } } } @@ -2866,8 +3339,8 @@ "integrity": "sha1-llxwWGaOgrVde/4E/yM3vItWR/4=", "dev": true, "requires": { - "core-js": "2.6.8", - "regenerator-runtime": "0.11.1" + "core-js": "^2.4.0", + "regenerator-runtime": "^0.11.0" }, "dependencies": { "regenerator-runtime": { @@ -2884,11 +3357,11 @@ "integrity": "sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "lodash": "4.17.15" + "babel-runtime": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "lodash": "^4.17.4" } }, "babel-traverse": { @@ -2897,15 +3370,15 @@ "integrity": "sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4=", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-messages": "6.23.0", - "babel-runtime": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "debug": "2.6.9", - "globals": "9.18.0", - "invariant": "2.2.4", - "lodash": "4.17.15" + "babel-code-frame": "^6.26.0", + "babel-messages": "^6.23.0", + "babel-runtime": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "debug": "^2.6.8", + "globals": "^9.18.0", + "invariant": "^2.2.2", + "lodash": "^4.17.4" }, "dependencies": { "debug": { @@ -2937,10 +3410,10 @@ "integrity": "sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc=", "dev": true, "requires": { - "babel-runtime": "6.26.0", - "esutils": "2.0.2", - "lodash": "4.17.15", - "to-fast-properties": "1.0.3" + "babel-runtime": "^6.26.0", + "esutils": "^2.0.2", + "lodash": "^4.17.4", + "to-fast-properties": "^1.0.3" }, "dependencies": { "to-fast-properties": { @@ -2969,13 +3442,13 @@ "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", "dev": true, "requires": { - "cache-base": "1.0.1", - "class-utils": "0.3.6", - "component-emitter": "1.3.0", - "define-property": "1.0.0", - "isobject": "3.0.1", - "mixin-deep": "1.3.2", - "pascalcase": "0.1.1" + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" }, "dependencies": { "define-property": { @@ -2984,7 +3457,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -2993,7 +3466,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -3002,7 +3475,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -3011,9 +3484,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -3041,7 +3514,7 @@ "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", "dev": true, "requires": { - "tweetnacl": "0.14.5" + "tweetnacl": "^0.14.3" } }, "bfj": { @@ -3050,10 +3523,10 @@ "integrity": "sha512-+GUNvzHR4nRyGybQc2WpNJL4MJazMuvf92ueIyA0bIkPRwhhQu3IfZQ2PSoVPpCBJfmoSdOxu5rnotfFLlvYRQ==", "dev": true, "requires": { - "bluebird": "3.5.5", - "check-types": "7.4.0", - "hoopy": "0.1.4", - "tryer": "1.0.1" + "bluebird": "^3.5.1", + "check-types": "^7.3.0", + "hoopy": "^0.1.2", + "tryer": "^1.0.0" } }, "big.js": { @@ -3068,13 +3541,22 @@ "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", "dev": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "dev": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "block-stream": { "version": "0.0.9", "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", - "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", + "integrity": "sha512-OorbnJVPII4DuUKbjARAe8u8EfqOmkEEaSFIyoQ7OjTHn6kafxWl0wLgoZ2rXaYd7MyLcDaU4TmhfxtwgcccMQ==", "dev": true, "requires": { - "inherits": "2.0.3" + "inherits": "~2.0.0" } }, "bluebird": { @@ -3084,27 +3566,29 @@ "dev": true }, "bn.js": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.11.8.tgz", - "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", "dev": true }, "body-parser": { - "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "version": "1.20.1", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", + "integrity": "sha512-jWi7abTbYwajOytWCQc37VulmWiRae5RyTpaCyDcS5/lMdtwSz5lOpDE67srw/HYe35f1z3fDQw+3txg7gNtWw==", "dev": true, "requires": { - "bytes": "3.1.0", - "content-type": "1.0.4", + "bytes": "3.1.2", + "content-type": "~1.0.4", "debug": "2.6.9", - "depd": "1.1.2", - "http-errors": "1.7.2", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", - "on-finished": "2.3.0", - "qs": "6.7.0", - "raw-body": "2.4.0", - "type-is": "1.6.18" + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.1", + "type-is": "~1.6.18", + "unpipe": "1.0.0" }, "dependencies": { "debug": { @@ -3116,17 +3600,26 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", - "dev": true + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } } } }, @@ -3136,12 +3629,12 @@ "integrity": "sha1-jokKGD2O6aI5OzhExpGkK897yfU=", "dev": true, "requires": { - "array-flatten": "2.1.2", - "deep-equal": "1.0.1", - "dns-equal": "1.0.0", - "dns-txt": "2.0.2", - "multicast-dns": "6.2.3", - "multicast-dns-service-types": "1.1.0" + "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" }, "dependencies": { "array-flatten": { @@ -3159,21 +3652,20 @@ "dev": true }, "bootstrap": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.3.1.tgz", - "integrity": "sha512-rXqOmH1VilAt2DyPzluTi2blhk17bO7ef+zLLPlWvG494pDxcM234pJ8wTc/6R40UWizAIIMgxjvxZg5kmsbag==" + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/bootstrap/-/bootstrap-4.6.2.tgz", + "integrity": "sha512-51Bbp/Uxr9aTuy6ca/8FbFloBUJZLHwnhTcnjIeRn2suQWsWzcuJhGjKDB5eppVte/8oCdOL3VuwxvZDUggwGQ==" }, "bootstrap-vue": { - "version": "2.0.0-rc.21", - "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.0.0-rc.21.tgz", - "integrity": "sha512-cGMKpk60xik+VhgQ8hUiRVaysOBv+4QhBLcegzsl31LNyFmIJPaAJyqrO/Nz3m8AkCEMkTECRNk2ZLm1RQE9dQ==", + "version": "2.23.1", + "resolved": "https://registry.npmjs.org/bootstrap-vue/-/bootstrap-vue-2.23.1.tgz", + "integrity": "sha512-SEWkG4LzmMuWjQdSYmAQk1G/oOKm37dtNfjB5kxq0YafnL2W6qUAmeDTcIZVbPiQd2OQlIkWOMPBRGySk/zGsg==", "requires": { - "@nuxt/opencollective": "0.2.2", - "bootstrap": "4.3.1", - "core-js": "2.6.8", - "popper.js": "1.15.0", - "portal-vue": "2.1.4", - "vue-functional-data-merge": "2.0.7" + "@nuxt/opencollective": "^0.3.2", + "bootstrap": "^4.6.1", + "popper.js": "^1.16.1", + "portal-vue": "^2.1.7", + "vue-functional-data-merge": "^3.1.0" } }, "brace-expansion": { @@ -3182,7 +3674,7 @@ "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, "requires": { - "balanced-match": "1.0.0", + "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, @@ -3192,16 +3684,16 @@ "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", "dev": true, "requires": { - "arr-flatten": "1.1.0", - "array-unique": "0.3.2", - "extend-shallow": "2.0.1", - "fill-range": "4.0.0", - "isobject": "3.0.1", - "repeat-element": "1.1.3", - "snapdragon": "0.8.2", - "snapdragon-node": "2.1.1", - "split-string": "3.1.0", - "to-regex": "3.0.2" + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -3210,7 +3702,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -3255,12 +3747,12 @@ "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", "dev": true, "requires": { - "buffer-xor": "1.0.3", - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "buffer-xor": "^1.0.3", + "cipher-base": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.3", + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "browserify-cipher": { @@ -3269,9 +3761,9 @@ "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", "dev": true, "requires": { - "browserify-aes": "1.2.0", - "browserify-des": "1.0.2", - "evp_bytestokey": "1.0.3" + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" } }, "browserify-des": { @@ -3280,10 +3772,10 @@ "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "des.js": "1.0.0", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "browserify-rsa": { @@ -3292,23 +3784,99 @@ "integrity": "sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ=", "dev": true, "requires": { - "bn.js": "4.11.8", - "randombytes": "2.1.0" + "bn.js": "^4.1.0", + "randombytes": "^2.0.1" } }, "browserify-sign": { - "version": "4.0.4", - "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.0.4.tgz", - "integrity": "sha1-qk62jl17ZYuqa/alfmMMvXqT0pg=", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "elliptic": "6.4.1", - "inherits": "2.0.3", - "parse-asn1": "5.1.4" + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.2.tgz", + "integrity": "sha512-1rudGyeYY42Dk6texmv7c4VcQ0EsvVbLwZkA+AQB7SxvXxmcD93jcHie8bzecJ+ChDlmAm2Qyu0+Ccg5uhZXCg==", + "dev": true, + "requires": { + "bn.js": "^5.2.1", + "browserify-rsa": "^4.1.0", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.4", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.6", + "readable-stream": "^3.6.2", + "safe-buffer": "^5.2.1" + }, + "dependencies": { + "asn1.js": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-5.4.1.tgz", + "integrity": "sha512-+I//4cYPccV8LdmBLiX8CYvf9Sp3vQsrqu2QNXRcrbiWvcx/UdlFiqUJJzxRQxgsZmvhXhn4cSKeSmoFjVdupA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0", + "safer-buffer": "^2.1.0" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "bn.js": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.1.tgz", + "integrity": "sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==", + "dev": true + }, + "browserify-rsa": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/browserify-rsa/-/browserify-rsa-4.1.0.tgz", + "integrity": "sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==", + "dev": true, + "requires": { + "bn.js": "^5.0.0", + "randombytes": "^2.0.1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "dev": true, + "requires": { + "asn1.js": "^5.2.0", + "browserify-aes": "^1.0.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" + } + }, + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "browserify-zlib": { @@ -3317,18 +3885,19 @@ "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", "dev": true, "requires": { - "pako": "1.0.10" + "pako": "~1.0.5" } }, "browserslist": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.6.0.tgz", - "integrity": "sha512-Jk0YFwXBuMOOol8n6FhgkDzn3mY9PYLYGk29zybF05SbRTsMgPqmTNeQQhOghCxq5oFqAXE3u4sYddr4C0uRhg==", + "version": "4.21.5", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", + "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", "dev": true, "requires": { - "caniuse-lite": "1.0.30000971", - "electron-to-chromium": "1.3.137", - "node-releases": "1.1.21" + "caniuse-lite": "^1.0.30001449", + "electron-to-chromium": "^1.4.284", + "node-releases": "^2.0.8", + "update-browserslist-db": "^1.0.10" } }, "bser": { @@ -3337,7 +3906,7 @@ "integrity": "sha1-mseNPtXZFYBP2HrLFYvHlxR6Fxk=", "dev": true, "requires": { - "node-int64": "0.4.0" + "node-int64": "^0.4.0" } }, "buffer": { @@ -3346,9 +3915,9 @@ "integrity": "sha1-bRu2AbB6TvztlwlBMgkwJ8lbwpg=", "dev": true, "requires": { - "base64-js": "1.3.0", - "ieee754": "1.1.13", - "isarray": "1.0.0" + "base64-js": "^1.0.2", + "ieee754": "^1.1.4", + "isarray": "^1.0.0" } }, "buffer-from": { @@ -3375,46 +3944,56 @@ "dev": true }, "bytes": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, "cacache": { - "version": "11.3.2", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-11.3.2.tgz", - "integrity": "sha512-E0zP4EPGDOaT2chM08Als91eYnf8Z+eH1awwwVsngUmgppfM5jjJ8l3z5vO5p5w/I3LsiXawb1sW0VY65pQABg==", - "dev": true, - "requires": { - "bluebird": "3.5.5", - "chownr": "1.1.1", - "figgy-pudding": "3.5.1", - "glob": "7.1.4", - "graceful-fs": "4.1.15", - "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" + "version": "10.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", + "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", + "dev": true, + "requires": { + "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" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "lru-cache": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", + "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "ssri": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.1" } + }, + "yallist": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", + "dev": true } } }, @@ -3424,15 +4003,15 @@ "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", "dev": true, "requires": { - "collection-visit": "1.0.0", - "component-emitter": "1.3.0", - "get-value": "2.0.6", - "has-value": "1.0.0", - "isobject": "3.0.1", - "set-value": "2.0.1", - "to-object-path": "0.3.0", - "union-value": "1.0.1", - "unset-value": "1.0.0" + "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" } }, "cache-loader": { @@ -3441,11 +4020,11 @@ "integrity": "sha512-V99T3FOynmGx26Zom+JrVBytLBsmUCzVG2/4NnUKgvXN4bEV42R1ERl1IyiH/cvFIDA1Ytq2lPZ9tXDSahcQpQ==", "dev": true, "requires": { - "loader-utils": "1.2.3", - "mkdirp": "0.5.1", - "neo-async": "2.6.1", - "normalize-path": "3.0.0", - "schema-utils": "1.0.0" + "loader-utils": "^1.1.0", + "mkdirp": "^0.5.1", + "neo-async": "^2.6.0", + "normalize-path": "^3.0.0", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -3454,49 +4033,57 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } }, + "cacheable-lookup": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz", + "integrity": "sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==" + }, "cacheable-request": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-2.1.4.tgz", - "integrity": "sha1-DYCIAbY0KtM8kd+dC0TcCbkeXD0=", - "requires": { - "clone-response": "1.0.2", - "get-stream": "3.0.0", - "http-cache-semantics": "3.8.1", - "keyv": "3.0.0", - "lowercase-keys": "1.0.0", - "normalize-url": "2.0.1", - "responselike": "1.0.2" + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/cacheable-request/-/cacheable-request-7.0.2.tgz", + "integrity": "sha512-pouW8/FmiPQbuGpkXQ9BAPv/Mo5xDGANgSNXzTzJ8DrKGuXOssM4wIQRjfanNRh3Yu5cfYPvcorqbhg2KIJtew==", + "requires": { + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "dependencies": { "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "lowercase-keys": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.0.tgz", - "integrity": "sha1-TjNms55/VFfjXxMkvfb4jQv8cwY=" - }, - "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", + "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.1", - "sort-keys": "2.0.0" + "pump": "^3.0.0" } + }, + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==" } } }, + "call-bind": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.2.tgz", + "integrity": "sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "get-intrinsic": "^1.0.2" + } + }, "call-me-maybe": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", @@ -3509,7 +4096,7 @@ "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", "dev": true, "requires": { - "callsites": "2.0.0" + "callsites": "^2.0.0" }, "dependencies": { "callsites": { @@ -3527,7 +4114,7 @@ "dev": true, "optional": true, "requires": { - "callsites": "0.2.0" + "callsites": "^0.2.0" } }, "callsites": { @@ -3543,31 +4130,34 @@ "integrity": "sha1-yjw2iKTpzzpM2nd9xNy8cTJJz3M=", "dev": true, "requires": { - "no-case": "2.3.2", - "upper-case": "1.1.3" + "no-case": "^2.2.0", + "upper-case": "^1.1.1" } }, "camelcase": { "version": "5.3.1", "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", - "dev": true + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==" }, "camelcase-keys": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", - "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", - "dev": true, + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", + "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "requires": { - "camelcase": "2.1.1", - "map-obj": "1.0.1" + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" }, "dependencies": { - "camelcase": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", - "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", - "dev": true + "map-obj": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", + "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==" + }, + "quick-lru": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", + "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==" } } }, @@ -3577,16 +4167,16 @@ "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", "dev": true, "requires": { - "browserslist": "4.6.0", - "caniuse-lite": "1.0.30000971", - "lodash.memoize": "4.1.2", - "lodash.uniq": "4.5.0" + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" } }, "caniuse-lite": { - "version": "1.0.30000971", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000971.tgz", - "integrity": "sha512-TQFYFhRS0O5rdsmSbF1Wn+16latXYsQJat66f7S7lizXW1PVpWJeZw9wqqVLIjuxDRz7s7xRUj13QCfd8hKn6g==", + "version": "1.0.30001479", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001479.tgz", + "integrity": "sha512-6nuRFim5dx8Eu2tO+KJ9PiBdPHs7WB5Hdf+klDcyefyEuOAcfhihIv7pS+JFknJLUiNQbm1AJYKm0c9QOlQS/Q==", "dev": true }, "capture-exit": { @@ -3595,7 +4185,7 @@ "integrity": "sha1-HF/MSJ/QqwDU8ax64QcuMXP7q28=", "dev": true, "requires": { - "rsvp": "3.6.2" + "rsvp": "^3.3.3" } }, "case-sensitive-paths-webpack-plugin": { @@ -3615,9 +4205,9 @@ "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "requires": { - "ansi-styles": "3.2.1", - "escape-string-regexp": "1.0.5", - "supports-color": "5.5.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" } }, "chardet": { @@ -3632,8 +4222,8 @@ "resolved": "https://registry.npmjs.org/chart.js/-/chart.js-2.9.4.tgz", "integrity": "sha512-B07aAzxcrikjAPyV+01j7BmOpxtQETxTSlQ26BEYJ+3iUkbNKaOJ/nDbT6JjyqYxseM0ON12COHYdU2cTIjC7A==", "requires": { - "chartjs-color": "2.4.1", - "moment": "2.24.0" + "chartjs-color": "^2.1.0", + "moment": "^2.10.2" } }, "chartjs-color": { @@ -3641,8 +4231,8 @@ "resolved": "https://registry.npmjs.org/chartjs-color/-/chartjs-color-2.4.1.tgz", "integrity": "sha512-haqOg1+Yebys/Ts/9bLo/BqUcONQOdr/hoEr2LLTRl6C5LXctUdHxsCYfvQVg5JIxITrfCNUDr4ntqmQk9+/0w==", "requires": { - "chartjs-color-string": "0.6.0", - "color-convert": "1.9.3" + "chartjs-color-string": "^0.6.0", + "color-convert": "^1.9.3" } }, "chartjs-color-string": { @@ -3650,7 +4240,7 @@ "resolved": "https://registry.npmjs.org/chartjs-color-string/-/chartjs-color-string-0.6.0.tgz", "integrity": "sha512-TIB5OKn1hPJvO7JcteW4WY/63v6KwEdt6udfnDE9iCAZgy+V4SrbSxoIbTw/xkUIapjEI4ExGtD0+6D3KyFd7A==", "requires": { - "color-name": "1.1.3" + "color-name": "^1.0.0" } }, "check-types": { @@ -3660,23 +4250,36 @@ "dev": true }, "chokidar": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.6.tgz", - "integrity": "sha512-V2jUo67OKkc6ySiRpJrjlpJKl9kDuG+Xb8VgsGzb+aEouhgS1D0weyPU4lEzdAcsCAvrih2J2BqyXqHWvVLw5g==", - "dev": true, - "requires": { - "anymatch": "2.0.0", - "async-each": "1.0.3", - "braces": "2.3.2", - "fsevents": "1.2.9", - "glob-parent": "3.1.0", - "inherits": "2.0.3", - "is-binary-path": "1.0.1", - "is-glob": "4.0.1", - "normalize-path": "3.0.0", - "path-is-absolute": "1.0.1", - "readdirp": "2.2.1", - "upath": "1.1.2" + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-2.1.8.tgz", + "integrity": "sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==", + "dev": true, + "requires": { + "anymatch": "^2.0.0", + "async-each": "^1.0.1", + "braces": "^2.3.2", + "fsevents": "^1.2.7", + "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" + }, + "dependencies": { + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + } } }, "chownr": { @@ -3691,7 +4294,7 @@ "integrity": "sha512-9e/zx1jw7B4CO+c/RXoCsfg/x1AfUBioy4owYH0bJprEYAx5hRFLRhWBqHAG57D0ZM4H7vxbP7bPe0VwhQRYDQ==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "ci-info": { @@ -3706,8 +4309,8 @@ "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "circular-json": { @@ -3723,10 +4326,10 @@ "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "define-property": "0.2.5", - "isobject": "3.0.1", - "static-extend": "0.1.2" + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" }, "dependencies": { "define-property": { @@ -3735,7 +4338,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -3746,7 +4349,7 @@ "integrity": "sha512-4ZxI6dy4lrY6FHzfiy1aEOXgu4LIsW2MhwG0VBKdcoGoH/XLFgaHSdLTGr4O8Be6A8r3MOphEiI8Gc1n0ecf3g==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "~0.6.0" }, "dependencies": { "source-map": { @@ -3763,188 +4366,183 @@ "integrity": "sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU=", "dev": true, "requires": { - "restore-cursor": "2.0.0" + "restore-cursor": "^2.0.0" } }, "cli-highlight": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.1.tgz", - "integrity": "sha512-0y0VlNmdD99GXZHYnvrQcmHxP8Bi6T00qucGgBgGv4kJ0RyDthNnnFPupHV7PYv/OXSVk+azFbOeaW6+vGmx9A==", + "version": "2.1.11", + "resolved": "https://registry.npmjs.org/cli-highlight/-/cli-highlight-2.1.11.tgz", + "integrity": "sha512-9KDcoEVwyUXrjcJNvHD0NFc/hiwe/WPVYIleQh2O1N2Zro5gWJZ/K+3DGn8w8P/F6FxOgzyC5bxDyHIgCSPhGg==", "dev": true, "requires": { - "chalk": "2.4.2", - "highlight.js": "9.15.6", - "mz": "2.7.0", - "parse5": "4.0.0", - "yargs": "13.2.4" + "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" }, "dependencies": { - "cliui": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", - "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { - "string-width": "3.1.0", - "strip-ansi": "5.2.0", - "wrap-ansi": "5.1.0" + "color-convert": "^2.0.1" } }, - "find-up": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", - "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { - "locate-path": "3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" } }, - "get-caller-file": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", - "dev": true - }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", - "dev": true - }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", "dev": true, "requires": { - "invert-kv": "2.0.0" + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" } }, - "locate-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", - "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "color-name": "~1.1.4" } }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "2.1.0", - "p-is-promise": "2.1.0" - } + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.3.0" - } + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, - "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "highlight.js": { + "version": "10.7.3", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-10.7.3.tgz", + "integrity": "sha512-tzcUFauisWKNHaRkN4Wjl/ZA07gENAjFl3J/c480dprkGTg5EQstgaNFqBfUqCq54kZRIEcreTsAgF/m2quD7A==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "parse5": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.1.tgz", + "integrity": "sha512-ugq4DFI0Ptb+WWjAdOK16+u/nHfiIrcE+sh8kZMaM0WllQKLI9rOUq6c2b7cwPkXdzfQESqvoqK6ug7U/Yyzug==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", "dev": true, "requires": { - "p-try": "2.2.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" } }, - "p-locate": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", - "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", "dev": true, "requires": { - "p-limit": "2.2.0" + "ansi-regex": "^5.0.1" } }, - "p-try": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", - "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", - "dev": true - }, - "require-main-filename": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", - "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", - "dev": true - }, - "string-width": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", - "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "has-flag": "^4.0.0" } }, "wrap-ansi": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", - "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "string-width": "3.1.0", - "strip-ansi": "5.2.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" } }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, "yargs": { - "version": "13.2.4", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.2.4.tgz", - "integrity": "sha512-HG/DWAJa1PAnHT9JAhNa8AbAv3FPaiLzioSjCcmuXXhP8MlpHO5vwls4g4j6n30Z74GVQj8Xa62dWVx1QCGklg==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { - "cliui": "5.0.0", - "find-up": "3.0.0", - "get-caller-file": "2.0.5", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "2.0.0", - "set-blocking": "2.0.0", - "string-width": "3.1.0", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "13.1.0" + "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" } }, "yargs-parser": { - "version": "13.1.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.0.tgz", - "integrity": "sha512-Yq+32PrijHRri0vVKQEm+ys8mbqWjLiwQkMFNXEENutzLPP0bE4Lcd4iA3OQY5HF+GD3xXxf0MEHb8E4/SA3AA==", - "dev": true, - "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" - } + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "dev": true } } }, "cli-spinners": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.1.0.tgz", - "integrity": "sha512-8B00fJOEh1HPrx4fo5eW16XmE1PcL1tGpGrxy63CXGP9nHdPBN63X75hA1zhvQuhVztJWLqV58Roj2qlNM7cAA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/cli-spinners/-/cli-spinners-2.8.0.tgz", + "integrity": "sha512-/eG5sJcvEIwxcdYM86k5tPwn0MUzkX5YY3eImTGpJOZgVe4SdTMY14vQpcxgBzJ0wXwAYrS8E+c3uHeK4JNyzQ==", "dev": true }, "cli-width": { @@ -3959,8 +4557,8 @@ "integrity": "sha512-XbVjHMsss0giNUkp/tV/3eEAZe8i1fZTLzmPKqjE1RGIAWOTiF5D014f6R+g53ZAq0IK3cPrJXFvqE8eQjhFYQ==", "dev": true, "requires": { - "arch": "2.1.1", - "execa": "1.0.0" + "arch": "^2.1.1", + "execa": "^1.0.0" } }, "cliui": { @@ -3969,15 +4567,15 @@ "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", "dev": true, "requires": { - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "wrap-ansi": "2.1.0" + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { @@ -3986,7 +4584,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -3998,34 +4596,22 @@ "dev": true }, "clone-deep": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-2.0.2.tgz", - "integrity": "sha512-SZegPTKjCgpQH63E+eN6mVEEPdQBOUzjyJm5Pora4lrwWRFS8I0QAxV/KD6vV/i0WuijHZWQC1fMsPEdxfdVCQ==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/clone-deep/-/clone-deep-4.0.1.tgz", + "integrity": "sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==", "dev": true, "requires": { - "for-own": "1.0.0", - "is-plain-object": "2.0.4", - "kind-of": "6.0.2", - "shallow-clone": "1.0.0" - }, - "dependencies": { - "for-own": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/for-own/-/for-own-1.0.0.tgz", - "integrity": "sha1-xjMy9BXO3EsE2/5wz4NklMU8tEs=", - "dev": true, - "requires": { - "for-in": "1.0.2" - } - } + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" } }, "clone-response": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.2.tgz", - "integrity": "sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/clone-response/-/clone-response-1.0.3.tgz", + "integrity": "sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==", "requires": { - "mimic-response": "1.0.1" + "mimic-response": "^1.0.0" } }, "co": { @@ -4040,9 +4626,9 @@ "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", "dev": true, "requires": { - "@types/q": "1.5.2", - "chalk": "2.4.2", - "q": "1.5.1" + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" } }, "code-point-at": { @@ -4057,8 +4643,8 @@ "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", "dev": true, "requires": { - "map-visit": "1.0.0", - "object-visit": "1.0.1" + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" } }, "color": { @@ -4067,8 +4653,8 @@ "integrity": "sha512-PvUltIXRjehRKPSy89VnDWFKY58xyhTLyxIg21vwQBI6qLwZNPmC8k3C1uytIgFKEpOIzN4y32iPm8231zFHIg==", "dev": true, "requires": { - "color-convert": "1.9.3", - "color-string": "1.5.3" + "color-convert": "^1.9.1", + "color-string": "^1.5.2" } }, "color-convert": { @@ -4085,22 +4671,21 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "color-string": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.5.3.tgz", - "integrity": "sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", + "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, "requires": { - "color-name": "1.1.3", - "simple-swizzle": "0.2.2" + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" } }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", - "dev": true, "requires": { - "delayed-stream": "1.0.0" + "delayed-stream": "~1.0.0" } }, "commander": { @@ -4127,7 +4712,7 @@ "integrity": "sha512-BGHeLCK1GV7j1bSmQQAi26X+GgWcTjLr/0tzSvMCl3LH1w1IJ4PFSPoV5316b30cneTziC+B1a+3OjoSUcQYmw==", "dev": true, "requires": { - "mime-db": "1.40.0" + "mime-db": ">= 1.40.0 < 2" } }, "compression": { @@ -4136,13 +4721,13 @@ "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.5", "bytes": "3.0.0", - "compressible": "2.0.17", + "compressible": "~2.0.16", "debug": "2.6.9", - "on-headers": "1.0.2", + "on-headers": "~1.0.2", "safe-buffer": "5.1.2", - "vary": "1.1.2" + "vary": "~1.1.2" }, "dependencies": { "bytes": { @@ -4180,10 +4765,10 @@ "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" } }, "condense-newlines": { @@ -4192,9 +4777,9 @@ "integrity": "sha1-PemFVTE5R10yUCyDsC9gaE0kxV8=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-whitespace": "0.3.0", - "kind-of": "3.2.2" + "extend-shallow": "^2.0.1", + "is-whitespace": "^0.3.0", + "kind-of": "^3.0.2" }, "dependencies": { "extend-shallow": { @@ -4203,7 +4788,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "kind-of": { @@ -4212,7 +4797,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -4223,8 +4808,8 @@ "integrity": "sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA==", "dev": true, "requires": { - "ini": "1.3.5", - "proto-list": "1.2.4" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, "connect-history-api-fallback": { @@ -4234,9 +4819,9 @@ "dev": true }, "consola": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/consola/-/consola-2.7.1.tgz", - "integrity": "sha512-u7JYs+HnMbZPD2cEuS1XHsLeqtazA0kd5lAk8r8DnnGdgNhOdb7DSubJ+QLdQkbtpmmxgp7gs8Ug44sCyY4FCQ==" + "version": "2.15.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-2.15.3.tgz", + "integrity": "sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==" }, "console-browserify": { "version": "1.1.0", @@ -4244,13 +4829,13 @@ "integrity": "sha1-8CQcRXMKn8YyOyBtvzjtx0HQuxA=", "dev": true, "requires": { - "date-now": "0.1.4" + "date-now": "^0.1.4" } }, "console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", - "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "integrity": "sha512-ty/fTekppD2fIwRvnZAVdeOiGd1c7YXEixbgJTNzqcxJWKQnjJ/V1bNEEE6hygpM3WjwHFUVK6HTjWSzV4a8sQ==", "dev": true }, "consolidate": { @@ -4259,7 +4844,7 @@ "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", "dev": true, "requires": { - "bluebird": "3.5.5" + "bluebird": "^3.1.1" } }, "constants-browserify": { @@ -4275,18 +4860,26 @@ "dev": true }, "content-disposition": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "5.2.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + } } }, "content-type": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", - "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", "dev": true }, "convert-source-map": { @@ -4295,13 +4888,13 @@ "integrity": "sha512-eFu7XigvxdZ1ETfbgPBohgyQ/Z++C0eEhTor0qRwBw9unw+L0/6V8wkSuGgzdThkiS5lSpdptOQPD8Ak40a+7A==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.1" } }, "cookie": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", + "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", "dev": true }, "cookie-signature": { @@ -4316,12 +4909,12 @@ "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==", "dev": true, "requires": { - "aproba": "1.2.0", - "fs-write-stream-atomic": "1.0.10", - "iferr": "0.1.5", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "aproba": "^1.1.1", + "fs-write-stream-atomic": "^1.0.8", + "iferr": "^0.1.5", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.4", + "run-queue": "^1.0.0" } }, "copy-descriptor": { @@ -4336,60 +4929,25 @@ "integrity": "sha512-Y+SQCF+0NoWQryez2zXn5J5knmr9z/9qSQt7fbL78u83rxmigOy8X5+BFn8CFSuX+nKT8gpYwJX68ekqtQt6ZA==", "dev": true, "requires": { - "cacache": "10.0.4", - "find-cache-dir": "1.0.0", - "globby": "7.1.1", - "is-glob": "4.0.1", - "loader-utils": "1.2.3", - "minimatch": "3.0.4", - "p-limit": "1.3.0", - "serialize-javascript": "1.7.0" + "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" }, "dependencies": { - "cacache": { - "version": "10.0.4", - "resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.4.tgz", - "integrity": "sha512-Dph0MzuH+rTQzGPNT9fAnrPmMmjKfST6trxJeK7NQuHRaVw24VzPRWTmg9MpcwOVQZO0E1FBICUlFeNaKPIfHA==", - "dev": true, - "requires": { - "bluebird": "3.5.5", - "chownr": "1.1.1", - "glob": "7.1.4", - "graceful-fs": "4.1.15", - "lru-cache": "4.1.5", - "mississippi": "2.0.0", - "mkdirp": "0.5.1", - "move-concurrently": "1.0.1", - "promise-inflight": "1.0.1", - "rimraf": "2.6.3", - "ssri": "5.3.0", - "unique-filename": "1.1.1", - "y18n": "4.0.0" - } - }, "find-cache-dir": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/find-cache-dir/-/find-cache-dir-1.0.0.tgz", "integrity": "sha1-kojj6ePMN0hxfTnq3hfPcfww7m8=", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "1.3.0", - "pkg-dir": "2.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^2.0.0" } }, "globby": { @@ -4398,22 +4956,12 @@ "integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=", "dev": true, "requires": { - "array-union": "1.0.2", - "dir-glob": "2.2.2", - "glob": "7.1.4", - "ignore": "3.3.10", - "pify": "3.0.0", - "slash": "1.0.0" - } - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "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" } }, "make-dir": { @@ -4422,25 +4970,7 @@ "integrity": "sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ==", "dev": true, "requires": { - "pify": "3.0.0" - } - }, - "mississippi": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", - "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "2.0.1", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "pify": "^3.0.0" } }, "pify": { @@ -4455,17 +4985,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" - } - }, - "pump": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", - "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", - "dev": true, - "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "find-up": "^2.1.0" } }, "slash": { @@ -4473,33 +4993,29 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", "dev": true - }, - "ssri": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", - "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", - "dev": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true } } }, "core-js": { - "version": "2.6.8", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.8.tgz", - "integrity": "sha512-RWlREFU74TEkdXzyl1bka66O3kYp8jeTXrvJZDzVVMH8AiHUSOFpL1yfhQJ+wHocAm1m+4971W1PPzfLuCv1vg==" + "version": "2.6.12", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-2.6.12.tgz", + "integrity": "sha512-Kb2wC0fvsWfQrgk8HU5lW6U/Lcs8+9aaYcy4ZFc6DDlo4nZ7n70dEgE5rtR0oG6ufKDUnrwfWL1mXR5ljDatrQ==", + "dev": true + }, + "core-js-compat": { + "version": "3.30.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.30.1.tgz", + "integrity": "sha512-d690npR7MC6P0gq4npTl5n2VQeNAmUrJ90n+MHiKS7W2+xno4o3F5GDEuylSdi6EJ3VssibSGXOa1r3YXD3Mhw==", + "dev": true, + "requires": { + "browserslist": "^4.21.5" + } }, "core-util-is": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", - "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=" + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true }, "cosmiconfig": { "version": "5.2.1", @@ -4507,10 +5023,10 @@ "integrity": "sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA==", "dev": true, "requires": { - "import-fresh": "2.0.0", - "is-directory": "0.3.1", - "js-yaml": "3.13.1", - "parse-json": "4.0.0" + "import-fresh": "^2.0.0", + "is-directory": "^0.3.1", + "js-yaml": "^3.13.1", + "parse-json": "^4.0.0" }, "dependencies": { "parse-json": { @@ -4519,8 +5035,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } } } @@ -4531,8 +5047,8 @@ "integrity": "sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw==", "dev": true, "requires": { - "bn.js": "4.11.8", - "elliptic": "6.4.1" + "bn.js": "^4.1.0", + "elliptic": "^6.0.0" } }, "create-hash": { @@ -4541,11 +5057,11 @@ "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "inherits": "2.0.3", - "md5.js": "1.3.5", - "ripemd160": "2.0.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.1", + "inherits": "^2.0.1", + "md5.js": "^1.3.4", + "ripemd160": "^2.0.1", + "sha.js": "^2.4.0" } }, "create-hmac": { @@ -4554,12 +5070,12 @@ "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", "dev": true, "requires": { - "cipher-base": "1.0.4", - "create-hash": "1.2.0", - "inherits": "2.0.3", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "cipher-base": "^1.0.3", + "create-hash": "^1.1.0", + "inherits": "^2.0.1", + "ripemd160": "^2.0.0", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "cross-spawn": { @@ -4568,11 +5084,11 @@ "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", "dev": true, "requires": { - "nice-try": "1.0.5", - "path-key": "2.0.1", - "semver": "5.7.0", - "shebang-command": "1.2.0", - "which": "1.3.1" + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "crypto-browserify": { @@ -4581,17 +5097,17 @@ "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", "dev": true, "requires": { - "browserify-cipher": "1.0.1", - "browserify-sign": "4.0.4", - "create-ecdh": "4.0.3", - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "diffie-hellman": "5.0.3", - "inherits": "2.0.3", - "pbkdf2": "3.0.17", - "public-encrypt": "4.0.3", - "randombytes": "2.1.0", - "randomfill": "1.0.4" + "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" } }, "css": { @@ -4600,10 +5116,10 @@ "integrity": "sha512-oUnjmWpy0niI3x/mPL8dVEI1l7MnG3+HHyRPHf+YFSbK+svOhXpmSOcDURUh2aOCgl2grzrOPt1nHLuCVFULLw==", "dev": true, "requires": { - "inherits": "2.0.3", - "source-map": "0.6.1", - "source-map-resolve": "0.5.2", - "urix": "0.1.0" + "inherits": "^2.0.3", + "source-map": "^0.6.1", + "source-map-resolve": "^0.5.2", + "urix": "^0.1.0" }, "dependencies": { "source-map": { @@ -4626,8 +5142,8 @@ "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", "dev": true, "requires": { - "postcss": "7.0.16", - "timsort": "0.3.0" + "postcss": "^7.0.1", + "timsort": "^0.3.0" } }, "css-loader": { @@ -4636,18 +5152,18 @@ "integrity": "sha512-+ZHAZm/yqvJ2kDtPne3uX0C+Vr3Zn5jFn2N4HywtS5ujwvsVkyg0VArEXpl3BgczDA8anieki1FIzhchX4yrDw==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "css-selector-tokenizer": "0.7.1", - "icss-utils": "2.1.0", - "loader-utils": "1.2.3", - "lodash": "4.17.15", - "postcss": "6.0.23", - "postcss-modules-extract-imports": "1.2.1", - "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.1", - "source-list-map": "2.0.1" + "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" }, "dependencies": { "postcss": { @@ -4656,9 +5172,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -4670,15 +5186,15 @@ } }, "css-select": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.0.2.tgz", - "integrity": "sha512-dSpYaDVoWaELjvZ3mS6IKZM/y2PMPa/XYoEfYNZePL4U/XgyxZNroHEHReDx/d+VgXh9VbCTtFqLkFbmeqeaRQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-2.1.0.tgz", + "integrity": "sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ==", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.3", - "domutils": "1.7.0", - "nth-check": "1.0.2" + "boolbase": "^1.0.0", + "css-what": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" } }, "css-select-base-adapter": { @@ -4693,9 +5209,9 @@ "integrity": "sha512-xYL0AMZJ4gFzJQsHUKa5jiWWi2vH77WVNg7JYRyewwj6oPh4yb/y6Y9ZCw9dsj/9UauMhtuxR+ogQd//EdEVNA==", "dev": true, "requires": { - "cssesc": "0.1.0", - "fastparse": "1.1.2", - "regexpu-core": "1.0.0" + "cssesc": "^0.1.0", + "fastparse": "^1.1.1", + "regexpu-core": "^1.0.0" }, "dependencies": { "cssesc": { @@ -4716,9 +5232,9 @@ "integrity": "sha1-hqdj9Y7k18L2sQLkdkBQ3n7ZDGs=", "dev": true, "requires": { - "regenerate": "1.4.0", - "regjsgen": "0.2.0", - "regjsparser": "0.1.5" + "regenerate": "^1.2.1", + "regjsgen": "^0.2.0", + "regjsparser": "^0.1.4" } }, "regjsgen": { @@ -4733,25 +5249,25 @@ "integrity": "sha1-fuj4Tcb6eS0/0K4ijSS9lJ6tIFw=", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" } } } }, "css-tree": { - "version": "1.0.0-alpha.28", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.28.tgz", - "integrity": "sha512-joNNW1gCp3qFFzj4St6zk+Wh/NBv0vM5YbEreZk0SD4S23S+1xBKb6cLDg2uj4P4k/GUMlIm6cKIDqIG+vdt0w==", + "version": "1.0.0-alpha.37", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.37.tgz", + "integrity": "sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg==", "dev": true, "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" + "mdn-data": "2.0.4", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -4762,16 +5278,10 @@ "integrity": "sha1-2bkoGtz9jO2TW9urqDeGiX9k6ZY=", "dev": true }, - "css-url-regex": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-url-regex/-/css-url-regex-1.1.0.tgz", - "integrity": "sha1-g4NCMMyfdMRX3lnuvRVD/uuDt+w=", - "dev": true - }, "css-what": { - "version": "2.1.3", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-2.1.3.tgz", - "integrity": "sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-3.4.2.tgz", + "integrity": "sha512-ACUm3L0/jiZTqfzRM3Hi9Q8eZqd6IK37mMWPLz9PJxkLWllYeRf+EHUSHYEtFop2Eqytaq1FizFVh7XfBnXCDQ==", "dev": true }, "csscolorparser": { @@ -4791,10 +5301,10 @@ "integrity": "sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ==", "dev": true, "requires": { - "cosmiconfig": "5.2.1", - "cssnano-preset-default": "4.0.7", - "is-resolvable": "1.1.0", - "postcss": "7.0.16" + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.7", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" } }, "cssnano-preset-default": { @@ -4803,36 +5313,36 @@ "integrity": "sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA==", "dev": true, "requires": { - "css-declaration-sorter": "4.0.1", - "cssnano-util-raw-cache": "4.0.1", - "postcss": "7.0.16", - "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.2", - "postcss-unique-selectors": "4.0.1" + "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.2", + "postcss-unique-selectors": "^4.0.1" } }, "cssnano-util-get-arguments": { @@ -4853,7 +5363,7 @@ "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "cssnano-util-same-parent": { @@ -4863,28 +5373,34 @@ "dev": true }, "csso": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/csso/-/csso-3.5.1.tgz", - "integrity": "sha512-vrqULLffYU1Q2tLdJvaCYbONStnfkfimRxXNaGjxMldI0C7JPBC4rB1RyjhfdZ4m1frm8pM9uRPKH3d2knZ8gg==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/csso/-/csso-4.2.0.tgz", + "integrity": "sha512-wvlcdIbf6pwKEk7vHj8/Bkc0B4ylXZruLvOgs9doS5eOsOpuodOV2zJChSpkp+pRpYQLQMeF04nr3Z68Sta9jA==", "dev": true, "requires": { - "css-tree": "1.0.0-alpha.29" + "css-tree": "^1.1.2" }, "dependencies": { "css-tree": { - "version": "1.0.0-alpha.29", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.0.0-alpha.29.tgz", - "integrity": "sha512-sRNb1XydwkW9IOci6iB2xmy8IGCj6r/fr+JWitvJ2JxQRPzN3T4AGGVWCMlVmVwM1gtgALJRmGIlWv5ppnGGkg==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", "dev": true, "requires": { - "mdn-data": "1.1.4", - "source-map": "0.5.7" + "mdn-data": "2.0.14", + "source-map": "^0.6.1" } }, + "mdn-data": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.14.tgz", + "integrity": "sha512-dn6wd0uw5GsdswPFfsgMp5NSB0/aDe6fK94YJV/AJDYXL6HVLWBsxeq7js7Ad+mU2K9LAlwpk6kN2D5mwCPVow==", + "dev": true + }, "source-map": { - "version": "0.5.7", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", - "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -4901,7 +5417,7 @@ "integrity": "sha512-43wY3kl1CVQSvL7wUY1qXkxVGkStjpkDmVjiIKX8R97uhajy8Bybay78uOtqvh7Q5GK75dNPfW0geWjE6qQQow==", "dev": true, "requires": { - "cssom": "0.3.6" + "cssom": "0.3.x" } }, "current-script-polyfill": { @@ -4913,15 +5429,16 @@ "currently-unhandled": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", - "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "integrity": "sha512-/fITjgjGU50vjQ4FH6eUoYu+iUoUKIXws2hL15JJpIR+BbTxaXQsMuuyjtNh2WqsSBS5nsaZHFsFecyw5CCAng==", + "dev": true, "requires": { - "array-find-index": "1.0.2" + "array-find-index": "^1.0.1" } }, "cyclist": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz", - "integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cyclist/-/cyclist-1.0.1.tgz", + "integrity": "sha512-NJGVKPS81XejHcLhaLJS7plab0fK3slPh11mESeeDq2W4ZI5kUKK/LRRdVDvjJseojbPB7ZwjnyOybg3Igea/A==", "dev": true }, "dashdash": { @@ -4930,7 +5447,7 @@ "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", "dev": true, "requires": { - "assert-plus": "1.0.0" + "assert-plus": "^1.0.0" } }, "data-urls": { @@ -4939,9 +5456,9 @@ "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", "dev": true, "requires": { - "abab": "2.0.0", - "whatwg-mimetype": "2.3.0", - "whatwg-url": "7.0.0" + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" }, "dependencies": { "whatwg-url": { @@ -4950,9 +5467,9 @@ "integrity": "sha512-37GeVSIJ3kn1JgKyjiYNmSLP1yzbpb29jdmwBSgkD9h40/hyrR/OifpVUndji3tmwGgD8qpw7iQu3RSbCrBpsQ==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } } } @@ -4969,13 +5486,23 @@ "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", "dev": true }, + "deasync": { + "version": "0.1.28", + "resolved": "https://registry.npmjs.org/deasync/-/deasync-0.1.28.tgz", + "integrity": "sha512-QqLF6inIDwiATrfROIyQtwOQxjZuek13WRYZ7donU5wJPLoP67MnYxA6QtqdvdBy2mMqv5m3UefBVdJjvevOYg==", + "dev": true, + "requires": { + "bindings": "^1.5.0", + "node-addon-api": "^1.7.1" + } + }, "debug": { "version": "3.2.6", "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "^2.1.1" } }, "decamelize": { @@ -4984,25 +5511,33 @@ "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=" }, "decamelize-keys": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", + "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", "requires": { - "decamelize": "1.2.0", - "map-obj": "1.0.1" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" } }, "decode-uri-component": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.0.tgz", - "integrity": "sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU=" + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/decode-uri-component/-/decode-uri-component-0.2.2.tgz", + "integrity": "sha512-FqUYQ+8o158GyGTrMFJms9qh3CqTKvAqgqsTnkLI8sKu0028orqBhxNMFkFen0zGyg6epACD32pjVk58ngIErQ==", + "dev": true }, "decompress-response": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-3.3.0.tgz", - "integrity": "sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M=", + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", + "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", "requires": { - "mimic-response": "1.0.1" + "mimic-response": "^3.1.0" + }, + "dependencies": { + "mimic-response": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", + "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==" + } } }, "deep-diff": { @@ -5034,8 +5569,8 @@ "integrity": "sha512-h6sMrVB1VMWVrW13mSc6ia/DwYYw5MN6+exNu1OaJeFac5aSAvwM7lZ0NVfTABuSkQelr4h5oebg3KB1XPdjgA==", "dev": true, "requires": { - "execa": "1.0.0", - "ip-regex": "2.1.0" + "execa": "^1.0.0", + "ip-regex": "^2.1.0" } }, "default-require-extensions": { @@ -5044,25 +5579,31 @@ "integrity": "sha1-836hXT4T/9m0N9M+GnW1+5eHTLg=", "dev": true, "requires": { - "strip-bom": "2.0.0" + "strip-bom": "^2.0.0" } }, "defaults": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.3.tgz", - "integrity": "sha1-xlYFHpgX2f8I7YgUd/P+QBnz730=", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/defaults/-/defaults-1.0.4.tgz", + "integrity": "sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==", "dev": true, "requires": { - "clone": "1.0.4" + "clone": "^1.0.2" } }, + "defer-to-connect": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/defer-to-connect/-/defer-to-connect-2.0.1.tgz", + "integrity": "sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==" + }, "define-properties": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", - "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.4.tgz", + "integrity": "sha512-uckOqKcfaVvtBdsVkdPv3XjveQJsNQqmhXgRi8uhvWWuPYZCNlzT8qAyblUgNoXdHdjMTzAqeGjAoli8f+bzPA==", "dev": true, "requires": { - "object-keys": "1.1.1" + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" } }, "define-property": { @@ -5071,8 +5612,8 @@ "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", "dev": true, "requires": { - "is-descriptor": "1.0.2", - "isobject": "3.0.1" + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" }, "dependencies": { "is-accessor-descriptor": { @@ -5081,7 +5622,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -5090,7 +5631,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -5099,9 +5640,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -5112,40 +5653,26 @@ "integrity": "sha512-QwGuEUouP2kVwQenAsOof5Fv8K9t3D8Ca8NxcXKrIpEHjTXK5J2nXLdP+ALI1cgv8wj7KuwBhTwBkOZSJKM5XQ==", "dev": true, "requires": { - "@types/glob": "7.1.1", - "globby": "6.1.0", - "is-path-cwd": "2.1.0", - "is-path-in-cwd": "2.1.0", - "p-map": "2.1.0", - "pify": "4.0.1", - "rimraf": "2.6.3" + "@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" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "globby": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/globby/-/globby-6.1.0.tgz", "integrity": "sha1-9abXDoOV4hyFj7BInWTfAkJNUGw=", "dev": true, "requires": { - "array-union": "1.0.2", - "glob": "7.1.4", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "array-union": "^1.0.1", + "glob": "^7.0.3", + "object-assign": "^4.0.1", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" }, "dependencies": { "pify": { @@ -5155,25 +5682,18 @@ "dev": true } } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true } } }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", - "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "integrity": "sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==", "dev": true }, "depd": { @@ -5188,14 +5708,14 @@ "integrity": "sha1-wHTS4qpqipoH29YfmhXCzYPsjsw=", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.1", + "minimalistic-assert": "^1.0.0" } }, "destroy": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.0.4.tgz", - "integrity": "sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "detect-indent": { @@ -5204,7 +5724,7 @@ "integrity": "sha1-920GQ1LN9Docts5hnE7jqUdd4gg=", "dev": true, "requires": { - "repeating": "2.0.1" + "repeating": "^2.0.0" } }, "detect-newline": { @@ -5214,9 +5734,9 @@ "dev": true }, "detect-node": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.0.4.tgz", - "integrity": "sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-node/-/detect-node-2.1.0.tgz", + "integrity": "sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==", "dev": true }, "diff": { @@ -5231,9 +5751,9 @@ "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", "dev": true, "requires": { - "bn.js": "4.11.8", - "miller-rabin": "4.0.1", - "randombytes": "2.1.0" + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.0" } }, "dir-glob": { @@ -5242,7 +5762,7 @@ "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", "dev": true, "requires": { - "path-type": "3.0.0" + "path-type": "^3.0.0" } }, "dns-equal": { @@ -5252,13 +5772,13 @@ "dev": true }, "dns-packet": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.1.tgz", - "integrity": "sha512-0UxfQkMhYAUaZI+xrNZOz/as5KgDU0M/fQ9b6SpkyLbk3GEswDi6PADJVaYJradtRVsRIlF1zLyOodbcTCDzUg==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-1.3.4.tgz", + "integrity": "sha512-BQ6F4vycLXBvdrJZ6S3gZewt6rcrks9KBgM9vrhW+knGRqc8uEdT7fuCwloc7nny5xNoMJ17HGH0R/6fpo8ECA==", "dev": true, "requires": { - "ip": "1.1.5", - "safe-buffer": "5.1.2" + "ip": "^1.1.0", + "safe-buffer": "^5.0.1" } }, "dns-txt": { @@ -5267,7 +5787,7 @@ "integrity": "sha1-uR2Ab10nGI5Ks+fRB9iBocxGQrY=", "dev": true, "requires": { - "buffer-indexof": "1.1.1" + "buffer-indexof": "^1.0.0" } }, "doctrine": { @@ -5277,7 +5797,7 @@ "dev": true, "optional": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "dom-converter": { @@ -5286,7 +5806,7 @@ "integrity": "sha512-gd3ypIPfOMr9h5jIKq8E3sHOTCjeirnl0WK5ZdS1AW0Odt0b1PaWaHdJ4Qk4klv+YB9aJBS7mESXjFoDQPu6DA==", "dev": true, "requires": { - "utila": "0.4.0" + "utila": "~0.4" } }, "dom-event-types": { @@ -5301,8 +5821,8 @@ "integrity": "sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA==", "dev": true, "requires": { - "domelementtype": "1.3.1", - "entities": "1.1.2" + "domelementtype": "^1.3.0", + "entities": "^1.1.1" } }, "domain-browser": { @@ -5323,16 +5843,24 @@ "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", "dev": true, "requires": { - "webidl-conversions": "4.0.2" + "webidl-conversions": "^4.0.2" } }, "domhandler": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-2.4.2.tgz", - "integrity": "sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dev": true, "requires": { - "domelementtype": "1.3.1" + "domelementtype": "^2.2.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + } } }, "domutils": { @@ -5341,17 +5869,17 @@ "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", "dev": true, "requires": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "dom-serializer": "0", + "domelementtype": "1" } }, "dot-prop": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.0.tgz", - "integrity": "sha512-tUMXrxlExSW6U2EXiiKGSBVdYgtV8qlHL+C10TsW4PURY/ic+eaysnSkwB4kA/mBlCyy/IKDJ+Lc3wbWeaXtuQ==", + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-4.2.1.tgz", + "integrity": "sha512-l0p4+mIuJIua0mhxGoh4a+iNL9bmeK5DvnSVQa6T0OhrVmaEa1XScX5Etc673FePCJOArq/4Pa2cLGODUWTPOQ==", "dev": true, "requires": { - "is-obj": "1.0.1" + "is-obj": "^1.0.0" } }, "dotenv": { @@ -5372,21 +5900,16 @@ "integrity": "sha1-rOb/gIwc5mtX0ev5eXessCM0z8E=", "dev": true }, - "duplexer3": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", - "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=" - }, "duplexify": { "version": "3.7.1", "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "stream-shift": "1.0.0" + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" } }, "earcut": { @@ -5395,9 +5918,9 @@ "integrity": "sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ==" }, "easy-stack": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.0.tgz", - "integrity": "sha1-EskbMIWjfwuqM26UhurEv5Tj54g=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/easy-stack/-/easy-stack-1.0.1.tgz", + "integrity": "sha512-wK2sCs4feiiJeFXn3zvY0p41mdU5VUgbgs1rNsc/y5ngFUijdWd+iIN8eoyuZHKB8xN6BL4PdWmzqFmxNg6V2w==", "dev": true }, "ecc-jsbn": { @@ -5406,8 +5929,8 @@ "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", "dev": true, "requires": { - "jsbn": "0.1.1", - "safer-buffer": "2.1.2" + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" } }, "editorconfig": { @@ -5416,10 +5939,10 @@ "integrity": "sha512-M9wIMFx96vq0R4F+gRpY3o2exzb8hEj/n9S8unZtHSvYjibBp/iMufSzvmOcV/laG0ZtuTVGtiJggPOSW2r93g==", "dev": true, "requires": { - "commander": "2.20.0", - "lru-cache": "4.1.5", - "semver": "5.7.0", - "sigmund": "1.0.1" + "commander": "^2.19.0", + "lru-cache": "^4.1.5", + "semver": "^5.6.0", + "sigmund": "^1.0.1" }, "dependencies": { "lru-cache": { @@ -5428,8 +5951,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "yallist": { @@ -5447,30 +5970,38 @@ "dev": true }, "ejs": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.6.1.tgz", - "integrity": "sha512-0xy4A/twfrRCnkhfk8ErDi5DqdAsAqeGxht4xkCUrsvhhbQNs7E+4jV0CN7+NKIY0aHE72+XvqtBIXzD31ZbXQ==", + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-2.7.4.tgz", + "integrity": "sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA==", "dev": true }, "electron-to-chromium": { - "version": "1.3.137", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.137.tgz", - "integrity": "sha512-kGi32g42a8vS/WnYE7ELJyejRT7hbr3UeOOu0WeuYuQ29gCpg9Lrf6RdcTQVXSt/v0bjCfnlb/EWOOsiKpTmkw==", + "version": "1.4.365", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.365.tgz", + "integrity": "sha512-FRHZO+1tUNO4TOPXmlxetkoaIY8uwHzd1kKopK/Gx2SKn1L47wJXWD44wxP5CGRyyP98z/c8e1eBzJrgPeiBOg==", "dev": true }, "elliptic": { - "version": "6.4.1", - "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.4.1.tgz", - "integrity": "sha512-BsXLz5sqX8OHcsh7CqBMztyXARmGQ3LWPtGjJi6DiJHq5C/qvi9P3OqgswKSDftbu8+IoI/QDTAm2fFnQ9SZSQ==", - "dev": true, - "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0", - "hash.js": "1.1.7", - "hmac-drbg": "1.0.1", - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "version": "6.5.4", + "resolved": "https://registry.npmjs.org/elliptic/-/elliptic-6.5.4.tgz", + "integrity": "sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + } } }, "emoji-regex": { @@ -5495,20 +6026,8 @@ "version": "1.4.1", "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.1.tgz", "integrity": "sha512-1MkrZNvWTKCaigbn+W15elq2BB/L22nqrSY5DKlo3X6+vclJm8Bb5djXJBmEX6fS3+zCh/F4VBK5Z2KxJt4s2Q==", - "dev": true, "requires": { - "once": "1.4.0" - } - }, - "enhanced-resolve": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.1.0.tgz", - "integrity": "sha512-F/7vkyTtyc/llOIn8oWclcB25KdRaiPBpZYDgJHgh/UHtpgT2p2eldQgtQnLtUvfMKPKxbRaQM/hHkvLHt1Vng==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "memory-fs": "0.4.1", - "tapable": "1.1.3" + "once": "^1.4.0" } }, "entities": { @@ -5523,7 +6042,7 @@ "integrity": "sha512-MfrRBDWzIWifgq6tJj60gkAwtLNb6sQPlcFrSOflcP1aFmmruKQ2wRnze/8V6kgyz7H3FF8Npzv78mZ7XLLflg==", "dev": true, "requires": { - "prr": "1.0.1" + "prr": "~1.0.1" } }, "error-ex": { @@ -5531,7 +6050,7 @@ "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "requires": { - "is-arrayish": "0.2.1" + "is-arrayish": "^0.2.1" } }, "error-stack-parser": { @@ -5540,34 +6059,78 @@ "integrity": "sha512-E1fPutRDdIj/hohG0UpT5mayXNCxXP9d+snxFsPU9X0XgccOumKraa3juDMwTUyi7+Bu5+mCGagjg4IYeNbOdw==", "dev": true, "requires": { - "stackframe": "1.0.4" + "stackframe": "^1.0.4" } }, "es-abstract": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.13.0.tgz", - "integrity": "sha512-vDZfg/ykNxQVwup/8E1BZhVzFfBxs9NqMzGcvIJrqg5k2/5Za2bWo40dK2J1pgLngZ7c+Shh8lwYtLGyrwPutg==", + "version": "1.21.1", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.21.1.tgz", + "integrity": "sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "function.prototype.name": "^1.1.5", + "get-intrinsic": "^1.1.3", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has": "^1.0.3", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "internal-slot": "^1.0.4", + "is-array-buffer": "^3.0.1", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.10", + "is-weakref": "^1.0.2", + "object-inspect": "^1.12.2", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.4.3", + "safe-regex-test": "^1.0.0", + "string.prototype.trimend": "^1.0.6", + "string.prototype.trimstart": "^1.0.6", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.9" + } + }, + "es-set-tostringtag": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz", + "integrity": "sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==", "dev": true, "requires": { - "es-to-primitive": "1.2.0", - "function-bind": "1.1.1", - "has": "1.0.3", - "is-callable": "1.1.4", - "is-regex": "1.0.4", - "object-keys": "1.1.1" + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "has-tostringtag": "^1.0.0" } }, "es-to-primitive": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.0.tgz", - "integrity": "sha512-qZryBOJjV//LaxLTV6UC//WewneB3LcXOL9NP++ozKVXsIIIpm/2c13UDiD9Jp2eThsecw9m3jPqDwTyobcdbg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", + "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", "dev": true, "requires": { - "is-callable": "1.1.4", - "is-date-object": "1.0.1", - "is-symbol": "1.0.2" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" } }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-html": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", @@ -5585,11 +6148,11 @@ "integrity": "sha512-JwiqFD9KdGVVpeuRa68yU3zZnBEOcPs0nKW7wZzXky8Z7tffdYUHbe11bPCV5jYlK6DVdKLWLm0f5I/QlL0Kmw==", "dev": true, "requires": { - "esprima": "3.1.3", - "estraverse": "4.2.0", - "esutils": "2.0.2", - "optionator": "0.8.2", - "source-map": "0.6.1" + "esprima": "^3.1.3", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" }, "dependencies": { "esprima": { @@ -5613,48 +6176,48 @@ "integrity": "sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg==", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "ajv": "6.10.0", - "chalk": "2.4.2", - "cross-spawn": "6.0.5", - "debug": "4.1.1", - "doctrine": "3.0.0", - "eslint-scope": "4.0.3", - "eslint-utils": "1.4.2", - "eslint-visitor-keys": "1.0.0", - "espree": "5.0.1", - "esquery": "1.0.1", - "esutils": "2.0.2", - "file-entry-cache": "5.0.1", - "functional-red-black-tree": "1.0.1", - "glob": "7.1.4", - "globals": "11.12.0", - "ignore": "4.0.6", - "import-fresh": "3.0.0", - "imurmurhash": "0.1.4", - "inquirer": "6.3.1", - "js-yaml": "3.13.1", - "json-stable-stringify-without-jsonify": "1.0.1", - "levn": "0.3.0", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "optionator": "0.8.2", - "path-is-inside": "1.0.2", - "progress": "2.0.3", - "regexpp": "2.0.1", - "semver": "5.7.0", - "strip-ansi": "4.0.0", - "strip-json-comments": "2.0.1", - "table": "5.4.0", - "text-table": "0.2.0" + "@babel/code-frame": "^7.0.0", + "ajv": "^6.9.1", + "chalk": "^2.1.0", + "cross-spawn": "^6.0.5", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "eslint-scope": "^4.0.3", + "eslint-utils": "^1.3.1", + "eslint-visitor-keys": "^1.0.0", + "espree": "^5.0.1", + "esquery": "^1.0.1", + "esutils": "^2.0.2", + "file-entry-cache": "^5.0.1", + "functional-red-black-tree": "^1.0.1", + "glob": "^7.1.2", + "globals": "^11.7.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "inquirer": "^6.2.2", + "js-yaml": "^3.13.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.3.0", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "optionator": "^0.8.2", + "path-is-inside": "^1.0.2", + "progress": "^2.0.0", + "regexpp": "^2.0.1", + "semver": "^5.5.1", + "strip-ansi": "^4.0.0", + "strip-json-comments": "^2.0.1", + "table": "^5.2.3", + "text-table": "^0.2.0" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-jsx": { @@ -5670,12 +6233,20 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "doctrine": { @@ -5684,7 +6255,7 @@ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", "dev": true, "requires": { - "esutils": "2.0.2" + "esutils": "^2.0.2" } }, "espree": { @@ -5693,9 +6264,9 @@ "integrity": "sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A==", "dev": true, "requires": { - "acorn": "6.1.1", - "acorn-jsx": "5.0.1", - "eslint-visitor-keys": "1.0.0" + "acorn": "^6.0.7", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "external-editor": { @@ -5704,9 +6275,9 @@ "integrity": "sha512-bn71H9+qWoOQKyZDo25mOMVpSmXROAsTJVVVYzrrtol3d4y+AsKjf4Iwl2Q+IuT0kFSQ1qo166UuIwqYq7mGnA==", "dev": true, "requires": { - "chardet": "0.7.0", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" } }, "file-entry-cache": { @@ -5715,7 +6286,7 @@ "integrity": "sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g==", "dev": true, "requires": { - "flat-cache": "2.0.1" + "flat-cache": "^2.0.1" } }, "flat-cache": { @@ -5724,25 +6295,11 @@ "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", "dev": true, "requires": { - "flatted": "2.0.0", + "flatted": "^2.0.0", "rimraf": "2.6.3", "write": "1.0.3" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -5755,8 +6312,8 @@ "integrity": "sha512-pOnA9tfM3Uwics+SaBLCNyZZZbK+4PTu0OPZtLlMIrv17EdBoC15S9Kn8ckJ9TZTyKb3ywNE5y1yeDxxGA7nTQ==", "dev": true, "requires": { - "parent-module": "1.0.1", - "resolve-from": "4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" } }, "inquirer": { @@ -5765,19 +6322,19 @@ "integrity": "sha512-MmL624rfkFt4TG9y/Jvmt8vdmOo836U7Y0Hxr2aFk3RelZEGX4Igk0KabWrcaaZaTv9uzglOqWh1Vly+FAWAXA==", "dev": true, "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "3.0.3", - "figures": "2.0.0", - "lodash": "4.17.15", + "ansi-escapes": "^3.2.0", + "chalk": "^2.4.2", + "cli-cursor": "^2.1.0", + "cli-width": "^2.0.0", + "external-editor": "^3.0.3", + "figures": "^2.0.0", + "lodash": "^4.17.11", "mute-stream": "0.0.7", - "run-async": "2.3.0", - "rxjs": "6.5.2", - "string-width": "2.1.1", - "strip-ansi": "5.2.0", - "through": "2.3.8" + "run-async": "^2.2.0", + "rxjs": "^6.4.0", + "string-width": "^2.1.0", + "strip-ansi": "^5.1.0", + "through": "^2.3.6" }, "dependencies": { "strip-ansi": { @@ -5786,7 +6343,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } } } @@ -5809,9 +6366,9 @@ "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "astral-regex": "1.0.0", - "is-fullwidth-code-point": "2.0.0" + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" } }, "strip-ansi": { @@ -5820,13 +6377,13 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true } } @@ -5837,10 +6394,10 @@ "integrity": "sha512-nHFDrxmbrkU7JAFKqKbDJXfzrX2UBsWmrieXFTGxiI5e4ncg3VqsZeI4EzNmX0ncp4XNGVeoxIWJXfCIXwrsvw==", "dev": true, "requires": { - "ajv": "6.10.0", - "lodash": "4.17.15", - "slice-ansi": "2.1.0", - "string-width": "3.1.0" + "ajv": "^6.9.1", + "lodash": "^4.17.11", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" }, "dependencies": { "string-width": { @@ -5849,9 +6406,9 @@ "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "emoji-regex": "7.0.3", - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "5.2.0" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, "strip-ansi": { @@ -5860,7 +6417,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } } } @@ -5871,7 +6428,7 @@ "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", "dev": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } } } @@ -5888,8 +6445,8 @@ "integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==", "dev": true, "requires": { - "debug": "2.6.9", - "resolve": "1.11.0" + "debug": "^2.6.9", + "resolve": "^1.5.0" }, "dependencies": { "debug": { @@ -5915,19 +6472,11 @@ "integrity": "sha512-rA9XiXEOilLYPOIInvVH5S/hYfyTPyxag6DZhoQOduM+3TkghAEQ3VcFO8VnX4J4qg/UIBzp72aOf/xvYmpmsg==", "dev": true, "requires": { - "loader-fs-cache": "1.0.2", - "loader-utils": "1.2.3", - "object-assign": "4.1.1", - "object-hash": "1.3.1", - "rimraf": "2.6.3" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } + "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" } }, "eslint-module-utils": { @@ -5936,8 +6485,8 @@ "integrity": "sha512-14tltLm38Eu3zS+mt0KvILC3q8jyIAH518MlG+HO0p+yK885Lb1UHTY/UgR91eOyGdmxAPb+OLoW4znqIT6Ndw==", "dev": true, "requires": { - "debug": "2.6.9", - "pkg-dir": "2.0.0" + "debug": "^2.6.8", + "pkg-dir": "^2.0.0" }, "dependencies": { "debug": { @@ -5961,7 +6510,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } } } @@ -5972,8 +6521,8 @@ "integrity": "sha512-XfFmgFdIUDgvaRAlaXUkxrRg5JSADoRC8IkKLc/cISeR3yHVMefFHQZpcyXXEUUPHfy5DwviBcrfqlyqEwlQVw==", "dev": true, "requires": { - "eslint-utils": "1.4.2", - "regexpp": "2.0.1" + "eslint-utils": "^1.3.0", + "regexpp": "^2.0.1" }, "dependencies": { "regexpp": { @@ -5990,17 +6539,17 @@ "integrity": "sha512-qeVf/UwXFJbeyLbxuY8RgqDyEKCkqV7YC+E5S5uOjAp4tOc8zj01JP3ucoBM8JcEqd1qRasJSg6LLlisirfy0Q==", "dev": true, "requires": { - "array-includes": "3.0.3", - "contains-path": "0.1.0", - "debug": "2.6.9", + "array-includes": "^3.0.3", + "contains-path": "^0.1.0", + "debug": "^2.6.9", "doctrine": "1.5.0", - "eslint-import-resolver-node": "0.3.2", - "eslint-module-utils": "2.4.0", - "has": "1.0.3", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "read-pkg-up": "2.0.0", - "resolve": "1.11.0" + "eslint-import-resolver-node": "^0.3.2", + "eslint-module-utils": "^2.4.0", + "has": "^1.0.3", + "lodash": "^4.17.11", + "minimatch": "^3.0.4", + "read-pkg-up": "^2.0.0", + "resolve": "^1.11.0" }, "dependencies": { "debug": { @@ -6018,8 +6567,8 @@ "integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=", "dev": true, "requires": { - "esutils": "2.0.2", - "isarray": "1.0.0" + "esutils": "^2.0.2", + "isarray": "^1.0.0" } }, "load-json-file": { @@ -6028,10 +6577,10 @@ "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "strip-bom": "3.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "strip-bom": "^3.0.0" } }, "ms": { @@ -6046,7 +6595,7 @@ "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", "dev": true, "requires": { - "pify": "2.3.0" + "pify": "^2.0.0" } }, "pify": { @@ -6061,9 +6610,9 @@ "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", "dev": true, "requires": { - "load-json-file": "2.0.0", - "normalize-package-data": "2.5.0", - "path-type": "2.0.0" + "load-json-file": "^2.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^2.0.0" } }, "read-pkg-up": { @@ -6072,8 +6621,8 @@ "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", "dev": true, "requires": { - "find-up": "2.1.0", - "read-pkg": "2.0.0" + "find-up": "^2.0.0", + "read-pkg": "^2.0.0" } }, "strip-bom": { @@ -6090,12 +6639,12 @@ "integrity": "sha512-ZjOjbjEi6jd82rIpFSgagv4CHWzG9xsQAVp1ZPlhRnnYxcTgENUVBvhYmkQ7GvT1QFijUSo69RaiOJKhMu6i8w==", "dev": true, "requires": { - "eslint-plugin-es": "1.4.0", - "eslint-utils": "1.4.2", - "ignore": "5.1.1", - "minimatch": "3.0.4", - "resolve": "1.11.0", - "semver": "5.7.0" + "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" }, "dependencies": { "ignore": { @@ -6124,13 +6673,13 @@ "integrity": "sha512-CtGWH7IB0DA6BZOwcV9w9q3Ri6Yuo8qMjx05SmOGJ6X6E0Yo3y9E/gQ5tuNxg2dEt30tRnBoFTbvtmW9iEoyHA==", "dev": true, "requires": { - "vue-eslint-parser": "5.0.0" + "vue-eslint-parser": "^5.0.0" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", "dev": true }, "acorn-jsx": { @@ -6140,12 +6689,20 @@ "dev": true }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "espree": { @@ -6154,9 +6711,9 @@ "integrity": "sha512-I5BycZW6FCVIub93TeVY1s7vjhP9CY6cXCznIRfiig7nRviKZYdRnj/sHEWC6A7WE9RDWOFq9+7OsWSYz8qv2w==", "dev": true, "requires": { - "acorn": "6.1.1", - "acorn-jsx": "5.0.1", - "eslint-visitor-keys": "1.0.0" + "acorn": "^6.0.2", + "acorn-jsx": "^5.0.0", + "eslint-visitor-keys": "^1.0.0" } }, "vue-eslint-parser": { @@ -6165,12 +6722,12 @@ "integrity": "sha512-JlHVZwBBTNVvzmifwjpZYn0oPWH2SgWv5dojlZBsrhablDu95VFD+hriB1rQGwbD+bms6g+rAFhQHk6+NyiS6g==", "dev": true, "requires": { - "debug": "4.1.1", - "eslint-scope": "4.0.3", - "eslint-visitor-keys": "1.0.0", - "espree": "4.1.0", - "esquery": "1.0.1", - "lodash": "4.17.15" + "debug": "^4.1.0", + "eslint-scope": "^4.0.0", + "eslint-visitor-keys": "^1.0.0", + "espree": "^4.1.0", + "esquery": "^1.0.1", + "lodash": "^4.17.11" } } } @@ -6181,8 +6738,8 @@ "integrity": "sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg==", "dev": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } }, "eslint-utils": { @@ -6191,7 +6748,7 @@ "integrity": "sha512-eAZS2sEUMlIeCjBeubdj45dmBHQwPHWyBcT1VSYB7o9x9WRRqKxyUoiXlRjyAwzN7YEzHJlYg0NmzDRWx6GP4Q==", "dev": true, "requires": { - "eslint-visitor-keys": "1.0.0" + "eslint-visitor-keys": "^1.0.0" } }, "eslint-visitor-keys": { @@ -6207,8 +6764,8 @@ "dev": true, "optional": true, "requires": { - "acorn": "5.7.3", - "acorn-jsx": "3.0.1" + "acorn": "^5.5.0", + "acorn-jsx": "^3.0.0" } }, "esquery": { @@ -6217,7 +6774,7 @@ "integrity": "sha512-SmiyZ5zIWH9VM+SRUReLS5Q8a7GxtRdxEBVZpm98rJM7Sb+A9DVCndXfkeFUd3byderg+EbDkfnevfCwynWaNA==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.0.0" } }, "esrecurse": { @@ -6226,7 +6783,7 @@ "integrity": "sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ==", "dev": true, "requires": { - "estraverse": "4.2.0" + "estraverse": "^4.1.0" } }, "estraverse": { @@ -6265,13 +6822,10 @@ "dev": true }, "eventsource": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-1.0.7.tgz", - "integrity": "sha512-4Ln17+vVT0k8aWq+t/bF5arcS3EpT9gYtW66EPacdj/mAFevznsnyoHLPy2BA8gbIQeIHoPsvwmfBftfcG//BQ==", - "dev": true, - "requires": { - "original": "1.0.2" - } + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/eventsource/-/eventsource-2.0.2.tgz", + "integrity": "sha512-IzUmBGPR3+oUG9dUeXynyNmf91/3zUSJg1lCktzKw47OXuhco54U3r9B7O4XX+Rb1Itm9OZ2b0RkTs10bICOxA==", + "dev": true }, "evp_bytestokey": { "version": "1.0.3", @@ -6279,8 +6833,8 @@ "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", "dev": true, "requires": { - "md5.js": "1.3.5", - "safe-buffer": "5.1.2" + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" } }, "exec-sh": { @@ -6289,7 +6843,7 @@ "integrity": "sha512-FIUCJz1RbuS0FKTdaAafAByGS0CPvU3R0MeHxgtl+djzCc//F8HakL8GzmVNZanasTbTAY/3DRFA0KpVqj/eAw==", "dev": true, "requires": { - "merge": "1.2.1" + "merge": "^1.2.0" } }, "execa": { @@ -6298,13 +6852,13 @@ "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", "dev": true, "requires": { - "cross-spawn": "6.0.5", - "get-stream": "4.1.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" } }, "exit": { @@ -6319,13 +6873,13 @@ "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", "dev": true, "requires": { - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "posix-character-classes": "0.1.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "debug": { @@ -6343,7 +6897,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -6352,7 +6906,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "ms": { @@ -6369,7 +6923,7 @@ "integrity": "sha1-opnv/TNf4nIeuujiV+x5ZE/IUzc=", "dev": true, "requires": { - "fill-range": "2.2.4" + "fill-range": "^2.1.0" }, "dependencies": { "fill-range": { @@ -6378,11 +6932,11 @@ "integrity": "sha512-cnrcCbj01+j2gTG921VZPnHbjmdAf8oQV/iGeV2kZxGSyfYjjTyY79ErsK1WJWMpw6DaApEX72binqJE+/d+5Q==", "dev": true, "requires": { - "is-number": "2.1.0", - "isobject": "2.1.0", - "randomatic": "3.1.1", - "repeat-element": "1.1.3", - "repeat-string": "1.6.1" + "is-number": "^2.1.0", + "isobject": "^2.0.0", + "randomatic": "^3.0.0", + "repeat-element": "^1.1.2", + "repeat-string": "^1.5.2" } }, "is-number": { @@ -6391,7 +6945,7 @@ "integrity": "sha1-Afy7s5NGOlSPL0ZszhbezknbkI8=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" } }, "isobject": { @@ -6409,7 +6963,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -6420,50 +6974,51 @@ "integrity": "sha512-dgSoOHgmtn/aDGRVFWclQyPDKl2CQRq0hmIEoUAuQs/2rn2NcvCWcSCovm6BLeuB/7EZuLGu2QfnR+qRt5OM4w==", "dev": true, "requires": { - "ansi-styles": "3.2.1", - "jest-diff": "23.6.0", - "jest-get-type": "22.4.3", - "jest-matcher-utils": "23.6.0", - "jest-message-util": "23.4.0", - "jest-regex-util": "23.3.0" + "ansi-styles": "^3.2.0", + "jest-diff": "^23.6.0", + "jest-get-type": "^22.1.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0" } }, "express": { - "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "version": "4.18.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.18.2.tgz", + "integrity": "sha512-5/PsL6iGPdfQ/lKM1UuielYgv3BUoJfz1aUwU9vHZ+J7gyvwdQXFEBIEIaxeGf0GIcreATNyBExtalisDbuMqQ==", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.8", "array-flatten": "1.1.1", - "body-parser": "1.19.0", - "content-disposition": "0.5.3", - "content-type": "1.0.4", - "cookie": "0.4.0", + "body-parser": "1.20.1", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.5.0", "cookie-signature": "1.0.6", "debug": "2.6.9", - "depd": "1.1.2", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", - "finalhandler": "1.1.2", + "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.3.0", - "parseurl": "1.3.3", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", "path-to-regexp": "0.1.7", - "proxy-addr": "2.0.5", - "qs": "6.7.0", - "range-parser": "1.2.1", - "safe-buffer": "5.1.2", - "send": "0.17.1", - "serve-static": "1.14.1", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "type-is": "1.6.18", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "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" + "vary": "~1.1.2" }, "dependencies": { "debug": { @@ -6475,6 +7030,12 @@ "ms": "2.0.0" } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", @@ -6482,9 +7043,24 @@ "dev": true }, "qs": { - "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } @@ -6501,8 +7077,8 @@ "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", "dev": true, "requires": { - "assign-symbols": "1.0.0", - "is-extendable": "1.0.1" + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -6511,7 +7087,7 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } @@ -6523,9 +7099,9 @@ "dev": true, "optional": true, "requires": { - "chardet": "0.4.2", - "iconv-lite": "0.4.24", - "tmp": "0.0.33" + "chardet": "^0.4.0", + "iconv-lite": "^0.4.17", + "tmp": "^0.0.33" } }, "extglob": { @@ -6534,14 +7110,14 @@ "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", "dev": true, "requires": { - "array-unique": "0.3.2", - "define-property": "1.0.0", - "expand-brackets": "2.1.4", - "extend-shallow": "2.0.1", - "fragment-cache": "0.2.1", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" }, "dependencies": { "define-property": { @@ -6550,7 +7126,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "extend-shallow": { @@ -6559,7 +7135,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "is-accessor-descriptor": { @@ -6568,7 +7144,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -6577,7 +7153,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -6586,9 +7162,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -6599,7 +7175,7 @@ "integrity": "sha1-HqffLnx8brmSL6COitrqSG9vj5I=", "dev": true, "requires": { - "css": "2.2.4" + "css": "^2.1.0" } }, "extsprintf": { @@ -6609,9 +7185,9 @@ "dev": true }, "fast-deep-equal": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-2.0.1.tgz", - "integrity": "sha1-ewUhjd+WZ79/Nwv3/bLLFf3Qqkk=", + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, "fast-glob": { @@ -6620,12 +7196,12 @@ "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", "dev": true, "requires": { - "@mrmlnc/readdir-enhanced": "2.2.1", - "@nodelib/fs.stat": "1.1.3", - "glob-parent": "3.1.0", - "is-glob": "4.0.1", - "merge2": "1.2.3", - "micromatch": "3.1.10" + "@mrmlnc/readdir-enhanced": "^2.2.1", + "@nodelib/fs.stat": "^1.1.2", + "glob-parent": "^3.1.0", + "is-glob": "^4.0.0", + "merge2": "^1.2.3", + "micromatch": "^3.1.10" } }, "fast-json-stable-stringify": { @@ -6647,12 +7223,12 @@ "dev": true }, "faye-websocket": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", - "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "version": "0.11.4", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.4.tgz", + "integrity": "sha512-CzbClwlXAuiRQAlUyfqPgvPoNKTckTPGfwZV4ZdAhVcP2lh9KUxJg2b5GkE7XbjKQ3YJnQ9z6D9ntLAlB+tP8g==", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "websocket-driver": ">=0.5.1" } }, "fb-watchman": { @@ -6661,7 +7237,7 @@ "integrity": "sha1-VOmr99+i8mzZsWNsWIwa/AXeXVg=", "dev": true, "requires": { - "bser": "2.0.0" + "bser": "^2.0.0" } }, "figgy-pudding": { @@ -6676,7 +7252,7 @@ "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { - "escape-string-regexp": "1.0.5" + "escape-string-regexp": "^1.0.5" } }, "file-entry-cache": { @@ -6686,17 +7262,8 @@ "dev": true, "optional": true, "requires": { - "flat-cache": "1.3.4", - "object-assign": "4.1.1" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true, - "optional": true - } + "flat-cache": "^1.2.1", + "object-assign": "^4.0.1" } }, "file-loader": { @@ -6705,8 +7272,8 @@ "integrity": "sha512-4sNIOXgtH/9WZq4NvlfU3Opn5ynUsqBwSLyM+I7UOwdGigTBYfVVQEwe/msZNX/j4pCJTIM14Fsw66Svo1oVrw==", "dev": true, "requires": { - "loader-utils": "1.2.3", - "schema-utils": "1.0.0" + "loader-utils": "^1.0.2", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -6715,13 +7282,19 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "dev": true + }, "filename-regex": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/filename-regex/-/filename-regex-2.0.1.tgz", @@ -6734,24 +7307,8 @@ "integrity": "sha1-jnVIqW08wjJ+5eZ0FocjozO7oqA=", "dev": true, "requires": { - "glob": "7.1.4", - "minimatch": "3.0.4" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.0.3", + "minimatch": "^3.0.3" } }, "filesize": { @@ -6766,10 +7323,10 @@ "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-number": "3.0.0", - "repeat-string": "1.6.1", - "to-regex-range": "2.1.1" + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" }, "dependencies": { "extend-shallow": { @@ -6778,24 +7335,24 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } }, "finalhandler": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", - "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", "dev": true, "requires": { "debug": "2.6.9", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "on-finished": "2.3.0", - "parseurl": "1.3.3", - "statuses": "1.5.0", - "unpipe": "1.0.0" + "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" }, "dependencies": { "debug": { @@ -6810,7 +7367,13 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true } } @@ -6821,8 +7384,8 @@ "integrity": "sha512-jB2CHJeqy6a820ssiqwrKMeyC6nNdmrcgkKWJWmpoxpE8RKciYJXCcXRq1h2AzCo5I5BJeN2tkGEO3hLTuePRA==", "dev": true, "requires": { - "json5": "0.5.1", - "path-exists": "3.0.0" + "json5": "^0.5.1", + "path-exists": "^3.0.0" }, "dependencies": { "json5": { @@ -6839,17 +7402,18 @@ "integrity": "sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ==", "dev": true, "requires": { - "commondir": "1.0.1", - "make-dir": "2.1.0", - "pkg-dir": "3.0.0" + "commondir": "^1.0.1", + "make-dir": "^2.0.0", + "pkg-dir": "^3.0.0" } }, "find-up": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", + "dev": true, "requires": { - "locate-path": "2.0.0" + "locate-path": "^2.0.0" } }, "flat-cache": { @@ -6859,10 +7423,10 @@ "dev": true, "optional": true, "requires": { - "circular-json": "0.3.3", - "graceful-fs": "4.1.15", - "rimraf": "2.6.3", - "write": "0.2.1" + "circular-json": "^0.3.1", + "graceful-fs": "^4.1.2", + "rimraf": "~2.6.2", + "write": "^0.2.1" } }, "flatted": { @@ -6877,17 +7441,22 @@ "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" } }, "follow-redirects": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.7.0.tgz", - "integrity": "sha512-m/pZQy4Gj287eNy94nivy5wchN3Kp+Q5WgUPNy5lJSZ3sgkVKSYV/ZChMAQVIgx1SqfZ2zBZtPA2YlXIWxxJOQ==", + "version": "1.15.5", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.5.tgz", + "integrity": "sha512-vSFWUON1B+yAw1VN4xMfxgn5fTUiaOzAJCKBwIIgT/+7CuGy9+r+5gITvP62j3RmaD5Ph65UaERdOSRGUzZtgw==" + }, + "for-each": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", + "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", "dev": true, "requires": { - "debug": "3.2.6" + "is-callable": "^1.1.3" } }, "for-in": { @@ -6902,7 +7471,7 @@ "integrity": "sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4=", "dev": true, "requires": { - "for-in": "1.0.2" + "for-in": "^1.0.1" } }, "forever-agent": { @@ -6917,15 +7486,15 @@ "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", "dev": true, "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.8", - "mime-types": "2.1.24" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" } }, "forwarded": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.1.2.tgz", - "integrity": "sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ=", + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", "dev": true }, "fragment-cache": { @@ -6934,7 +7503,7 @@ "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", "dev": true, "requires": { - "map-cache": "0.2.2" + "map-cache": "^0.2.2" } }, "fresh": { @@ -6947,9 +7516,10 @@ "version": "2.3.0", "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", + "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, "fs-extra": { @@ -6958,9 +7528,9 @@ "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "jsonfile": "4.0.0", - "universalify": "0.1.2" + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" } }, "fs-write-stream-atomic": { @@ -6969,10 +7539,10 @@ "integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "iferr": "0.1.5", - "imurmurhash": "0.1.4", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.2", + "iferr": "^0.1.5", + "imurmurhash": "^0.1.4", + "readable-stream": "1 || 2" } }, "fs.realpath": { @@ -6982,685 +7552,226 @@ "dev": true }, "fsevents": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.9.tgz", - "integrity": "sha512-oeyj2H3EjjonWcFjD5NvZNE9Rqe4UW+nQBU2HNeKw0koVLEFIhtyETyAakeAM3de7Z/SW5kcA+fZUait9EApnw==", + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "optional": true + }, + "fstream": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", + "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", "dev": true, - "optional": true, "requires": { - "nan": "2.14.0", - "node-pre-gyp": "0.12.0" + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==" + }, + "function.prototype.name": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.5.tgz", + "integrity": "sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.19.0", + "functions-have-names": "^1.2.2" + } + }, + "functional-red-black-tree": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", + "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", + "dev": true + }, + "functions-have-names": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", + "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", + "dev": true + }, + "fuzzy": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", + "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha512-14x4kjc6lkD3ltw589k0NrPD6cCNTD6CWoVUNpB85+DrtONoZn+Rug6xZU5RvSC4+TZPxA5AnBibQYAvZn41Hg==", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" }, "dependencies": { - "abbrev": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, "ansi-regex": { "version": "2.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, - "aproba": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - }, - "are-we-there-yet": { - "version": "1.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "delegates": "1.0.0", - "readable-stream": "2.3.6" - } - }, - "balanced-match": { + "is-fullwidth-code-point": { "version": "1.0.0", - "bundled": true, - "dev": true - }, - "brace-expansion": { - "version": "1.1.11", - "bundled": true, + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha512-1pqUqRjkhPJ9miNq9SwMfdvi6lBJcd6eFxvfaivQhaH3SgisfiuudvFntdKOmxuee/77l+FPjKrQjWvmPjWrRw==", "dev": true, "requires": { - "balanced-match": "1.0.0", - "concat-map": "0.0.1" + "number-is-nan": "^1.0.0" } }, - "chownr": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "code-point-at": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "concat-map": { - "version": "0.0.1", - "bundled": true, - "dev": true - }, - "console-control-strings": { - "version": "1.1.0", - "bundled": true, - "dev": true - }, - "core-util-is": { + "string-width": { "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "debug": { - "version": "4.1.1", - "bundled": true, + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha512-0XsVpQLnVCXHJfyEs8tC0zpTVIr5PKKsQtkT29IwupnPTjtPmQ3xT/4yCREF9hYkV/3M3kzcUTSAZT6a6h81tw==", "dev": true, - "optional": true, "requires": { - "ms": "2.1.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, - "deep-extend": { - "version": "0.6.0", - "bundled": true, - "dev": true, - "optional": true - }, - "delegates": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "detect-libc": { - "version": "1.0.3", - "bundled": true, - "dev": true, - "optional": true - }, - "fs-minipass": { - "version": "1.2.5", - "bundled": true, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", "dev": true, - "optional": true, "requires": { - "minipass": "2.3.5" + "ansi-regex": "^2.0.0" } - }, - "fs.realpath": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "gauge": { - "version": "2.7.4", - "bundled": true, + } + } + }, + "gaze": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", + "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", + "dev": true, + "requires": { + "globule": "^1.0.0" + } + }, + "gensync": { + "version": "1.0.0-beta.2", + "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", + "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", + "dev": true + }, + "geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" + }, + "get-caller-file": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", + "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", + "dev": true + }, + "get-intrinsic": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.3.tgz", + "integrity": "sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.3" + } + }, + "get-stdin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", + "integrity": "sha512-F5aQMywwJ2n85s4hJPTT9RPxGmubonuB10MNYo17/xph174n2MIR33HRguhzVag10O/npM7SPk73LMZNP+FaWw==", + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", + "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "get-symbol-description": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", + "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" + } + }, + "get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", + "dev": true + }, + "getpass": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", + "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "gl-matrix": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", + "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" + }, + "glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "optional": true, "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - } - }, - "glob": { - "version": "7.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "has-unicode": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "iconv-lite": { - "version": "0.4.24", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safer-buffer": "2.1.2" - } - }, - "ignore-walk": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minimatch": "3.0.4" - } - }, - "inflight": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" - } - }, - "inherits": { - "version": "2.0.3", - "bundled": true, - "dev": true - }, - "ini": { - "version": "1.3.5", - "bundled": true, - "dev": true, - "optional": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "isarray": { - "version": "1.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "minimatch": { - "version": "3.0.4", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "1.1.11" - } - }, - "minimist": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "minipass": { - "version": "2.3.5", - "bundled": true, - "dev": true, - "requires": { - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "minizlib": { - "version": "1.2.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "minipass": "2.3.5" - } - }, - "mkdirp": { - "version": "0.5.1", - "bundled": true, - "dev": true, - "requires": { - "minimist": "0.0.8" - } - }, - "ms": { - "version": "2.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "needle": { - "version": "2.3.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "debug": "4.1.1", - "iconv-lite": "0.4.24", - "sax": "1.2.4" - } - }, - "node-pre-gyp": { - "version": "0.12.0", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "detect-libc": "1.0.3", - "mkdirp": "0.5.1", - "needle": "2.3.0", - "nopt": "4.0.1", - "npm-packlist": "1.4.1", - "npmlog": "4.1.2", - "rc": "1.2.8", - "rimraf": "2.6.3", - "semver": "5.7.0", - "tar": "4.4.8" - } - }, - "nopt": { - "version": "4.0.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" - } - }, - "npm-bundled": { - "version": "1.0.6", - "bundled": true, - "dev": true, - "optional": true - }, - "npm-packlist": { - "version": "1.4.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "ignore-walk": "3.0.1", - "npm-bundled": "1.0.6" - } - }, - "npmlog": { - "version": "4.1.2", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" - } - }, - "number-is-nan": { - "version": "1.0.1", - "bundled": true, - "dev": true - }, - "object-assign": { - "version": "4.1.1", - "bundled": true, - "dev": true, - "optional": true - }, - "once": { - "version": "1.4.0", - "bundled": true, - "dev": true, - "requires": { - "wrappy": "1.0.2" - } - }, - "os-homedir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "os-tmpdir": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "osenv": { - "version": "0.1.5", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" - } - }, - "path-is-absolute": { - "version": "1.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "process-nextick-args": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "rc": { - "version": "1.2.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "deep-extend": "0.6.0", - "ini": "1.3.5", - "minimist": "1.2.0", - "strip-json-comments": "2.0.1" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "bundled": true, - "dev": true, - "optional": true - } - } - }, - "readable-stream": { - "version": "2.3.6", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" - } - }, - "rimraf": { - "version": "2.6.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "glob": "7.1.3" - } - }, - "safe-buffer": { - "version": "5.1.2", - "bundled": true, - "dev": true - }, - "safer-buffer": { - "version": "2.1.2", - "bundled": true, - "dev": true, - "optional": true - }, - "sax": { - "version": "1.2.4", - "bundled": true, - "dev": true, - "optional": true - }, - "semver": { - "version": "5.7.0", - "bundled": true, - "dev": true, - "optional": true - }, - "set-blocking": { - "version": "2.0.0", - "bundled": true, - "dev": true, - "optional": true - }, - "signal-exit": { - "version": "3.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "string-width": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "string_decoder": { - "version": "1.1.1", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "safe-buffer": "5.1.2" - } - }, - "strip-ansi": { - "version": "3.0.1", - "bundled": true, - "dev": true, - "requires": { - "ansi-regex": "2.1.1" - } - }, - "strip-json-comments": { - "version": "2.0.1", - "bundled": true, - "dev": true, - "optional": true - }, - "tar": { - "version": "4.4.8", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "chownr": "1.1.1", - "fs-minipass": "1.2.5", - "minipass": "2.3.5", - "minizlib": "1.2.1", - "mkdirp": "0.5.1", - "safe-buffer": "5.1.2", - "yallist": "3.0.3" - } - }, - "util-deprecate": { - "version": "1.0.2", - "bundled": true, - "dev": true, - "optional": true - }, - "wide-align": { - "version": "1.1.3", - "bundled": true, - "dev": true, - "optional": true, - "requires": { - "string-width": "1.0.2" - } - }, - "wrappy": { - "version": "1.0.2", - "bundled": true, - "dev": true - }, - "yallist": { - "version": "3.0.3", - "bundled": true, - "dev": true - } - } - }, - "fstream": { - "version": "1.0.12", - "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.12.tgz", - "integrity": "sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg==", - "dev": true, - "requires": { - "graceful-fs": "4.1.15", - "inherits": "2.0.3", - "mkdirp": "0.5.1", - "rimraf": "2.6.3" - } - }, - "function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "functional-red-black-tree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz", - "integrity": "sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc=", - "dev": true - }, - "fuzzy": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/fuzzy/-/fuzzy-0.1.3.tgz", - "integrity": "sha1-THbsL/CsGjap3M+aAN+GIweNTtg=" - }, - "gauge": { - "version": "2.7.4", - "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", - "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", - "dev": true, - "requires": { - "aproba": "1.2.0", - "console-control-strings": "1.1.0", - "has-unicode": "2.0.1", - "object-assign": "4.1.1", - "signal-exit": "3.0.2", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wide-align": "1.1.3" - }, - "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", - "dev": true, - "requires": { - "ansi-regex": "2.1.1" + "brace-expansion": "^1.1.7" } } } }, - "gaze": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/gaze/-/gaze-1.1.3.tgz", - "integrity": "sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g==", - "dev": true, - "requires": { - "globule": "1.2.1" - } - }, - "geojson-vt": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", - "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==" - }, - "get-caller-file": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-1.0.3.tgz", - "integrity": "sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w==", - "dev": true - }, - "get-stdin": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-4.0.1.tgz", - "integrity": "sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4=", - "dev": true - }, - "get-stream": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-4.1.0.tgz", - "integrity": "sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w==", - "dev": true, - "requires": { - "pump": "3.0.0" - } - }, - "get-value": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", - "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", - "dev": true - }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - } - }, - "gl-matrix": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.3.0.tgz", - "integrity": "sha512-COb7LDz+SXaHtl/h4LeaFcNdJdAQSDeVqjiIihSXNrkWObZLhDI4hIkZC11Aeqp7bcE72clzB0BnDXr2SmslRA==" - }, "glob-base": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/glob-base/-/glob-base-0.3.0.tgz", "integrity": "sha1-27Fk9iIbHAscz4Kuoyi0l98Oo8Q=", "dev": true, "requires": { - "glob-parent": "2.0.0", - "is-glob": "2.0.1" + "glob-parent": "^2.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "glob-parent": { @@ -7669,7 +7780,7 @@ "integrity": "sha1-gTg9ctsFT8zPUzbaqQLxgvbtuyg=", "dev": true, "requires": { - "is-glob": "2.0.1" + "is-glob": "^2.0.0" } }, "is-extglob": { @@ -7684,7 +7795,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -7695,8 +7806,8 @@ "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", "dev": true, "requires": { - "is-glob": "3.1.0", - "path-dirname": "1.0.2" + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" }, "dependencies": { "is-glob": { @@ -7705,7 +7816,7 @@ "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.0" } } } @@ -7722,36 +7833,31 @@ "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", "dev": true }, + "globalthis": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", + "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3" + } + }, "globby": { "version": "9.2.0", "resolved": "https://registry.npmjs.org/globby/-/globby-9.2.0.tgz", "integrity": "sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg==", "dev": true, "requires": { - "@types/glob": "7.1.1", - "array-union": "1.0.2", - "dir-glob": "2.2.2", - "fast-glob": "2.2.7", - "glob": "7.1.4", - "ignore": "4.0.6", - "pify": "4.0.1", - "slash": "2.0.0" + "@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" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "ignore": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", @@ -7761,72 +7867,64 @@ } }, "globule": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/globule/-/globule-1.2.1.tgz", - "integrity": "sha512-g7QtgWF4uYSL5/dn71WxubOrS7JVGCnFPEnoeChJmBnyR9Mw8nGoEwOgJL/RC2Te0WhbsEUCejfH8SZNJ+adYQ==", + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/globule/-/globule-1.3.4.tgz", + "integrity": "sha512-OPTIfhMBh7JbBYDpa5b+Q5ptmMWKwcNcFSR/0c6t8V4f3ZAVBEsKNY37QdVqmLRYSMhOUGYrY0QhSoEpzGr/Eg==", "dev": true, "requires": { - "glob": "7.1.4", - "lodash": "4.17.15", - "minimatch": "3.0.4" + "glob": "~7.1.1", + "lodash": "^4.17.21", + "minimatch": "~3.0.2" }, "dependencies": { "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "version": "7.1.7", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.7.tgz", + "integrity": "sha512-OvD9ENzPLbegENnYP5UUfJIirTg4+XwMWGaQfQTY0JenxNvvIKP3U3/tAQSPIu/lHxXYSZmpXlUHeqAIdKzBLQ==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "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" } } } }, + "gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.3" + } + }, "got": { - "version": "8.3.2", - "resolved": "https://registry.npmjs.org/got/-/got-8.3.2.tgz", - "integrity": "sha512-qjUJ5U/hawxosMryILofZCkm3C84PLJS/0grRIpjAwu+Lkxxj5cxeCU25BG0/3mDSpXKTyZr8oh8wIgLaH0QCw==", - "requires": { - "@sindresorhus/is": "0.7.0", - "cacheable-request": "2.1.4", - "decompress-response": "3.3.0", - "duplexer3": "0.1.4", - "get-stream": "3.0.0", - "into-stream": "3.1.0", - "is-retry-allowed": "1.2.0", - "isurl": "1.0.0", - "lowercase-keys": "1.0.1", - "mimic-response": "1.0.1", - "p-cancelable": "0.4.1", - "p-timeout": "2.0.1", - "pify": "3.0.0", - "safe-buffer": "5.1.2", - "timed-out": "4.0.1", - "url-parse-lax": "3.0.0", - "url-to-options": "1.0.1" - }, - "dependencies": { - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=" - }, - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" - } + "version": "11.8.6", + "resolved": "https://registry.npmjs.org/got/-/got-11.8.6.tgz", + "integrity": "sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==", + "requires": { + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" } }, "graceful-fs": { "version": "4.1.15", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.1.15.tgz", - "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==" + "integrity": "sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA==", + "dev": true }, "grid-index": { "version": "1.1.0", @@ -7845,26 +7943,27 @@ "integrity": "sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==", "dev": true, "requires": { - "duplexer": "0.1.1", - "pify": "4.0.1" + "duplexer": "^0.1.1", + "pify": "^4.0.1" } }, "handle-thing": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.0.tgz", - "integrity": "sha512-d4sze1JNC454Wdo2fkuyzCr6aHcbL6PGGuFAz0Li/NcOm1tCHGnWDRmJP85dh9IhQErTc2svWFEX5xHIOo//kQ==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz", + "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, "handlebars": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.3.1.tgz", - "integrity": "sha512-c0HoNHzDiHpBt4Kqe99N8tdLPKAnGCQ73gYMPWtAYM4PwGnf7xl8PBUHJqh9ijlzt2uQKaSRxbXRt+rZ7M2/kA==", + "version": "4.7.7", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", + "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { - "neo-async": "2.6.1", - "optimist": "0.6.1", - "source-map": "0.6.1", - "uglify-js": "3.5.15" + "minimist": "^1.2.5", + "neo-async": "^2.6.0", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4", + "wordwrap": "^1.0.0" }, "dependencies": { "source-map": { @@ -7887,17 +7986,21 @@ "integrity": "sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g==", "dev": true, "requires": { - "ajv": "6.10.0", - "har-schema": "2.0.0" + "ajv": "^6.5.5", + "har-schema": "^2.0.0" } }, + "hard-rejection": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", + "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==" + }, "has": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, "requires": { - "function-bind": "1.1.1" + "function-bind": "^1.1.1" } }, "has-ansi": { @@ -7906,7 +8009,7 @@ "integrity": "sha1-NPUEnOHs3ysGSa8+8k5F7TVBbZE=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" }, "dependencies": { "ansi-regex": { @@ -7917,34 +8020,51 @@ } } }, + "has-bigints": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", + "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", + "dev": true + }, "has-flag": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=" }, - "has-symbol-support-x": { - "version": "1.4.2", - "resolved": "https://registry.npmjs.org/has-symbol-support-x/-/has-symbol-support-x-1.4.2.tgz", - "integrity": "sha512-3ToOva++HaW+eCpgqZrCfN51IPB+7bJNVT6CUATzueB5Heb8o6Nam0V3HG5dlDvZU1Gn5QLcbahiKw/XVk5JJw==" + "has-property-descriptors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz", + "integrity": "sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.1" + } + }, + "has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true }, "has-symbols": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.0.tgz", - "integrity": "sha1-uhqPGvKg/DllD1yFA2dwQSIGO0Q=", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", "dev": true }, - "has-to-string-tag-x": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/has-to-string-tag-x/-/has-to-string-tag-x-1.4.1.tgz", - "integrity": "sha512-vdbKfmw+3LoOYVr+mtxHaX5a96+0f3DljYd8JOqvOLsf5mw2Otda2qCDT9qRqLAhrjyQ0h7ual5nOiASpsGNFw==", + "has-tostringtag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", + "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "dev": true, "requires": { - "has-symbol-support-x": "1.4.2" + "has-symbols": "^1.0.2" } }, "has-unicode": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", - "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "integrity": "sha512-8Rf9Y83NBReMnx0gFzA8JImQACstCYWUplepDa9xprwwtmgEZUF0h/i5xSA625zB/I37EtrswSST6OXxwaaIJQ==", "dev": true }, "has-value": { @@ -7953,9 +8073,9 @@ "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "1.0.0", - "isobject": "3.0.1" + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" } }, "has-values": { @@ -7964,8 +8084,8 @@ "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", "dev": true, "requires": { - "is-number": "3.0.0", - "kind-of": "4.0.0" + "is-number": "^3.0.0", + "kind-of": "^4.0.0" }, "dependencies": { "kind-of": { @@ -7974,7 +8094,7 @@ "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -7985,8 +8105,8 @@ "integrity": "sha1-X8hoaEfs1zSZQDMZprCj8/auSRg=", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "hash-sum": { @@ -8001,8 +8121,8 @@ "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", "dev": true, "requires": { - "inherits": "2.0.3", - "minimalistic-assert": "1.0.1" + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" } }, "he": { @@ -8017,21 +8137,15 @@ "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", "dev": true }, - "highlight.js": { - "version": "9.15.6", - "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.15.6.tgz", - "integrity": "sha512-zozTAWM1D6sozHo8kqhfYgsac+B+q0PmsjXeyDrYIHHcBN0zTVT66+s2GW1GZv7DbyaROdLXKdabwS/WqPyIdQ==", - "dev": true - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", "integrity": "sha1-0nRXAQJabHdabFRXk+1QL8DGSaE=", "dev": true, "requires": { - "hash.js": "1.1.7", - "minimalistic-assert": "1.0.1", - "minimalistic-crypto-utils": "1.0.1" + "hash.js": "^1.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" } }, "home-or-tmp": { @@ -8040,8 +8154,8 @@ "integrity": "sha1-42w/LSyufXRqhX440Y1fMqeILbg=", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.1" } }, "hoopy": { @@ -8051,9 +8165,10 @@ "dev": true }, "hosted-git-info": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.7.1.tgz", - "integrity": "sha512-7T/BxH19zbcCTa8XkMlbK5lTo1WtgkFi3GvdWEyNuc4Vex7/9Dqbnpsf4JMydcfj9HCg4zUWFTL3Za6lapg5/w==" + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", + "dev": true }, "hpack.js": { "version": "2.1.6", @@ -8061,10 +8176,10 @@ "integrity": "sha1-h3dMCUnlE/QuhFdbPEVoH63ioLI=", "dev": true, "requires": { - "inherits": "2.0.3", - "obuf": "1.1.2", - "readable-stream": "2.3.6", - "wbuf": "1.7.3" + "inherits": "^2.0.1", + "obuf": "^1.0.0", + "readable-stream": "^2.0.1", + "wbuf": "^1.1.0" } }, "hsl-regex": { @@ -8079,25 +8194,19 @@ "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", "dev": true }, - "html-comment-regex": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/html-comment-regex/-/html-comment-regex-1.1.2.tgz", - "integrity": "sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ==", - "dev": true - }, "html-encoding-sniffer": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz", "integrity": "sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw==", "dev": true, "requires": { - "whatwg-encoding": "1.0.5" + "whatwg-encoding": "^1.0.1" } }, "html-entities": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.2.1.tgz", - "integrity": "sha1-DfKTUfByEWNRXfueVUPl9u7VFi8=", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/html-entities/-/html-entities-1.4.0.tgz", + "integrity": "sha512-8nxjcBcd8wovbeKx7h3wTji4e6+rhaVuPNpMqwWgnHh+N9ToqsCs6XztWRBPQ+UtzsoMAdKZtUENoVzU/EMtZA==", "dev": true }, "html-minifier": { @@ -8106,13 +8215,13 @@ "integrity": "sha512-LKUKwuJDhxNa3uf/LPR/KVjm/l3rBqtYeCOAekvG8F1vItxMUpueGd94i/asDDr8/1u7InxzFA5EeGjhhG5mMA==", "dev": true, "requires": { - "camel-case": "3.0.0", - "clean-css": "4.2.1", - "commander": "2.17.1", - "he": "1.2.0", - "param-case": "2.1.1", - "relateurl": "0.2.7", - "uglify-js": "3.4.10" + "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" }, "dependencies": { "commander": { @@ -8133,8 +8242,8 @@ "integrity": "sha512-Y2VsbPVs0FIshJztycsO2SfPk7/KAF/T72qzv9u5EpQ4kB2hQoHlhNQTsNyy6ul7lQtqJN/AoWeS23OzEiEFxw==", "dev": true, "requires": { - "commander": "2.19.0", - "source-map": "0.6.1" + "commander": "~2.19.0", + "source-map": "~0.6.1" }, "dependencies": { "commander": { @@ -8159,12 +8268,12 @@ "integrity": "sha1-sBq71yOsqqeze2r0SS69oD2d03s=", "dev": true, "requires": { - "html-minifier": "3.5.21", - "loader-utils": "0.2.17", - "lodash": "4.17.15", - "pretty-error": "2.1.1", - "tapable": "1.1.3", - "toposort": "1.0.7", + "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" }, "dependencies": { @@ -8186,51 +8295,66 @@ "integrity": "sha1-+G5jdNQyBabmxg6RlvF8Apm/s0g=", "dev": true, "requires": { - "big.js": "3.2.0", - "emojis-list": "2.1.0", - "json5": "0.5.1", - "object-assign": "4.1.1" + "big.js": "^3.1.3", + "emojis-list": "^2.0.0", + "json5": "^0.5.0", + "object-assign": "^4.0.1" } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true } } }, "htmlparser2": { - "version": "3.10.1", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", - "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "dev": true, "requires": { - "domelementtype": "1.3.1", - "domhandler": "2.4.2", - "domutils": "1.7.0", - "entities": "1.1.2", - "inherits": "2.0.3", - "readable-stream": "3.3.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" }, "dependencies": { - "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "inherits": "2.0.3", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } + }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, + "domutils": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true } } }, "http-cache-semantics": { - "version": "3.8.1", - "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-3.8.1.tgz", - "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==" + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz", + "integrity": "sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ==" }, "http-deceiver": { "version": "1.2.7", @@ -8239,33 +8363,61 @@ "dev": true }, "http-errors": { - "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { - "depd": "1.1.2", - "inherits": "2.0.3", - "setprototypeof": "1.1.1", - "statuses": "1.5.0", - "toidentifier": "1.0.0" + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "dependencies": { + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true + } } }, "http-parser-js": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.0.tgz", - "integrity": "sha512-cZdEF7r4gfRIq7ezX9J0T+kQmJNOub71dWbgAXVHDct80TKP4MCETtZQ31xyv38UwgzkWPYF/Xc0ge55dW9Z9w==", + "version": "0.5.8", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.8.tgz", + "integrity": "sha512-SGeBX54F94Wgu5RH3X5jsDtf4eHyRogWX1XGT3b4HuW3tQPM4AaBzoUji/4AAJNXCEOWZ5O0DgZmJw1947gD5Q==", "dev": true }, "http-proxy": { - "version": "1.17.0", - "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.17.0.tgz", - "integrity": "sha512-Taqn+3nNvYRfJ3bGvKfBSRwy1v6eePlm3oc/aWVxZp57DQr5Eq3xhKJi7Z4hZpS8PC3H4qI+Yly5EmFacGuA/g==", + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", "dev": true, "requires": { - "eventemitter3": "3.1.2", - "follow-redirects": "1.7.0", - "requires-port": "1.0.0" + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "dependencies": { + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + } } }, "http-proxy-middleware": { @@ -8274,10 +8426,10 @@ "integrity": "sha512-yHYTgWMQO8VvwNS22eLLloAkvungsKdKTLO8AJlftYIKNfJr3GK3zK0ZCfzDDGUBttdGc8xFy1mCitvNKQtC3Q==", "dev": true, "requires": { - "http-proxy": "1.17.0", - "is-glob": "4.0.1", - "lodash": "4.17.15", - "micromatch": "3.1.10" + "http-proxy": "^1.17.0", + "is-glob": "^4.0.0", + "lodash": "^4.17.11", + "micromatch": "^3.1.10" } }, "http-signature": { @@ -8286,9 +8438,18 @@ "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", "dev": true, "requires": { - "assert-plus": "1.0.0", - "jsprim": "1.4.1", - "sshpk": "1.16.1" + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "http2-wrapper": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/http2-wrapper/-/http2-wrapper-1.0.3.tgz", + "integrity": "sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==", + "requires": { + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" } }, "https-browserify": { @@ -8297,13 +8458,19 @@ "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", "dev": true }, + "human-signals": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", + "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", + "dev": true + }, "iconv-lite": { "version": "0.4.24", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "dev": true, "requires": { - "safer-buffer": "2.1.2" + "safer-buffer": ">= 2.1.2 < 3" } }, "icss-replace-symbols": { @@ -8318,7 +8485,7 @@ "integrity": "sha1-g/Cg7DeL8yRheLbCrZE28TWxyWI=", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -8327,9 +8494,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -8363,7 +8530,7 @@ "integrity": "sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk=", "dev": true, "requires": { - "import-from": "2.1.0" + "import-from": "^2.1.0" } }, "import-fresh": { @@ -8372,8 +8539,8 @@ "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", "dev": true, "requires": { - "caller-path": "2.0.0", - "resolve-from": "3.0.0" + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" }, "dependencies": { "caller-path": { @@ -8382,7 +8549,7 @@ "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", "dev": true, "requires": { - "caller-callsite": "2.0.0" + "caller-callsite": "^2.0.0" } }, "resolve-from": { @@ -8399,7 +8566,7 @@ "integrity": "sha1-M1238qev/VOqpHHUuAId7ja387E=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" }, "dependencies": { "resolve-from": { @@ -8416,8 +8583,8 @@ "integrity": "sha512-vAaZHieK9qjGo58agRBg+bhHX3hoTZU/Oa3GESWLz7t1U62fk63aHuDJJEteXoDeTCcPmUT+z38gkHPZkkmpmQ==", "dev": true, "requires": { - "pkg-dir": "2.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^2.0.0", + "resolve-cwd": "^2.0.0" }, "dependencies": { "pkg-dir": { @@ -8426,7 +8593,7 @@ "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } } } @@ -8438,19 +8605,15 @@ "dev": true }, "in-publish": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.0.tgz", - "integrity": "sha1-4g/146KvwmkDILbcVSaCqcf631E=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/in-publish/-/in-publish-2.0.1.tgz", + "integrity": "sha512-oDM0kUSNFC31ShNxHKUyfZKy8ZeXZBWMjMdZHKLOk13uvT27VTL/QzRGfRUcevJhpkZAvlhPYuXkF7eNWrtyxQ==", "dev": true }, "indent-string": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", - "integrity": "sha1-ji1INIdCEhtKghi3oTfppSBJ3IA=", - "dev": true, - "requires": { - "repeating": "2.0.1" - } + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-4.0.0.tgz", + "integrity": "sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==" }, "indexes-of": { "version": "1.0.1", @@ -8458,10 +8621,10 @@ "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", "dev": true }, - "indexof": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/indexof/-/indexof-0.0.1.tgz", - "integrity": "sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10=", + "infer-owner": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/infer-owner/-/infer-owner-1.0.4.tgz", + "integrity": "sha512-IClj+Xz94+d7irH5qRyfJonOdfTzuDaifE6ZPWfx0N0+/ATZCbuTPq2prFl526urkQd90WyUKIh1DfBQ2hMz9A==", "dev": true }, "inflight": { @@ -8470,8 +8633,8 @@ "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", "dev": true, "requires": { - "once": "1.4.0", - "wrappy": "1.0.2" + "once": "^1.3.0", + "wrappy": "1" } }, "inherits": { @@ -8480,9 +8643,9 @@ "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=" }, "ini": { - "version": "1.3.5", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", - "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "inquirer": { @@ -8492,26 +8655,26 @@ "dev": true, "optional": true, "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-width": "2.2.0", - "external-editor": "2.2.0", - "figures": "2.0.0", - "lodash": "4.17.15", + "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.3.0", - "rx-lite": "4.0.8", - "rx-lite-aggregates": "4.0.8", - "string-width": "2.1.1", - "strip-ansi": "4.0.0", - "through": "2.3.8" + "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" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true, "optional": true }, @@ -8522,7 +8685,7 @@ "dev": true, "optional": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -8533,24 +8696,19 @@ "integrity": "sha512-S1zBo1D6zcsyuC6PMmY5+55YMILQ9av8lotMx447Bq6SAgo/sDK6y6uUKmuYhW7eacnIhFfsPmCNYdDzsnnDCg==", "dev": true, "requires": { - "default-gateway": "4.2.0", - "ipaddr.js": "1.9.0" + "default-gateway": "^4.2.0", + "ipaddr.js": "^1.9.0" } }, - "into-stream": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-3.1.0.tgz", - "integrity": "sha1-lvsKk2wSur1v8XUqF9BWFqvQlMY=", + "internal-slot": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.4.tgz", + "integrity": "sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==", + "dev": true, "requires": { - "from2": "2.3.0", - "p-is-promise": "1.1.0" - }, - "dependencies": { - "p-is-promise": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-1.1.0.tgz", - "integrity": "sha1-nJRWmJ6fZYgBewQ01WCXZ1w9oF4=" - } + "get-intrinsic": "^1.1.3", + "has": "^1.0.3", + "side-channel": "^1.0.4" } }, "invariant": { @@ -8559,15 +8717,9 @@ "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { - "loose-envify": "1.4.0" + "loose-envify": "^1.0.0" } }, - "invert-kv": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-1.0.0.tgz", - "integrity": "sha1-EEqOSqym09jNFXqO+L+rLXo//bY=", - "dev": true - }, "ip": { "version": "1.1.5", "resolved": "https://registry.npmjs.org/ip/-/ip-1.1.5.tgz", @@ -8581,9 +8733,9 @@ "dev": true }, "ipaddr.js": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.0.tgz", - "integrity": "sha512-M4Sjn6N/+O6/IXSJseKqHoFc+5FdGJ22sXqnjTpdZweHK64MzEPAyQZyEU3R/KRv2GLoa7nNtg/C2Ev6m7z+eA==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", "dev": true }, "is-absolute-url": { @@ -8598,7 +8750,7 @@ "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8607,23 +8759,53 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, + "is-array-buffer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.1.tgz", + "integrity": "sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-typed-array": "^1.1.10" + } + }, "is-arrayish": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=" }, + "is-bigint": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", + "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "dev": true, + "requires": { + "has-bigints": "^1.0.1" + } + }, "is-binary-path": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", "dev": true, "requires": { - "binary-extensions": "1.13.1" + "binary-extensions": "^1.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", + "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-buffer": { @@ -8633,9 +8815,9 @@ "dev": true }, "is-callable": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.1.4.tgz", - "integrity": "sha512-r5p9sxJjYnArLjObpjA4xu5EKI3CuKHkJXMhT7kwbpUyIFD1n5PMAsoPvWnvtZiNz7LjkYDRZhd7FlI0eMijEA==", + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", + "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", "dev": true }, "is-ci": { @@ -8644,7 +8826,7 @@ "integrity": "sha512-s6tfsaQaQi3JNciBH6shVqEDvhGut0SUXr31ag8Pd8BBbVVlcGfWhpPmEOoM6RJ5TFhbypvf5yyRw/VXW1IiWg==", "dev": true, "requires": { - "ci-info": "1.6.0" + "ci-info": "^1.5.0" } }, "is-color-stop": { @@ -8653,12 +8835,20 @@ "integrity": "sha1-z/9HGu5N1cnhWFmPvhKWe1za00U=", "dev": true, "requires": { - "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" + "css-color-names": "^0.0.4", + "hex-color-regex": "^1.1.0", + "hsl-regex": "^1.0.0", + "hsla-regex": "^1.0.0", + "rgb-regex": "^1.0.1", + "rgba-regex": "^1.0.0" + } + }, + "is-core-module": { + "version": "2.12.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.12.0.tgz", + "integrity": "sha512-RECHCBCd/viahWmwj6enj19sKbHfJrddi/6cBDsNTKbNq0f7VeaUkBo60BqzvPqo/W54ChS62Z5qyun7cfOMqQ==", + "requires": { + "has": "^1.0.3" } }, "is-data-descriptor": { @@ -8667,7 +8857,7 @@ "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8676,16 +8866,19 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "is-date-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.1.tgz", - "integrity": "sha1-mqIOtq7rv/d/vTPnTKAbM1gdOhY=", - "dev": true + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", + "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } }, "is-descriptor": { "version": "0.1.6", @@ -8693,9 +8886,9 @@ "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", "dev": true, "requires": { - "is-accessor-descriptor": "0.1.6", - "is-data-descriptor": "0.1.4", - "kind-of": "5.1.0" + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" }, "dependencies": { "kind-of": { @@ -8724,7 +8917,7 @@ "integrity": "sha1-IjgJj8Ih3gvPpdnqxMRdY4qhxTQ=", "dev": true, "requires": { - "is-primitive": "2.0.0" + "is-primitive": "^2.0.0" } }, "is-extendable": { @@ -8745,7 +8938,7 @@ "integrity": "sha1-zGZ3aVYCvlUO8R6LSqYwU0K20Ko=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "is-fullwidth-code-point": { @@ -8766,16 +8959,22 @@ "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", "dev": true, "requires": { - "is-extglob": "2.1.1" + "is-extglob": "^2.1.1" } }, + "is-negative-zero": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", + "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "dev": true + }, "is-number": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -8784,22 +8983,26 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, + "is-number-object": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", + "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "dev": true, + "requires": { + "has-tostringtag": "^1.0.0" + } + }, "is-obj": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-1.0.1.tgz", "integrity": "sha1-PkcprB9f3gJc19g6iW2rn09n2w8=", "dev": true }, - "is-object": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-object/-/is-object-1.0.1.tgz", - "integrity": "sha1-iVJojF7C/9awPsyF52ngKQMINHA=" - }, "is-path-cwd": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-2.1.0.tgz", @@ -8812,7 +9015,7 @@ "integrity": "sha512-rNocXHgipO+rvnP6dk3zI20RpOtrAM/kzbB258Uw5BWr3TpXi861yzjo16Dn4hUox07iw5AyeMLHWsujkjzvRQ==", "dev": true, "requires": { - "is-path-inside": "2.1.0" + "is-path-inside": "^2.1.0" } }, "is-path-inside": { @@ -8821,7 +9024,7 @@ "integrity": "sha512-wiyhTzfDWsvwAW53OBWF5zuvaOGlZ6PwYxAbPVDhpm+gM09xKQGjBq/8uYN12aDvMxnAnq3dxTyoSoRNmg5YFg==", "dev": true, "requires": { - "path-is-inside": "1.0.2" + "path-is-inside": "^1.0.2" } }, "is-plain-obj": { @@ -8835,7 +9038,7 @@ "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "is-posix-bracket": { @@ -8857,12 +9060,13 @@ "dev": true }, "is-regex": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.0.4.tgz", - "integrity": "sha1-VRdIm1RwkbCTDglWVM7SXul+lJE=", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", + "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", "dev": true, "requires": { - "has": "1.0.3" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" } }, "is-resolvable": { @@ -8871,10 +9075,14 @@ "integrity": "sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg==", "dev": true }, - "is-retry-allowed": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz", - "integrity": "sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg==" + "is-shared-array-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", + "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } }, "is-stream": { "version": "1.1.0", @@ -8882,22 +9090,35 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-svg": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-svg/-/is-svg-3.0.0.tgz", - "integrity": "sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ==", + "is-string": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", + "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", "dev": true, "requires": { - "html-comment-regex": "1.1.2" + "has-tostringtag": "^1.0.0" } }, "is-symbol": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.2.tgz", - "integrity": "sha512-HS8bZ9ox60yCJLH9snBpIwv9pYUAkcuLhSA1oero1UB5y9aiQpRA8y2ex945AOtCZL1lJDeIk3G5LthswI46Lw==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", + "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "dev": true, + "requires": { + "has-symbols": "^1.0.2" + } + }, + "is-typed-array": { + "version": "1.1.10", + "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.10.tgz", + "integrity": "sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==", "dev": true, "requires": { - "has-symbols": "1.0.0" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" } }, "is-typedarray": { @@ -8912,6 +9133,15 @@ "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", "dev": true }, + "is-weakref": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", + "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, "is-whitespace": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/is-whitespace/-/is-whitespace-0.3.0.tgz", @@ -8933,7 +9163,8 @@ "isarray": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", - "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=" + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "isexe": { "version": "2.0.0", @@ -8959,17 +9190,17 @@ "integrity": "sha512-4/ApBnMVeEPG3EkSzcw25wDe4N66wxwn+KKn6b47vyek8Xb3NBAcg4xfuQbS7BqcZuTX4wxfD5lVagdggR3gyA==", "dev": true, "requires": { - "async": "2.6.2", - "fileset": "2.0.3", - "istanbul-lib-coverage": "1.2.1", - "istanbul-lib-hook": "1.2.2", - "istanbul-lib-instrument": "1.10.2", - "istanbul-lib-report": "1.1.5", - "istanbul-lib-source-maps": "1.2.6", - "istanbul-reports": "1.5.1", - "js-yaml": "3.13.1", - "mkdirp": "0.5.1", - "once": "1.4.0" + "async": "^2.1.4", + "fileset": "^2.0.2", + "istanbul-lib-coverage": "^1.2.1", + "istanbul-lib-hook": "^1.2.2", + "istanbul-lib-instrument": "^1.10.2", + "istanbul-lib-report": "^1.1.5", + "istanbul-lib-source-maps": "^1.2.6", + "istanbul-reports": "^1.5.1", + "js-yaml": "^3.7.0", + "mkdirp": "^0.5.1", + "once": "^1.4.0" } }, "istanbul-lib-coverage": { @@ -8984,7 +9215,7 @@ "integrity": "sha512-/Jmq7Y1VeHnZEQ3TL10VHyb564mn6VrQXHchON9Jf/AEcmQ3ZIiyD1BVzNOKTZf/G3gE+kiGK6SmpF9y3qGPLw==", "dev": true, "requires": { - "append-transform": "0.4.0" + "append-transform": "^0.4.0" } }, "istanbul-lib-instrument": { @@ -8993,13 +9224,13 @@ "integrity": "sha512-aWHxfxDqvh/ZlxR8BBaEPVSWDPUkGD63VjGQn3jcw8jCp7sHEMKcrj4xfJn/ABzdMEHiQNyvDQhqm5o8+SQg7A==", "dev": true, "requires": { - "babel-generator": "6.26.1", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "istanbul-lib-coverage": "1.2.1", - "semver": "5.7.0" + "babel-generator": "^6.18.0", + "babel-template": "^6.16.0", + "babel-traverse": "^6.18.0", + "babel-types": "^6.18.0", + "babylon": "^6.18.0", + "istanbul-lib-coverage": "^1.2.1", + "semver": "^5.3.0" } }, "istanbul-lib-report": { @@ -9008,10 +9239,10 @@ "integrity": "sha512-UsYfRMoi6QO/doUshYNqcKJqVmFe9w51GZz8BS3WB0lYxAllQYklka2wP9+dGZeHYaWIdcXUx8JGdbqaoXRXzw==", "dev": true, "requires": { - "istanbul-lib-coverage": "1.2.1", - "mkdirp": "0.5.1", - "path-parse": "1.0.6", - "supports-color": "3.2.3" + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "path-parse": "^1.0.5", + "supports-color": "^3.1.2" }, "dependencies": { "has-flag": { @@ -9026,7 +9257,7 @@ "integrity": "sha1-ZawFBLOVQXHYpklGsq48u4pfVPY=", "dev": true, "requires": { - "has-flag": "1.0.0" + "has-flag": "^1.0.0" } } } @@ -9037,11 +9268,11 @@ "integrity": "sha512-TtbsY5GIHgbMsMiRw35YBHGpZ1DVFEO19vxxeiDMYaeOFOCzfnYVxvl6pOUIZR4dtPhAGpSMup8OyF8ubsaqEg==", "dev": true, "requires": { - "debug": "3.2.6", - "istanbul-lib-coverage": "1.2.1", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "source-map": "0.5.7" + "debug": "^3.1.0", + "istanbul-lib-coverage": "^1.2.1", + "mkdirp": "^0.5.1", + "rimraf": "^2.6.1", + "source-map": "^0.5.3" }, "dependencies": { "source-map": { @@ -9058,16 +9289,7 @@ "integrity": "sha512-+cfoZ0UXzWjhAdzosCPP3AN8vvef8XDkWtTfgaN+7L3YTpNYITnCaEkceo5SEYy644VkHka/P1FvkWvrG/rrJw==", "dev": true, "requires": { - "handlebars": "4.3.1" - } - }, - "isurl": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/isurl/-/isurl-1.0.0.tgz", - "integrity": "sha512-1P/yWsxPlDtn7QeRD+ULKQPaIaN6yF368GZ2vDfv0AL0NwpStafjWCDDdn0k8wgFMWpVAqG7oJhxHnlud42i9w==", - "requires": { - "has-to-string-tag-x": "1.4.1", - "is-object": "1.0.1" + "handlebars": "^4.0.3" } }, "javascript-stringify": { @@ -9082,218 +9304,204 @@ "integrity": "sha512-lWzcd+HSiqeuxyhG+EnZds6iO3Y3ZEnMrfZq/OTGvF/C+Z4fPMCdhWTGSAiO2Oym9rbEXfwddHhh6jqrTF3+Lw==", "dev": true, "requires": { - "import-local": "1.0.0", - "jest-cli": "23.6.0" + "import-local": "^1.0.0", + "jest-cli": "^23.6.0" + } + }, + "jest-changed-files": { + "version": "23.4.2", + "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", + "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", + "dev": true, + "requires": { + "throat": "^4.0.0" + } + }, + "jest-cli": { + "version": "23.6.0", + "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", + "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", + "dev": true, + "requires": { + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "exit": "^0.1.2", + "glob": "^7.1.2", + "graceful-fs": "^4.1.11", + "import-local": "^1.0.0", + "is-ci": "^1.0.10", + "istanbul-api": "^1.3.1", + "istanbul-lib-coverage": "^1.2.0", + "istanbul-lib-instrument": "^1.10.1", + "istanbul-lib-source-maps": "^1.2.4", + "jest-changed-files": "^23.4.2", + "jest-config": "^23.6.0", + "jest-environment-jsdom": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve-dependencies": "^23.6.0", + "jest-runner": "^23.6.0", + "jest-runtime": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "jest-watcher": "^23.4.0", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "node-notifier": "^5.2.1", + "prompts": "^0.1.9", + "realpath-native": "^1.0.0", + "rimraf": "^2.5.4", + "slash": "^1.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^4.0.0", + "which": "^1.2.12", + "yargs": "^11.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "arr-diff": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", - "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "integrity": "sha512-dtXTVMkh6VkEEA7OhXnN1Ecb8aAGFdZ1LFxtOCoqj4qkyOJMt7+qs6Ahdy6p/NQCPYsRSXXivhSB/J5E9jmYKA==", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", - "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "integrity": "sha512-G2n5bG5fSUCpnsXz4+8FUkYsGPkNfLn9YvS66U5qbTIXI2Ynnlo4Bi42bWv+omKUCqz+ejzfClwne0alJWJPhg==", "dev": true }, "braces": { "version": "1.8.5", "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", - "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "integrity": "sha512-xU7bpz2ytJl1bH9cgIurjpg/n8Gohy9GTw81heDYLJQ4RU60dlyJsa+atVF2pI0yMMvKxI9HkKwjePCj5XI1hw==", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { "version": "0.1.5", "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", - "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "integrity": "sha512-hxx03P2dJxss6ceIeri9cmYOT4SRs3Zk3afZwWpOsRqLqprhTR8u++SlC+sFGsQr7WGFPdMF7Gjc1njDLDK6UA==", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", - "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", - "dev": true, - "requires": { - "is-extglob": "1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "integrity": "sha512-1FOj1LOwn42TMrruOHGt18HemVnbwAmAak7krWk+wa93KXxGbK+2jpezm+ytJYDaBX0/SPLZFHKM7m+tKobWGg==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "is-extglob": "^1.0.0" } }, "is-extglob": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", - "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "integrity": "sha512-7Q+VbVafe6x2T+Tu6NcOf6sRklazEPmBoB3IWk3WdGZM2iGUwU/Oe3Wtq5lSEkDTTlpp8yx+5t4pzO/i9Ty1ww==", "dev": true }, "is-glob": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", - "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "integrity": "sha512-a1dBeB19NXsf/E0+FHqkagizel/LQw2DjSQpvQrj3zT+jYPpaUCryPnrQajXKFLCMuf4I6FhRpaGtw4lPrG6Eg==", "dev": true, "requires": { - "is-extglob": "1.0.0" - } - }, - "jest-cli": { - "version": "23.6.0", - "resolved": "https://registry.npmjs.org/jest-cli/-/jest-cli-23.6.0.tgz", - "integrity": "sha512-hgeD1zRUp1E1zsiyOXjEn4LzRLWdJBV//ukAHGlx6s5mfCNJTbhbHjgxnDUXA8fsKWN/HqFFF6X5XcCwC/IvYQ==", - "dev": true, - "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "exit": "0.1.2", - "glob": "7.1.4", - "graceful-fs": "4.1.15", - "import-local": "1.0.0", - "is-ci": "1.2.1", - "istanbul-api": "1.3.7", - "istanbul-lib-coverage": "1.2.1", - "istanbul-lib-instrument": "1.10.2", - "istanbul-lib-source-maps": "1.2.6", - "jest-changed-files": "23.4.2", - "jest-config": "23.6.0", - "jest-environment-jsdom": "23.4.0", - "jest-get-type": "22.4.3", - "jest-haste-map": "23.6.0", - "jest-message-util": "23.4.0", - "jest-regex-util": "23.3.0", - "jest-resolve-dependencies": "23.6.0", - "jest-runner": "23.6.0", - "jest-runtime": "23.6.0", - "jest-snapshot": "23.6.0", - "jest-util": "23.4.0", - "jest-validate": "23.6.0", - "jest-watcher": "23.4.0", - "jest-worker": "23.2.0", - "micromatch": "2.3.11", - "node-notifier": "5.4.0", - "prompts": "0.1.14", - "realpath-native": "1.1.0", - "rimraf": "2.6.3", - "slash": "1.0.0", - "string-length": "2.0.0", - "strip-ansi": "4.0.0", - "which": "1.3.1", - "yargs": "11.1.0" + "is-extglob": "^1.0.0" } }, "kind-of": { "version": "3.2.2", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", - "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "integrity": "sha512-NOW9QQXMoZGg/oqnVNoNTTIFEIid1627WCffUBJEdMxYApq7mNE7CpzucIPc+ZQg25Phej7IJSmX3hO+oblOtQ==", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { "version": "2.3.11", "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", - "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "integrity": "sha512-LnU2XFEk9xxSJ6rfgAry/ty5qwUTyHYOBU0g4R6tIw5ljwgGIBmiKhRWLw5NpMOnrgUNcDJ4WMp8rl3sYVHLNA==", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "normalize-path": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "integrity": "sha512-3pKJwH184Xo/lnH6oyP1q2pMd7HcypqqmRs91/6/i2CGtWwIKGCkOOMTm/zXbgTEWHw1uNpNi/igc3ePOYHb6w==", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "slash": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/slash/-/slash-1.0.0.tgz", - "integrity": "sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU=", + "integrity": "sha512-3TYDR7xWt4dIqV2JauJr+EJeW356RXijHeUlO+8djJ+uBXPn8/2dpzBc8yQhh583sVvc9CvFAeQVgijsH+PNNg==", "dev": true }, "strip-ansi": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", - "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "integrity": "sha512-4XaJ2zQdCzROZDivEVIDPkcQn8LMFSa8kj8Gxb/Lnwzv9A8VctNZ+lfivC/sV3ivW8ElJTERXZoPBRrZKkNKow==", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } }, - "jest-changed-files": { - "version": "23.4.2", - "resolved": "https://registry.npmjs.org/jest-changed-files/-/jest-changed-files-23.4.2.tgz", - "integrity": "sha512-EyNhTAUWEfwnK0Is/09LxoqNDOn7mU7S3EHskG52djOFS/z+IT0jT3h3Ql61+dklcG7bJJitIWEMB4Sp1piHmA==", - "dev": true, - "requires": { - "throat": "4.1.0" - } - }, "jest-config": { "version": "23.6.0", "resolved": "https://registry.npmjs.org/jest-config/-/jest-config-23.6.0.tgz", "integrity": "sha512-i8V7z9BeDXab1+VNo78WM0AtWpBRXJLnkT+lyT+Slx/cbP5sZJ0+NDuLcmBE5hXAoK0aUp7vI+MOxR+R4d8SRQ==", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-jest": "23.6.0", - "chalk": "2.4.2", - "glob": "7.1.4", - "jest-environment-jsdom": "23.4.0", - "jest-environment-node": "23.4.0", - "jest-get-type": "22.4.3", - "jest-jasmine2": "23.6.0", - "jest-regex-util": "23.3.0", - "jest-resolve": "23.6.0", - "jest-util": "23.4.0", - "jest-validate": "23.6.0", - "micromatch": "2.3.11", - "pretty-format": "23.6.0" + "babel-core": "^6.0.0", + "babel-jest": "^23.6.0", + "chalk": "^2.0.1", + "glob": "^7.1.1", + "jest-environment-jsdom": "^23.4.0", + "jest-environment-node": "^23.4.0", + "jest-get-type": "^22.1.0", + "jest-jasmine2": "^23.6.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "pretty-format": "^23.6.0" }, "dependencies": { "arr-diff": { @@ -9302,7 +9510,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9317,25 +9525,25 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "braces": { @@ -9344,9 +9552,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "debug": { @@ -9364,7 +9572,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9373,21 +9581,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" - } - }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -9402,7 +9596,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "json5": { @@ -9417,7 +9611,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -9426,19 +9620,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "ms": { @@ -9453,7 +9647,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "slash": { @@ -9476,10 +9670,10 @@ "integrity": "sha512-Gz9l5Ov+X3aL5L37IT+8hoCUsof1CVYBb2QEkOupK64XyRR3h+uRpYIm97K7sY8diFxowR8pIGEdyfMKTixo3g==", "dev": true, "requires": { - "chalk": "2.4.2", - "diff": "3.5.0", - "jest-get-type": "22.4.3", - "pretty-format": "23.6.0" + "chalk": "^2.0.1", + "diff": "^3.2.0", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, "jest-docblock": { @@ -9488,7 +9682,7 @@ "integrity": "sha1-8IXh8YVI2Z/dabICB+b9VdkTg6c=", "dev": true, "requires": { - "detect-newline": "2.1.0" + "detect-newline": "^2.1.0" } }, "jest-each": { @@ -9497,8 +9691,8 @@ "integrity": "sha512-x7V6M/WGJo6/kLoissORuvLIeAoyo2YqLOoCDkohgJ4XOXSqOtyvr8FbInlAWS77ojBsZrafbozWoKVRdtxFCg==", "dev": true, "requires": { - "chalk": "2.4.2", - "pretty-format": "23.6.0" + "chalk": "^2.0.1", + "pretty-format": "^23.6.0" } }, "jest-environment-jsdom": { @@ -9507,9 +9701,9 @@ "integrity": "sha1-BWp5UrP+pROsYqFAosNox52eYCM=", "dev": true, "requires": { - "jest-mock": "23.2.0", - "jest-util": "23.4.0", - "jsdom": "11.12.0" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0", + "jsdom": "^11.5.1" } }, "jest-environment-node": { @@ -9518,8 +9712,8 @@ "integrity": "sha1-V+gO0IQd6jAxZ8zozXlSHeuv3hA=", "dev": true, "requires": { - "jest-mock": "23.2.0", - "jest-util": "23.4.0" + "jest-mock": "^23.2.0", + "jest-util": "^23.4.0" } }, "jest-get-type": { @@ -9534,14 +9728,14 @@ "integrity": "sha512-uyNhMyl6dr6HaXGHp8VF7cK6KpC6G9z9LiMNsst+rJIZ8l7wY0tk8qwjPmEghczojZ2/ZhtEdIabZ0OQRJSGGg==", "dev": true, "requires": { - "fb-watchman": "2.0.0", - "graceful-fs": "4.1.15", - "invariant": "2.2.4", - "jest-docblock": "23.2.0", - "jest-serializer": "23.0.1", - "jest-worker": "23.2.0", - "micromatch": "2.3.11", - "sane": "2.5.2" + "fb-watchman": "^2.0.0", + "graceful-fs": "^4.1.11", + "invariant": "^2.2.4", + "jest-docblock": "^23.2.0", + "jest-serializer": "^23.0.1", + "jest-worker": "^23.2.0", + "micromatch": "^2.3.11", + "sane": "^2.0.0" }, "dependencies": { "arr-diff": { @@ -9550,7 +9744,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9565,9 +9759,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -9576,7 +9770,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9585,7 +9779,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -9600,7 +9794,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -9609,7 +9803,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -9618,19 +9812,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "normalize-path": { @@ -9639,7 +9833,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } } } @@ -9650,18 +9844,18 @@ "integrity": "sha512-pe2Ytgs1nyCs8IvsEJRiRTPC0eVYd8L/dXJGU08GFuBwZ4sYH/lmFDdOL3ZmvJR8QKqV9MFuwlsAi/EWkFUbsQ==", "dev": true, "requires": { - "babel-traverse": "6.26.0", - "chalk": "2.4.2", - "co": "4.6.0", - "expect": "23.6.0", - "is-generator-fn": "1.0.0", - "jest-diff": "23.6.0", - "jest-each": "23.6.0", - "jest-matcher-utils": "23.6.0", - "jest-message-util": "23.4.0", - "jest-snapshot": "23.6.0", - "jest-util": "23.4.0", - "pretty-format": "23.6.0" + "babel-traverse": "^6.0.0", + "chalk": "^2.0.1", + "co": "^4.6.0", + "expect": "^23.6.0", + "is-generator-fn": "^1.0.0", + "jest-diff": "^23.6.0", + "jest-each": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "pretty-format": "^23.6.0" } }, "jest-leak-detector": { @@ -9670,7 +9864,7 @@ "integrity": "sha512-f/8zA04rsl1Nzj10HIyEsXvYlMpMPcy0QkQilVZDFOaPbv2ur71X5u2+C4ZQJGyV/xvVXtCCZ3wQ99IgQxftCg==", "dev": true, "requires": { - "pretty-format": "23.6.0" + "pretty-format": "^23.6.0" } }, "jest-matcher-utils": { @@ -9679,9 +9873,9 @@ "integrity": "sha512-rosyCHQfBcol4NsckTn01cdelzWLU9Cq7aaigDf8VwwpIRvWE/9zLgX2bON+FkEW69/0UuYslUe22SOdEf2nog==", "dev": true, "requires": { - "chalk": "2.4.2", - "jest-get-type": "22.4.3", - "pretty-format": "23.6.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "pretty-format": "^23.6.0" } }, "jest-message-util": { @@ -9690,11 +9884,11 @@ "integrity": "sha1-F2EMUJQjSVCNAaPR4L2iwHkIap8=", "dev": true, "requires": { - "@babel/code-frame": "7.0.0", - "chalk": "2.4.2", - "micromatch": "2.3.11", - "slash": "1.0.0", - "stack-utils": "1.0.2" + "@babel/code-frame": "^7.0.0-beta.35", + "chalk": "^2.0.1", + "micromatch": "^2.3.11", + "slash": "^1.0.0", + "stack-utils": "^1.0.1" }, "dependencies": { "arr-diff": { @@ -9703,7 +9897,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9718,9 +9912,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -9729,7 +9923,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9738,7 +9932,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -9753,7 +9947,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -9762,7 +9956,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -9771,19 +9965,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "normalize-path": { @@ -9792,7 +9986,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "slash": { @@ -9821,9 +10015,9 @@ "integrity": "sha512-XyoRxNtO7YGpQDmtQCmZjum1MljDqUCob7XlZ6jy9gsMugHdN2hY4+Acz9Qvjz2mSsOnPSH7skBmDYCHXVZqkA==", "dev": true, "requires": { - "browser-resolve": "1.11.3", - "chalk": "2.4.2", - "realpath-native": "1.1.0" + "browser-resolve": "^1.11.3", + "chalk": "^2.0.1", + "realpath-native": "^1.0.0" } }, "jest-resolve-dependencies": { @@ -9832,8 +10026,8 @@ "integrity": "sha512-EkQWkFWjGKwRtRyIwRwI6rtPAEyPWlUC2MpzHissYnzJeHcyCn1Hc8j7Nn1xUVrS5C6W5+ZL37XTem4D4pLZdA==", "dev": true, "requires": { - "jest-regex-util": "23.3.0", - "jest-snapshot": "23.6.0" + "jest-regex-util": "^23.3.0", + "jest-snapshot": "^23.6.0" } }, "jest-runner": { @@ -9842,19 +10036,19 @@ "integrity": "sha512-kw0+uj710dzSJKU6ygri851CObtCD9cN8aNkg8jWJf4ewFyEa6kwmiH/r/M1Ec5IL/6VFa0wnAk6w+gzUtjJzA==", "dev": true, "requires": { - "exit": "0.1.2", - "graceful-fs": "4.1.15", - "jest-config": "23.6.0", - "jest-docblock": "23.2.0", - "jest-haste-map": "23.6.0", - "jest-jasmine2": "23.6.0", - "jest-leak-detector": "23.6.0", - "jest-message-util": "23.4.0", - "jest-runtime": "23.6.0", - "jest-util": "23.4.0", - "jest-worker": "23.2.0", - "source-map-support": "0.5.12", - "throat": "4.1.0" + "exit": "^0.1.2", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-docblock": "^23.2.0", + "jest-haste-map": "^23.6.0", + "jest-jasmine2": "^23.6.0", + "jest-leak-detector": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-runtime": "^23.6.0", + "jest-util": "^23.4.0", + "jest-worker": "^23.2.0", + "source-map-support": "^0.5.6", + "throat": "^4.0.0" } }, "jest-runtime": { @@ -9863,27 +10057,27 @@ "integrity": "sha512-ycnLTNPT2Gv+TRhnAYAQ0B3SryEXhhRj1kA6hBPSeZaNQkJ7GbZsxOLUkwg6YmvWGdX3BB3PYKFLDQCAE1zNOw==", "dev": true, "requires": { - "babel-core": "6.26.3", - "babel-plugin-istanbul": "4.1.6", - "chalk": "2.4.2", - "convert-source-map": "1.6.0", - "exit": "0.1.2", - "fast-json-stable-stringify": "2.0.0", - "graceful-fs": "4.1.15", - "jest-config": "23.6.0", - "jest-haste-map": "23.6.0", - "jest-message-util": "23.4.0", - "jest-regex-util": "23.3.0", - "jest-resolve": "23.6.0", - "jest-snapshot": "23.6.0", - "jest-util": "23.4.0", - "jest-validate": "23.6.0", - "micromatch": "2.3.11", - "realpath-native": "1.1.0", - "slash": "1.0.0", + "babel-core": "^6.0.0", + "babel-plugin-istanbul": "^4.1.6", + "chalk": "^2.0.1", + "convert-source-map": "^1.4.0", + "exit": "^0.1.2", + "fast-json-stable-stringify": "^2.0.0", + "graceful-fs": "^4.1.11", + "jest-config": "^23.6.0", + "jest-haste-map": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-regex-util": "^23.3.0", + "jest-resolve": "^23.6.0", + "jest-snapshot": "^23.6.0", + "jest-util": "^23.4.0", + "jest-validate": "^23.6.0", + "micromatch": "^2.3.11", + "realpath-native": "^1.0.0", + "slash": "^1.0.0", "strip-bom": "3.0.0", - "write-file-atomic": "2.4.3", - "yargs": "11.1.0" + "write-file-atomic": "^2.1.0", + "yargs": "^11.0.0" }, "dependencies": { "arr-diff": { @@ -9892,7 +10086,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -9907,25 +10101,25 @@ "integrity": "sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA==", "dev": true, "requires": { - "babel-code-frame": "6.26.0", - "babel-generator": "6.26.1", - "babel-helpers": "6.24.1", - "babel-messages": "6.23.0", - "babel-register": "6.26.0", - "babel-runtime": "6.26.0", - "babel-template": "6.26.0", - "babel-traverse": "6.26.0", - "babel-types": "6.26.0", - "babylon": "6.18.0", - "convert-source-map": "1.6.0", - "debug": "2.6.9", - "json5": "0.5.1", - "lodash": "4.17.15", - "minimatch": "3.0.4", - "path-is-absolute": "1.0.1", - "private": "0.1.8", - "slash": "1.0.0", - "source-map": "0.5.7" + "babel-code-frame": "^6.26.0", + "babel-generator": "^6.26.0", + "babel-helpers": "^6.24.1", + "babel-messages": "^6.23.0", + "babel-register": "^6.26.0", + "babel-runtime": "^6.26.0", + "babel-template": "^6.26.0", + "babel-traverse": "^6.26.0", + "babel-types": "^6.26.0", + "babylon": "^6.18.0", + "convert-source-map": "^1.5.1", + "debug": "^2.6.9", + "json5": "^0.5.1", + "lodash": "^4.17.4", + "minimatch": "^3.0.4", + "path-is-absolute": "^1.0.1", + "private": "^0.1.8", + "slash": "^1.0.0", + "source-map": "^0.5.7" } }, "braces": { @@ -9934,9 +10128,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "debug": { @@ -9954,7 +10148,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -9963,7 +10157,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -9978,7 +10172,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "json5": { @@ -9993,7 +10187,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -10002,19 +10196,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "ms": { @@ -10029,7 +10223,7 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } }, "slash": { @@ -10073,16 +10267,16 @@ "integrity": "sha512-tM7/Bprftun6Cvj2Awh/ikS7zV3pVwjRYU2qNYS51VZHgaAMBs5l4o/69AiDHhQrj5+LA2Lq4VIvK7zYk/bswg==", "dev": true, "requires": { - "babel-types": "6.26.0", - "chalk": "2.4.2", - "jest-diff": "23.6.0", - "jest-matcher-utils": "23.6.0", - "jest-message-util": "23.4.0", - "jest-resolve": "23.6.0", - "mkdirp": "0.5.1", - "natural-compare": "1.4.0", - "pretty-format": "23.6.0", - "semver": "5.7.0" + "babel-types": "^6.0.0", + "chalk": "^2.0.1", + "jest-diff": "^23.6.0", + "jest-matcher-utils": "^23.6.0", + "jest-message-util": "^23.4.0", + "jest-resolve": "^23.6.0", + "mkdirp": "^0.5.1", + "natural-compare": "^1.4.0", + "pretty-format": "^23.6.0", + "semver": "^5.5.0" } }, "jest-transform-stub": { @@ -10097,14 +10291,14 @@ "integrity": "sha1-TQY8uSe68KI4Mf9hvsLLv0l5NWE=", "dev": true, "requires": { - "callsites": "2.0.0", - "chalk": "2.4.2", - "graceful-fs": "4.1.15", - "is-ci": "1.2.1", - "jest-message-util": "23.4.0", - "mkdirp": "0.5.1", - "slash": "1.0.0", - "source-map": "0.6.1" + "callsites": "^2.0.0", + "chalk": "^2.0.1", + "graceful-fs": "^4.1.11", + "is-ci": "^1.0.10", + "jest-message-util": "^23.4.0", + "mkdirp": "^0.5.1", + "slash": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "callsites": { @@ -10133,10 +10327,10 @@ "integrity": "sha512-OFKapYxe72yz7agrDAWi8v2WL8GIfVqcbKRCLbRG9PAxtzF9b1SEDdTpytNDN12z2fJynoBwpMpvj2R39plI2A==", "dev": true, "requires": { - "chalk": "2.4.2", - "jest-get-type": "22.4.3", - "leven": "2.1.0", - "pretty-format": "23.6.0" + "chalk": "^2.0.1", + "jest-get-type": "^22.1.0", + "leven": "^2.1.0", + "pretty-format": "^23.6.0" } }, "jest-watch-typeahead": { @@ -10145,12 +10339,12 @@ "integrity": "sha512-xdhEtKSj0gmnkDQbPTIHvcMmXNUDzYpHLEJ5TFqlaI+schi2NI96xhWiZk9QoesAS7oBmKwWWsHazTrYl2ORgg==", "dev": true, "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "jest-watcher": "23.4.0", - "slash": "2.0.0", - "string-length": "2.0.0", - "strip-ansi": "5.2.0" + "ansi-escapes": "^3.0.0", + "chalk": "^2.4.1", + "jest-watcher": "^23.1.0", + "slash": "^2.0.0", + "string-length": "^2.0.0", + "strip-ansi": "^5.0.0" } }, "jest-watcher": { @@ -10159,9 +10353,9 @@ "integrity": "sha1-0uKM50+NrWxq/JIrksq+9u0FyRw=", "dev": true, "requires": { - "ansi-escapes": "3.2.0", - "chalk": "2.4.2", - "string-length": "2.0.0" + "ansi-escapes": "^3.0.0", + "chalk": "^2.0.1", + "string-length": "^2.0.0" } }, "jest-worker": { @@ -10170,19 +10364,19 @@ "integrity": "sha1-+vcGqNo2+uYOsmlXJX+ntdjqArk=", "dev": true, "requires": { - "merge-stream": "1.0.1" + "merge-stream": "^1.0.1" } }, "jquery": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.4.1.tgz", - "integrity": "sha512-36+AdBzCL+y6qjw5Tx7HgzeGCzC81MDDgaUP8ld2zhx58HdqXGoBd+tHdrBMiyjGQs0Hxs/MLZTu/eHNJJuWPw==", + "version": "3.6.4", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.6.4.tgz", + "integrity": "sha512-v28EW9DWDFpzcD9O5iyJXg3R3+q+mET5JhnjJzQUZMHOv67bpSIHq81GEYpPNZHG+XXHsfSme3nxp/hndKEcsQ==", "dev": true }, "js-base64": { - "version": "2.5.1", - "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.5.1.tgz", - "integrity": "sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw==", + "version": "2.6.4", + "resolved": "https://registry.npmjs.org/js-base64/-/js-base64-2.6.4.tgz", + "integrity": "sha512-pZe//GGmwJndub7ZghVHz7vjb2LgC1m8B07Au3eYqeqv9emhESByMXxaEgkUkEqJe87oBbSniGYoQNIBklc7IQ==", "dev": true }, "js-beautify": { @@ -10191,27 +10385,11 @@ "integrity": "sha512-OMwf/tPDpE/BLlYKqZOhqWsd3/z2N3KOlyn1wsCRGFwViE8LOQTcDtathQvHvZc+q+zWmcNAbwKSC+iJoMaH2Q==", "dev": true, "requires": { - "config-chain": "1.1.12", - "editorconfig": "0.15.3", - "glob": "7.1.4", - "mkdirp": "0.5.1", - "nopt": "4.0.1" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "config-chain": "^1.1.12", + "editorconfig": "^0.15.3", + "glob": "^7.1.3", + "mkdirp": "~0.5.1", + "nopt": "~4.0.1" } }, "js-levenshtein": { @@ -10221,25 +10399,24 @@ "dev": true }, "js-message": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.5.tgz", - "integrity": "sha1-IwDSSxrwjondCVvBpMnJz8uJLRU=", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/js-message/-/js-message-1.0.7.tgz", + "integrity": "sha512-efJLHhLjIyKRewNS9EGZ4UpI8NguuL6fKkhRxVuMmrGV2xN/0APGdQYwLFky5w9naebSZ0OwAGp0G6/2Cg90rA==", "dev": true }, "js-queue": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.0.tgz", - "integrity": "sha1-NiITz4YPRo8BJfxslqvBdCUx+Ug=", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/js-queue/-/js-queue-2.0.2.tgz", + "integrity": "sha512-pbKLsbCfi7kriM3s1J4DDCo7jQkI58zPLHi0heXPzPlj0hjUsm+FesPUbE0DSbIVIK503A36aUBoCN7eMFedkA==", "dev": true, "requires": { - "easy-stack": "1.0.0" + "easy-stack": "^1.0.1" } }, "js-tokens": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" }, "js-yaml": { "version": "3.13.1", @@ -10247,8 +10424,8 @@ "integrity": "sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw==", "dev": true, "requires": { - "argparse": "1.0.10", - "esprima": "4.0.1" + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, "dependencies": { "esprima": { @@ -10271,32 +10448,32 @@ "integrity": "sha512-y8Px43oyiBM13Zc1z780FrfNLJCXTL40EWlty/LXUtcjykRBNgLlCjWXpfSPBl2iv+N7koQN+dvqszHZgT/Fjw==", "dev": true, "requires": { - "abab": "2.0.0", - "acorn": "5.7.3", - "acorn-globals": "4.3.2", - "array-equal": "1.0.0", - "cssom": "0.3.6", - "cssstyle": "1.2.2", - "data-urls": "1.1.0", - "domexception": "1.0.1", - "escodegen": "1.11.1", - "html-encoding-sniffer": "1.0.2", - "left-pad": "1.3.0", - "nwsapi": "2.1.4", + "abab": "^2.0.0", + "acorn": "^5.5.3", + "acorn-globals": "^4.1.0", + "array-equal": "^1.0.0", + "cssom": ">= 0.3.2 < 0.4.0", + "cssstyle": "^1.0.0", + "data-urls": "^1.0.0", + "domexception": "^1.0.1", + "escodegen": "^1.9.1", + "html-encoding-sniffer": "^1.0.2", + "left-pad": "^1.3.0", + "nwsapi": "^2.0.7", "parse5": "4.0.0", - "pn": "1.1.0", - "request": "2.88.0", - "request-promise-native": "1.0.7", - "sax": "1.2.4", - "symbol-tree": "3.2.2", - "tough-cookie": "2.4.3", - "w3c-hr-time": "1.0.1", - "webidl-conversions": "4.0.2", - "whatwg-encoding": "1.0.5", - "whatwg-mimetype": "2.3.0", - "whatwg-url": "6.5.0", - "ws": "5.2.2", - "xml-name-validator": "3.0.0" + "pn": "^1.1.0", + "request": "^2.87.0", + "request-promise-native": "^1.0.5", + "sax": "^1.2.4", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.3.4", + "w3c-hr-time": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.3", + "whatwg-mimetype": "^2.1.0", + "whatwg-url": "^6.4.1", + "ws": "^5.2.0", + "xml-name-validator": "^3.0.0" } }, "jsesc": { @@ -10306,19 +10483,25 @@ "dev": true }, "json-buffer": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.0.tgz", - "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=" + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", + "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==" }, "json-parse-better-errors": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==" + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-parse-even-better-errors": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", + "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==" }, "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", "dev": true }, "json-schema-traverse": { @@ -10339,28 +10522,11 @@ "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", "dev": true }, - "json3": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/json3/-/json3-3.3.2.tgz", - "integrity": "sha1-PAQ0dD35Pi9cQq7nsZvLSDV19OE=", - "dev": true - }, "json5": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.1.0.tgz", - "integrity": "sha512-8Mh9h6xViijj36g7Dxi+Y4S6hNGV96vcJZr/SrlHh1LR/pEn/8j/+qIBbs44YKl69Lrfctp4QD+AdWLTMqEZAQ==", - "dev": true, - "requires": { - "minimist": "1.2.0" - }, - "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true - } - } + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", + "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", + "dev": true }, "jsonfile": { "version": "4.0.0", @@ -10368,24 +10534,18 @@ "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { - "graceful-fs": "4.1.15" + "graceful-fs": "^4.1.6" } }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", + "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", "dev": true, "requires": { "assert-plus": "1.0.0", "extsprintf": "1.3.0", - "json-schema": "0.2.3", + "json-schema": "0.4.0", "verror": "1.10.0" } }, @@ -10395,11 +10555,11 @@ "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" }, "keyv": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", - "integrity": "sha512-eguHnq22OE3uVoSYG0LVWNP+4ppamWr9+zWBe1bsNcovIMy6huUJFPgy4mGwCd/rnl3vOLGW1MTlu4c57CT1xA==", + "version": "4.5.2", + "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.2.tgz", + "integrity": "sha512-5MHbFaKn8cNSmVW7BYnijeAVlE4cYA/SVkifVgrh7yotnfhKmjuXpDKjrABLnT0SfHWV21P8ow07OGfRrNDg8g==", "requires": { - "json-buffer": "3.0.0" + "json-buffer": "3.0.1" } }, "killable": { @@ -10409,10 +10569,9 @@ "dev": true }, "kind-of": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.2.tgz", - "integrity": "sha512-s5kLOcnH0XqDO+FvuaLX8DDjZ18CGFk7VygH40QoKPUQhW4e2rvM0rwUq0t8IQDOwYSeLK01U90OjzBTme2QqA==", - "dev": true + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==" }, "kleur": { "version": "2.0.2", @@ -10426,8 +10585,8 @@ "integrity": "sha512-On+V7K2uZK6wK7x691ycSUbLD/FyKKelArkbaAMSSJU8JmqmhwN2+mnJDNINuJWSrh2L0kDk+ZQtbC/gOWUwLw==", "dev": true, "requires": { - "chalk": "2.4.2", - "shell-quote": "1.6.1" + "chalk": "^2.3.0", + "shell-quote": "^1.6.1" } }, "launch-editor-middleware": { @@ -10436,16 +10595,7 @@ "integrity": "sha512-s0UO2/gEGiCgei3/2UN3SMuUj1phjQN8lcpnvgLSz26fAzNWPQ6Nf/kF5IFClnfU2ehp6LrmKdMU/beveO+2jg==", "dev": true, "requires": { - "launch-editor": "2.2.1" - } - }, - "lcid": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-1.0.0.tgz", - "integrity": "sha1-MIrMr6C8SDo4Z7S28rlQYlHRuDU=", - "dev": true, - "requires": { - "invert-kv": "1.0.0" + "launch-editor": "^2.2.1" } }, "left-pad": { @@ -10466,21 +10616,26 @@ "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", "dev": true, "requires": { - "prelude-ls": "1.1.2", - "type-check": "0.3.2" + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" } }, + "lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, "load-json-file": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "parse-json": "2.2.0", - "pify": "2.3.0", - "pinkie-promise": "2.0.1", - "strip-bom": "2.0.0" + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" }, "dependencies": { "pify": { @@ -10492,13 +10647,13 @@ } }, "loader-fs-cache": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.2.tgz", - "integrity": "sha512-70IzT/0/L+M20jUlEqZhZyArTU6VKLRTYRDAYN26g4jfzpJqjipLL3/hgYpySqI9PwsVRHHFja0LfEmsx9X2Cw==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/loader-fs-cache/-/loader-fs-cache-1.0.3.tgz", + "integrity": "sha512-ldcgZpjNJj71n+2Mf6yetz+c9bM4xpKtNds4LbqXzU/PTdeAX0g3ytnU1AJMEcTk2Lex4Smpe3Q/eCTsvUBxbA==", "dev": true, "requires": { - "find-cache-dir": "0.1.1", - "mkdirp": "0.5.1" + "find-cache-dir": "^0.1.1", + "mkdirp": "^0.5.1" }, "dependencies": { "find-cache-dir": { @@ -10507,9 +10662,9 @@ "integrity": "sha1-yN765XyKUqinhPnjHFfHQumToLk=", "dev": true, "requires": { - "commondir": "1.0.1", - "mkdirp": "0.5.1", - "pkg-dir": "1.0.0" + "commondir": "^1.0.1", + "mkdirp": "^0.5.1", + "pkg-dir": "^1.0.0" } }, "find-up": { @@ -10518,8 +10673,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -10528,7 +10683,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } }, "pkg-dir": { @@ -10537,7 +10692,7 @@ "integrity": "sha1-ektQio1bstYp1EcFb/TpyTFM89Q=", "dev": true, "requires": { - "find-up": "1.1.2" + "find-up": "^1.0.0" } } } @@ -10549,30 +10704,30 @@ "dev": true }, "loader-utils": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.2.3.tgz", - "integrity": "sha512-fkpz8ejdnEMG3s37wGL07iSBDg99O9D5yflE9RGNH3hRdx9SOwYfnGYdZOUIZitN8E+E2vkq3MUMYMvPYl5ZZA==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-1.4.2.tgz", + "integrity": "sha512-I5d00Pd/jwMD2QCduo657+YM/6L3KZu++pmX9VFncxaxvHcru9jx1lBaFft+r4Mt2jK0Yhp41XlRAihzPxHNCg==", "dev": true, "requires": { - "big.js": "5.2.2", - "emojis-list": "2.1.0", - "json5": "1.0.1" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^1.0.1" }, "dependencies": { + "emojis-list": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/emojis-list/-/emojis-list-3.0.0.tgz", + "integrity": "sha512-/kyM18EfinwXZbno9FyUGeFh87KC8HRQBQGildHZbEuRyWFOmv1U10o9BBp8XVZDVNNuQKyIGIu5ZYAAXJ0V2Q==", + "dev": true + }, "json5": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.1.tgz", - "integrity": "sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", + "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", "dev": true, "requires": { - "minimist": "1.2.0" + "minimist": "^1.2.0" } - }, - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true } } }, @@ -10580,21 +10735,22 @@ "version": "2.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", + "dev": true, "requires": { - "p-locate": "2.0.0", - "path-exists": "3.0.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" } }, "lodash": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", - "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==", + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "dev": true }, "lodash-es": { - "version": "4.17.15", - "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.15.tgz", - "integrity": "sha512-rlrc3yU3+JNOpZ9zj5pQtxnx2THmvRykwL4Xlxoa8I9lHBlVbbyPhgyPMioxVZ4NqyxaVVtaJnzsyOidQIhyyQ==" + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" }, "lodash.debounce": { "version": "4.0.8", @@ -10631,12 +10787,6 @@ "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", "dev": true }, - "lodash.tail": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lodash.tail/-/lodash.tail-4.1.1.tgz", - "integrity": "sha1-0jM6NtnncXyK0vfKyv7HwytERmQ=", - "dev": true - }, "lodash.transform": { "version": "4.6.0", "resolved": "https://registry.npmjs.org/lodash.transform/-/lodash.transform-4.6.0.tgz", @@ -10655,13 +10805,13 @@ "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", "dev": true, "requires": { - "chalk": "2.4.2" + "chalk": "^2.0.1" } }, "loglevel": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.6.1.tgz", - "integrity": "sha1-4PyVEztu8nbNyIh82vJKpvFW+Po=", + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/loglevel/-/loglevel-1.8.1.tgz", + "integrity": "sha512-tCRIJM51SHjAayKwC+QAg8hT8vg6z7GSgLJKGvzuPb1Wc+hLzqtuVLxp6/HzSPOozuK+8ErAhy7U/sVzw8Dgfg==", "dev": true }, "loose-envify": { @@ -10670,16 +10820,17 @@ "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", "dev": true, "requires": { - "js-tokens": "4.0.0" + "js-tokens": "^3.0.0 || ^4.0.0" } }, "loud-rejection": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/loud-rejection/-/loud-rejection-1.6.0.tgz", - "integrity": "sha1-W0b4AUft7leIcPCG0Eghz5mOVR8=", + "integrity": "sha512-RPNliZOFkqFumDhvYqOaNY4Uz9oJM2K9tC6JWsJJsNdhuONW4LQHRBpb0qf4pJApVffI5N39SwzWZJuEhfd7eQ==", + "dev": true, "requires": { - "currently-unhandled": "0.4.1", - "signal-exit": "3.0.2" + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" } }, "lower-case": { @@ -10689,9 +10840,9 @@ "dev": true }, "lowercase-keys": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", - "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-2.0.0.tgz", + "integrity": "sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==" }, "lru-cache": { "version": "5.1.1", @@ -10699,7 +10850,7 @@ "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", "dev": true, "requires": { - "yallist": "3.0.3" + "yallist": "^3.0.2" } }, "make-dir": { @@ -10708,8 +10859,8 @@ "integrity": "sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA==", "dev": true, "requires": { - "pify": "4.0.1", - "semver": "5.7.0" + "pify": "^4.0.1", + "semver": "^5.6.0" } }, "makeerror": { @@ -10718,7 +10869,7 @@ "integrity": "sha1-4BpckQnyr3lmDk6LlYd5AYT1qWw=", "dev": true, "requires": { - "tmpl": "1.0.4" + "tmpl": "1.0.x" } }, "map-age-cleaner": { @@ -10727,7 +10878,7 @@ "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", "dev": true, "requires": { - "p-defer": "1.0.0" + "p-defer": "^1.0.0" } }, "map-cache": { @@ -10747,7 +10898,7 @@ "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", "dev": true, "requires": { - "object-visit": "1.0.1" + "object-visit": "^1.0.0" } }, "mapbox-gl": { @@ -10755,29 +10906,29 @@ "resolved": "https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-1.10.0.tgz", "integrity": "sha512-SrJXcR9s5yEsPuW2kKKumA1KqYW9RrL8j7ZcIh6glRQ/x3lwNMfwz/UEJAJcVNgeX+fiwzuBoDIdeGB/vSkZLQ==", "requires": { - "@mapbox/geojson-rewind": "0.5.0", - "@mapbox/geojson-types": "1.0.2", - "@mapbox/jsonlint-lines-primitives": "2.0.2", - "@mapbox/mapbox-gl-supported": "1.5.0", - "@mapbox/point-geometry": "0.1.0", - "@mapbox/tiny-sdf": "1.1.1", - "@mapbox/unitbezier": "0.0.0", - "@mapbox/vector-tile": "1.3.1", - "@mapbox/whoots-js": "3.1.0", - "csscolorparser": "1.0.3", - "earcut": "2.2.2", - "geojson-vt": "3.2.1", - "gl-matrix": "3.3.0", - "grid-index": "1.1.0", - "minimist": "1.2.5", - "murmurhash-js": "1.0.0", - "pbf": "3.2.1", - "potpack": "1.0.1", - "quickselect": "2.0.0", - "rw": "1.3.3", - "supercluster": "7.0.0", - "tinyqueue": "2.0.3", - "vt-pbf": "3.1.1" + "@mapbox/geojson-rewind": "^0.5.0", + "@mapbox/geojson-types": "^1.0.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/mapbox-gl-supported": "^1.5.0", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^1.1.1", + "@mapbox/unitbezier": "^0.0.0", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "csscolorparser": "~1.0.3", + "earcut": "^2.2.2", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.2.1", + "grid-index": "^1.1.0", + "minimist": "^1.2.5", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^1.0.1", + "quickselect": "^2.0.0", + "rw": "^1.3.3", + "supercluster": "^7.0.0", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.1" }, "dependencies": { "@mapbox/geojson-rewind": { @@ -10785,8 +10936,8 @@ "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz", "integrity": "sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg==", "requires": { - "concat-stream": "2.0.0", - "minimist": "1.2.5" + "concat-stream": "~2.0.0", + "minimist": "^1.2.5" } }, "concat-stream": { @@ -10794,25 +10945,20 @@ "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-2.0.0.tgz", "integrity": "sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A==", "requires": { - "buffer-from": "1.1.1", - "inherits": "2.0.3", - "readable-stream": "3.6.0", - "typedarray": "0.0.6" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" - }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "requires": { - "inherits": "2.0.3", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } @@ -10829,15 +10975,15 @@ "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "mdn-data": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-1.1.4.tgz", - "integrity": "sha512-FSYbp3lyKjyj3E7fMl6rYvUdX0FBXaluGqlFoYESWQlyUTq8R+wp0rkFxoYFqZlHCvsUXGjyJmLQSnXToYhOSA==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", "dev": true }, "media-typer": { @@ -10846,54 +10992,194 @@ "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", "dev": true }, - "mem": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-1.1.0.tgz", - "integrity": "sha1-Xt1StIXKHZAP5kiVUFOZoN+kX3Y=", - "dev": true, - "requires": { - "mimic-fn": "1.2.0" - } - }, "memory-fs": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.4.1.tgz", "integrity": "sha1-OpoguEYlI+RHz7x+i7gO1me/xVI=", "dev": true, "requires": { - "errno": "0.1.7", - "readable-stream": "2.3.6" + "errno": "^0.1.3", + "readable-stream": "^2.0.1" } }, "meow": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", - "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", - "dev": true, - "requires": { - "camelcase-keys": "2.1.0", - "decamelize": "1.2.0", - "loud-rejection": "1.6.0", - "map-obj": "1.0.1", - "minimist": "1.2.0", - "normalize-package-data": "2.5.0", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "redent": "1.0.0", - "trim-newlines": "1.0.0" + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "requires": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "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" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "find-up": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", + "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", + "requires": { + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + } }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true + "hosted-git-info": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", + "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "locate-path": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", + "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", + "requires": { + "p-locate": "^4.1.0" + } + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "requires": { + "yallist": "^4.0.0" + } + }, + "normalize-package-data": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", + "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", + "requires": { + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" + } + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", + "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", + "requires": { + "p-limit": "^2.2.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==" + }, + "parse-json": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", + "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", + "requires": { + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" + } + }, + "path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==" + }, + "read-pkg": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", + "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", + "requires": { + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "dependencies": { + "hosted-git-info": { + "version": "2.8.9", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", + "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==" + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==" + }, + "type-fest": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", + "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==" + } + } + }, + "read-pkg-up": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", + "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", + "requires": { + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "dependencies": { + "type-fest": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", + "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==" + } + } + }, + "semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "requires": { + "lru-cache": "^6.0.0" + } + }, + "type-fest": { + "version": "0.18.1", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", + "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==" + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" + }, + "yargs-parser": { + "version": "20.2.9", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", + "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==" } } }, @@ -10915,7 +11201,7 @@ "integrity": "sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw==", "dev": true, "requires": { - "source-map": "0.6.1" + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -10932,7 +11218,7 @@ "integrity": "sha1-QEEgLVCKNCugAXQAjfDCUbjBNeE=", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "merge2": { @@ -10958,19 +11244,19 @@ "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "braces": "2.3.2", - "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.13", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "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" } }, "miller-rabin": { @@ -10979,29 +11265,27 @@ "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", "dev": true, "requires": { - "bn.js": "4.11.8", - "brorand": "1.1.0" + "bn.js": "^4.0.0", + "brorand": "^1.0.1" } }, "mime": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.3.tgz", - "integrity": "sha512-QgrPRJfE+riq5TPZMcHZOtm8c6K/yYrMbKIoRfapfiGLxS8OTeIfRhUGW5LU7MlRa52KOAGCfUNruqLrIBvWZw==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "mime-db": { - "version": "1.40.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.40.0.tgz", - "integrity": "sha512-jYdeOMPy9vnxEqFRRo6ZvTZ8d9oPb+k18PKoYNYUe2stVEBPPwsln/qWzdbmaIvnhZ9v2P+CuecK+fpUfsV2mA==", - "dev": true + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==" }, "mime-types": { - "version": "2.1.24", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.24.tgz", - "integrity": "sha512-WaFHS3MCl5fapm3oLxU4eYDw77IQM2ACcxQ9RIxfaC3ooc6PFuBMGZZsYpvoXS5D5QTWPieo1jjLdAm3TBP3cQ==", - "dev": true, + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", "requires": { - "mime-db": "1.40.0" + "mime-db": "1.52.0" } }, "mimic-fn": { @@ -11015,27 +11299,33 @@ "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-1.0.1.tgz", "integrity": "sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==" }, + "min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==" + }, "mini-css-extract-plugin": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.6.0.tgz", - "integrity": "sha512-79q5P7YGI6rdnVyIAV4NXpBQJFWdkzJxCim3Kog4078fM0piAaFlwocqbejdWtLW1cEzCexPrh6EdyFsPgVdAw==", + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/mini-css-extract-plugin/-/mini-css-extract-plugin-0.8.2.tgz", + "integrity": "sha512-a3Y4of27Wz+mqK3qrcd3VhYz6cU0iW5x3Sgvqzbj+XmlrSizmvu8QQMl5oMYJjgHOC4iyt+w7l4umP+dQeW3bw==", "dev": true, "requires": { - "loader-utils": "1.2.3", - "normalize-url": "2.0.1", - "schema-utils": "1.0.0", - "webpack-sources": "1.3.0" + "loader-utils": "^1.1.0", + "normalize-url": "1.9.1", + "schema-utils": "^1.0.0", + "webpack-sources": "^1.1.0" }, "dependencies": { "normalize-url": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-2.0.1.tgz", - "integrity": "sha512-D6MUW4K/VzoJ4rJ01JFKxDrtY1v9wrgzCX5f2qj/lzH1m/lW6MhUZFKerVsnyjOhOsYzI9Kqqak+10l4LvLpMw==", + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-1.9.1.tgz", + "integrity": "sha512-A48My/mtCklowHBlI8Fq2jFWK4tX4lJ5E6ytFsSOq1fzpvT0SQSgKhSg7lN5c2uYFOrUAOQp6zhhJnpp1eMloQ==", "dev": true, "requires": { - "prepend-http": "2.0.0", - "query-string": "5.1.1", - "sort-keys": "2.0.0" + "object-assign": "^4.0.1", + "prepend-http": "^1.0.0", + "query-string": "^4.1.0", + "sort-keys": "^1.0.0" } }, "schema-utils": { @@ -11044,9 +11334,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -11064,45 +11354,57 @@ "dev": true }, "minimatch": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", - "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.8.tgz", + "integrity": "sha512-6FsRAQsxQ61mw+qP1ZzbL9Bc78x2p5OqNgNpnoAFLTrX8n5Kxph0CsnhmKKNXTWjXqU5L0pGPR7hYk+XWZr60Q==", "dev": true, "requires": { - "brace-expansion": "1.1.11" + "brace-expansion": "^1.1.7" } }, "minimist": { - "version": "0.0.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", - "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=", - "dev": true + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", + "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==" }, "minimist-options": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", - "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", + "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "requires": { - "arrify": "1.0.1", - "is-plain-obj": "1.1.0" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" } }, "mississippi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", - "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", - "dev": true, - "requires": { - "concat-stream": "1.6.2", - "duplexify": "3.7.1", - "end-of-stream": "1.4.1", - "flush-write-stream": "1.1.1", - "from2": "2.3.0", - "parallel-transform": "1.1.0", - "pump": "3.0.0", - "pumpify": "1.5.1", - "stream-each": "1.2.3", - "through2": "2.0.5" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-2.0.0.tgz", + "integrity": "sha512-zHo8v+otD1J10j/tC+VNoGK9keCuByhKovAvdn74dmxJl9+mWHnx6EMsDN4lgRoMI/eYo2nchAxniIbUPb5onw==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^2.0.1", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } } }, "mixin-deep": { @@ -11111,8 +11413,8 @@ "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", "dev": true, "requires": { - "for-in": "1.0.2", - "is-extendable": "1.0.1" + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" }, "dependencies": { "is-extendable": { @@ -11121,42 +11423,24 @@ "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", "dev": true, "requires": { - "is-plain-object": "2.0.4" + "is-plain-object": "^2.0.4" } } } }, - "mixin-object": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/mixin-object/-/mixin-object-2.0.1.tgz", - "integrity": "sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4=", - "dev": true, - "requires": { - "for-in": "0.1.8", - "is-extendable": "0.1.1" - }, - "dependencies": { - "for-in": { - "version": "0.1.8", - "resolved": "https://registry.npmjs.org/for-in/-/for-in-0.1.8.tgz", - "integrity": "sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE=", - "dev": true - } - } - }, "mkdirp": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", - "integrity": "sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM=", + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", "dev": true, "requires": { - "minimist": "0.0.8" + "minimist": "^1.2.6" } }, "moment": { - "version": "2.24.0", - "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz", - "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg==" + "version": "2.29.4", + "resolved": "https://registry.npmjs.org/moment/-/moment-2.29.4.tgz", + "integrity": "sha512-5LC9SOxjSc2HF6vO2CyuTDNivEdoz2IvyJJGj6X8DJ0eFyfszE0QiEd+iXmBvUP3WHxSjFH/vIsA0EN00cgr8w==" }, "move-concurrently": { "version": "1.0.1", @@ -11164,12 +11448,12 @@ "integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=", "dev": true, "requires": { - "aproba": "1.2.0", - "copy-concurrently": "1.0.5", - "fs-write-stream-atomic": "1.0.10", - "mkdirp": "0.5.1", - "rimraf": "2.6.3", - "run-queue": "1.0.3" + "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" } }, "moxios": { @@ -11190,8 +11474,8 @@ "integrity": "sha512-ji6J5enbMyGRHIAkAOu3WdV8nggqviKCEKtXcOqfphZZtQrmHKycfynJ2V7eVPUA4NhJ6V7Wf4TmGbTwKE9B6g==", "dev": true, "requires": { - "dns-packet": "1.3.1", - "thunky": "1.0.3" + "dns-packet": "^1.3.1", + "thunky": "^1.0.2" } }, "multicast-dns-service-types": { @@ -11217,17 +11501,9 @@ "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", "dev": true, "requires": { - "any-promise": "1.3.0", - "object-assign": "4.1.1", - "thenify-all": "1.6.0" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - } + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" } }, "nan": { @@ -11247,17 +11523,17 @@ "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", "dev": true, "requires": { - "arr-diff": "4.0.0", - "array-unique": "0.3.2", - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "fragment-cache": "0.2.1", - "is-windows": "1.0.2", - "kind-of": "6.0.2", - "object.pick": "1.3.0", - "regex-not": "1.0.2", - "snapdragon": "0.8.2", - "to-regex": "3.0.2" + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" } }, "natural-compare": { @@ -11267,9 +11543,9 @@ "dev": true }, "negotiator": { - "version": "0.6.2", - "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", - "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", "dev": true }, "neo-async": { @@ -11290,17 +11566,23 @@ "integrity": "sha512-rmTZ9kz+f3rCvK2TD1Ue/oZlns7OGoIWP4fc3llxxRXlOkHKoWPPWJOfFYpITabSow43QJbRIoHQXtt10VldyQ==", "dev": true, "requires": { - "lower-case": "1.1.4" + "lower-case": "^1.1.1" } }, + "node-addon-api": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-1.7.2.tgz", + "integrity": "sha512-ibPK3iA+vaY1eEjESkQkM0BbCqFOaZMiXRTtdB0u7b4djtY6JnsjvPdUHVMg6xQt3B8fpTTWHI9A+ADjM9frzg==", + "dev": true + }, "node-cache": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/node-cache/-/node-cache-4.2.0.tgz", "integrity": "sha512-obRu6/f7S024ysheAjoYFEEBqqDWv4LOMNJEuO8vMeEw2AT4z+NCzO4hlc2lhI4vATzbCQv6kke9FVdx0RbCOw==", "dev": true, "requires": { - "clone": "2.1.2", - "lodash": "4.17.15" + "clone": "2.x", + "lodash": "4.x" }, "dependencies": { "clone": { @@ -11312,14 +11594,38 @@ } }, "node-fetch": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.0.tgz", - "integrity": "sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA==" + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.7.0.tgz", + "integrity": "sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==", + "requires": { + "whatwg-url": "^5.0.0" + }, + "dependencies": { + "tr46": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", + "integrity": "sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==" + }, + "webidl-conversions": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", + "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==" + }, + "whatwg-url": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", + "integrity": "sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==", + "requires": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" + } + } + } }, "node-forge": { - "version": "0.7.5", - "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.7.5.tgz", - "integrity": "sha512-MmbQJ2MTESTjt3Gi/3yG1wGpIMhUfcIypUCGtTizFR9IiccFwxSpfp0vtIZlkFclEqERemxfnSdZEMR9VqqEFQ==", + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/node-forge/-/node-forge-0.10.0.tgz", + "integrity": "sha512-PPmu8eEeG9saEUvI97fm4OYxXVB6bFvyNTyiUOBichBpFG8A1Ljw3bY62+5oOjDEMHRnd0Y7HQ+x7uzxOzC6JA==", "dev": true }, "node-gyp": { @@ -11328,47 +11634,33 @@ "integrity": "sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA==", "dev": true, "requires": { - "fstream": "1.0.12", - "glob": "7.1.4", - "graceful-fs": "4.1.15", - "mkdirp": "0.5.1", - "nopt": "3.0.6", - "npmlog": "4.1.2", - "osenv": "0.1.5", - "request": "2.88.0", - "rimraf": "2.6.3", - "semver": "5.3.0", - "tar": "2.2.2", - "which": "1.3.1" + "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" }, "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, "nopt": { "version": "3.0.6", "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", - "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "integrity": "sha512-4GUt3kSEYmk4ITxzB/b9vaIDfUVWN/Ml1Fwl11IlnIG2iaJ9O6WXZ9SrYM9NLI8OCBieN2Y8SWC2oJV0RQ7qYg==", "dev": true, "requires": { - "abbrev": "1.1.1" + "abbrev": "1" } }, "semver": { "version": "5.3.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", - "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "integrity": "sha512-mfmm3/H9+67MCVix1h+IXTpDwL6710LyHuk7+cWC9T1mE0qz4iHhh6r4hU2wrIT9iTsAAC2XQRvfblL028cpLw==", "dev": true } } @@ -11380,149 +11672,118 @@ "dev": true }, "node-ipc": { - "version": "9.1.1", - "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.1.1.tgz", - "integrity": "sha512-FAyICv0sIRJxVp3GW5fzgaf9jwwRQxAKDJlmNFUL5hOy+W4X/I5AypyHoq0DXXbo9o/gt79gj++4cMr4jVWE/w==", + "version": "9.2.1", + "resolved": "https://registry.npmjs.org/node-ipc/-/node-ipc-9.2.1.tgz", + "integrity": "sha512-mJzaM6O3xHf9VT8BULvJSbdVbmHUKRNOH7zDDkCrA1/T+CVjq2WVIDfLt0azZRXpgArJtl3rtmEozrbXPZ9GaQ==", "dev": true, "requires": { "event-pubsub": "4.3.0", - "js-message": "1.0.5", - "js-queue": "2.0.0" - } - }, - "node-libs-browser": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.0.tgz", - "integrity": "sha512-5MQunG/oyOaBdttrL40dA7bUfPORLRWMUJLQtMg7nluxUvk5XwnLdL9twQHFAjRx/y7mIMkLKT9++qPbbk6BZA==", - "dev": true, - "requires": { - "assert": "1.5.0", - "browserify-zlib": "0.2.0", - "buffer": "4.9.1", - "console-browserify": "1.1.0", - "constants-browserify": "1.0.0", - "crypto-browserify": "3.12.0", - "domain-browser": "1.2.0", - "events": "3.0.0", - "https-browserify": "1.0.0", - "os-browserify": "0.3.0", - "path-browserify": "0.0.0", - "process": "0.11.10", - "punycode": "1.4.1", - "querystring-es3": "0.2.1", - "readable-stream": "2.3.6", - "stream-browserify": "2.0.2", - "stream-http": "2.8.3", - "string_decoder": "1.1.1", - "timers-browserify": "2.0.10", - "tty-browserify": "0.0.0", - "url": "0.11.0", - "util": "0.11.1", - "vm-browserify": "0.0.4" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "js-message": "1.0.7", + "js-queue": "2.0.2" } }, "node-notifier": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.0.tgz", - "integrity": "sha512-SUDEb+o71XR5lXSTyivXd9J7fCloE3SyP4lSgt3lU2oSANiox+SxlNRGPjDKrwU1YN3ix2KN/VGGCg0t01rttQ==", + "version": "5.4.5", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-5.4.5.tgz", + "integrity": "sha512-tVbHs7DyTLtzOiN78izLA85zRqB9NvEXkAf014Vx3jtSvn/xBl6bR8ZYifj+dFcFrKI21huSQgJZ6ZtL3B4HfQ==", "dev": true, "requires": { - "growly": "1.3.0", - "is-wsl": "1.1.0", - "semver": "5.7.0", - "shellwords": "0.1.1", - "which": "1.3.1" + "growly": "^1.3.0", + "is-wsl": "^1.1.0", + "semver": "^5.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" } }, "node-releases": { - "version": "1.1.21", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.21.tgz", - "integrity": "sha512-TwnURTCjc8a+ElJUjmDqU6+12jhli1Q61xOQmdZ7ECZVBZuQpN/1UnembiIHDM1wCcfLvh5wrWXUF5H6ufX64Q==", - "dev": true, - "requires": { - "semver": "5.7.0" - } + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", + "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", + "dev": true }, "node-sass": { - "version": "4.12.0", - "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.12.0.tgz", - "integrity": "sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ==", - "dev": true, - "requires": { - "async-foreach": "0.1.3", - "chalk": "1.1.3", - "cross-spawn": "3.0.1", - "gaze": "1.1.3", - "get-stdin": "4.0.1", - "glob": "7.1.4", - "in-publish": "2.0.0", - "lodash": "4.17.15", - "meow": "3.7.0", - "mkdirp": "0.5.1", - "nan": "2.14.0", - "node-gyp": "3.8.0", - "npmlog": "4.1.2", - "request": "2.88.0", - "sass-graph": "2.2.4", - "stdout-stream": "1.4.1", - "true-case-path": "1.0.3" + "version": "4.14.1", + "resolved": "https://registry.npmjs.org/node-sass/-/node-sass-4.14.1.tgz", + "integrity": "sha512-sjCuOlvGyCJS40R8BscF5vhVlQjNN069NtQ1gSxyK1u9iqvn6tf7O1R4GNowVZfiZUCRt5MmMs1xd+4V/7Yr0g==", + "dev": true, + "requires": { + "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" }, "dependencies": { "ansi-regex": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "integrity": "sha512-TIGnTpdo+E3+pCyAluZvtED5p5wCqLdezCyhPZzKPcxvFplEt4i+W7OONCKgeZFT3+y5NZZfOOS/Bdcanm1MYA==", "dev": true }, "ansi-styles": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", + "integrity": "sha512-kmCevFghRiWM7HB5zTPULl4r9bVFSWjz62MhqizDGUrq2NWuNMQyuv4tHHoKJHs69M/MF64lEcHdYIocrdWQYA==", + "dev": true + }, + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha512-DLIsRzJVBQu72meAKPkWQOLcujdXT32hwdfnkI1frSiSRMK1MofjKHf+MEx0SB6fjEFXL8fBDv1dKymBlOp4Qw==", "dev": true }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha512-bA/Z/DERHKqoEOrp+qeGKw1QlvEQkGZSc0XaY6VnTxZr+Kv1G5zFwttpjv8qxZ/sBPT4nthwZaAcsAZTJlSKXQ==", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + } + }, "chalk": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", + "integrity": "sha512-U3lRVLMSlsCfjqYPbLyVv11M9CPW4I728d6TCKMAOJueEeB9/8o+eSsMnxPJD+Q+K909sdESg7C+tIkoH6on1A==", "dev": true, "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" + "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" } }, "cross-spawn": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-3.0.1.tgz", - "integrity": "sha1-ElYDfsufDF9549bvE14wdwGEuYI=", + "integrity": "sha512-eZ+m1WNhSZutOa/uRblAc9Ut5MQfukFrFMtPSm3bZCA888NmMd5AWXWdgRZ80zd+pTk1P2JrGjg9pUPTvl2PWQ==", "dev": true, "requires": { - "lru-cache": "4.1.5", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "which": "^1.2.9" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "indent-string": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-2.1.0.tgz", + "integrity": "sha512-aqwDFWSgSgfRaEwao5lg5KEcVd/2a+D1rvoG7NdilmYz0NwRk6StWpWdz/Hpk34MKPpx7s8XxUqimfcQK6gGlg==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "repeating": "^2.0.0" } }, "lru-cache": { @@ -11531,29 +11792,72 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha512-TNdwZs0skRlpPpCUK25StC4VH+tP5GgeY1HQOOGP+lQ2xtdkN2VtT/5tiX9k3IWpkBPV9b3LsAWXn4GGi/PrSA==", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha512-qtW5hKzGQZqKoh6JNSD+4lfitfPKGz42e6QwiRmPM5mmKtR0N41AbJRYu0xJi7nhOJ4WDgRkKvAk6tw4WIwR4g==", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" } }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "integrity": "sha512-VhumSSbBqDTP8p2ZLKj40UjBCV4+v8bUSEpUb4KjRgWk9pbqGF4REFj6KEagidb2f/M6AzC0EmFyDNGaw9OCzg==", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha512-I5iQq6aFMM62fBEAIB/hXzwJD6EEZ0xEGCX2t7oXqaKPIRgt4WruAQ285BISgdkP+HLGWyeGmNJcpIwFeRYRUA==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "get-stdin": "^4.0.1" } }, "supports-color": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", + "integrity": "sha512-KKNVtd6pCYgPIKU4cp2733HWYCpplQhddZLBUryaAHou723x+FRzQ5Df824Fj+IyyuiQTRoub4SnIFfIcrp70g==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha512-Nm4cF79FhSTzrLKGDMi3I4utBtFv8qKy4sq1enftf2gMdpqI8oVQTAfySkTz5r49giVzDj88SVZXP4CeYQwjaw==", "dev": true }, "yallist": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", + "integrity": "sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==", "dev": true } } @@ -11564,19 +11868,20 @@ "integrity": "sha1-0NRoWv1UFRk8jHUFYC0NF81kR00=", "dev": true, "requires": { - "abbrev": "1.1.1", - "osenv": "0.1.5" + "abbrev": "1", + "osenv": "^0.1.4" } }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, "requires": { - "hosted-git-info": "2.7.1", - "resolve": "1.11.0", - "semver": "5.7.0", - "validate-npm-package-license": "3.0.4" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, "normalize-path": { @@ -11608,7 +11913,7 @@ "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", "dev": true, "requires": { - "path-key": "2.0.1" + "path-key": "^2.0.0" } }, "npmlog": { @@ -11617,10 +11922,10 @@ "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", "dev": true, "requires": { - "are-we-there-yet": "1.1.5", - "console-control-strings": "1.1.0", - "gauge": "2.7.4", - "set-blocking": "2.0.0" + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" } }, "nth-check": { @@ -11629,7 +11934,7 @@ "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", "dev": true, "requires": { - "boolbase": "1.0.0" + "boolbase": "~1.0.0" } }, "num2fraction": { @@ -11656,15 +11961,21 @@ "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", "dev": true }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "dev": true + }, "object-copy": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", "dev": true, "requires": { - "copy-descriptor": "0.1.1", - "define-property": "0.2.5", - "kind-of": "3.2.2" + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" }, "dependencies": { "define-property": { @@ -11673,7 +11984,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "kind-of": { @@ -11682,7 +11993,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -11693,6 +12004,12 @@ "integrity": "sha512-OSuu/pU4ENM9kmREg0BdNrUDIl1heYa4mBZacJc+vVWz4GtAwu7jO8s4AIt2aGRUTqxykpWzI3Oqnsm13tTMDA==", "dev": true }, + "object-inspect": { + "version": "1.12.2", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true + }, "object-keys": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", @@ -11705,19 +12022,19 @@ "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.0" } }, "object.assign": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.0.tgz", - "integrity": "sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.4.tgz", + "integrity": "sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==", "dev": true, "requires": { - "define-properties": "1.1.3", - "function-bind": "1.1.1", - "has-symbols": "1.0.0", - "object-keys": "1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" } }, "object.getownpropertydescriptors": { @@ -11726,8 +12043,8 @@ "integrity": "sha1-h1jIRvW0B62rDyNuCYbxSwUcqhY=", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0" + "define-properties": "^1.1.2", + "es-abstract": "^1.5.1" } }, "object.omit": { @@ -11736,8 +12053,8 @@ "integrity": "sha1-Gpx0SCnznbuFjHbKNXmuKlTr0fo=", "dev": true, "requires": { - "for-own": "0.1.5", - "is-extendable": "0.1.1" + "for-own": "^0.1.4", + "is-extendable": "^0.1.1" } }, "object.pick": { @@ -11746,7 +12063,7 @@ "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", "dev": true, "requires": { - "isobject": "3.0.1" + "isobject": "^3.0.1" } }, "object.values": { @@ -11755,10 +12072,10 @@ "integrity": "sha512-8mf0nKLAoFX6VlNVdhGj31SVYpaNFtUnuoOXWyFEstsWRgU837AK+JYM0iAxwkSzGRbwn8cbFmgbyxj1j4VbXg==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1", - "has": "1.0.3" + "define-properties": "^1.1.3", + "es-abstract": "^1.12.0", + "function-bind": "^1.1.1", + "has": "^1.0.3" } }, "obuf": { @@ -11768,9 +12085,9 @@ "dev": true }, "on-finished": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", - "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -11786,9 +12103,8 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, "requires": { - "wrappy": "1.0.2" + "wrappy": "1" } }, "onetime": { @@ -11797,16 +12113,16 @@ "integrity": "sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ=", "dev": true, "requires": { - "mimic-fn": "1.2.0" + "mimic-fn": "^1.0.0" } }, "open": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/open/-/open-6.3.0.tgz", - "integrity": "sha512-6AHdrJxPvAXIowO/aIaeHZ8CeMdDf7qCyRNq8NwJpinmCdXhz+NZR7ie1Too94lpciCDsG+qHGO9Mt0svA4OqA==", + "version": "6.4.0", + "resolved": "https://registry.npmjs.org/open/-/open-6.4.0.tgz", + "integrity": "sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg==", "dev": true, "requires": { - "is-wsl": "1.1.0" + "is-wsl": "^1.1.0" } }, "opener": { @@ -11821,25 +12137,7 @@ "integrity": "sha512-PqHpggC9bLV0VeWcdKhkpxY+3JTzetLSqTCWL/z/tFIbI6G8JCjondXklT1JinczLz2Xib62sSp0T/gKT4KksA==", "dev": true, "requires": { - "is-wsl": "1.1.0" - } - }, - "optimist": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.6.1.tgz", - "integrity": "sha1-2j6nRob6IaGaERwybpDrFaAZZoY=", - "dev": true, - "requires": { - "minimist": "0.0.8", - "wordwrap": "0.0.3" - }, - "dependencies": { - "wordwrap": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", - "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", - "dev": true - } + "is-wsl": "^1.1.0" } }, "optionator": { @@ -11848,12 +12146,12 @@ "integrity": "sha1-NkxeQJ0/TWMB1sC0wFu6UBgK62Q=", "dev": true, "requires": { - "deep-is": "0.1.3", - "fast-levenshtein": "2.0.6", - "levn": "0.3.0", - "prelude-ls": "1.1.2", - "type-check": "0.3.2", - "wordwrap": "1.0.0" + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.4", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "wordwrap": "~1.0.0" } }, "ora": { @@ -11862,21 +12160,12 @@ "integrity": "sha512-eNwHudNbO1folBP3JsZ19v9azXWtQZjICdr3Q0TDPIaeBQ3mXLrh54wM+er0+hSp+dWKf+Z8KM58CYzEyIYxYg==", "dev": true, "requires": { - "chalk": "2.4.2", - "cli-cursor": "2.1.0", - "cli-spinners": "2.1.0", - "log-symbols": "2.2.0", - "strip-ansi": "5.2.0", - "wcwidth": "1.0.1" - } - }, - "original": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/original/-/original-1.0.2.tgz", - "integrity": "sha512-hyBVl6iqqUOJ8FqRe+l/gS8H+kKYjrEndd5Pm1MfBtsEKA038HkkdbAl/72EAXGyonD/PFsvmVG+EvcIpliMBg==", - "dev": true, - "requires": { - "url-parse": "1.4.7" + "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" } }, "os-browserify": { @@ -11891,67 +12180,6 @@ "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", "dev": true }, - "os-locale": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-2.1.0.tgz", - "integrity": "sha512-3sslG3zJbEYcaC4YVAvDorjGxc7tv6KVATnLPZONiljsUncvihe9BQoVCEs0RZ1kmf4Hk9OBqlZfJZWI4GanKA==", - "dev": true, - "requires": { - "execa": "0.7.0", - "lcid": "1.0.0", - "mem": "1.1.0" - }, - "dependencies": { - "cross-spawn": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", - "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", - "dev": true, - "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" - } - }, - "execa": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-0.7.0.tgz", - "integrity": "sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=", - "dev": true, - "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" - } - }, - "get-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-3.0.0.tgz", - "integrity": "sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ=", - "dev": true - }, - "lru-cache": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.5.tgz", - "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", - "dev": true, - "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" - } - }, - "yallist": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-2.1.2.tgz", - "integrity": "sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI=", - "dev": true - } - } - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -11964,14 +12192,14 @@ "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", "dev": true, "requires": { - "os-homedir": "1.0.2", - "os-tmpdir": "1.0.2" + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" } }, "p-cancelable": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.1.tgz", - "integrity": "sha512-HNa1A8LvB1kie7cERyy21VNeHb2CWJJYqyyC2o3klWFfMGlFmWv2Z7sFgZH8ZiaYL95ydToKTFVXgMV/Os0bBQ==" + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-2.1.1.tgz", + "integrity": "sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==" }, "p-defer": { "version": "1.0.0", @@ -11982,7 +12210,8 @@ "p-finally": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", - "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=" + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true }, "p-is-promise": { "version": "2.1.0", @@ -11994,16 +12223,18 @@ "version": "1.3.0", "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", + "dev": true, "requires": { - "p-try": "1.0.0" + "p-try": "^1.0.0" } }, "p-locate": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", + "dev": true, "requires": { - "p-limit": "1.3.0" + "p-limit": "^1.1.0" } }, "p-map": { @@ -12012,18 +12243,20 @@ "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true }, - "p-timeout": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-2.0.1.tgz", - "integrity": "sha512-88em58dDVB/KzPEx1X0N3LwFfYZPyDc4B6eF38M1rk9VTZMbxXXgjugz8mmwpS9Ox4BDZ+t6t3QP5+/gazweIA==", + "p-retry": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-3.0.1.tgz", + "integrity": "sha512-XE6G4+YTTkT2a0UWb2kjZe8xNwf8bIbnqpc/IS/idOBVhyves0mK5OJgeocjx7q5pvX/6m23xuzVPYT1uGM73w==", + "dev": true, "requires": { - "p-finally": "1.0.0" + "retry": "^0.12.0" } }, "p-try": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=" + "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", + "dev": true }, "pako": { "version": "1.0.10", @@ -12037,14 +12270,14 @@ "integrity": "sha512-ylq1wgUSnagU+MKQtNeVqrPhZuMYBvOSL00DHycFTCxownF95gpLAk1HiHdUW77N8yxRq1qHXLdlIPyBSG9NSA==" }, "parallel-transform": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz", - "integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.2.0.tgz", + "integrity": "sha512-P2vSmIu38uIlvdcU7fDkyrxj33gTUy/ABO5ZUbGowxNCopBq/OoD42bP4UmMrJoPyk4Uqf0mu3mtWBhHCZD8yg==", "dev": true, "requires": { - "cyclist": "0.2.2", - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "cyclist": "^1.0.1", + "inherits": "^2.0.3", + "readable-stream": "^2.1.5" } }, "param-case": { @@ -12053,7 +12286,7 @@ "integrity": "sha1-35T9jPZTHs915r75oIWPvHK+Ikc=", "dev": true, "requires": { - "no-case": "2.3.2" + "no-case": "^2.2.0" } }, "parent-module": { @@ -12062,7 +12295,7 @@ "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { - "callsites": "3.1.0" + "callsites": "^3.0.0" }, "dependencies": { "callsites": { @@ -12079,12 +12312,12 @@ "integrity": "sha512-Qs5duJcuvNExRfFZ99HDD3z4mAi3r9Wl/FOjEOijlxwCZs7E7mW2vjTpgQ4J8LpTF8x5v+1Vn5UQFejmWT11aw==", "dev": true, "requires": { - "asn1.js": "4.10.1", - "browserify-aes": "1.2.0", - "create-hash": "1.2.0", - "evp_bytestokey": "1.0.3", - "pbkdf2": "3.0.17", - "safe-buffer": "5.1.2" + "asn1.js": "^4.0.0", + "browserify-aes": "^1.0.0", + "create-hash": "^1.1.0", + "evp_bytestokey": "^1.0.0", + "pbkdf2": "^3.0.3", + "safe-buffer": "^5.1.1" } }, "parse-glob": { @@ -12093,10 +12326,10 @@ "integrity": "sha1-ssN2z7EfNVE7rdFz7wu246OIORw=", "dev": true, "requires": { - "glob-base": "0.3.0", - "is-dotfile": "1.0.3", - "is-extglob": "1.0.0", - "is-glob": "2.0.1" + "glob-base": "^0.3.0", + "is-dotfile": "^1.0.0", + "is-extglob": "^1.0.0", + "is-glob": "^2.0.0" }, "dependencies": { "is-extglob": { @@ -12111,7 +12344,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } } } @@ -12122,7 +12355,7 @@ "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", "dev": true, "requires": { - "error-ex": "1.3.2" + "error-ex": "^1.2.0" } }, "parse5": { @@ -12131,6 +12364,23 @@ "integrity": "sha512-VrZ7eOd3T1Fk4XWNXMgiGBK/z0MG48BWG2uQNU4I72fkQuKUTZpl+u9k+CxEG0twMVzSmXEEz12z5Fnw1jIQFA==", "dev": true }, + "parse5-htmlparser2-tree-adapter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-6.0.1.tgz", + "integrity": "sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==", + "dev": true, + "requires": { + "parse5": "^6.0.1" + }, + "dependencies": { + "parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==", + "dev": true + } + } + }, "parseurl": { "version": "1.3.3", "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", @@ -12143,12 +12393,6 @@ "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", "dev": true }, - "path-browserify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.0.tgz", - "integrity": "sha1-oLhwcpquIUAFt9UDLsLLuw+0RRo=", - "dev": true - }, "path-dirname": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", @@ -12158,7 +12402,8 @@ "path-exists": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=" + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true }, "path-is-absolute": { "version": "1.0.1", @@ -12179,9 +12424,9 @@ "dev": true }, "path-parse": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", - "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==" + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" }, "path-to-regexp": { "version": "0.1.7", @@ -12193,14 +12438,16 @@ "version": "3.0.0", "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", + "dev": true, "requires": { - "pify": "3.0.0" + "pify": "^3.0.0" }, "dependencies": { "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=" + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true } } }, @@ -12209,8 +12456,8 @@ "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", "requires": { - "ieee754": "1.1.13", - "resolve-protobuf-schema": "2.1.0" + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" } }, "pbkdf2": { @@ -12219,11 +12466,11 @@ "integrity": "sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA==", "dev": true, "requires": { - "create-hash": "1.2.0", - "create-hmac": "1.1.7", - "ripemd160": "2.0.2", - "safe-buffer": "5.1.2", - "sha.js": "2.4.11" + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" } }, "performance-now": { @@ -12232,6 +12479,19 @@ "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", "dev": true }, + "picocolors": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-0.2.1.tgz", + "integrity": "sha512-cMlDqaLEqfSaW8Z7N5Jw+lyIW869EzT73/F5lhtY9cLGoVxSXznfgfXMO0Z5K0o0Q2TkTXq+0KFsdnSe3jDViA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "optional": true + }, "pify": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", @@ -12250,7 +12510,7 @@ "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", "dev": true, "requires": { - "pinkie": "2.0.4" + "pinkie": "^2.0.0" } }, "pkg-dir": { @@ -12259,7 +12519,7 @@ "integrity": "sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw==", "dev": true, "requires": { - "find-up": "3.0.0" + "find-up": "^3.0.0" }, "dependencies": { "find-up": { @@ -12268,7 +12528,7 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, "locate-path": { @@ -12277,8 +12537,8 @@ "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { @@ -12287,7 +12547,7 @@ "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", "dev": true, "requires": { - "p-try": "2.2.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -12296,7 +12556,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.2.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -12313,7 +12573,7 @@ "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", "dev": true, "requires": { - "find-up": "2.1.0" + "find-up": "^2.1.0" } }, "pluralize": { @@ -12329,47 +12589,43 @@ "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", "dev": true }, + "polygon-clipping": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/polygon-clipping/-/polygon-clipping-0.15.3.tgz", + "integrity": "sha512-ho0Xx5DLkgxRx/+n4O74XyJ67DcyN3Tu9bGYKsnTukGAW6ssnuak6Mwcyb1wHy9MZc9xsUWqIoiazkZB5weECg==", + "requires": { + "splaytree": "^3.1.0" + } + }, "popper.js": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.15.0.tgz", - "integrity": "sha512-w010cY1oCUmI+9KwwlWki+r5jxKfTFDVoadl7MSrIujHU5MJ5OR6HTDj6Xo8aoR/QsA56x8jKjA59qGH4ELtrA==" + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/popper.js/-/popper.js-1.16.1.tgz", + "integrity": "sha512-Wb4p1J4zyFTbM+u6WuO4XstYx4Ky9Cewe4DWrel7B0w6VVICvPwdOpotjzcf6eD8TsckVnIMNONQyPIUFOUbCQ==" }, "portal-vue": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.4.tgz", - "integrity": "sha512-Mr2h+RvoOOGHS7N0E3QPP+UQMt1OhSjQ7eMSGTXqkLiO0AjGEDw2x4kzmHATsZfDqQumiaYSDRzlUP2By3lvsA==" + "version": "2.1.7", + "resolved": "https://registry.npmjs.org/portal-vue/-/portal-vue-2.1.7.tgz", + "integrity": "sha512-+yCno2oB3xA7irTt0EU5Ezw22L2J51uKAacE/6hMPMoO/mx3h4rXFkkBkT4GFsMDv/vEe8TNKC3ujJJ0PTwb6g==" }, "portfinder": { - "version": "1.0.20", - "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.20.tgz", - "integrity": "sha512-Yxe4mTyDzTd59PZJY4ojZR8F+E5e97iq2ZOHPz3HDgSvYC5siNad2tLooQ5y5QHyQhc3xVqvyk/eNA3wuoa7Sw==", + "version": "1.0.32", + "resolved": "https://registry.npmjs.org/portfinder/-/portfinder-1.0.32.tgz", + "integrity": "sha512-on2ZJVVDXRADWE6jnQaX0ioEylzgBpQk8r55NE4wjXW1ZxO+BgDlY6DXwj20i0V8eB4SenDQ00WEaxfiIQPcxg==", "dev": true, "requires": { - "async": "1.5.2", - "debug": "2.6.9", - "mkdirp": "0.5.1" + "async": "^2.6.4", + "debug": "^3.2.7", + "mkdirp": "^0.5.6" }, "dependencies": { - "async": { - "version": "1.5.2", - "resolved": "https://registry.npmjs.org/async/-/async-1.5.2.tgz", - "integrity": "sha1-7GphrlZIDAw8skHJVhjiCJL5Zyo=", - "dev": true - }, "debug": { - "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "ms": "2.0.0" + "ms": "^2.1.1" } - }, - "ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true } } }, @@ -12380,14 +12636,13 @@ "dev": true }, "postcss": { - "version": "7.0.16", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.16.tgz", - "integrity": "sha512-MOo8zNSlIqh22Uaa3drkdIAgUGEL+AD1ESiSdmElLUmE2uVDo1QloiT/IfW9qRw8Gw+Y/w69UVMGwbufMSftxA==", + "version": "7.0.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.39.tgz", + "integrity": "sha512-yioayjNbHn6z1/Bywyb2Y4s3yvDAeXGOyxqD+LnVOinq6Mdmd++SW2wUNVzavyyHxd6+DxzWGIuosg6P1Rj8uA==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "6.1.0" + "picocolors": "^0.2.1", + "source-map": "^0.6.1" }, "dependencies": { "source-map": { @@ -12395,15 +12650,6 @@ "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true - }, - "supports-color": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", - "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", - "dev": true, - "requires": { - "has-flag": "3.0.0" - } } } }, @@ -12413,10 +12659,10 @@ "integrity": "sha512-oXqx0m6tb4N3JGdmeMSc/i91KppbYsFZKdH0xMOqK8V1rJlzrKlTdokz8ozUXLVejydRN6u2IddxpcijRj2FqQ==", "dev": true, "requires": { - "css-unit-converter": "1.1.1", - "postcss": "7.0.16", - "postcss-selector-parser": "5.0.0", - "postcss-value-parser": "3.3.1" + "css-unit-converter": "^1.1.1", + "postcss": "^7.0.5", + "postcss-selector-parser": "^5.0.0-rc.4", + "postcss-value-parser": "^3.3.1" } }, "postcss-colormin": { @@ -12425,11 +12671,11 @@ "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", "dev": true, "requires": { - "browserslist": "4.6.0", - "color": "3.1.1", - "has": "1.0.3", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-convert-values": { @@ -12438,8 +12684,8 @@ "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", "dev": true, "requires": { - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-discard-comments": { @@ -12448,7 +12694,7 @@ "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "postcss-discard-duplicates": { @@ -12457,7 +12703,7 @@ "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "postcss-discard-empty": { @@ -12466,7 +12712,7 @@ "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "postcss-discard-overridden": { @@ -12475,7 +12721,7 @@ "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "postcss-load-config": { @@ -12484,8 +12730,8 @@ "integrity": "sha512-V5JBLzw406BB8UIfsAWSK2KSwIJ5yoEIVFb4gVkXci0QdKgA24jLmHZ/ghe/GgX0lJ0/D1uUK1ejhzEY94MChQ==", "dev": true, "requires": { - "cosmiconfig": "4.0.0", - "import-cwd": "2.1.0" + "cosmiconfig": "^4.0.0", + "import-cwd": "^2.0.0" }, "dependencies": { "cosmiconfig": { @@ -12494,10 +12740,10 @@ "integrity": "sha512-6e5vDdrXZD+t5v0L8CrurPeybg4Fmf+FCSYxXKYVAqLUtyCSbuyqE059d0kDthTNRzKVjL7QMgNpEUlsoYH3iQ==", "dev": true, "requires": { - "is-directory": "0.3.1", - "js-yaml": "3.13.1", - "parse-json": "4.0.0", - "require-from-string": "2.0.2" + "is-directory": "^0.3.1", + "js-yaml": "^3.9.0", + "parse-json": "^4.0.0", + "require-from-string": "^2.0.1" } }, "parse-json": { @@ -12506,8 +12752,8 @@ "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.2", - "json-parse-better-errors": "1.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" } } } @@ -12518,10 +12764,10 @@ "integrity": "sha512-cLWoDEY5OwHcAjDnkyRQzAXfs2jrKjXpO/HQFcc5b5u/r7aa471wdmChmwfnv7x2u840iat/wi0lQ5nbRgSkUA==", "dev": true, "requires": { - "loader-utils": "1.2.3", - "postcss": "7.0.16", - "postcss-load-config": "2.0.0", - "schema-utils": "1.0.0" + "loader-utils": "^1.1.0", + "postcss": "^7.0.0", + "postcss-load-config": "^2.0.0", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -12530,9 +12776,9 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } @@ -12544,9 +12790,9 @@ "dev": true, "requires": { "css-color-names": "0.0.4", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1", - "stylehacks": "4.0.3" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" } }, "postcss-merge-rules": { @@ -12555,12 +12801,12 @@ "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", "dev": true, "requires": { - "browserslist": "4.6.0", - "caniuse-api": "3.0.0", - "cssnano-util-same-parent": "4.0.1", - "postcss": "7.0.16", - "postcss-selector-parser": "3.1.1", - "vendors": "1.0.3" + "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" }, "dependencies": { "postcss-selector-parser": { @@ -12569,9 +12815,9 @@ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -12582,8 +12828,8 @@ "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", "dev": true, "requires": { - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-minify-gradients": { @@ -12592,10 +12838,10 @@ "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "is-color-stop": "1.1.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-minify-params": { @@ -12604,12 +12850,12 @@ "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "browserslist": "4.6.0", - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.0", + "browserslist": "^4.0.0", + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "uniqs": "^2.0.0" } }, "postcss-minify-selectors": { @@ -12618,10 +12864,10 @@ "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "has": "1.0.3", - "postcss": "7.0.16", - "postcss-selector-parser": "3.1.1" + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { "postcss-selector-parser": { @@ -12630,9 +12876,9 @@ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -12643,7 +12889,7 @@ "integrity": "sha512-6jt9XZwUhwmRUhb/CkyJY020PYaPJsCyt3UjbaWo6XEbH/94Hmv6MP7fG2C5NDU/BcHzyGYxNtHvM+LTf9HrYw==", "dev": true, "requires": { - "postcss": "6.0.23" + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -12652,9 +12898,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -12671,8 +12917,8 @@ "integrity": "sha1-99gMOYxaOT+nlkRmvRlQCn1hwGk=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -12681,9 +12927,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -12700,8 +12946,8 @@ "integrity": "sha1-1upkmUx5+XtipytCb75gVqGUu5A=", "dev": true, "requires": { - "css-selector-tokenizer": "0.7.1", - "postcss": "6.0.23" + "css-selector-tokenizer": "^0.7.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -12710,9 +12956,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -12729,8 +12975,8 @@ "integrity": "sha1-7P+p1+GSUYOJ9CrQ6D9yrsRW6iA=", "dev": true, "requires": { - "icss-replace-symbols": "1.1.0", - "postcss": "6.0.23" + "icss-replace-symbols": "^1.1.0", + "postcss": "^6.0.1" }, "dependencies": { "postcss": { @@ -12739,9 +12985,9 @@ "integrity": "sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag==", "dev": true, "requires": { - "chalk": "2.4.2", - "source-map": "0.6.1", - "supports-color": "5.5.0" + "chalk": "^2.4.1", + "source-map": "^0.6.1", + "supports-color": "^5.4.0" } }, "source-map": { @@ -12758,7 +13004,7 @@ "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", "dev": true, "requires": { - "postcss": "7.0.16" + "postcss": "^7.0.0" } }, "postcss-normalize-display-values": { @@ -12767,9 +13013,9 @@ "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-positions": { @@ -12778,10 +13024,10 @@ "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-repeat-style": { @@ -12790,10 +13036,10 @@ "integrity": "sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-string": { @@ -12802,9 +13048,9 @@ "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", "dev": true, "requires": { - "has": "1.0.3", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-timing-functions": { @@ -12813,9 +13059,9 @@ "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-unicode": { @@ -12824,9 +13070,9 @@ "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", "dev": true, "requires": { - "browserslist": "4.6.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-url": { @@ -12835,10 +13081,10 @@ "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", "dev": true, "requires": { - "is-absolute-url": "2.1.0", - "normalize-url": "3.3.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-normalize-whitespace": { @@ -12847,8 +13093,8 @@ "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", "dev": true, "requires": { - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-ordered-values": { @@ -12857,9 +13103,9 @@ "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", "dev": true, "requires": { - "cssnano-util-get-arguments": "4.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-reduce-initial": { @@ -12868,10 +13114,10 @@ "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", "dev": true, "requires": { - "browserslist": "4.6.0", - "caniuse-api": "3.0.0", - "has": "1.0.3", - "postcss": "7.0.16" + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" } }, "postcss-reduce-transforms": { @@ -12880,10 +13126,10 @@ "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", "dev": true, "requires": { - "cssnano-util-get-match": "4.0.0", - "has": "1.0.3", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1" + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" } }, "postcss-selector-parser": { @@ -12892,21 +13138,20 @@ "integrity": "sha512-w+zLE5Jhg6Liz8+rQOWEAwtwkyqpfnmsinXjXg6cY7YIONZZtgvE0v2O0uhQBs0peNomOJwWRKt6JBfTdTd3OQ==", "dev": true, "requires": { - "cssesc": "2.0.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "cssesc": "^2.0.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } }, "postcss-svgo": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.2.tgz", - "integrity": "sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-svgo/-/postcss-svgo-4.0.3.tgz", + "integrity": "sha512-NoRbrcMWTtUghzuKSoIm6XV+sJdvZ7GZSc3wdBN0W19FTtp2ko8NqLsgoh/m9CzNhU3KLPvQmjIwtaNFkaFTvw==", "dev": true, "requires": { - "is-svg": "3.0.0", - "postcss": "7.0.16", - "postcss-value-parser": "3.3.1", - "svgo": "1.2.2" + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" } }, "postcss-unique-selectors": { @@ -12915,9 +13160,9 @@ "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", "dev": true, "requires": { - "alphanum-sort": "1.0.2", - "postcss": "7.0.16", - "uniqs": "2.0.0" + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" } }, "postcss-value-parser": { @@ -12938,9 +13183,10 @@ "dev": true }, "prepend-http": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-2.0.0.tgz", - "integrity": "sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc=" + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha512-PhmXi5XmoyKw1Un4E+opM2KcsJInDvKyuOumcjjw3waw86ZNjHwVUOOWLc4bCzLdcKNaWBH9e99sbWzDQsVaYg==", + "dev": true }, "preserve": { "version": "0.2.0", @@ -12960,9 +13206,9 @@ "integrity": "sha1-rbx5YLe7/iiaVX3F9zdhmiINBqU=", "dev": true, "requires": { - "condense-newlines": "0.2.1", - "extend-shallow": "2.0.1", - "js-beautify": "1.10.0" + "condense-newlines": "^0.2.1", + "extend-shallow": "^2.0.1", + "js-beautify": "^1.6.12" }, "dependencies": { "extend-shallow": { @@ -12971,7 +13217,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -12982,8 +13228,8 @@ "integrity": "sha1-X0+HyPkeWuPzuoerTPXgOxoX8aM=", "dev": true, "requires": { - "renderkid": "2.0.3", - "utila": "0.4.0" + "renderkid": "^2.0.1", + "utila": "~0.4" } }, "pretty-format": { @@ -12992,14 +13238,14 @@ "integrity": "sha512-zf9NV1NSlDLDjycnwm6hpFATCGl/K1lt0R/GdkAK2O5LN/rwJoB+Mh93gGJjut4YbmecbfgLWVGSTCr0Ewvvbw==", "dev": true, "requires": { - "ansi-regex": "3.0.0", - "ansi-styles": "3.2.1" + "ansi-regex": "^3.0.0", + "ansi-styles": "^3.2.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true } } @@ -13019,7 +13265,8 @@ "process-nextick-args": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.0.tgz", - "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==" + "integrity": "sha512-MtEC1TqN0EU5nephaJ4rAtThHtC86dNN9qCuEhtshvpVBkAW5ZO7BASN9REnF9eoXGcRub+pFuKEpOHE+HbEMw==", + "dev": true }, "progress": { "version": "2.0.3", @@ -13033,7 +13280,7 @@ "integrity": "sha512-XZTRT7OPdLzgvtTqL8DG2cEj8lYdovztOwiwpwRSYayOty5Ipf3H68dh/fiL+HKDEyetmQSMhkkMGiJoyziz3w==", "requires": { "mgrs": "1.0.0", - "wkt-parser": "1.2.3" + "wkt-parser": "^1.2.0" } }, "promise-inflight": { @@ -13048,8 +13295,8 @@ "integrity": "sha512-rxkyiE9YH6zAz/rZpywySLKkpaj0NMVyNw1qhsubdbjjSgcayjTShDreZGlFMcGSu5sab3bAKPfFk78PB90+8w==", "dev": true, "requires": { - "kleur": "2.0.2", - "sisteransi": "0.1.1" + "kleur": "^2.0.1", + "sisteransi": "^0.1.1" } }, "proto-list": { @@ -13064,13 +13311,13 @@ "integrity": "sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA==" }, "proxy-addr": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.5.tgz", - "integrity": "sha512-t/7RxHXPH6cJtP0pRG6smSr9QJidhB+3kXu0KgXnbGYMgzEnUxRQ4/LDdfOwZEMyIh3/xHb8PX3t+lfL9z+YVQ==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", "dev": true, "requires": { - "forwarded": "0.1.2", - "ipaddr.js": "1.9.0" + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" } }, "prr": { @@ -13097,22 +13344,21 @@ "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", "dev": true, "requires": { - "bn.js": "4.11.8", - "browserify-rsa": "4.0.1", - "create-hash": "1.2.0", - "parse-asn1": "5.1.4", - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" } }, "pump": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, "pumpify": { @@ -13121,9 +13367,9 @@ "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", "dev": true, "requires": { - "duplexify": "3.7.1", - "inherits": "2.0.3", - "pump": "2.0.1" + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" }, "dependencies": { "pump": { @@ -13132,8 +13378,8 @@ "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "once": "1.4.0" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } } } @@ -13151,26 +13397,19 @@ "dev": true }, "qs": { - "version": "6.5.2", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", - "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "version": "6.5.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", + "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", "dev": true }, "query-string": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.1.tgz", - "integrity": "sha512-gjWOsm2SoGlgLEdAGt7a6slVOk9mGiXmPFMqrEhLQ68rhQuBnpfs3+EmlvqKyxnCo9/PPlF+9MtY02S1aFg+Jw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-4.3.4.tgz", + "integrity": "sha512-O2XLNDBIg1DnTOa+2XrIwSiXEV8h2KImXUnjhhn2+UsvZ+Es2uyd5CCRTNQlDGbzUQOW3aYCBx9rVA6dzsiY7Q==", + "dev": true, "requires": { - "decode-uri-component": "0.2.0", - "object-assign": "4.1.1", - "strict-uri-encode": "1.1.0" - }, - "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=" - } + "object-assign": "^4.1.0", + "strict-uri-encode": "^1.0.0" } }, "querystring": { @@ -13186,15 +13425,15 @@ "dev": true }, "querystringify": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.1.1.tgz", - "integrity": "sha512-w7fLxIRCRT7U8Qu53jQnJyPkYZIaR4n5151KMfcJlO/A9397Wxb1amJvROTK6TOnp7PfoAmg/qXiNHI+08jRfA==", + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", + "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", "dev": true }, "quick-lru": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-1.1.0.tgz", - "integrity": "sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g=" + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==" }, "quickselect": { "version": "2.0.0", @@ -13207,9 +13446,9 @@ "integrity": "sha512-TuDE5KxZ0J461RVjrJZCJc+J+zCkTb1MbH9AQUq68sMhOMcy9jLcb3BrZKgp9q9Ncltdg4QVqWrH02W2EFFVYw==", "dev": true, "requires": { - "is-number": "4.0.0", - "kind-of": "6.0.2", - "math-random": "1.0.4" + "is-number": "^4.0.0", + "kind-of": "^6.0.0", + "math-random": "^1.0.1" }, "dependencies": { "is-number": { @@ -13226,7 +13465,7 @@ "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.1.0" } }, "randomfill": { @@ -13235,8 +13474,8 @@ "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", "dev": true, "requires": { - "randombytes": "2.1.0", - "safe-buffer": "5.1.2" + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" } }, "range-parser": { @@ -13246,13 +13485,13 @@ "dev": true }, "raw-body": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", + "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { - "bytes": "3.1.0", - "http-errors": "1.7.2", + "bytes": "3.1.2", + "http-errors": "2.0.0", "iconv-lite": "0.4.24", "unpipe": "1.0.0" } @@ -13263,9 +13502,9 @@ "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", "dev": true, "requires": { - "load-json-file": "1.1.0", - "normalize-package-data": "2.5.0", - "path-type": "1.1.0" + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" }, "dependencies": { "path-type": { @@ -13274,9 +13513,9 @@ "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "pify": { @@ -13293,8 +13532,8 @@ "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", "dev": true, "requires": { - "find-up": "1.1.2", - "read-pkg": "1.1.0" + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" }, "dependencies": { "find-up": { @@ -13303,8 +13542,8 @@ "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", "dev": true, "requires": { - "path-exists": "2.1.0", - "pinkie-promise": "2.0.1" + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" } }, "path-exists": { @@ -13313,7 +13552,7 @@ "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", "dev": true, "requires": { - "pinkie-promise": "2.0.1" + "pinkie-promise": "^2.0.0" } } } @@ -13322,14 +13561,15 @@ "version": "2.3.6", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.6.tgz", "integrity": "sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw==", + "dev": true, "requires": { - "core-util-is": "1.0.2", - "inherits": "2.0.3", - "isarray": "1.0.0", - "process-nextick-args": "2.0.0", - "safe-buffer": "5.1.2", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "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" } }, "readdirp": { @@ -13338,9 +13578,9 @@ "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "micromatch": "3.1.10", - "readable-stream": "2.3.6" + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" } }, "realpath-native": { @@ -13349,58 +13589,56 @@ "integrity": "sha512-wlgPA6cCIIg9gKz0fgAPjnzh4yR/LnXovwuo9hvyGvx3h8nX4+/iLZplfUWasXpqD8BdnGnP5njOFjkUwPzvjA==", "dev": true, "requires": { - "util.promisify": "1.0.0" + "util.promisify": "^1.0.0" } }, "redent": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", - "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", + "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "requires": { - "indent-string": "2.1.0", - "strip-indent": "1.0.1" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "dependencies": { "strip-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", - "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", - "dev": true, + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "requires": { - "get-stdin": "4.0.1" + "min-indent": "^1.0.0" } } } }, "regenerate": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.0.tgz", - "integrity": "sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg==", + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/regenerate/-/regenerate-1.4.2.tgz", + "integrity": "sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==", "dev": true }, "regenerate-unicode-properties": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.1.0.tgz", - "integrity": "sha512-LGZzkgtLY79GeXLm8Dp0BVLdQlWICzBnJz/ipWUgo59qBaZ+BHtq51P2q1uVZlppMuUAT37SDk39qUbjTWB7bA==", + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.0.tgz", + "integrity": "sha512-d1VudCLoIGitcU/hEg2QqvyGZQmdC0Lf8BqdOMXGFSvJP4bNV1+XqbPQeHHLD51Jh4QJJ225dlIFvY4Ly6MXmQ==", "dev": true, "requires": { - "regenerate": "1.4.0" + "regenerate": "^1.4.2" } }, "regenerator-runtime": { - "version": "0.13.2", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.2.tgz", - "integrity": "sha512-S/TQAZJO+D3m9xeN1WTI8dLKBBiRgXBlTJvbWjCThHWZj9EvHK70Ff50/tYj2J/fvBY6JtFVwRuazHN2E7M9BA==", + "version": "0.13.11", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz", + "integrity": "sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg==", "dev": true }, "regenerator-transform": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.0.tgz", - "integrity": "sha512-rtOelq4Cawlbmq9xuMR5gdFmv7ku/sFoB7sRiywx7aq53bc52b4j6zvH7Te1Vt/X2YveDKnCGUbioieU7FEL3w==", + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.15.1.tgz", + "integrity": "sha512-knzmNAcuyxV+gQCufkYcvOqX/qIIfHLv0u5x79kRxuGojfYVky1f15TzZEu2Avte8QGepvUNTnLskf8E6X6Vyg==", "dev": true, "requires": { - "private": "0.1.8" + "@babel/runtime": "^7.8.4" } }, "regex-cache": { @@ -13409,7 +13647,7 @@ "integrity": "sha512-nVIZwtCjkC9YgvWkpM55B5rBhBYRZhAaJbgcFYXXsHnbZ9UZI9nnVWYZpBlCqv9ho2eZryPnWrZGsOdPwVWXWQ==", "dev": true, "requires": { - "is-equal-shallow": "0.1.3" + "is-equal-shallow": "^0.1.3" } }, "regex-not": { @@ -13418,15 +13656,20 @@ "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", "dev": true, "requires": { - "extend-shallow": "3.0.2", - "safe-regex": "1.1.0" + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" } }, - "regexp-tree": { - "version": "0.1.10", - "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.10.tgz", - "integrity": "sha512-K1qVSbcedffwuIslMwpe6vGlj+ZXRnGkvjAtFHfDZZZuEdA/h0dxljAPu9vhUo6Rrx2U2AwJ+nSQ6hK+lrP5MQ==", - "dev": true + "regexp.prototype.flags": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.4.3.tgz", + "integrity": "sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "functions-have-names": "^1.2.2" + } }, "regexpp": { "version": "1.1.0", @@ -13436,38 +13679,32 @@ "optional": true }, "regexpu-core": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.5.4.tgz", - "integrity": "sha512-BtizvGtFQKGPUcTy56o3nk1bGRp4SZOTYrDtGNlqCQufptV5IkkLN6Emw+yunAJjzf+C9FQFtvq7IoA3+oMYHQ==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-5.3.2.tgz", + "integrity": "sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==", "dev": true, "requires": { - "regenerate": "1.4.0", - "regenerate-unicode-properties": "8.1.0", - "regjsgen": "0.5.0", - "regjsparser": "0.6.0", - "unicode-match-property-ecmascript": "1.0.4", - "unicode-match-property-value-ecmascript": "1.1.0" + "@babel/regjsgen": "^0.8.0", + "regenerate": "^1.4.2", + "regenerate-unicode-properties": "^10.1.0", + "regjsparser": "^0.9.1", + "unicode-match-property-ecmascript": "^2.0.0", + "unicode-match-property-value-ecmascript": "^2.1.0" } }, - "regjsgen": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.0.tgz", - "integrity": "sha512-RnIrLhrXCX5ow/E5/Mh2O4e/oa1/jW0eaBKTSy3LaCj+M3Bqvm97GWDp2yUtzIs4LEn65zR2yiYGFqb2ApnzDA==", - "dev": true - }, "regjsparser": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.0.tgz", - "integrity": "sha512-RQ7YyokLiQBomUJuUG8iGVvkgOLxwyZM8k6d3q5SAXpg4r5TZJZigKFvC6PpD+qQ98bCDC5YelPeA3EucDoNeQ==", + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.9.1.tgz", + "integrity": "sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==", "dev": true, "requires": { - "jsesc": "0.5.0" + "jsesc": "~0.5.0" }, "dependencies": { "jsesc": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", - "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "integrity": "sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==", "dev": true } } @@ -13485,16 +13722,16 @@ "dev": true }, "renderkid": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.3.tgz", - "integrity": "sha512-z8CLQp7EZBPCwCnncgf9C4XAi3WR0dv+uWu/PjIyhhAb5d6IJ/QZqlHFprHeKT+59//V6BNUsLbvN8+2LarxGA==", + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/renderkid/-/renderkid-2.0.7.tgz", + "integrity": "sha512-oCcFyxaMrKsKcTY59qnCAtmDVSLfPbrv6A3tVbPdFMMrv5jaK10V6m40cKsoPNhAqN6rmHW9sswW4o3ruSrwUQ==", "dev": true, "requires": { - "css-select": "1.2.0", - "dom-converter": "0.2.0", - "htmlparser2": "3.10.1", - "strip-ansi": "3.0.1", - "utila": "0.4.0" + "css-select": "^4.1.3", + "dom-converter": "^0.2.0", + "htmlparser2": "^6.1.0", + "lodash": "^4.17.21", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -13504,25 +13741,65 @@ "dev": true }, "css-select": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-1.2.0.tgz", - "integrity": "sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg=", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", + "nth-check": "^2.0.1" + } + }, + "css-what": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", + "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", + "dev": true + }, + "dom-serializer": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dev": true, "requires": { - "boolbase": "1.0.0", - "css-what": "2.1.3", - "domutils": "1.5.1", - "nth-check": "1.0.2" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" } }, + "domelementtype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", + "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", + "dev": true + }, "domutils": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.5.1.tgz", - "integrity": "sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8=", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, "requires": { - "dom-serializer": "0.1.1", - "domelementtype": "1.3.1" + "boolbase": "^1.0.0" } }, "strip-ansi": { @@ -13531,7 +13808,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -13554,55 +13831,55 @@ "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", "dev": true, "requires": { - "is-finite": "1.0.2" + "is-finite": "^1.0.0" } }, "request": { - "version": "2.88.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.88.0.tgz", - "integrity": "sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg==", - "dev": true, - "requires": { - "aws-sign2": "0.7.0", - "aws4": "1.8.0", - "caseless": "0.12.0", - "combined-stream": "1.0.8", - "extend": "3.0.2", - "forever-agent": "0.6.1", - "form-data": "2.3.3", - "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.24", - "oauth-sign": "0.9.0", - "performance-now": "2.1.0", - "qs": "6.5.2", - "safe-buffer": "5.1.2", - "tough-cookie": "2.4.3", - "tunnel-agent": "0.6.0", - "uuid": "3.3.2" + "version": "2.88.2", + "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", + "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", + "dev": true, + "requires": { + "aws-sign2": "~0.7.0", + "aws4": "^1.8.0", + "caseless": "~0.12.0", + "combined-stream": "~1.0.6", + "extend": "~3.0.2", + "forever-agent": "~0.6.1", + "form-data": "~2.3.2", + "har-validator": "~5.1.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" } }, "request-promise-core": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.2.tgz", - "integrity": "sha512-UHYyq1MO8GsefGEt7EprS8UrXsm1TxEvFUX1IMTuSLU2Rh7fTIdFtl8xD7JiEYiWU2dl+NYAjCTksTehQUxPag==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/request-promise-core/-/request-promise-core-1.1.4.tgz", + "integrity": "sha512-TTbAfBBRdWD7aNNOoVOBH4pN/KigV6LyapYNNlAPA8JwbovRti1E88m3sYAwsLi5ryhPKsE9APwnjFTgdUjTpw==", "dev": true, "requires": { - "lodash": "4.17.15" + "lodash": "^4.17.19" } }, "request-promise-native": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.7.tgz", - "integrity": "sha512-rIMnbBdgNViL37nZ1b3L/VfPOpSi0TqVDQPAvO6U14lMzOLrt5nilxCQqtDKhZeDiW0/hkCXGoQjhgJd/tCh6w==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/request-promise-native/-/request-promise-native-1.0.9.tgz", + "integrity": "sha512-wcW+sIUiWnKgNY0dqCpOZkUbF/I+YPi+f09JZIDa39Ec+q82CpSYniDp+ISgTTbKmnpJWASeJBPZmoxH84wt3g==", "dev": true, "requires": { - "request-promise-core": "1.1.2", - "stealthy-require": "1.1.1", - "tough-cookie": "2.4.3" + "request-promise-core": "1.1.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" } }, "require-directory": { @@ -13630,8 +13907,8 @@ "dev": true, "optional": true, "requires": { - "caller-path": "0.1.0", - "resolve-from": "1.0.1" + "caller-path": "^0.1.0", + "resolve-from": "^1.0.0" } }, "requires-port": { @@ -13647,20 +13924,27 @@ "dev": true }, "resolve": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.11.0.tgz", - "integrity": "sha512-WL2pBDjqT6pGUNSUzMw00o4T7If+z4H2x3Gz893WoUQ5KW8Vr9txp00ykiP16VBaZF5+j/OcXJHZ9+PCvdiDKw==", + "version": "1.22.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.3.tgz", + "integrity": "sha512-P8ur/gp/AmbEzjr729bZnLjXK5Z+4P0zhIJgBgzqRih7hL7BOukHGtSTA3ACMY467GRFz3duQsi0bDZdR7DKdw==", "requires": { - "path-parse": "1.0.6" + "is-core-module": "^2.12.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" } }, + "resolve-alpn": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/resolve-alpn/-/resolve-alpn-1.2.1.tgz", + "integrity": "sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g==" + }, "resolve-cwd": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/resolve-cwd/-/resolve-cwd-2.0.0.tgz", "integrity": "sha1-AKn3OHVW4nA46uIyyqNypqWbZlo=", "dev": true, "requires": { - "resolve-from": "3.0.0" + "resolve-from": "^3.0.0" }, "dependencies": { "resolve-from": { @@ -13683,7 +13967,7 @@ "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", "requires": { - "protocol-buffers-schema": "3.4.0" + "protocol-buffers-schema": "^3.3.1" } }, "resolve-url": { @@ -13693,11 +13977,11 @@ "dev": true }, "responselike": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/responselike/-/responselike-1.0.2.tgz", - "integrity": "sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec=", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/responselike/-/responselike-2.0.1.tgz", + "integrity": "sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==", "requires": { - "lowercase-keys": "1.0.1" + "lowercase-keys": "^2.0.0" } }, "restore-cursor": { @@ -13706,8 +13990,8 @@ "integrity": "sha1-n37ih/gv0ybU/RYpI9YhKe7g368=", "dev": true, "requires": { - "onetime": "2.0.1", - "signal-exit": "3.0.2" + "onetime": "^2.0.0", + "signal-exit": "^3.0.2" } }, "ret": { @@ -13716,6 +14000,12 @@ "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", "dev": true }, + "retry": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/retry/-/retry-0.12.0.tgz", + "integrity": "sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==", + "dev": true + }, "rgb-regex": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", @@ -13734,23 +14024,7 @@ "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", "dev": true, "requires": { - "glob": "7.1.4" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.1.3" } }, "ripemd160": { @@ -13759,8 +14033,8 @@ "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", "dev": true, "requires": { - "hash-base": "3.0.4", - "inherits": "2.0.3" + "hash-base": "^3.0.0", + "inherits": "^2.0.1" } }, "rsvp": { @@ -13775,7 +14049,7 @@ "integrity": "sha1-A3GrSuC91yDUFm19/aZP96RFpsA=", "dev": true, "requires": { - "is-promise": "2.1.0" + "is-promise": "^2.1.0" } }, "run-queue": { @@ -13784,7 +14058,7 @@ "integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=", "dev": true, "requires": { - "aproba": "1.2.0" + "aproba": "^1.1.1" } }, "rw": { @@ -13796,7 +14070,8 @@ "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "integrity": "sha1-Cx4Rr4vESDbwSmQH6S2kJGe3lEQ=", - "dev": true + "dev": true, + "optional": true }, "rx-lite-aggregates": { "version": "4.0.8", @@ -13805,7 +14080,7 @@ "dev": true, "optional": true, "requires": { - "rx-lite": "4.0.8" + "rx-lite": "*" } }, "rxjs": { @@ -13814,7 +14089,7 @@ "integrity": "sha512-HUb7j3kvb7p7eCUHE3FqjoDsC1xfZQ4AHFWfTKSpZ+sAhhz5X1WX0ZuUqWbzB2QhSLp3DoLUG+hMdEDKqWo2Zg==", "dev": true, "requires": { - "tslib": "1.9.3" + "tslib": "^1.9.0" } }, "safe-buffer": { @@ -13828,7 +14103,18 @@ "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", "dev": true, "requires": { - "ret": "0.1.15" + "ret": "~0.1.10" + } + }, + "safe-regex-test": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", + "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" } }, "safer-buffer": { @@ -13843,174 +14129,177 @@ "integrity": "sha1-tNwYYcIbQn6SlQej51HiosuKs/o=", "dev": true, "requires": { - "anymatch": "2.0.0", - "capture-exit": "1.2.0", - "exec-sh": "0.2.2", - "fb-watchman": "2.0.0", - "fsevents": "1.2.9", - "micromatch": "3.1.10", - "minimist": "1.2.0", - "walker": "1.0.7", - "watch": "0.18.0" + "anymatch": "^2.0.0", + "capture-exit": "^1.2.0", + "exec-sh": "^0.2.0", + "fb-watchman": "^2.0.0", + "fsevents": "^1.2.3", + "micromatch": "^3.1.4", + "minimist": "^1.1.1", + "walker": "~1.0.5", + "watch": "~0.18.0" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", - "dev": true + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } } } }, "sass-graph": { - "version": "2.2.4", - "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.4.tgz", - "integrity": "sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k=", + "version": "2.2.5", + "resolved": "https://registry.npmjs.org/sass-graph/-/sass-graph-2.2.5.tgz", + "integrity": "sha512-VFWDAHOe6mRuT4mZRd4eKE+d8Uedrk6Xnh7Sh9b4NGufQLQjOrvf/MQoOdx+0s92L89FeyUUNfU597j/3uNpag==", "dev": true, "requires": { - "glob": "7.1.4", - "lodash": "4.17.15", - "scss-tokenizer": "0.2.3", - "yargs": "7.1.0" + "glob": "^7.0.0", + "lodash": "^4.0.0", + "scss-tokenizer": "^0.2.3", + "yargs": "^13.3.2" }, "dependencies": { - "ansi-regex": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", - "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", - "dev": true + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } }, - "camelcase": { + "find-up": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-3.0.0.tgz", - "integrity": "sha1-MvxLn82vhF/N9+c7uXysImHwqwo=", - "dev": true - }, - "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "wrap-ansi": "2.1.0" + "locate-path": "^3.0.0" } }, - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "locate-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", + "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "p-try": "^2.0.0" } }, - "os-locale": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-1.4.0.tgz", - "integrity": "sha1-IPnxeuKe00XoveWDsT0gCYA8FNk=", + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "lcid": "1.0.0" + "p-limit": "^2.0.0" } }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" } }, - "strip-ansi": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", - "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" } }, - "which-module": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/which-module/-/which-module-1.0.0.tgz", - "integrity": "sha1-u6Y8qGGUiZT/MHc2CJ47lgJsKk8=", - "dev": true - }, - "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", - "dev": true - }, "yargs": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-7.1.0.tgz", - "integrity": "sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg=", - "dev": true, - "requires": { - "camelcase": "3.0.0", - "cliui": "3.2.0", - "decamelize": "1.2.0", - "get-caller-file": "1.0.3", - "os-locale": "1.4.0", - "read-pkg-up": "1.0.1", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "1.0.2", - "which-module": "1.0.0", - "y18n": "3.2.1", - "yargs-parser": "5.0.0" + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-5.0.0.tgz", - "integrity": "sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo=", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "3.0.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } }, "sass-loader": { - "version": "7.1.0", - "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.1.0.tgz", - "integrity": "sha512-+G+BKGglmZM2GUSfT9TLuEp6tzehHPjAMoRRItOojWIqIGPloVCMhNIQuG639eJ+y033PaGTSjLaTHts8Kw79w==", + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/sass-loader/-/sass-loader-7.3.1.tgz", + "integrity": "sha512-tuU7+zm0pTCynKYHpdqaPpe+MMTQ76I9TPZ7i4/5dZsigE350shQWe5EZNl5dBidM49TPET75tNqRbcsUZWeNA==", "dev": true, "requires": { - "clone-deep": "2.0.2", - "loader-utils": "1.2.3", - "lodash.tail": "4.1.1", - "neo-async": "2.6.1", - "pify": "3.0.0", - "semver": "5.7.0" + "clone-deep": "^4.0.1", + "loader-utils": "^1.0.1", + "neo-async": "^2.5.0", + "pify": "^4.0.1", + "semver": "^6.3.0" }, "dependencies": { - "pify": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true } } @@ -14021,24 +14310,14 @@ "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", "dev": true }, - "schema-utils": { - "version": "0.4.7", - "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-0.4.7.tgz", - "integrity": "sha512-v/iwU6wvwGK8HbU9yi3/nhGzP0yGSuhQMzL6ySiec1FSrZZDkhm4noOSWzrNFo/jEc+SJY6jRTwuwbSXJPDUnQ==", - "dev": true, - "requires": { - "ajv": "6.10.0", - "ajv-keywords": "3.4.0" - } - }, "scss-tokenizer": { "version": "0.2.3", "resolved": "https://registry.npmjs.org/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz", - "integrity": "sha1-jrBtualyMzOCTT9VMGQRSYR85dE=", + "integrity": "sha512-dYE8LhncfBUar6POCxMTm0Ln+erjeczqEvCJib5/7XNkdw1FkUGgwMPY360FY0FgPWQxHWCx29Jl3oejyGLM9Q==", "dev": true, "requires": { - "js-base64": "2.5.1", - "source-map": "0.4.4" + "js-base64": "^2.1.8", + "source-map": "^0.4.2" } }, "select-hose": { @@ -14048,38 +14327,39 @@ "dev": true }, "selfsigned": { - "version": "1.10.4", - "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.4.tgz", - "integrity": "sha512-9AukTiDmHXGXWtWjembZ5NDmVvP2695EtpgbCsxCa68w3c88B+alqbmZ4O3hZ4VWGXeGWzEVdvqgAJD8DQPCDw==", + "version": "1.10.14", + "resolved": "https://registry.npmjs.org/selfsigned/-/selfsigned-1.10.14.tgz", + "integrity": "sha512-lkjaiAye+wBZDCBsu5BGi0XiLRxeUlsGod5ZP924CRSEoGuZAw/f7y9RKu28rwTfiHVhdavhB0qH0INV6P1lEA==", "dev": true, "requires": { - "node-forge": "0.7.5" + "node-forge": "^0.10.0" } }, "semver": { "version": "5.7.0", "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.0.tgz", - "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==" + "integrity": "sha512-Ya52jSX2u7QKghxeoFGpLwCtGlt7j0oY9DYb5apt9nPlJ42ID+ulTXESnt/qAQcoSERyZ5sl3LDIOw0nAn/5DA==", + "dev": true }, "send": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", "dev": true, "requires": { "debug": "2.6.9", - "depd": "1.1.2", - "destroy": "1.0.4", - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "etag": "1.8.1", + "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": "1.7.2", + "http-errors": "2.0.0", "mime": "1.6.0", - "ms": "2.1.1", - "on-finished": "2.3.0", - "range-parser": "1.2.1", - "statuses": "1.5.0" + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" }, "dependencies": { "debug": { @@ -14094,16 +14374,34 @@ "ms": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==", "dev": true } } }, + "depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "dev": true + }, "mime": { "version": "1.6.0", "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "dev": true } } }, @@ -14119,13 +14417,13 @@ "integrity": "sha1-03aNabHn2C5c4FD/9bRTvqEqkjk=", "dev": true, "requires": { - "accepts": "1.3.7", + "accepts": "~1.3.4", "batch": "0.6.1", "debug": "2.6.9", - "escape-html": "1.0.3", - "http-errors": "1.6.3", - "mime-types": "2.1.24", - "parseurl": "1.3.3" + "escape-html": "~1.0.3", + "http-errors": "~1.6.2", + "mime-types": "~2.1.17", + "parseurl": "~1.3.2" }, "dependencies": { "debug": { @@ -14143,10 +14441,10 @@ "integrity": "sha1-i1VoC7S+KDoLW/TqLjhYC+HZMg0=", "dev": true, "requires": { - "depd": "1.1.2", + "depd": "~1.1.2", "inherits": "2.0.3", "setprototypeof": "1.1.0", - "statuses": "1.5.0" + "statuses": ">= 1.4.0 < 2" } }, "ms": { @@ -14164,15 +14462,15 @@ } }, "serve-static": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", "dev": true, "requires": { - "encodeurl": "1.0.2", - "escape-html": "1.0.3", - "parseurl": "1.3.3", - "send": "0.17.1" + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" } }, "set-blocking": { @@ -14187,10 +14485,10 @@ "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", "dev": true, "requires": { - "extend-shallow": "2.0.1", - "is-extendable": "0.1.1", - "is-plain-object": "2.0.4", - "split-string": "3.1.0" + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" }, "dependencies": { "extend-shallow": { @@ -14199,7 +14497,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } } } @@ -14211,9 +14509,9 @@ "dev": true }, "setprototypeof": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==", "dev": true }, "sha.js": { @@ -14222,27 +14520,17 @@ "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", "dev": true, "requires": { - "inherits": "2.0.3", - "safe-buffer": "5.1.2" + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" } }, "shallow-clone": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-1.0.0.tgz", - "integrity": "sha512-oeXreoKR/SyNJtRJMAKPDSvd28OqEwG4eR/xc856cRGBII7gX9lvAqDxusPm0846z/w/hWYjI1NpKwJ00NHzRA==", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/shallow-clone/-/shallow-clone-3.0.1.tgz", + "integrity": "sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==", "dev": true, "requires": { - "is-extendable": "0.1.1", - "kind-of": "5.1.0", - "mixin-object": "2.0.1" - }, - "dependencies": { - "kind-of": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", - "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", - "dev": true - } + "kind-of": "^6.0.2" } }, "shebang-command": { @@ -14251,7 +14539,7 @@ "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", "dev": true, "requires": { - "shebang-regex": "1.0.0" + "shebang-regex": "^1.0.0" } }, "shebang-regex": { @@ -14261,16 +14549,10 @@ "dev": true }, "shell-quote": { - "version": "1.6.1", - "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.6.1.tgz", - "integrity": "sha1-9HgZSczkAmlxJ0MOo7PFR29IF2c=", - "dev": true, - "requires": { - "array-filter": "0.0.1", - "array-map": "0.0.0", - "array-reduce": "0.0.0", - "jsonify": "0.0.0" - } + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.1.tgz", + "integrity": "sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==", + "dev": true }, "shellwords": { "version": "0.1.1", @@ -14278,6 +14560,17 @@ "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", "dev": true }, + "side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + } + }, "sigmund": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/sigmund/-/sigmund-1.0.1.tgz", @@ -14287,7 +14580,8 @@ "signal-exit": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.2.tgz", - "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=" + "integrity": "sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0=", + "dev": true }, "simple-swizzle": { "version": "0.2.2", @@ -14295,7 +14589,7 @@ "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", "dev": true, "requires": { - "is-arrayish": "0.3.2" + "is-arrayish": "^0.3.1" }, "dependencies": { "is-arrayish": { @@ -14325,7 +14619,7 @@ "dev": true, "optional": true, "requires": { - "is-fullwidth-code-point": "2.0.0" + "is-fullwidth-code-point": "^2.0.0" } }, "smoothscroll": { @@ -14339,14 +14633,14 @@ "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", "dev": true, "requires": { - "base": "0.11.2", - "debug": "2.6.9", - "define-property": "0.2.5", - "extend-shallow": "2.0.1", - "map-cache": "0.2.2", - "source-map": "0.5.7", - "source-map-resolve": "0.5.2", - "use": "3.1.1" + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" }, "dependencies": { "debug": { @@ -14364,7 +14658,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } }, "extend-shallow": { @@ -14373,7 +14667,7 @@ "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", "dev": true, "requires": { - "is-extendable": "0.1.1" + "is-extendable": "^0.1.0" } }, "ms": { @@ -14396,9 +14690,9 @@ "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", "dev": true, "requires": { - "define-property": "1.0.0", - "isobject": "3.0.1", - "snapdragon-util": "3.0.1" + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" }, "dependencies": { "define-property": { @@ -14407,7 +14701,7 @@ "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", "dev": true, "requires": { - "is-descriptor": "1.0.2" + "is-descriptor": "^1.0.0" } }, "is-accessor-descriptor": { @@ -14416,7 +14710,7 @@ "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-data-descriptor": { @@ -14425,7 +14719,7 @@ "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", "dev": true, "requires": { - "kind-of": "6.0.2" + "kind-of": "^6.0.0" } }, "is-descriptor": { @@ -14434,9 +14728,9 @@ "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", "dev": true, "requires": { - "is-accessor-descriptor": "1.0.0", - "is-data-descriptor": "1.0.0", - "kind-of": "6.0.2" + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" } } } @@ -14447,7 +14741,7 @@ "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.2.0" }, "dependencies": { "kind-of": { @@ -14456,52 +14750,67 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } }, "sockjs": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.19.tgz", - "integrity": "sha512-V48klKZl8T6MzatbLlzzRNhMepEys9Y4oGFpypBFFn1gLI/QQ9HtLLyWJNbPlwGLelOVOEijUbTTJeLLI59jLw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/sockjs/-/sockjs-0.3.24.tgz", + "integrity": "sha512-GJgLTZ7vYb/JtPSSZ10hsOYIvEYsjbNU+zPdIHcUaWVNUEPivzxku31865sSSud0Da0W4lEeOPlmw93zLQchuQ==", "dev": true, "requires": { - "faye-websocket": "0.10.0", - "uuid": "3.3.2" + "faye-websocket": "^0.11.3", + "uuid": "^8.3.2", + "websocket-driver": "^0.7.4" + }, + "dependencies": { + "uuid": { + "version": "8.3.2", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz", + "integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==", + "dev": true + } } }, "sockjs-client": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.3.0.tgz", - "integrity": "sha512-R9jxEzhnnrdxLCNln0xg5uGHqMnkhPSTzUZH2eXcR03S/On9Yvoq2wyUZILRUhZCNVu2PmwWVoyuiPz8th8zbg==", + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/sockjs-client/-/sockjs-client-1.6.1.tgz", + "integrity": "sha512-2g0tjOR+fRs0amxENLi/q5TiJTqY+WXFOzb5UwXndlK6TO3U/mirZznpx6w34HVMoc3g7cY24yC/ZMIYnDlfkw==", "dev": true, "requires": { - "debug": "3.2.6", - "eventsource": "1.0.7", - "faye-websocket": "0.11.1", - "inherits": "2.0.3", - "json3": "3.3.2", - "url-parse": "1.4.7" + "debug": "^3.2.7", + "eventsource": "^2.0.2", + "faye-websocket": "^0.11.4", + "inherits": "^2.0.4", + "url-parse": "^1.5.10" }, "dependencies": { - "faye-websocket": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.11.1.tgz", - "integrity": "sha1-8O/hjE9W5PQK/H4Gxxn9XuYYjzg=", + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", "dev": true, "requires": { - "websocket-driver": "0.7.0" + "ms": "^2.1.1" } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true } } }, "sort-keys": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", - "integrity": "sha1-ZYU1WEhh7JfXMNbPQYIuH1ZoQSg=", + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-1.1.2.tgz", + "integrity": "sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg==", + "dev": true, "requires": { - "is-plain-obj": "1.1.0" + "is-plain-obj": "^1.0.0" } }, "source-list-map": { @@ -14513,10 +14822,10 @@ "source-map": { "version": "0.4.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.4.4.tgz", - "integrity": "sha1-66T12pwNyZneaAMti092FzZSA2s=", + "integrity": "sha512-Y8nIfcb1s/7DcobUz1yOO1GSp7gyL+D9zLHDehT7iRESqGSxjJ448Sg7rvfgsRJCnKLdSl11uGf0s9X80cH0/A==", "dev": true, "requires": { - "amdefine": "1.0.1" + "amdefine": ">=0.0.4" } }, "source-map-resolve": { @@ -14525,11 +14834,11 @@ "integrity": "sha512-MjqsvNwyz1s0k81Goz/9vRBe9SZdB09Bdw+/zYyO+3CuPk6fouTaxscHkgtE8jKvf01kVfl8riHzERQ/kefaSA==", "dev": true, "requires": { - "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" + "atob": "^2.1.1", + "decode-uri-component": "^0.2.0", + "resolve-url": "^0.2.1", + "source-map-url": "^0.4.0", + "urix": "^0.1.0" } }, "source-map-support": { @@ -14538,8 +14847,8 @@ "integrity": "sha512-4h2Pbvyy15EE02G+JOZpUCmqWJuqrs+sEkzewTm++BPi7Hvn/HwcqLAcNxYAyI0x13CpPPn+kMjl+hplXMHITQ==", "dev": true, "requires": { - "buffer-from": "1.1.1", - "source-map": "0.6.1" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { @@ -14561,8 +14870,8 @@ "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", "integrity": "sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q==", "requires": { - "spdx-expression-parse": "3.0.0", - "spdx-license-ids": "3.0.4" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-exceptions": { @@ -14575,8 +14884,8 @@ "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz", "integrity": "sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg==", "requires": { - "spdx-exceptions": "2.2.0", - "spdx-license-ids": "3.0.4" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, "spdx-license-ids": { @@ -14585,26 +14894,32 @@ "integrity": "sha512-7j8LYJLeY/Yb6ACbQ7F76qy5jHkp0U6jgBfJsk97bwWlVUnUWsAgpyaCvo17h0/RQGnQ036tVDomiwoI4pDkQA==" }, "spdy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.0.tgz", - "integrity": "sha512-ot0oEGT/PGUpzf/6uk4AWLqkq+irlqHXkrdbk51oWONh3bxQmBuljxPNl66zlRRcIJStWq0QkLUCPOPjgjvU0Q==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/spdy/-/spdy-4.0.2.tgz", + "integrity": "sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==", "dev": true, "requires": { - "debug": "4.1.1", - "handle-thing": "2.0.0", - "http-deceiver": "1.2.7", - "select-hose": "2.0.0", - "spdy-transport": "3.0.0" + "debug": "^4.1.0", + "handle-thing": "^2.0.0", + "http-deceiver": "^1.2.7", + "select-hose": "^2.0.0", + "spdy-transport": "^3.0.0" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true } } }, @@ -14614,43 +14929,54 @@ "integrity": "sha512-hsLVFE5SjA6TCisWeJXFKniGGOpBgMLmerfO2aCyCU5s7nJ/rpAepqmFifv/GCbSbueEeAJJnmSQ2rKC/g8Fcw==", "dev": true, "requires": { - "debug": "4.1.1", - "detect-node": "2.0.4", - "hpack.js": "2.1.6", - "obuf": "1.1.2", - "readable-stream": "3.3.0", - "wbuf": "1.7.3" + "debug": "^4.1.0", + "detect-node": "^2.0.4", + "hpack.js": "^2.1.6", + "obuf": "^1.1.2", + "readable-stream": "^3.0.6", + "wbuf": "^1.7.3" }, "dependencies": { "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" } }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, "readable-stream": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.3.0.tgz", - "integrity": "sha512-EsI+s3k3XsW+fU8fQACLN59ky34AZ14LoeVZpYwmZvldCFo0r0gnelwF2TcMjLor/BTL5aDJVBMkss0dthToPw==", + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", "dev": true, "requires": { - "inherits": "2.0.3", - "string_decoder": "1.1.1", - "util-deprecate": "1.0.2" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, + "splaytree": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/splaytree/-/splaytree-3.1.1.tgz", + "integrity": "sha512-9FaQ18FF0+sZc/ieEeXHt+Jw2eSpUgUtTLDYB/HXKWvhYVyOc7h1hzkn5MMO3GPib9MmXG1go8+OsBBzs/NMww==" + }, "split-string": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", "dev": true, "requires": { - "extend-shallow": "3.0.2" + "extend-shallow": "^3.0.0" } }, "sprintf-js": { @@ -14665,24 +14991,24 @@ "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", "dev": true, "requires": { - "asn1": "0.2.4", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.2", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.2", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "safer-buffer": "2.1.2", - "tweetnacl": "0.14.5" + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" } }, "ssri": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.1.tgz", - "integrity": "sha512-3Wge10hNcT1Kur4PDFwEieXSCMCJs/7WvSACcrMYrNp+b8kDL1/0wJch5Ni2WrtwEa2IO8OsVfeKIciKCDx/QA==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-6.0.2.tgz", + "integrity": "sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==", "dev": true, "requires": { - "figgy-pudding": "3.5.1" + "figgy-pudding": "^3.5.1" } }, "stable": { @@ -14709,8 +15035,8 @@ "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", "dev": true, "requires": { - "define-property": "0.2.5", - "object-copy": "0.1.0" + "define-property": "^0.2.5", + "object-copy": "^0.1.0" }, "dependencies": { "define-property": { @@ -14719,7 +15045,7 @@ "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", "dev": true, "requires": { - "is-descriptor": "0.1.6" + "is-descriptor": "^0.1.0" } } } @@ -14736,7 +15062,7 @@ "integrity": "sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA==", "dev": true, "requires": { - "readable-stream": "2.3.6" + "readable-stream": "^2.0.1" } }, "stealthy-require": { @@ -14751,8 +15077,8 @@ "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", "dev": true, "requires": { - "inherits": "2.0.3", - "readable-stream": "2.3.6" + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" } }, "stream-each": { @@ -14761,8 +15087,8 @@ "integrity": "sha512-vlMC2f8I2u/bZGqkdfLQW/13Zihpej/7PmSiMQsbYddxuTsJp8vRe2x2FvVExZg7FaOds43ROAuFJwPR4MTZLw==", "dev": true, "requires": { - "end-of-stream": "1.4.1", - "stream-shift": "1.0.0" + "end-of-stream": "^1.1.0", + "stream-shift": "^1.0.0" } }, "stream-http": { @@ -14771,23 +15097,24 @@ "integrity": "sha512-+TSkfINHDo4J+ZobQLWiMouQYB+UVYFttRA94FpEzzJ7ZdqcL4uUUQ7WkdkI4DSozGmgBUE/a47L+38PenXhUw==", "dev": true, "requires": { - "builtin-status-codes": "3.0.0", - "inherits": "2.0.3", - "readable-stream": "2.3.6", - "to-arraybuffer": "1.0.1", - "xtend": "4.0.1" + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.3.6", + "to-arraybuffer": "^1.0.0", + "xtend": "^4.0.0" } }, "stream-shift": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz", - "integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", "dev": true }, "strict-uri-encode": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-1.1.0.tgz", - "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=" + "integrity": "sha1-J5siXfHVgrH1TmWt3UNS4Y+qBxM=", + "dev": true }, "string-length": { "version": "2.0.0", @@ -14795,14 +15122,14 @@ "integrity": "sha1-1A27aGo6zpYMHP/KVivyxF+DY+0=", "dev": true, "requires": { - "astral-regex": "1.0.0", - "strip-ansi": "4.0.0" + "astral-regex": "^1.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { @@ -14811,7 +15138,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -14822,14 +15149,14 @@ "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", "dev": true, "requires": { - "is-fullwidth-code-point": "2.0.0", - "strip-ansi": "4.0.0" + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" }, "dependencies": { "ansi-regex": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", - "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.1.tgz", + "integrity": "sha512-+O9Jct8wf++lXxxFc4hc8LsjaSq0HFzzL7cVsw8pRDIPdjKD2mT4ytDZlLuSBZ4cLKZFXIrMGO7DbQCtMJJMKw==", "dev": true }, "strip-ansi": { @@ -14838,7 +15165,7 @@ "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "ansi-regex": "3.0.0" + "ansi-regex": "^3.0.0" } } } @@ -14849,20 +15176,42 @@ "integrity": "sha1-86rvfBcZ8XDF6rHDK/eA2W4h8vA=", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" + "define-properties": "^1.1.2", + "es-abstract": "^1.4.3", + "function-bind": "^1.0.2" } }, "string.prototype.padstart": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.0.0.tgz", - "integrity": "sha1-W8+tOfRkm7LQMSkuGbzwtRDUskI=", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/string.prototype.padstart/-/string.prototype.padstart-3.1.4.tgz", + "integrity": "sha512-XqOHj8horGsF+zwxraBvMTkBFM28sS/jHBJajh17JtJKA92qazidiQbLosV4UA18azvLOVKYo/E3g3T9Y5826w==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimend": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz", + "integrity": "sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" + } + }, + "string.prototype.trimstart": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz", + "integrity": "sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "es-abstract": "1.13.0", - "function-bind": "1.1.1" + "call-bind": "^1.0.2", + "define-properties": "^1.1.4", + "es-abstract": "^1.20.4" } }, "string_decoder": { @@ -14870,7 +15219,7 @@ "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "~5.1.0" } }, "strip-ansi": { @@ -14879,7 +15228,7 @@ "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", "dev": true, "requires": { - "ansi-regex": "4.1.0" + "ansi-regex": "^4.1.0" } }, "strip-bom": { @@ -14888,7 +15237,7 @@ "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", "dev": true, "requires": { - "is-utf8": "0.2.1" + "is-utf8": "^0.2.0" } }, "strip-eof": { @@ -14897,10 +15246,17 @@ "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", "dev": true }, + "strip-final-newline": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", + "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", + "dev": true + }, "strip-indent": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", - "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=" + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true }, "strip-json-comments": { "version": "2.0.1", @@ -14914,9 +15270,9 @@ "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", "dev": true, "requires": { - "browserslist": "4.6.0", - "postcss": "7.0.16", - "postcss-selector-parser": "3.1.1" + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" }, "dependencies": { "postcss-selector-parser": { @@ -14925,9 +15281,9 @@ "integrity": "sha1-T4dfSvsMllc9XPTXQBGu4lCn6GU=", "dev": true, "requires": { - "dot-prop": "4.2.0", - "indexes-of": "1.0.1", - "uniq": "1.0.1" + "dot-prop": "^4.1.1", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" } } } @@ -14942,8 +15298,8 @@ "resolved": "https://registry.npmjs.org/suggestions/-/suggestions-1.7.0.tgz", "integrity": "sha512-Px+gellrEQUkgM3Lc0Umnz4JIammE0CLcp+7lbNQH/wqnD0u/N1bOXytNOR3Ap1dIZDHE8lYMuwd60jMO6BPDw==", "requires": { - "fuzzy": "0.1.3", - "xtend": "4.0.1" + "fuzzy": "^0.1.1", + "xtend": "^4.0.0" } }, "supercluster": { @@ -14951,7 +15307,7 @@ "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.0.0.tgz", "integrity": "sha512-8VuHI8ynylYQj7Qf6PBMWy1PdgsnBiIxujOgc9Z83QvJ8ualIYWNx2iMKyKeC4DZI5ntD9tz/CIwwZvIelixsA==", "requires": { - "kdbush": "3.0.0" + "kdbush": "^3.0.0" } }, "supports-color": { @@ -14959,9 +15315,14 @@ "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" } }, + "supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==" + }, "svg-tags": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", @@ -14969,25 +15330,24 @@ "dev": true }, "svgo": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.2.2.tgz", - "integrity": "sha512-rAfulcwp2D9jjdGu+0CuqlrAUin6bBWrpoqXWwKDZZZJfXcUXQSxLJOFJCQCSA0x0pP2U0TxSlJu2ROq5Bq6qA==", - "dev": true, - "requires": { - "chalk": "2.4.2", - "coa": "2.0.2", - "css-select": "2.0.2", - "css-select-base-adapter": "0.1.1", - "css-tree": "1.0.0-alpha.28", - "css-url-regex": "1.1.0", - "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" + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-1.3.2.tgz", + "integrity": "sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "coa": "^2.0.2", + "css-select": "^2.0.0", + "css-select-base-adapter": "^0.1.1", + "css-tree": "1.0.0-alpha.37", + "csso": "^4.0.2", + "js-yaml": "^3.13.1", + "mkdirp": "~0.5.1", + "object.values": "^1.1.0", + "sax": "~1.2.4", + "stable": "^0.1.8", + "unquote": "~1.1.1", + "util.promisify": "~1.0.0" } }, "symbol-tree": { @@ -15003,12 +15363,12 @@ "dev": true, "optional": true, "requires": { - "ajv": "5.5.2", - "ajv-keywords": "2.1.1", - "chalk": "2.4.2", - "lodash": "4.17.15", + "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" + "string-width": "^2.1.1" }, "dependencies": { "ajv": { @@ -15018,10 +15378,10 @@ "dev": true, "optional": true, "requires": { - "co": "4.6.0", - "fast-deep-equal": "1.1.0", - "fast-json-stable-stringify": "2.0.0", - "json-schema-traverse": "0.3.1" + "co": "^4.6.0", + "fast-deep-equal": "^1.0.0", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.3.0" } }, "ajv-keywords": { @@ -15059,20 +15419,20 @@ "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", "dev": true, "requires": { - "block-stream": "0.0.9", - "fstream": "1.0.12", - "inherits": "2.0.3" + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" } }, "terser": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-4.0.0.tgz", - "integrity": "sha512-dOapGTU0hETFl1tCo4t56FN+2jffoKyER9qBGoUFyZ6y7WLoKT0bF+lAYi6B6YsILcGF3q1C2FBh8QcKSCgkgA==", + "version": "4.8.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", + "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", "dev": true, "requires": { - "commander": "2.20.0", - "source-map": "0.6.1", - "source-map-support": "0.5.12" + "commander": "^2.20.0", + "source-map": "~0.6.1", + "source-map-support": "~0.5.12" }, "dependencies": { "source-map": { @@ -15084,32 +15444,81 @@ } }, "terser-webpack-plugin": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.3.0.tgz", - "integrity": "sha512-W2YWmxPjjkUcOWa4pBEv4OP4er1aeQJlSo2UhtCFQCuRXEHjOFscO8VyWHj9JLlA0RzQb8Y2/Ta78XZvT54uGg==", - "dev": true, - "requires": { - "cacache": "11.3.2", - "find-cache-dir": "2.1.0", - "is-wsl": "1.1.0", - "loader-utils": "1.2.3", - "schema-utils": "1.0.0", - "serialize-javascript": "1.7.0", - "source-map": "0.6.1", - "terser": "4.0.0", - "webpack-sources": "1.3.0", - "worker-farm": "1.7.0" + "version": "1.4.5", + "resolved": "https://registry.npmjs.org/terser-webpack-plugin/-/terser-webpack-plugin-1.4.5.tgz", + "integrity": "sha512-04Rfe496lN8EYruwi6oPQkG0vo8C+HT49X687FZnpPF0qMAIHONI6HEXYPKDOE8e5HjXTyKfqRd/agHtH0kOtw==", + "dev": true, + "requires": { + "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" }, "dependencies": { + "cacache": { + "version": "12.0.4", + "resolved": "https://registry.npmjs.org/cacache/-/cacache-12.0.4.tgz", + "integrity": "sha512-a0tMB40oefvuInr4Cwb3GerbL9xTj1D5yg0T5xrjGCGyfvbxseIXX7BAO/u/hIXdafzOI5JC3wDwHyf24buOAQ==", + "dev": true, + "requires": { + "bluebird": "^3.5.5", + "chownr": "^1.1.1", + "figgy-pudding": "^3.5.1", + "glob": "^7.1.4", + "graceful-fs": "^4.1.15", + "infer-owner": "^1.0.3", + "lru-cache": "^5.1.1", + "mississippi": "^3.0.0", + "mkdirp": "^0.5.1", + "move-concurrently": "^1.0.1", + "promise-inflight": "^1.0.1", + "rimraf": "^2.6.3", + "ssri": "^6.0.1", + "unique-filename": "^1.1.1", + "y18n": "^4.0.0" + } + }, + "mississippi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mississippi/-/mississippi-3.0.0.tgz", + "integrity": "sha512-x471SsVjUtBRtcvd4BzKE9kFC+/2TeWgKCgw0bZcw1b9l2X3QX5vCWgF+KaZaYm87Ss//rHnWryupDrgLvmSkA==", + "dev": true, + "requires": { + "concat-stream": "^1.5.0", + "duplexify": "^3.4.2", + "end-of-stream": "^1.1.0", + "flush-write-stream": "^1.0.0", + "from2": "^2.1.0", + "parallel-transform": "^1.1.0", + "pump": "^3.0.0", + "pumpify": "^1.3.3", + "stream-each": "^1.1.0", + "through2": "^2.0.0" + } + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "serialize-javascript": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", + "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", + "dev": true, + "requires": { + "randombytes": "^2.1.0" } }, "source-map": { @@ -15126,11 +15535,11 @@ "integrity": "sha512-SYbXgY64PT+4GAL2ocI3HwPa4Q4TBKm0cwAVeKOt/Aoc0gSpNRjJX8w0pA1LMKZ3LBmd8pYBqApFNQLII9kavA==", "dev": true, "requires": { - "arrify": "1.0.1", - "micromatch": "2.3.11", - "object-assign": "4.1.1", - "read-pkg-up": "1.0.1", - "require-main-filename": "1.0.1" + "arrify": "^1.0.1", + "micromatch": "^2.3.11", + "object-assign": "^4.1.0", + "read-pkg-up": "^1.0.1", + "require-main-filename": "^1.0.1" }, "dependencies": { "arr-diff": { @@ -15139,7 +15548,7 @@ "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", "dev": true, "requires": { - "arr-flatten": "1.1.0" + "arr-flatten": "^1.0.1" } }, "array-unique": { @@ -15154,9 +15563,9 @@ "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", "dev": true, "requires": { - "expand-range": "1.8.2", - "preserve": "0.2.0", - "repeat-element": "1.1.3" + "expand-range": "^1.8.1", + "preserve": "^0.2.0", + "repeat-element": "^1.1.2" } }, "expand-brackets": { @@ -15165,7 +15574,7 @@ "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", "dev": true, "requires": { - "is-posix-bracket": "0.1.1" + "is-posix-bracket": "^0.1.0" } }, "extglob": { @@ -15174,7 +15583,7 @@ "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "is-extglob": { @@ -15189,7 +15598,7 @@ "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", "dev": true, "requires": { - "is-extglob": "1.0.0" + "is-extglob": "^1.0.0" } }, "kind-of": { @@ -15198,7 +15607,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } }, "micromatch": { @@ -15207,19 +15616,19 @@ "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", "dev": true, "requires": { - "arr-diff": "2.0.0", - "array-unique": "0.2.1", - "braces": "1.8.5", - "expand-brackets": "0.1.5", - "extglob": "0.3.2", - "filename-regex": "2.0.1", - "is-extglob": "1.0.0", - "is-glob": "2.0.1", - "kind-of": "3.2.2", - "normalize-path": "2.1.1", - "object.omit": "2.0.1", - "parse-glob": "3.0.4", - "regex-cache": "0.4.4" + "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" } }, "normalize-path": { @@ -15228,14 +15637,8 @@ "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { - "remove-trailing-separator": "1.1.0" + "remove-trailing-separator": "^1.0.1" } - }, - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true } } }, @@ -15246,12 +15649,12 @@ "dev": true }, "thenify": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.0.tgz", - "integrity": "sha1-5p44obq+lpsBCCB5eLn2K4hgSDk=", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", "dev": true, "requires": { - "any-promise": "1.3.0" + "any-promise": "^1.0.0" } }, "thenify-all": { @@ -15260,7 +15663,7 @@ "integrity": "sha1-GhkY1ALY/D+Y+/I02wvMjMEOlyY=", "dev": true, "requires": { - "thenify": "3.3.0" + "thenify": ">= 3.1.0 < 4" } }, "thread-loader": { @@ -15269,9 +15672,9 @@ "integrity": "sha512-7xpuc9Ifg6WU+QYw/8uUqNdRwMD+N5gjwHKMqETrs96Qn+7BHwECpt2Brzr4HFlf4IAkZsayNhmGdbkBsTJ//w==", "dev": true, "requires": { - "loader-runner": "2.4.0", - "loader-utils": "1.2.3", - "neo-async": "2.6.1" + "loader-runner": "^2.3.1", + "loader-utils": "^1.1.0", + "neo-async": "^2.6.0" } }, "throat": { @@ -15292,8 +15695,8 @@ "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { - "readable-stream": "2.3.6", - "xtend": "4.0.1" + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" } }, "thunky": { @@ -15302,18 +15705,13 @@ "integrity": "sha512-YwT8pjmNcAXBZqrubu22P4FYsh2D4dxRmnWBOL8Jk8bUcRUtc5326kx32tuTmFDAZtLOGEVNl8POAR8j896Iow==", "dev": true }, - "timed-out": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/timed-out/-/timed-out-4.0.1.tgz", - "integrity": "sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8=" - }, "timers-browserify": { "version": "2.0.10", "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-2.0.10.tgz", "integrity": "sha512-YvC1SV1XdOUaL6gx5CoGroT3Gu49pK9+TZ38ErPldOWW4j49GI1HKs9DV+KGq/w6y+LZ72W1c8cKz2vzY+qpzg==", "dev": true, "requires": { - "setimmediate": "1.0.5" + "setimmediate": "^1.0.4" } }, "timsort": { @@ -15333,13 +15731,13 @@ "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", "dev": true, "requires": { - "os-tmpdir": "1.0.2" + "os-tmpdir": "~1.0.2" } }, "tmpl": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.4.tgz", - "integrity": "sha1-I2QN17QtAEM5ERQIIOXPRA5SHdE=", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/tmpl/-/tmpl-1.0.5.tgz", + "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, "to-arraybuffer": { @@ -15360,7 +15758,7 @@ "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", "dev": true, "requires": { - "kind-of": "3.2.2" + "kind-of": "^3.0.2" }, "dependencies": { "kind-of": { @@ -15369,7 +15767,7 @@ "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", "dev": true, "requires": { - "is-buffer": "1.1.6" + "is-buffer": "^1.1.5" } } } @@ -15380,10 +15778,10 @@ "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", "dev": true, "requires": { - "define-property": "2.0.2", - "extend-shallow": "3.0.2", - "regex-not": "1.0.2", - "safe-regex": "1.1.0" + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" } }, "to-regex-range": { @@ -15392,14 +15790,14 @@ "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", "dev": true, "requires": { - "is-number": "3.0.0", - "repeat-string": "1.6.1" + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" } }, "toidentifier": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", - "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true }, "toposort": { @@ -15409,21 +15807,13 @@ "dev": true }, "tough-cookie": { - "version": "2.4.3", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.4.3.tgz", - "integrity": "sha512-Q5srk/4vDM54WJsJio3XNn6K2sCG+CQ8G5Wz6bZhRZoAe/+TxjWB/GlFAnYEbkYVlON9FMk/fE3h2RLpPXo4lQ==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", + "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", "dev": true, "requires": { - "psl": "1.1.32", - "punycode": "1.4.1" - }, - "dependencies": { - "punycode": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", - "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", - "dev": true - } + "psl": "^1.1.28", + "punycode": "^2.1.1" } }, "tr46": { @@ -15432,14 +15822,13 @@ "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "trim-newlines": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", - "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", - "dev": true + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", + "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==" }, "trim-right": { "version": "1.0.1", @@ -15453,23 +15842,7 @@ "integrity": "sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew==", "dev": true, "requires": { - "glob": "7.1.4" - }, - "dependencies": { - "glob": { - "version": "7.1.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.4.tgz", - "integrity": "sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==", - "dev": true, - "requires": { - "fs.realpath": "1.0.0", - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - } + "glob": "^7.1.2" } }, "tryer": { @@ -15484,10 +15857,10 @@ "integrity": "sha512-vZXmzPrL+EmC4T/4rVlT2jNVMWCi/O4DIiSj3UHg1OE5kCKbk4mfrXc6dZksLgRM/TZlKnousKH9bbTazUWRRw==", "dev": true, "requires": { - "@types/strip-bom": "3.0.0", + "@types/strip-bom": "^3.0.0", "@types/strip-json-comments": "0.0.30", - "strip-bom": "3.0.0", - "strip-json-comments": "2.0.1" + "strip-bom": "^3.0.0", + "strip-json-comments": "^2.0.0" }, "dependencies": { "strip-bom": { @@ -15515,7 +15888,7 @@ "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", "dev": true, "requires": { - "safe-buffer": "5.1.2" + "safe-buffer": "^5.0.1" } }, "tweetnacl": { @@ -15530,7 +15903,7 @@ "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", "dev": true, "requires": { - "prelude-ls": "1.1.2" + "prelude-ls": "~1.1.2" } }, "type-fest": { @@ -15546,7 +15919,18 @@ "dev": true, "requires": { "media-typer": "0.3.0", - "mime-types": "2.1.24" + "mime-types": "~2.1.24" + } + }, + "typed-array-length": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", + "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" } }, "typedarray": { @@ -15561,8 +15945,8 @@ "dev": true, "optional": true, "requires": { - "commander": "2.20.0", - "source-map": "0.6.1" + "commander": "~2.20.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -15574,32 +15958,44 @@ } } }, + "unbox-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", + "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + } + }, "unicode-canonical-property-names-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", - "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz", + "integrity": "sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==", "dev": true }, "unicode-match-property-ecmascript": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", - "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz", + "integrity": "sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==", "dev": true, "requires": { - "unicode-canonical-property-names-ecmascript": "1.0.4", - "unicode-property-aliases-ecmascript": "1.0.5" + "unicode-canonical-property-names-ecmascript": "^2.0.0", + "unicode-property-aliases-ecmascript": "^2.0.0" } }, "unicode-match-property-value-ecmascript": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.1.0.tgz", - "integrity": "sha512-hDTHvaBk3RmFzvSl0UVrUmC3PuW9wKVnpoUDYH0JDkSIovzw+J5viQmeYHxVSBptubnr7PbH2e0fnpDRQnQl5g==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz", + "integrity": "sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==", "dev": true }, "unicode-property-aliases-ecmascript": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.0.5.tgz", - "integrity": "sha512-L5RAqCfXqAwR3RriF8pM0lU0w4Ryf/GgzONwi6KnL1taJQa7x1TCxdJnILX59WIGOwR57IVxn7Nej0fz1Ny6fw==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz", + "integrity": "sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==", "dev": true }, "union-value": { @@ -15608,10 +16004,10 @@ "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", "dev": true, "requires": { - "arr-union": "3.1.0", - "get-value": "2.0.6", - "is-extendable": "0.1.1", - "set-value": "2.0.1" + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" } }, "uniq": { @@ -15632,7 +16028,7 @@ "integrity": "sha512-Vmp0jIp2ln35UTXuryvjzkjGdRyf9b2lTXuSYUiPmzRcl3FDtYqAwOnTJkAngD9SWhnoJzDbTKwaOrZ+STtxNQ==", "dev": true, "requires": { - "unique-slug": "2.0.1" + "unique-slug": "^2.0.0" } }, "unique-slug": { @@ -15641,7 +16037,7 @@ "integrity": "sha512-n9cU6+gITaVu7VGj1Z8feKMmfAjEAQGhwD9fE3zvpRRa0wEIx8ODYkVGfSc94M2OX00tUFV8wH3zYbm1I8mxFg==", "dev": true, "requires": { - "imurmurhash": "0.1.4" + "imurmurhash": "^0.1.4" } }, "universalify": { @@ -15668,8 +16064,8 @@ "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", "dev": true, "requires": { - "has-value": "0.3.1", - "isobject": "3.0.1" + "has-value": "^0.3.1", + "isobject": "^3.0.0" }, "dependencies": { "has-value": { @@ -15678,9 +16074,9 @@ "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", "dev": true, "requires": { - "get-value": "2.0.6", - "has-values": "0.1.4", - "isobject": "2.1.0" + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" }, "dependencies": { "isobject": { @@ -15708,6 +16104,24 @@ "integrity": "sha512-kXpym8nmDmlCBr7nKdIx8P2jNBa+pBpIUFRnKJ4dr8htyYGJFokkr2ZvERRtUN+9SY+JqXouNgUPtv6JQva/2Q==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.11.tgz", + "integrity": "sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "dependencies": { + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + } + } + }, "upper-case": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/upper-case/-/upper-case-1.1.3.tgz", @@ -15720,7 +16134,7 @@ "integrity": "sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ==", "dev": true, "requires": { - "punycode": "2.1.1" + "punycode": "^2.1.0" } }, "urix": { @@ -15753,9 +16167,9 @@ "integrity": "sha512-dXHkKmw8FhPqu8asTc1puBfe3TehOCo2+RmOOev5suNCIYBcT626kxiWg1NBVkwc4rO8BGa7gP70W7VXuqHrjg==", "dev": true, "requires": { - "loader-utils": "1.2.3", - "mime": "2.4.3", - "schema-utils": "1.0.0" + "loader-utils": "^1.1.0", + "mime": "^2.0.3", + "schema-utils": "^1.0.0" }, "dependencies": { "schema-utils": { @@ -15764,36 +16178,23 @@ "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } } } }, "url-parse": { - "version": "1.4.7", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.4.7.tgz", - "integrity": "sha512-d3uaVyzDB9tQoSXFvuSUNFibTd9zxd2bkVrDRvF5TmvWWQwqE4lgYJ5m+x1DbecWkw+LK4RNl2CU1hHuOKPVlg==", + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", "dev": true, "requires": { - "querystringify": "2.1.1", - "requires-port": "1.0.0" - } - }, - "url-parse-lax": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-3.0.0.tgz", - "integrity": "sha1-FrXK/Afb42dsGxmZF3gj1lA6yww=", - "requires": { - "prepend-http": "2.0.0" + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" } }, - "url-to-options": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/url-to-options/-/url-to-options-1.0.1.tgz", - "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=" - }, "use": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", @@ -15820,8 +16221,8 @@ "integrity": "sha512-i+6qA2MPhvoKLuxnJNpXAGhg7HphQOSUq2LKMZD0m15EiskXUkMvKdF4Uui0WYeCUGea+o2cw/ZuwehtfsrNkA==", "dev": true, "requires": { - "define-properties": "1.1.3", - "object.getownpropertydescriptors": "2.0.3" + "define-properties": "^1.1.2", + "object.getownpropertydescriptors": "^2.0.3" } }, "utila": { @@ -15847,8 +16248,8 @@ "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "requires": { - "spdx-correct": "3.1.0", - "spdx-expression-parse": "3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, "vary": { @@ -15869,18 +16270,9 @@ "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", "dev": true, "requires": { - "assert-plus": "1.0.0", + "assert-plus": "^1.0.0", "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - } - }, - "vm-browserify": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-0.0.4.tgz", - "integrity": "sha1-XX6kW7755Kb/ZflUOOCofDV9WnM=", - "dev": true, - "requires": { - "indexof": "0.0.1" + "extsprintf": "^1.2.0" } }, "vt-pbf": { @@ -15889,8 +16281,8 @@ "integrity": "sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA==", "requires": { "@mapbox/point-geometry": "0.1.0", - "@mapbox/vector-tile": "1.3.1", - "pbf": "3.2.1" + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.0.5" } }, "vue": { @@ -15898,15 +16290,13 @@ "resolved": "https://registry.npmjs.org/vue/-/vue-2.6.10.tgz", "integrity": "sha512-ImThpeNU9HbdZL3utgMCq0oiMzAkt1mcgy3/E6zWC/G6AaQoeuFdsl9nDhTDU3X1R6FK7nsIUuRACVcjI+A2GQ==" }, - "vue-analytics": { - "version": "5.16.4", - "resolved": "https://registry.npmjs.org/vue-analytics/-/vue-analytics-5.16.4.tgz", - "integrity": "sha512-M67cUqpPeyk2rftrvlx2uU+BQ/C4E8SkF2Ct9LizOYUoTccZtCCJwhMJfQ3XL8xep6p3K8KYz58FzRWvx5zlPw==" - }, "vue-chartjs": { - "version": "3.4.2", - "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-3.4.2.tgz", - "integrity": "sha512-EhoXUJ17+9isMLhJpOliS++xE5z5FM8iAVytIqnKofByVMr8AISRL/SCy3zvWbvzhjgQPStd9y6adMF5bnWQdg==" + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/vue-chartjs/-/vue-chartjs-3.5.1.tgz", + "integrity": "sha512-foocQbJ7FtveICxb4EV5QuVpo6d8CmZFmAopBppDIGKY+esJV8IJgwmEW0RexQhxqXaL/E1xNURsgFFYyKzS/g==", + "requires": { + "@types/chart.js": "^2.7.55" + } }, "vue-eslint-parser": { "version": "2.0.3", @@ -15915,12 +16305,12 @@ "dev": true, "optional": true, "requires": { - "debug": "3.2.6", - "eslint-scope": "3.7.3", - "eslint-visitor-keys": "1.0.0", - "espree": "3.5.4", - "esquery": "1.0.1", - "lodash": "4.17.15" + "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" }, "dependencies": { "eslint-scope": { @@ -15930,16 +16320,16 @@ "dev": true, "optional": true, "requires": { - "esrecurse": "4.2.1", - "estraverse": "4.2.0" + "esrecurse": "^4.1.0", + "estraverse": "^4.1.1" } } } }, "vue-functional-data-merge": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-2.0.7.tgz", - "integrity": "sha512-pvLc+H+x2prwBj/uSEIITyxjz/7ZUVVK8uYbrYMmhDvMXnzh9OvQvVEwcOSBQjsubd4Eq41/CSJaWzy4hemMNQ==" + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/vue-functional-data-merge/-/vue-functional-data-merge-3.1.0.tgz", + "integrity": "sha512-leT4kdJVQyeZNY1kmnS1xiUlQ9z1B/kdBFCILIjYYQDqZgLqCLa0UhjSSeRX6c3mUe6U5qYeM8LrEqkHJ1B4LA==" }, "vue-hot-reload-api": { "version": "2.3.3", @@ -15948,29 +16338,24 @@ "dev": true }, "vue-jest": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.4.tgz", - "integrity": "sha512-PY9Rwt4OyaVlA+KDJJ0614CbEvNOkffDI9g9moLQC/2DDoo0YrqZm7dHi13Q10uoK5Nt5WCYFdeAheOExPah0w==", - "dev": true, - "requires": { - "babel-plugin-transform-es2015-modules-commonjs": "6.26.2", - "chalk": "2.4.2", - "extract-from-css": "0.4.4", - "find-babel-config": "1.2.0", - "js-beautify": "1.10.0", - "node-cache": "4.2.0", - "object-assign": "4.1.1", - "source-map": "0.5.7", - "tsconfig": "7.0.0", - "vue-template-es2015-compiler": "1.9.1" + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/vue-jest/-/vue-jest-3.0.7.tgz", + "integrity": "sha512-PIOxFM+wsBMry26ZpfBvUQ/DGH2hvp5khDQ1n51g3bN0TwFwTy4J85XVfxTRMukqHji/GnAoGUnlZ5Ao73K62w==", + "dev": true, + "requires": { + "babel-plugin-transform-es2015-modules-commonjs": "^6.26.0", + "chalk": "^2.1.0", + "deasync": "^0.1.15", + "extract-from-css": "^0.4.4", + "find-babel-config": "^1.1.0", + "js-beautify": "^1.6.14", + "node-cache": "^4.1.1", + "object-assign": "^4.1.1", + "source-map": "^0.5.6", + "tsconfig": "^7.0.0", + "vue-template-es2015-compiler": "^1.6.0" }, "dependencies": { - "object-assign": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", - "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", - "dev": true - }, "source-map": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", @@ -15985,11 +16370,11 @@ "integrity": "sha512-x+NZ4RIthQOxcFclEcs8sXGEWqnZHodL2J9Vq+hUz+TDZzBaDIh1j3d9M2IUlTjtrHTZy4uMuRdTi8BGws7jLA==", "dev": true, "requires": { - "@vue/component-compiler-utils": "2.6.0", - "hash-sum": "1.0.2", - "loader-utils": "1.2.3", - "vue-hot-reload-api": "2.3.3", - "vue-style-loader": "4.1.2" + "@vue/component-compiler-utils": "^2.5.1", + "hash-sum": "^1.0.2", + "loader-utils": "^1.1.0", + "vue-hot-reload-api": "^2.3.0", + "vue-style-loader": "^4.1.0" } }, "vue-matomo": { @@ -16002,7 +16387,7 @@ "resolved": "https://registry.npmjs.org/vue-moment/-/vue-moment-4.1.0.tgz", "integrity": "sha512-Gzisqpg82ItlrUyiD9d0Kfru+JorW2o4mQOH06lEDZNgxci0tv/fua1Hl0bo4DozDV2JK1r52Atn/8QVCu8qQw==", "requires": { - "moment": "2.24.0" + "moment": "^2.19.2" } }, "vue-router": { @@ -16021,8 +16406,8 @@ "integrity": "sha512-0ip8ge6Gzz/Bk0iHovU9XAUQaFt/G2B61bnWa2tCcqqdgfHs1lF9xXorFbE55Gmy92okFT+8bfmySuUOu13vxQ==", "dev": true, "requires": { - "hash-sum": "1.0.2", - "loader-utils": "1.2.3" + "hash-sum": "^1.0.2", + "loader-utils": "^1.0.2" } }, "vue-template-compiler": { @@ -16031,8 +16416,8 @@ "integrity": "sha512-jVZkw4/I/HT5ZMvRnhv78okGusqe0+qH2A0Em0Cp8aq78+NK9TII263CDVz2QXZsIT+yyV/gZc/j/vlwa+Epyg==", "dev": true, "requires": { - "de-indent": "1.0.2", - "he": "1.2.0" + "de-indent": "^1.0.2", + "he": "^1.1.0" } }, "vue-template-es2015-compiler": { @@ -16046,7 +16431,7 @@ "resolved": "https://registry.npmjs.org/vuejs-noty/-/vuejs-noty-0.1.3.tgz", "integrity": "sha512-qHdEpq3IQMg3Upf6UAQrcEtRGNZfH3gQd1KLJYQE52rmYaNp79ZAj8F7kP2xDKpSBGBERvCUAy7txNiodRxAYg==", "requires": { - "noty": "3.1.4" + "noty": "^3.1.0" } }, "vuex": { @@ -16060,7 +16445,7 @@ "integrity": "sha1-gqwr/2PZUOqeMYmlimViX+3xkEU=", "dev": true, "requires": { - "browser-process-hrtime": "0.1.3" + "browser-process-hrtime": "^0.1.2" } }, "walker": { @@ -16069,7 +16454,7 @@ "integrity": "sha1-L3+bj9ENZ3JisYqITijRlhjgKPs=", "dev": true, "requires": { - "makeerror": "1.0.11" + "makeerror": "1.0.x" } }, "watch": { @@ -16078,119 +16463,509 @@ "integrity": "sha1-KAlUdsbffJDJYxOJkMClQj60uYY=", "dev": true, "requires": { - "exec-sh": "0.2.2", - "minimist": "1.2.0" + "exec-sh": "^0.2.0", + "minimist": "^1.2.0" + } + }, + "watchpack": { + "version": "1.7.5", + "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.7.5.tgz", + "integrity": "sha512-9P3MWk6SrKjHsGkLT2KHXdQ/9SNkyoJbabxnKOoJepsvJjJG8uYTR3yTPxPQvNDI3w4Nz1xnE0TLHK4RIVe/MQ==", + "dev": true, + "requires": { + "chokidar": "^3.4.1", + "graceful-fs": "^4.1.2", + "neo-async": "^2.5.0", + "watchpack-chokidar2": "^2.0.1" + }, + "dependencies": { + "anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "optional": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "dev": true, + "optional": true + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "optional": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "dev": true, + "optional": true, + "requires": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "fsevents": "~2.3.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" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "optional": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "optional": true, + "requires": { + "is-glob": "^4.0.1" + } + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "optional": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "optional": true + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "optional": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "optional": true, + "requires": { + "is-number": "^7.0.0" + } + } + } + }, + "watchpack-chokidar2": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/watchpack-chokidar2/-/watchpack-chokidar2-2.0.1.tgz", + "integrity": "sha512-nCFfBIPKr5Sh61s4LPpy1Wtfi0HE8isJ3d2Yb5/Ppw2P2B/3eVSEBjKfN0fmHJSK14+31KwMKmcrzs2GM4P0Ww==", + "dev": true, + "optional": true, + "requires": { + "chokidar": "^2.1.8" + } + }, + "wbuf": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", + "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", + "dev": true, + "requires": { + "minimalistic-assert": "^1.0.0" + } + }, + "wcwidth": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", + "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", + "dev": true, + "requires": { + "defaults": "^1.0.3" + } + }, + "webidl-conversions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", + "dev": true + }, + "webpack": { + "version": "4.47.0", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.47.0.tgz", + "integrity": "sha512-td7fYwgLSrky3fI1EuU5cneU4+pbH6GgOfuKNS1tNPcfdGinGELAqsb/BP4nnvZyKSG2i/xFGU7+n2PvZA8HJQ==", + "dev": true, + "requires": { + "@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" }, "dependencies": { - "minimist": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", - "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "@webassemblyjs/ast": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ast/-/ast-1.9.0.tgz", + "integrity": "sha512-C6wW5L+b7ogSDVqymbkkvuW9kruN//YisMED04xzeBBqjHa2FYnmvOlS6Xj68xWQRgWvI9cIglsjFowH/RJyEA==", + "dev": true, + "requires": { + "@webassemblyjs/helper-module-context": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0" + } + }, + "@webassemblyjs/floating-point-hex-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/floating-point-hex-parser/-/floating-point-hex-parser-1.9.0.tgz", + "integrity": "sha512-TG5qcFsS8QB4g4MhrxK5TqfdNe7Ey/7YL/xN+36rRjl/BlGE/NcBvJcqsRgCP6Z92mRE+7N50pRIi8SmKUbcQA==", + "dev": true + }, + "@webassemblyjs/helper-api-error": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-api-error/-/helper-api-error-1.9.0.tgz", + "integrity": "sha512-NcMLjoFMXpsASZFxJ5h2HZRcEhDkvnNFOAKneP5RbKRzaWJN36NC4jqQHKwStIhGXu5mUWlUUk7ygdtrO8lbmw==", + "dev": true + }, + "@webassemblyjs/helper-buffer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-buffer/-/helper-buffer-1.9.0.tgz", + "integrity": "sha512-qZol43oqhq6yBPx7YM3m9Bv7WMV9Eevj6kMi6InKOuZxhw+q9hOkvq5e/PpKSiLfyetpaBnogSbNCfBwyB00CA==", + "dev": true + }, + "@webassemblyjs/helper-code-frame": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-code-frame/-/helper-code-frame-1.9.0.tgz", + "integrity": "sha512-ERCYdJBkD9Vu4vtjUYe8LZruWuNIToYq/ME22igL+2vj2dQ2OOujIZr3MEFvfEaqKoVqpsFKAGsRdBSBjrIvZA==", + "dev": true, + "requires": { + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/helper-fsm": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-fsm/-/helper-fsm-1.9.0.tgz", + "integrity": "sha512-OPRowhGbshCb5PxJ8LocpdX9Kl0uB4XsAjl6jH/dWKlk/mzsANvhwbiULsaiqT5GZGT9qinTICdj6PLuM5gslw==", + "dev": true + }, + "@webassemblyjs/helper-module-context": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-module-context/-/helper-module-context-1.9.0.tgz", + "integrity": "sha512-MJCW8iGC08tMk2enck1aPW+BE5Cw8/7ph/VGZxwyvGbJwjktKkDK7vy7gAmMDx88D7mhDTCNKAW5tED+gZ0W8g==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0" + } + }, + "@webassemblyjs/helper-wasm-bytecode": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-bytecode/-/helper-wasm-bytecode-1.9.0.tgz", + "integrity": "sha512-R7FStIzyNcd7xKxCZH5lE0Bqy+hGTwS3LJjuv1ZVxd9O7eHCedSdrId/hMOd20I+v8wDXEn+bjfKDLzTepoaUw==", + "dev": true + }, + "@webassemblyjs/helper-wasm-section": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/helper-wasm-section/-/helper-wasm-section-1.9.0.tgz", + "integrity": "sha512-XnMB8l3ek4tvrKUUku+IVaXNHz2YsJyOOmz+MMkZvh8h1uSJpSen6vYnw3IoQ7WwEuAhL8Efjms1ZWjqh2agvw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0" + } + }, + "@webassemblyjs/ieee754": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/ieee754/-/ieee754-1.9.0.tgz", + "integrity": "sha512-dcX8JuYU/gvymzIHc9DgxTzUUTLexWwt8uCTWP3otys596io0L5aW02Gb1RjYpx2+0Jus1h4ZFqjla7umFniTg==", + "dev": true, + "requires": { + "@xtuc/ieee754": "^1.2.0" + } + }, + "@webassemblyjs/leb128": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/leb128/-/leb128-1.9.0.tgz", + "integrity": "sha512-ENVzM5VwV1ojs9jam6vPys97B/S65YQtv/aanqnU7D8aSoHFX8GyhGg0CMfyKNIHBuAVjy3tlzd5QMMINa7wpw==", + "dev": true, + "requires": { + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/utf8": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/utf8/-/utf8-1.9.0.tgz", + "integrity": "sha512-GZbQlWtopBTP0u7cHrEx+73yZKrQoBMpwkGEIqlacljhXCkVM1kMQge/Mf+csMJAjEdSwhOyLAS0AoR3AG5P8w==", + "dev": true + }, + "@webassemblyjs/wasm-edit": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-edit/-/wasm-edit-1.9.0.tgz", + "integrity": "sha512-FgHzBm80uwz5M8WKnMTn6j/sVbqilPdQXTWraSjBwFXSYGirpkSWE2R9Qvz9tNiTKQvoKILpCuTjBKzOIm0nxw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/helper-wasm-section": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-opt": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0", + "@webassemblyjs/wast-printer": "1.9.0" + } + }, + "@webassemblyjs/wasm-gen": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-gen/-/wasm-gen-1.9.0.tgz", + "integrity": "sha512-cPE3o44YzOOHvlsb4+E9qSqjc9Qf9Na1OO/BHFy4OI91XDE14MjFN4lTMezzaIWdPqHnsTodGGNP+iRSYfGkjA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wasm-opt": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-opt/-/wasm-opt-1.9.0.tgz", + "integrity": "sha512-Qkjgm6Anhm+OMbIL0iokO7meajkzQD71ioelnfPEj6r4eOFuqm4YC3VBPqXjFyyNwowzbMD+hizmprP/Fwkl2A==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-buffer": "1.9.0", + "@webassemblyjs/wasm-gen": "1.9.0", + "@webassemblyjs/wasm-parser": "1.9.0" + } + }, + "@webassemblyjs/wasm-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wasm-parser/-/wasm-parser-1.9.0.tgz", + "integrity": "sha512-9+wkMowR2AmdSWQzsPEjFU7njh8HTO5MqO8vjwEHuM+AMHioNqSBONRdr0NQQ3dVQrzp0s8lTcYqzUdb7YgELA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-wasm-bytecode": "1.9.0", + "@webassemblyjs/ieee754": "1.9.0", + "@webassemblyjs/leb128": "1.9.0", + "@webassemblyjs/utf8": "1.9.0" + } + }, + "@webassemblyjs/wast-parser": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-parser/-/wast-parser-1.9.0.tgz", + "integrity": "sha512-qsqSAP3QQ3LyZjNC/0jBJ/ToSxfYJ8kYyuiGvtn/8MK89VrNEfwj7BPQzJVHi0jGTRK2dGdJ5PRqhtjzoww+bw==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/floating-point-hex-parser": "1.9.0", + "@webassemblyjs/helper-api-error": "1.9.0", + "@webassemblyjs/helper-code-frame": "1.9.0", + "@webassemblyjs/helper-fsm": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@webassemblyjs/wast-printer": { + "version": "1.9.0", + "resolved": "https://registry.npmjs.org/@webassemblyjs/wast-printer/-/wast-printer-1.9.0.tgz", + "integrity": "sha512-2J0nE95rHXHyQ24cWjMKJ1tqB/ds8z/cyeOZxJhcb+rW+SQASVjuznUSmdz5GpVJTzU8JkhYut0D3siFDD6wsA==", + "dev": true, + "requires": { + "@webassemblyjs/ast": "1.9.0", + "@webassemblyjs/wast-parser": "1.9.0", + "@xtuc/long": "4.2.2" + } + }, + "@xtuc/long": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/@xtuc/long/-/long-4.2.2.tgz", + "integrity": "sha512-NuHqBY1PB/D8xU6s/thBgOAiAP7HOYDQ32+BFZILJ8ivkUkAHQnWfn6WhL79Owj1qmUnoN/YPhktdIoucipkAQ==", + "dev": true + }, + "acorn": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.4.2.tgz", + "integrity": "sha512-XtGIhXwF8YM8bJhGxG5kXgjkEuNGLTkoYqVE+KMR+aspr4KGYmKYg7yUe3KghyQ9yheNwLnjmzh/7+gfDBmHCQ==", + "dev": true + }, + "ajv-keywords": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/ajv-keywords/-/ajv-keywords-3.5.2.tgz", + "integrity": "sha512-5p6WTN0DdTGVQk6VjcEju19IgaHudalcfabD7yhDGeA6bcQnmL+CpveLJq/3hvfwd1aof6L386Ougkx6RfyMIQ==", + "dev": true + }, + "enhanced-resolve": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-4.5.0.tgz", + "integrity": "sha512-Nv9m36S/vxpsI+Hc4/ZGRs0n9mXqSWGGq49zxb/cJfPAQMbUtttJAlNPS4AQzaBdw/pKskw5bMbekT/Y7W/Wlg==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "memory-fs": "^0.5.0", + "tapable": "^1.0.0" + }, + "dependencies": { + "memory-fs": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/memory-fs/-/memory-fs-0.5.0.tgz", + "integrity": "sha512-jA0rdU5KoQMC0e6ppoNRtpp6vjFq6+NY7r8hywnC7V+1Xj/MtHwGIbB1QaK/dunyjWteJzmkpd7ooeWg10T7GA==", + "dev": true, + "requires": { + "errno": "^0.1.3", + "readable-stream": "^2.0.1" + } + } + } + }, + "node-libs-browser": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/node-libs-browser/-/node-libs-browser-2.2.1.tgz", + "integrity": "sha512-h/zcD8H9kaDZ9ALUWwlBUDo6TKF8a7qBSCSEGfjTVIYeqsioSKaAX+BN7NgiMGp6iSIXZ3PxgCu8KS3b71YK5Q==", + "dev": true, + "requires": { + "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" + } + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==", + "dev": true + }, + "schema-utils": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", + "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", + "dev": true, + "requires": { + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" + } + }, + "vm-browserify": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vm-browserify/-/vm-browserify-1.1.2.tgz", + "integrity": "sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==", "dev": true } } }, - "watchpack": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-1.6.0.tgz", - "integrity": "sha512-i6dHe3EyLjMmDlU1/bGQpEw25XSjkJULPuAVKCbNRefQVq48yXKUpwg538F7AZTf9kyr57zj++pQFltUa5H7yA==", - "dev": true, - "requires": { - "chokidar": "2.1.6", - "graceful-fs": "4.1.15", - "neo-async": "2.6.1" - } - }, - "wbuf": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/wbuf/-/wbuf-1.7.3.tgz", - "integrity": "sha512-O84QOnr0icsbFGLS0O3bI5FswxzRr8/gHwWkDlQFskhSPryQXvrTMxjxGP4+iWYoauLoBvfDpkrOauZ+0iZpDA==", - "dev": true, - "requires": { - "minimalistic-assert": "1.0.1" - } - }, - "wcwidth": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/wcwidth/-/wcwidth-1.0.1.tgz", - "integrity": "sha1-8LDc+RW8X/FSivrbLA4XtTLaL+g=", - "dev": true, - "requires": { - "defaults": "1.0.3" - } - }, - "webidl-conversions": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", - "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", - "dev": true - }, - "webpack": { - "version": "4.28.4", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.28.4.tgz", - "integrity": "sha512-NxjD61WsK/a3JIdwWjtIpimmvE6UrRi3yG54/74Hk9rwNj5FPkA4DJCf1z4ByDWLkvZhTZE+P3C/eh6UD5lDcw==", - "dev": true, - "requires": { - "@webassemblyjs/ast": "1.7.11", - "@webassemblyjs/helper-module-context": "1.7.11", - "@webassemblyjs/wasm-edit": "1.7.11", - "@webassemblyjs/wasm-parser": "1.7.11", - "acorn": "5.7.3", - "acorn-dynamic-import": "3.0.0", - "ajv": "6.10.0", - "ajv-keywords": "3.4.0", - "chrome-trace-event": "1.0.2", - "enhanced-resolve": "4.1.0", - "eslint-scope": "4.0.3", - "json-parse-better-errors": "1.0.2", - "loader-runner": "2.4.0", - "loader-utils": "1.2.3", - "memory-fs": "0.4.1", - "micromatch": "3.1.10", - "mkdirp": "0.5.1", - "neo-async": "2.6.1", - "node-libs-browser": "2.2.0", - "schema-utils": "0.4.7", - "tapable": "1.1.3", - "terser-webpack-plugin": "1.3.0", - "watchpack": "1.6.0", - "webpack-sources": "1.3.0" - } - }, "webpack-bundle-analyzer": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.3.2.tgz", - "integrity": "sha512-7qvJLPKB4rRWZGjVp5U1KEjwutbDHSKboAl0IfafnrdXMrgC0tOtZbQD6Rw0u4cmpgRN4O02Fc0t8eAT+FgGzA==", - "dev": true, - "requires": { - "acorn": "6.1.1", - "acorn-walk": "6.1.1", - "bfj": "6.1.1", - "chalk": "2.4.2", - "commander": "2.20.0", - "ejs": "2.6.1", - "express": "4.17.1", - "filesize": "3.6.1", - "gzip-size": "5.1.1", - "lodash": "4.17.15", - "mkdirp": "0.5.1", - "opener": "1.5.1", - "ws": "6.2.1" + "version": "3.9.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-analyzer/-/webpack-bundle-analyzer-3.9.0.tgz", + "integrity": "sha512-Ob8amZfCm3rMB1ScjQVlbYYUEJyEjdEtQ92jqiFUYt5VkEeO2v5UMbv49P/gnmCZm3A6yaFQzCBvpZqN4MUsdA==", + "dev": true, + "requires": { + "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" }, "dependencies": { "acorn": { - "version": "6.1.1", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-6.1.1.tgz", - "integrity": "sha512-jPTiwtOxaHNaAPg/dmrJ/beuzLRnXtB0kQPQ8JpotKJgTB6rX6c8mlf315941pyjBSaPg8NHXS9fhP4u17DpGA==", + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", "dev": true }, "ws": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", - "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", "dev": true, "requires": { - "async-limiter": "1.0.0" + "async-limiter": "~1.0.0" } } } @@ -16201,58 +16976,62 @@ "integrity": "sha512-BCfKo2YkDe2ByqkEWe1Rw+zko4LsyS75LVr29C6xIrxAg9JHJ4pl8kaIZ396SUSNp6b4815dRZPSTAS8LlURRQ==", "dev": true, "requires": { - "deepmerge": "1.5.2", - "javascript-stringify": "1.6.0" + "deepmerge": "^1.5.2", + "javascript-stringify": "^1.6.0" } }, "webpack-dev-middleware": { - "version": "3.7.0", - "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.0.tgz", - "integrity": "sha512-qvDesR1QZRIAZHOE3iQ4CXLZZSQ1lAUsSpnQmlB1PBfoN/xdRjmge3Dok0W4IdaVLJOGJy3sGI4sZHwjRU0PCA==", + "version": "3.7.3", + "resolved": "https://registry.npmjs.org/webpack-dev-middleware/-/webpack-dev-middleware-3.7.3.tgz", + "integrity": "sha512-djelc/zGiz9nZj/U7PTBi2ViorGJXEWo/3ltkPbDyxCXhhEXkW0ce99falaok4TPj+AsxLiXJR0EBOb0zh9fKQ==", "dev": true, "requires": { - "memory-fs": "0.4.1", - "mime": "2.4.3", - "range-parser": "1.2.1", - "webpack-log": "2.0.0" + "memory-fs": "^0.4.1", + "mime": "^2.4.4", + "mkdirp": "^0.5.1", + "range-parser": "^1.2.1", + "webpack-log": "^2.0.0" } }, "webpack-dev-server": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.4.1.tgz", - "integrity": "sha512-CRqZQX2ryMtrg0r3TXQPpNh76eM1HD3Wmu6zDBxIKi/d2y+4aa28Ia8weNT0bfgWpY6Vs3Oq/K8+DjfbR+tWYw==", - "dev": true, - "requires": { - "ansi-html": "0.0.7", - "bonjour": "3.5.0", - "chokidar": "2.1.6", - "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.2.1", + "version": "3.11.3", + "resolved": "https://registry.npmjs.org/webpack-dev-server/-/webpack-dev-server-3.11.3.tgz", + "integrity": "sha512-3x31rjbEQWKMNzacUZRE6wXvUFuGpH7vr0lIEbYpMAG9BOxi0928QU1BBswOAP3kg3H1O4hiS+sq4YyAn6ANnA==", + "dev": true, + "requires": { + "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", - "killable": "1.0.1", - "loglevel": "1.6.1", - "opn": "5.5.0", - "portfinder": "1.0.20", - "schema-utils": "1.0.0", - "selfsigned": "1.10.4", - "semver": "6.1.0", - "serve-index": "1.9.1", - "sockjs": "0.3.19", - "sockjs-client": "1.3.0", - "spdy": "4.0.0", - "strip-ansi": "3.0.1", - "supports-color": "6.1.0", - "url": "0.11.0", - "webpack-dev-middleware": "3.7.0", - "webpack-log": "2.0.0", - "yargs": "12.0.5" + "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" }, "dependencies": { "ansi-regex": { @@ -16261,13 +17040,49 @@ "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", "dev": true }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "debug": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.1.1.tgz", - "integrity": "sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw==", + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", "dev": true, "requires": { - "ms": "2.1.1" + "ms": "2.1.2" + }, + "dependencies": { + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + } } }, "find-up": { @@ -16276,79 +17091,48 @@ "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", "dev": true, "requires": { - "locate-path": "3.0.0" + "locate-path": "^3.0.0" } }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, "import-local": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/import-local/-/import-local-2.0.0.tgz", "integrity": "sha512-b6s04m3O+s3CGSbqDIyP4R6aAwAeYlVq9+WUWep6iHa8ETRf9yei1U48C5MmfJmV9AiLYYBKPMq/W+/WRpQmCQ==", "dev": true, "requires": { - "pkg-dir": "3.0.0", - "resolve-cwd": "2.0.0" + "pkg-dir": "^3.0.0", + "resolve-cwd": "^2.0.0" } }, - "invert-kv": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", - "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "is-absolute-url": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-3.0.3.tgz", + "integrity": "sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==", "dev": true }, - "lcid": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", - "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", - "dev": true, - "requires": { - "invert-kv": "2.0.0" - } - }, "locate-path": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-3.0.0.tgz", "integrity": "sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A==", "dev": true, "requires": { - "p-locate": "3.0.0", - "path-exists": "3.0.0" - } - }, - "mem": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", - "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", - "dev": true, - "requires": { - "map-age-cleaner": "0.1.3", - "mimic-fn": "2.1.0", - "p-is-promise": "2.1.0" - } - }, - "mimic-fn": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", - "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", - "dev": true - }, - "os-locale": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", - "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", - "dev": true, - "requires": { - "execa": "1.0.0", - "lcid": "2.0.0", - "mem": "4.3.0" + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" } }, "p-limit": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.0.tgz", - "integrity": "sha512-pZbTJpoUsCzV48Mc9Nh51VbwO0X9cuPFE8gYwx9BTCt9SF8/b7Zljd2fVgOxhIF/HDTKgpVzs+GPhyKfjLLFRQ==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", "dev": true, "requires": { - "p-try": "2.2.0" + "p-try": "^2.0.0" } }, "p-locate": { @@ -16357,7 +17141,7 @@ "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", "dev": true, "requires": { - "p-limit": "2.2.0" + "p-limit": "^2.0.0" } }, "p-try": { @@ -16366,30 +17150,64 @@ "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", "dev": true }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, "schema-utils": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/schema-utils/-/schema-utils-1.0.0.tgz", "integrity": "sha512-i27Mic4KovM/lnGsy8whRCHhc7VicJajAjTrYg11K9zfZXnYIt4k5F+kZkwjnrhKzLic/HLU4j11mjsz2G/75g==", "dev": true, "requires": { - "ajv": "6.10.0", - "ajv-errors": "1.0.1", - "ajv-keywords": "3.4.0" + "ajv": "^6.1.0", + "ajv-errors": "^1.0.0", + "ajv-keywords": "^3.1.0" } }, "semver": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.1.0.tgz", - "integrity": "sha512-kCqEOOHoBcFs/2Ccuk4Xarm/KiWRSLEX9CAZF8xkJ6ZPlIoTZ8V5f7J16vYLJqDbR7KrxTJpR2lqjIEm2Qx9cQ==", + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", "dev": true }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } }, "supports-color": { @@ -16398,37 +17216,72 @@ "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", "dev": true, "requires": { - "has-flag": "3.0.0" + "has-flag": "^3.0.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.1.tgz", + "integrity": "sha512-ILlv4k/3f6vfQ4OoP2AGvirOktlQ98ZEL1k9FaQjxa3L1abBgbuTDAdPOpvbGncC0BTVQrl+OM8xZGK6tWXt7g==", + "dev": true + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "ws": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.2.tgz", + "integrity": "sha512-zmhltoSR8u1cnDsD43TX59mzoMZsLKqUweyYBAIvTngR3shc0W6aOZylZmq/7hqyVxPdi+5Ud2QInblgyE72fw==", + "dev": true, + "requires": { + "async-limiter": "~1.0.0" } }, "yargs": { - "version": "12.0.5", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", - "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "version": "13.3.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.2.tgz", + "integrity": "sha512-AX3Zw5iPruN5ie6xGRIDgqkT+ZhnRlZMLMHAs8tg7nRruy2Nb+i5o9bwghAogtM08q1dpr2LVoS8KSTMYpWXUw==", "dev": true, "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "3.0.0", - "get-caller-file": "1.0.3", - "os-locale": "3.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "4.0.0", - "yargs-parser": "11.1.1" + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.2" } }, "yargs-parser": { - "version": "11.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", - "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "version": "13.1.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.2.tgz", + "integrity": "sha512-3lbsNRf/j+A4QuSZfDRA7HRSfWrzO0YjqTJd5kjAq37Zep1CEgaYmrH9Q3GwPiB9cHyd1Y1UwggGhJGoxipbzg==", "dev": true, "requires": { - "camelcase": "5.3.1", - "decamelize": "1.2.0" + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" } } } @@ -16439,8 +17292,8 @@ "integrity": "sha512-cX8G2vR/85UYG59FgkoMamwHUIkSSlV3bBMRsbxVXVUk2j6NleCKjQ/WE9eYg9WY4w25O9w8wKP4rzNZFmUcUg==", "dev": true, "requires": { - "ansi-colors": "3.2.4", - "uuid": "3.3.2" + "ansi-colors": "^3.0.0", + "uuid": "^3.3.2" } }, "webpack-merge": { @@ -16449,17 +17302,17 @@ "integrity": "sha512-4p8WQyS98bUJcCvFMbdGZyZmsKuWjWVnVHnAS3FFg0HDaRVrPbkivx2RYCre8UiemD67RsiFFLfn4JhLAin8Vw==", "dev": true, "requires": { - "lodash": "4.17.15" + "lodash": "^4.17.5" } }, "webpack-sources": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.3.0.tgz", - "integrity": "sha512-OiVgSrbGu7NEnEvQJJgdSFPl2qWKkWq5lHMhgiToIiN9w34EBnjYzSYs+VbL5KoYiLNtFFa7BZIKxRED3I32pA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/webpack-sources/-/webpack-sources-1.4.3.tgz", + "integrity": "sha512-lgTS3Xhv1lCOKo7SA5TjKXMjpSM4sBjNV5+q2bqesbSPs5FjGmU6jjtBSkX9b4qW87vDIsCIlUPOEhbZrMdjeQ==", "dev": true, "requires": { - "source-list-map": "2.0.1", - "source-map": "0.6.1" + "source-list-map": "^2.0.0", + "source-map": "~0.6.1" }, "dependencies": { "source-map": { @@ -16471,19 +17324,20 @@ } }, "websocket-driver": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.0.tgz", - "integrity": "sha1-DK+dLXVdk67gSdS90NP+LMoqJOs=", + "version": "0.7.4", + "resolved": "https://registry.npmjs.org/websocket-driver/-/websocket-driver-0.7.4.tgz", + "integrity": "sha512-b17KeDIQVjvb0ssuSDF2cYXSg2iztliJ4B9WdsuB6J952qCPKmnVq4DyW5motImXHDC1cBT/1UezrJVsKw5zjg==", "dev": true, "requires": { - "http-parser-js": "0.5.0", - "websocket-extensions": "0.1.3" + "http-parser-js": ">=0.5.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" } }, "websocket-extensions": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.3.tgz", - "integrity": "sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg==", + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/websocket-extensions/-/websocket-extensions-0.1.4.tgz", + "integrity": "sha512-OqedPIGOfsDlo31UNwYbCFMSaO9m9G/0faIHj5/dZFDMFqPTcx6UwqyOy3COEaEOg/9VsGIpdqn62W5KhoKSpg==", "dev": true }, "whatwg-encoding": { @@ -16507,9 +17361,9 @@ "integrity": "sha512-rhRZRqx/TLJQWUpQ6bmrt2UV4f0HCQ463yQuONJqC6fO2VoEb1pTYddbe59SkYq87aoM5A3bdhMZiUiVws+fzQ==", "dev": true, "requires": { - "lodash.sortby": "4.7.0", - "tr46": "1.0.1", - "webidl-conversions": "4.0.2" + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" } }, "which": { @@ -16518,7 +17372,20 @@ "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, "requires": { - "isexe": "2.0.0" + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" } }, "which-module": { @@ -16527,13 +17394,27 @@ "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", "dev": true }, + "which-typed-array": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.9.tgz", + "integrity": "sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==", + "dev": true, + "requires": { + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0", + "is-typed-array": "^1.1.10" + } + }, "wide-align": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", - "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.5.tgz", + "integrity": "sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==", "dev": true, "requires": { - "string-width": "2.1.1" + "string-width": "^1.0.2 || 2 || 3 || 4" } }, "wkt-parser": { @@ -16553,7 +17434,7 @@ "integrity": "sha512-rvw3QTZc8lAxyVrqcSGVm5yP/IJ2UcB3U0graE3LCFoZ0Yn2x4EoVSqJKdB/T5M+FLcRPjz4TDacRf3OCfNUzw==", "dev": true, "requires": { - "errno": "0.1.7" + "errno": "~0.1.7" } }, "wrap-ansi": { @@ -16562,8 +17443,8 @@ "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1" + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" }, "dependencies": { "ansi-regex": { @@ -16578,7 +17459,7 @@ "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", "dev": true, "requires": { - "number-is-nan": "1.0.1" + "number-is-nan": "^1.0.0" } }, "string-width": { @@ -16587,9 +17468,9 @@ "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" } }, "strip-ansi": { @@ -16598,7 +17479,7 @@ "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", "dev": true, "requires": { - "ansi-regex": "2.1.1" + "ansi-regex": "^2.0.0" } } } @@ -16606,8 +17487,7 @@ "wrappy": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" }, "write": { "version": "0.2.1", @@ -16616,7 +17496,7 @@ "dev": true, "optional": true, "requires": { - "mkdirp": "0.5.1" + "mkdirp": "^0.5.1" } }, "write-file-atomic": { @@ -16625,18 +17505,18 @@ "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", "dev": true, "requires": { - "graceful-fs": "4.1.15", - "imurmurhash": "0.1.4", - "signal-exit": "3.0.2" + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" } }, "ws": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.2.tgz", - "integrity": "sha512-jaHFD6PFv6UgoIVda6qZllptQsMlDEJkTQcybzzXDYM1XO9Y8em691FGMPmM46WGyLU4z9KMgQN+qrux/nhlHA==", + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-5.2.3.tgz", + "integrity": "sha512-jZArVERrMsKUatIdnLzqvcfydI85dvd/Fp1u/VOpfdDWQ4c9qWXe+VIeAbQ5FrDwciAkr+lzofXLz3Kuf26AOA==", "dev": true, "requires": { - "async-limiter": "1.0.0" + "async-limiter": "~1.0.0" } }, "xml-name-validator": { @@ -16651,9 +17531,9 @@ "integrity": "sha1-pcbVMr5lbiPbgg77lDofBJmNY68=" }, "y18n": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.0.tgz", - "integrity": "sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w==", + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", "dev": true }, "yallist": { @@ -16663,29 +17543,72 @@ "dev": true }, "yargs": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.0.tgz", - "integrity": "sha512-NwW69J42EsCSanF8kyn5upxvjp5ds+t3+udGBeTbFnERA+lF541DDpMawzo4z6W/QrzNM18D+BPMiOBibnFV5A==", - "dev": true, - "requires": { - "cliui": "4.1.0", - "decamelize": "1.2.0", - "find-up": "2.1.0", - "get-caller-file": "1.0.3", - "os-locale": "2.1.0", - "require-directory": "2.1.1", - "require-main-filename": "1.0.1", - "set-blocking": "2.0.0", - "string-width": "2.1.1", - "which-module": "2.0.0", - "y18n": "3.2.1", - "yargs-parser": "9.0.2" + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.1.1.tgz", + "integrity": "sha512-PRU7gJrJaXv3q3yQZ/+/X6KBswZiaQ+zOmdprZcouPYtQgvNU35i+68M4b1ZHLZtYFT5QObFLV+ZkmJYcwKdiw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.1.1", + "find-up": "^2.1.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.1.0", + "require-directory": "^2.1.1", + "require-main-filename": "^1.0.1", + "set-blocking": "^2.0.0", + "string-width": "^2.0.0", + "which-module": "^2.0.0", + "y18n": "^3.2.1", + "yargs-parser": "^9.0.2" }, "dependencies": { + "invert-kv": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/invert-kv/-/invert-kv-2.0.0.tgz", + "integrity": "sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA==", + "dev": true + }, + "lcid": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/lcid/-/lcid-2.0.0.tgz", + "integrity": "sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA==", + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "mem": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/mem/-/mem-4.3.0.tgz", + "integrity": "sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w==", + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^2.0.0", + "p-is-promise": "^2.0.0" + } + }, + "mimic-fn": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", + "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-locale/-/os-locale-3.1.0.tgz", + "integrity": "sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q==", + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, "y18n": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.1.tgz", - "integrity": "sha1-bRX7qITAhnnA136I53WegR4H+kE=", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-3.2.2.tgz", + "integrity": "sha512-uGZHXkHnhF0XeeAPgnKfPv1bgKAYyVvmNL1xlKsPYZPaIHxGti2hHqvOCQv71XMsLxu1QjergkqogUnms5D3YQ==", "dev": true } } @@ -16696,7 +17619,7 @@ "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { - "camelcase": "4.1.0" + "camelcase": "^4.1.0" }, "dependencies": { "camelcase": { @@ -16713,10 +17636,10 @@ "integrity": "sha512-jcKpkthap6x63MB4TxwCyuIGkV0oYP/YRyuQU5UO0Yz/E/ZAu+653/uov+phdmO54n6BcvFRyyt0RRrWdN2mpw==", "dev": true, "requires": { - "execa": "0.8.0", - "is-ci": "1.2.1", - "normalize-path": "1.0.0", - "strip-indent": "2.0.0" + "execa": "^0.8.0", + "is-ci": "^1.0.10", + "normalize-path": "^1.0.0", + "strip-indent": "^2.0.0" }, "dependencies": { "cross-spawn": { @@ -16725,9 +17648,9 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.5", - "shebang-command": "1.2.0", - "which": "1.3.1" + "lru-cache": "^4.0.1", + "shebang-command": "^1.2.0", + "which": "^1.2.9" } }, "execa": { @@ -16736,13 +17659,13 @@ "integrity": "sha1-2NdrvBtVIX7RkP1t1J08d07PyNo=", "dev": true, "requires": { - "cross-spawn": "5.1.0", - "get-stream": "3.0.0", - "is-stream": "1.1.0", - "npm-run-path": "2.0.2", - "p-finally": "1.0.0", - "signal-exit": "3.0.2", - "strip-eof": "1.0.0" + "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" } }, "get-stream": { @@ -16757,8 +17680,8 @@ "integrity": "sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==", "dev": true, "requires": { - "pseudomap": "1.0.2", - "yallist": "2.1.2" + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" } }, "normalize-path": { diff --git a/gwells/app/frontend/package.json b/gwells/app/frontend/package.json index a040883d8..bf6de39a5 100644 --- a/gwells/app/frontend/package.json +++ b/gwells/app/frontend/package.json @@ -10,17 +10,20 @@ "build": "vue-cli-service build", "lint": "vue-cli-service lint", "test:unit": "vue-cli-service test:unit", + "coverage:test": "vue-cli-service test:unit --coverage", "test:unit:update": "vue-cli-service test:unit -u" }, "dependencies": { + "@braintree/sanitize-url": "^6.0.2", "@geolonia/mbgl-gesture-handling": "^1.0.13", "@mapbox/mapbox-gl-geocoder": "^4.5.1", "@sentry/browser": "^5.7.1", "@sentry/integrations": "^5.7.1", + "@turf/intersect": "^6.5.0", "axios": "^0.21.1", - "bootstrap-vue": "^2.0.0-rc.2", + "bootstrap-vue": "2.23.1", "browser-update": "^3.3.8", - "chart.js": "^2.9.4", + "chart.js": "^2.8.0", "deep-diff": "^1.0.2", "lodash-es": "^4.17.15", "mapbox-gl": "^1.10.0", @@ -28,7 +31,6 @@ "proj4": "^2.4.4", "smoothscroll": "^0.4.0", "vue": "~2.6.10", - "vue-analytics": "^5.16.4", "vue-chartjs": "^3.4.2", "vue-matomo": "^4.0.1", "vue-moment": "^4.1.0", diff --git a/gwells/app/frontend/src/aquifers/components/AquiferMap.vue b/gwells/app/frontend/src/aquifers/components/AquiferMap.vue index fb646d50b..c11df303a 100755 --- a/gwells/app/frontend/src/aquifers/components/AquiferMap.vue +++ b/gwells/app/frontend/src/aquifers/components/AquiferMap.vue @@ -19,7 +19,7 @@ Licensed under the Apache License, Version 2.0 (the "License"); import mapboxgl from 'mapbox-gl' import GestureHandling from '@geolonia/mbgl-gesture-handling' import { difference, uniq } from 'lodash' -import { mapGetters } from 'vuex' +import { mapGetters, mapActions } from 'vuex' import { SEARCH_AQUIFERS } from '../store/actions.types' import { @@ -53,7 +53,9 @@ import { WELLS_SOURCE, AQUIFERS_SOURCE, observationWellsLayer, - WELLS_OBSERVATION_LAYER_ID + WELLS_OBSERVATION_LAYER_ID, + WELLS_AQUIFER_PARAMETER_LAYER_ID, + wellsAquiferParameters, } from '../../common/mapbox/layers' import { LayersControl, @@ -68,7 +70,8 @@ import { createAquiferPopupElement, createWellPopupElement, createEcocatPopupElement, - createWaterLicencePopupElement + createWaterLicencePopupElement, + createWellAquiferParametersPopupElement } from '../popup' import cadastralLegendSrc from '../../common/assets/images/cadastral.png' @@ -80,6 +83,8 @@ import observationWellInactiveLegendSrc from '../../common/assets/images/owells- import observationWellActiveLegendSrc from '../../common/assets/images/owells-active.svg' import wellsAllLegendSrc from '../../common/assets/images/wells-all.svg' import wellsArtesianLegendSrc from '../../common/assets/images/wells-artesian.svg' +import wellsClosedLegendSrc from '../../common/assets/images/wells-closed.svg' +import wellsHydraulicLegendSrc from '../../common/assets/images/wells-hydraulic.svg' import { setupFeatureTooltips } from '../../common/mapbox/popup' export default { @@ -145,9 +150,19 @@ export default { { imageSrc: wellsArtesianLegendSrc, label: 'artesian' + }, + { + imageSrc: wellsClosedLegendSrc, + label: 'closed/abandoned' } ] }, + { + show: false, + id: WELLS_AQUIFER_PARAMETER_LAYER_ID, + label: 'Wells - aquifer parameters', + imageSrc: wellsHydraulicLegendSrc + }, { show: false, id: WELLS_OBSERVATION_LAYER_ID, @@ -188,6 +203,9 @@ export default { }, computed: { ...mapGetters(['userRoles']), + ...mapGetters('aquiferStore/notations', [ + 'getAquiferNotationsById' + ]), highlightIdsMap () { return this.highlightAquiferIds.reduce((obj, aquiferId) => { obj[aquiferId] = aquiferId @@ -202,7 +220,12 @@ export default { } }, methods: { + ...mapActions('aquiferStore/notations', [ + 'fetchNotationsFromDataBC' + ]), initMapBox () { + this.fetchNotationsFromDataBC() + if (!mapboxgl.supported()) { this.browserUnsupported = true return @@ -299,6 +322,10 @@ export default { [WELLS_BASE_AND_ARTESIAN_LAYER_ID]: { snapToCenter: true, createTooltipContent: this.createWellPopupElement + }, + [WELLS_AQUIFER_PARAMETER_LAYER_ID]: { + snapToCenter: true, + createTooltipContent: this.createWellPopupElement } } @@ -337,6 +364,7 @@ export default { groundWaterLicencesLayer({ layout: { visibility: 'none' } }), wellsBaseAndArtesianLayer({ layout: { visibility: 'none' }, filter: wellLayerFilter(this.showUnpublishedWells) }), observationWellsLayer({ layout: { visibility: 'none' } }), + wellsAquiferParameters({ layout: { visibility: 'none' } }) ] } }, @@ -455,7 +483,13 @@ export default { createWellPopupElement (features, { canInteract }) { return createWellPopupElement(features, this.map, this.$router, { canInteract, - wellLayerIds: [ WELLS_BASE_AND_ARTESIAN_LAYER_ID, WELLS_OBSERVATION_LAYER_ID ] + wellLayerIds: [ WELLS_BASE_AND_ARTESIAN_LAYER_ID, WELLS_OBSERVATION_LAYER_ID, WELLS_AQUIFER_PARAMETER_LAYER_ID ] + }) + }, + createWellAquiferParametersPopupElement (features, { canInteract }) { + return createWellAquiferParametersPopupElement(features, this.map, this.$router, { + canInteract, + wellLayerIds: [ WELLS_AQUIFER_PARAMETER_LAYER_ID] }) }, createEcocatPopupElement (features, { canInteract }) { diff --git a/gwells/app/frontend/src/aquifers/components/Form.vue b/gwells/app/frontend/src/aquifers/components/Form.vue index bb7b02545..afbe222bf 100644 --- a/gwells/app/frontend/src/aquifers/components/Form.vue +++ b/gwells/app/frontend/src/aquifers/components/Form.vue @@ -382,6 +382,11 @@ export default { aquiferStatusOptions.push({ value: 'retired', text: 'Retired' }) } + // set default status on new aquifers to unpublished + if (this.isNew) { + this.statusChanged('unpublished') + } + return { recordCopy: this.hasFormData ? cloneDeep(this.record) : {}, // keep a copy of the record status: this.isNew ? 'unpublished' : null, @@ -520,8 +525,6 @@ export default { this.record.retire_date = now break } - - console.log(this.record) }, setStatus (record) { if (!this.hasFormData) { return } diff --git a/gwells/app/frontend/src/aquifers/components/Search.vue b/gwells/app/frontend/src/aquifers/components/Search.vue index dc8e951c0..4a33f9955 100755 --- a/gwells/app/frontend/src/aquifers/components/Search.vue +++ b/gwells/app/frontend/src/aquifers/components/Search.vue @@ -140,13 +140,13 @@ v-if="searchPerformed" :tbody-tr-class="searchResultsRowClass" responsive> -