diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index e383b053ee..0000000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,231 +0,0 @@ -version: 2.1 -orbs: - aws-cli: circleci/aws-cli@0.1.16 - -workflows: - version: 2 - default: - jobs: - - prepare: - filters: - tags: - only: /.*/ - - lint: - requires: - - prepare - filters: - tags: - only: /.*/ - - build: - requires: - - prepare - filters: - tags: - only: /.*/ - - check-size: - requires: - - build - filters: - tags: - only: /.*/ - - collect-stats: - requires: - - build - filters: - tags: - ignore: /.*/ - branches: - only: main - - test-flow: - requires: - - prepare - filters: - tags: - only: /.*/ - - test-unit: - requires: - - prepare - filters: - tags: - only: /.*/ - - test-render: - requires: - - prepare - filters: - tags: - only: /.*/ - - test-query: - requires: - - prepare - filters: - tags: - only: /.*/ - - test-expressions: - requires: - - prepare - filters: - tags: - only: /.*/ - - test-browser: - requires: - - prepare - filters: - tags: - only: /.*/ - -defaults: &defaults - docker: - - image: circleci/node:10.16-browsers - working_directory: ~/mapbox-gl-js - -jobs: - prepare: - <<: *defaults - steps: - - checkout - - restore_cache: - keys: - - v3-yarn-{{ checksum "yarn.lock" }} - - run: yarn - - save_cache: - key: v3-yarn-{{ checksum "yarn.lock" }} - paths: - - '~/.yarn' - - 'node_modules' - - persist_to_workspace: - root: . - paths: - - . - - lint: - <<: *defaults - steps: - - attach_workspace: - at: . - - restore_cache: - keys: - - v2-lint-{{ .Branch }} - - v2-lint - - run: yarn run lint - - run: yarn run lint-docs - - run: yarn run lint-css - - save_cache: - key: v2-lint-{{ .Branch }}-{{ .Revision }} - paths: - - '.eslintcache' - - build: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run build-prod-min - - run: yarn run build-prod - - run: yarn run build-csp - - run: yarn run build-dev - - run: yarn run build-css - - run: yarn run build-style-spec - - run: yarn run build-flow-types - - run: yarn run test-build - - deploy: - name: Trigger memory metrics when merging to main - command: | - if [ -n "${WEB_METRICS_TOKEN}" ]; then - if [[ $CIRCLE_BRANCH == main ]]; then - curl -X POST https://circleci.com/api/v1.1/project/github/mapbox/web-metrics/build?circle-token=${WEB_METRICS_TOKEN} - fi - fi - - store_artifacts: - path: "dist" - - store_artifacts: - path: "test/release" - - persist_to_workspace: - root: . - paths: - - dist - - check-size: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: - name: Check bundle size - command: | - node build/check-bundle-size.js "dist/mapbox-gl.js" "JS" - node build/check-bundle-size.js "dist/mapbox-gl.css" "CSS" - - collect-stats: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: - name: Collect performance stats - command: node bench/gl-stats.js - - aws-cli/install - - run: - name: Upload performance stats - command: aws s3 cp data.json.gz s3://mapbox-loading-dock/raw/gl_js.perf_metrics_staging/ci/`git show -s --date=short --format=%cd-%h HEAD`.json.gz - - test-flow: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run test-flow - - test-unit: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run test-unit - - test-render: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run test-render - - store_artifacts: - path: "test/integration/render-tests/index.html" - - test-query: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run test-query - - store_test_results: - path: test/integration/query-tests - - store_artifacts: - path: "test/integration/query-tests/index.html" - - test-browser: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run build-dev - - run: yarn run build-token - - run: - name: Test Chrome - environment: - SELENIUM_BROWSER: chrome - TAP_COLORS: 1 - command: yarn run test-browser - - run: - name: Test Firefox - environment: - SELENIUM_BROWSER: firefox - TAP_COLORS: 1 - command: yarn run test-browser - - test-expressions: - <<: *defaults - steps: - - attach_workspace: - at: . - - run: yarn run test-expressions - diff --git a/.eslintrc b/.eslintrc index b17f3bafc2..8a01d2b260 100644 --- a/.eslintrc +++ b/.eslintrc @@ -1,19 +1,29 @@ { "extends": [ "mourner", - "plugin:flowtype/recommended", - "plugin:import/recommended" + "plugin:import/recommended", + "plugin:import/typescript" ], - "parser": "babel-eslint", + "parser": "@typescript-eslint/parser", "parserOptions": { - "sourceType": "module" + "sourceType": "module", + "createDefaultProgram": true }, "plugins": [ - "flowtype", + "@typescript-eslint", "import", "jsdoc" ], "rules": { + "no-dupe-class-members": "off", + "@typescript-eslint/no-dupe-class-members": ["error"], + "@typescript-eslint/no-unused-vars": [ + "warn", + { "argsIgnorePattern": "^_" } + ], + "@typescript-eslint/member-delimiter-style": ["error"], + // Disable no-undef. It's covered by @typescript-eslint + "no-undef": "off", // temporarily disabled due to https://github.com/babel/babel-eslint/issues/485 "no-use-before-define": "off", @@ -33,13 +43,6 @@ "array-bracket-spacing": "off", "consistent-return": "off", - "flowtype/define-flow-type": 1, - "flowtype/require-valid-file-annotation": [ - 2, - "always", { - "annotationStyle": "line" - } - ], "global-require": "off", "import/no-commonjs": "error", "key-spacing": "off", @@ -50,13 +53,15 @@ "object": "Object", "property": "assign" }], - "no-unused-vars": ["error", {"argsIgnorePattern": "^_$"}], + "no-unused-vars": "off", "no-warning-comments": "error", "object-curly-spacing": ["error", "never"], "prefer-arrow-callback": "error", "prefer-const": ["error", {"destructuring": "all"}], "prefer-template": "error", + // @typescript-eslint/quotes requires standard quotes rule to be turned off "quotes": "off", + "@typescript-eslint/quotes": ["error", "single"], "space-before-function-paren": "off", "template-curly-spacing": "error", "no-useless-escape": "off", @@ -72,7 +77,7 @@ "parameters": "off" } }], - "no-multiple-empty-lines": [ "error", { + "no-multiple-empty-lines": [ "error", { "max": 1 }], "jsdoc/check-param-names": "warn", @@ -87,6 +92,7 @@ "ignorePrivate": true } }, + "ignorePatterns": ["build/*.js", "*.json"], "overrides": [ { "files": ["debug/**", "bench/**", "test/**", "src/style-spec/**"], diff --git a/.flowconfig b/.flowconfig deleted file mode 100644 index 5eac8c94d0..0000000000 --- a/.flowconfig +++ /dev/null @@ -1,61 +0,0 @@ -[ignore] -.*\.svg -.*\.png -.*/\.nyc_output/.* -.*/docs/.* -.*/node_modules/.cache/.* -.*/node_modules/.*/tests?/.* -.*/node_modules/@mapbox/jsonlint-lines-primitives/.* -.*/node_modules/@mapbox/mvt-fixtures/.* -.*/node_modules/@mapbox/geojson-types/fixtures/.* -.*/node_modules/@mapbox/mr-ui/.* -.*/node_modules/@mapbox/dr-ui/.* -.*/node_modules/@mapbox/batfish/.* -.*/node_modules/browserify/.* -.*/node_modules/browser-sync.*/.* -.*/node_modules/nyc/.* -.*/node_modules/fbjs/.* -.*/node_modules/es5-ext/.* -.*/node_modules/jsdom/.* -.*/node_modules/eslint.*/.* -.*/node_modules/highlight.*/.* -.*/node_modules/rxjs/.* -.*/node_modules/@?babel.*/.* -.*/node_modules/react.*/.* -.*/node_modules/svgo/.* -.*/node_modules/moment/.* -.*/node_modules/regenerate-unicode-properties/.* -.*/node_modules/remark.*/.* -.*/node_modules/webpack/.* -.*/node_modules/caniuse-lite/.* -.*/node_modules/d3.*/.* -.*/node_modules/css-tree/.* -.*/node_modules/lodash/.* -.*/node_modules/fsevents/.* -.*/node_modules/browser-sync-client/.* -.*/node_modules/core-js.*/.* -.*/node_modules/stylelint/.* -.*/node_modules/postcss.*/.* -.*/node_modules/prismjs.*/.* -.*/node_modules/documentation/.* -.*/node_modules/module-deps/.* -.*/test/unit/style-spec/fixture/invalidjson.input.json -.*/render-tests/.* -.*/query-tests/.* -.*/expression-tests/.* -.*/test/build/downstream-flow-fixture/.* -.*/_batfish_tmp/.* -.*/_site/.* - -[version] -0.100.0 - -[options] -server.max_workers=4 - -[strict] -nonstrict-import -unclear-type -untyped-import -untyped-type-import -sketchy-null diff --git a/.github/workflows/analyze.yml b/.github/workflows/analyze.yml index 84109b095b..39cdb778cf 100644 --- a/.github/workflows/analyze.yml +++ b/.github/workflows/analyze.yml @@ -18,12 +18,12 @@ jobs: # report status back to pull request - uses: haya14busa/action-workflow_run-status@v1 - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile + - run: npm ci - name: Download branch artifact uses: dawidd6/action-download-artifact@v2 with: diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index c5af5c7cc0..d27df0ac64 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -4,7 +4,6 @@ on: push: branches: [main] pull_request: - branches: [main] jobs: build: @@ -12,20 +11,19 @@ jobs: timeout-minutes: 20 steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run build-prod-min - - run: yarn run build-prod - - run: yarn run build-csp - - run: yarn run build-dev - - run: yarn run build-css - - run: yarn run build-style-spec - - run: yarn run build-flow-types - - run: yarn run test-build + - run: npm ci + - run: npm run build-prod-min + - run: npm run build-prod + - run: npm run build-csp + - run: npm run build-dev + - run: npm run build-css + - run: npm run build-style-spec + - run: npm run test-build - run: find dist - run: mkdir build-info - name: Store build info diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 01b9b847bd..da4877c608 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,7 +6,6 @@ on: push: branches: [main] pull_request: - branches: [main] jobs: lint_build_test: @@ -17,7 +16,7 @@ jobs: - macos-latest - windows-latest node_version: - - 10 + - 14 architecture: - x64 @@ -31,66 +30,55 @@ jobs: with: node-version: ${{ matrix.node_version }} architecture: ${{ matrix.architecture }} - - run: yarn install --frozen-lockfile + - run: npm ci - - run: yarn run lint - - run: yarn run build-dev - - run: yarn test-unit + - run: npm run lint + - run: npm run build-dev + - run: npm run test-unit lint: runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 - uses: actions/setup-node@v2-beta - with: - node-version: 10 - architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run lint - - run: yarn run lint-docs - - run: yarn run lint-css - - test-flow: - runs-on: ubuntu-latest - timeout-minutes: 20 - steps: - - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run test-flow + - run: npm ci + - run: npm run lint + - run: npm run lint-docs + - run: npm run lint-css test-unit: runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile + - run: npm ci + - run: npm run build-dev # see: https://github.com/stackgl/headless-gl#how-can-headless-gl-be-used-on-a-headless-linux-machine - - run: xvfb-run -s "-ac -screen 0 1280x1024x24" yarn run test-unit + - run: xvfb-run -s "-ac -screen 0 1280x1024x24" npm run test-unit test-query: runs-on: ubuntu-latest timeout-minutes: 20 steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run test-query + - run: npm ci + - run: npm run build-dev + - run: npm run test-query - uses: actions/upload-artifact@v2 with: path: ./test/integration/query-tests @@ -105,13 +93,14 @@ jobs: timeout-minutes: 20 steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run test-expressions + - run: npm ci + - run: npm run build-dev + - run: npm run test-expressions test-browser: timeout-minutes: 20 @@ -120,25 +109,25 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2-beta with: - node-version: 10 + node-version: 14 architecture: x64 - - run: yarn install --frozen-lockfile - - run: yarn run build-dev - - run: DETECT_CHROMEDRIVER_VERSION=true yarn global add chromedriver - - run: yarn global add geckodriver@^1.22.3 + - run: npm ci + - run: npm run build-dev + - run: DETECT_CHROMEDRIVER_VERSION=true npm install -g chromedriver + - run: npm install -g geckodriver@^1.22.3 - name: Test Chrome env: SELENIUM_BROWSER: chrome TAP_COLORS: 1 - run: xvfb-run -s "-ac -screen 0 1280x1024x24" yarn run test-browser + run: xvfb-run -s "-ac -screen 0 1280x1024x24" npm run test-browser - name: Test Firefox env: SELENIUM_BROWSER: firefox TAP_COLORS: 1 - run: xvfb-run -s "-ac -screen 0 1280x1024x24" yarn run test-browser + run: xvfb-run -s "-ac -screen 0 1280x1024x24" npm run test-browser # TODO need a data provider for these: # collect-stats: @@ -146,12 +135,12 @@ jobs: # needs: [build] # steps: # - uses: actions/checkout@v2 - # - name: Use Node.js 10 x64 + # - name: Use Node.js 14 x64 # uses: actions/setup-node@v2-beta # with: - # node-version: 10 + # node-version: 14 # architecture: x64 - # - run: yarn install --frozen-lockfile + # - run: npm ci # - uses: actions/download-artifact@v2 # with: # name: dist @@ -166,13 +155,13 @@ jobs: # test-render: # runs-on: ubuntu-latest # steps: - # - name: Use Node.js 10 x64 + # - name: Use Node.js 14 x64 # uses: actions/setup-node@v2-beta # with: - # node-version: 10 + # node-version: 14 # architecture: x64 - # - run: yarn install --frozen-lockfile - # - run: yarn run test-render + # - run: npm ci + # - run: npm run test-render # - uses: actions/upload-artifact@v2 # with: # path: test/integration/render-tests/index.html diff --git a/.github/workflows/publish-style-spec.yml b/.github/workflows/publish-style-spec.yml index f9c573d84d..b22abcaf5a 100644 --- a/.github/workflows/publish-style-spec.yml +++ b/.github/workflows/publish-style-spec.yml @@ -12,26 +12,25 @@ jobs: with: fetch-depth: 0 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2 with: - node-version: 10 + node-version: 14 architecture: x64 registry-url: 'https://registry.npmjs.org' - name: Install GL JS - run: yarn install --frozen-lockfile + run: npm ci - name: Build GL JS run: | - yarn run build-prod-min - yarn run build-css + npm run build-prod-min + npm run build-css - name: Build style spec run: | - cd src/style-spec - yarn install - yarn run prepublish + npm run build-style-spec + cp -r dist/style-spec/ src/style-spec/dist - name: Check version and publish run: | diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c5540c96dc..a1dd11a599 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -18,15 +18,15 @@ jobs: with: fetch-depth: 0 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2 with: - node-version: 10 + node-version: 14 architecture: x64 registry-url: 'https://registry.npmjs.org' - name: Install - run: yarn install --frozen-lockfile + run: npm ci - name: Validate version tag run: | @@ -45,17 +45,16 @@ jobs: - name: Lint run: | - yarn run lint - yarn run lint-docs - yarn run lint-css + npm run lint + npm run lint-docs + npm run lint-css - name: Test run: | - yarn run test-flow - yarn run test-unit - yarn run test-render - yarn run test-query - yarn run test-expressions + npm run test-unit + npm run test-render + npm run test-query + npm run test-expressions release: name: Release @@ -70,15 +69,15 @@ jobs: with: fetch-depth: 0 - - name: Use Node.js 10 x64 + - name: Use Node.js 14 x64 uses: actions/setup-node@v2 with: - node-version: 10 + node-version: 14 architecture: x64 registry-url: 'https://registry.npmjs.org' - name: Install - run: yarn install --frozen-lockfile + run: npm ci - name: Validate version tag run: | @@ -97,8 +96,8 @@ jobs: - name: Build run: | - yarn run build-prod-min - yarn run build-css + npm run build-prod-min + npm run build-css - name: Create Archive run: | diff --git a/.gitignore b/.gitignore index 9dc10d318f..715d1ee3fd 100644 --- a/.gitignore +++ b/.gitignore @@ -1,12 +1,12 @@ /rollup/build/ +/types/ /dist/ +/dist_type/ *.es.js *.js.map node_modules -package-lock.json *.sublime-* coverage -flow-coverage .DS_Store .nyc_output *_generated.js diff --git a/.nvmrc b/.nvmrc index dc08cc7bd0..0627d197d0 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -10.24.1 +14.17.4 diff --git a/CHANGELOG.md b/CHANGELOG.md index df54342dc1..fe0aaf4216 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,18 @@ ### Features and improvements +- *...Add new stuff here...* +### 🐞 Bug fixes + +- *...Add new stuff here...* + +## 2.0.0 + +### Features and improvements + +- Migrated the production code to typescript +- ** Breaking Change ** removed `version` from the public API +- ** Breaking Change ** stopped supporting IE (internet explorer) - *...Add new stuff here...* ### 🐞 Bug fixes diff --git a/bench/benchmarks/worker_transfer.js b/bench/benchmarks/worker_transfer.js index 2c5c37872d..008b9ddd9f 100644 --- a/bench/benchmarks/worker_transfer.js +++ b/bench/benchmarks/worker_transfer.js @@ -6,7 +6,6 @@ import fetchStyle from '../lib/fetch_style'; import TileParser from '../lib/tile_parser'; import {OverscaledTileID} from '../../src/source/tile_id'; import {serialize, deserialize} from '../../src/util/web_worker_transfer'; -import {values} from '../../src/util/util'; export default class WorkerTransfer extends Benchmark { parser: TileParser; @@ -48,8 +47,8 @@ export default class WorkerTransfer extends Benchmark { return Promise.all(tiles.map(tile => this.parser.parseTile(tile))); }).then((tileResults) => { const payload = tileResults - .concat(values(this.parser.icons)) - .concat(values(this.parser.glyphs)).map((obj) => serialize(obj, [])); + .concat(Object.values(this.parser.icons)) + .concat(Object.values(this.parser.glyphs)).map((obj) => serialize(obj, [])); this.payloadJSON = payload.map(barePayload); this.payloadTiles = payload.slice(0, tileResults.length); }); diff --git a/bench/rollup_config_benchmarks.js b/bench/rollup_config_benchmarks.js index 8ef5437de9..b4ae0e9951 100644 --- a/bench/rollup_config_benchmarks.js +++ b/bench/rollup_config_benchmarks.js @@ -2,7 +2,6 @@ import fs from 'fs'; import sourcemaps from 'rollup-plugin-sourcemaps'; import replace from 'rollup-plugin-replace'; import {plugins} from '../build/rollup_plugins'; -import buble from 'rollup-plugin-buble'; import resolve from 'rollup-plugin-node-resolve'; import commonjs from 'rollup-plugin-commonjs'; @@ -58,7 +57,6 @@ const viewConfig = { sourcemap: false }, plugins: [ - buble({transforms: {dangerousForOf: true}, objectAssign: true}), resolve({browser: true, preferBuiltins: false}), commonjs(), replace(replaceConfig) diff --git a/build/maplibre-gl-js.dockerfile b/build/maplibre-gl-js.dockerfile index 91eeea66ca..33f45e69dc 100644 --- a/build/maplibre-gl-js.dockerfile +++ b/build/maplibre-gl-js.dockerfile @@ -1,6 +1,6 @@ # see: publish-release.sh to build/run this -FROM node:10 +FROM node:14 ENV DEBIAN_FRONTEND=noninteractive diff --git a/build/rollup_plugins.js b/build/rollup_plugins.js index 156ac68176..664ad1c672 100644 --- a/build/rollup_plugins.js +++ b/build/rollup_plugins.js @@ -1,28 +1,31 @@ -import flowRemoveTypes from '@mapbox/flow-remove-types'; -import buble from 'rollup-plugin-buble'; -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; +import resolve from '@rollup/plugin-node-resolve'; +import replace from '@rollup/plugin-replace'; +import commonjs from '@rollup/plugin-commonjs'; import unassert from 'rollup-plugin-unassert'; -import json from 'rollup-plugin-json'; +import json from '@rollup/plugin-json'; import {terser} from 'rollup-plugin-terser'; -import minifyStyleSpec from './rollup_plugin_minify_style_spec'; -import {createFilter} from 'rollup-pluginutils'; +import minifyStyleSpec from './rollup_plugin_minify_style_spec.js'; import strip from '@rollup/plugin-strip'; // Common set of plugins/transformations shared across different rollup // builds (main maplibre bundle, style-spec package, benchmarks bundle) export const plugins = (minified, production) => [ - flow(), minifyStyleSpec(), json(), + // https://github.com/zaach/jison/issues/351 + replace({ + include: /\/jsonlint-lines-primitives\/lib\/jsonlint.js/, + delimiters: ['', ''], + values: { + '_token_stack:': '' + } + }), production ? strip({ sourceMap: true, functions: ['PerformanceUtils.*', 'Debug.*'] }) : false, - glsl('./src/shaders/*.glsl', production), - buble({transforms: {dangerousForOf: true}, objectAssign: "Object.assign"}), minified ? terser({ compress: { pure_getters: true, @@ -40,41 +43,3 @@ export const plugins = (minified, production) => [ ignoreGlobal: true }) ].filter(Boolean); - -// Using this instead of rollup-plugin-flow due to -// https://github.com/leebyron/rollup-plugin-flow/issues/5 -export function flow() { - return { - name: 'flow-remove-types', - transform: (code) => ({ - code: flowRemoveTypes(code).toString(), - map: null - }) - }; -} - -// Using this instead of rollup-plugin-string to add minification -function glsl(include, minify) { - const filter = createFilter(include); - return { - name: 'glsl', - transform(code, id) { - if (!filter(id)) return; - - // barebones GLSL minification - if (minify) { - code = code.trim() // strip whitespace at the start/end - .replace(/\s*\/\/[^\n]*\n/g, '\n') // strip double-slash comments - .replace(/\n+/g, '\n') // collapse multi line breaks - .replace(/\n\s+/g, '\n') // strip identation - .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators - .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks - } - - return { - code: `export default ${JSON.stringify(code)};`, - map: {mappings: ''} - }; - } - }; -} diff --git a/build/run-tap b/build/run-tap deleted file mode 100755 index e5b300cfed..0000000000 --- a/build/run-tap +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -if [ "$#" == 5 ]; then - arg="${@:1:3} ${4}/${5}" -else - arg="${@}" -fi - -node_modules/.bin/tap --node-arg -r --node-arg @mapbox/flow-remove-types/register --node-arg -r --node-arg esm $arg --node-arg diff --git a/build/test/build-tape.js b/build/test/build-tape.js index 78f11d8d1e..d32bdf2b2e 100644 --- a/build/test/build-tape.js +++ b/build/test/build-tape.js @@ -1,12 +1,10 @@ -/* eslint-disable import/no-commonjs */ -/* eslint-disable flowtype/require-valid-file-annotation */ -const browserify = require('browserify'); -const fs = require('fs'); +import browserify from 'browserify'; +import fs from 'fs'; -module.exports = function() { +export default function() { return new Promise((resolve, reject) => { - browserify(require.resolve('../../test/util/tape_config.js'), { standalone: 'tape' }) - .transform("babelify", {presets: ["@babel/preset-env"], global: true}) + browserify('./test/util/tape_config.js', { standalone: 'tape' }) + .transform('babelify', {presets: ['@babel/preset-env'], global: true}) .bundle((err, buff) => { if (err) { throw err; } @@ -16,4 +14,4 @@ module.exports = function() { }); }); }); -}; +} diff --git a/build/web_worker_replacement.js b/build/web_worker_replacement.js new file mode 100644 index 0000000000..a8775b89bd --- /dev/null +++ b/build/web_worker_replacement.js @@ -0,0 +1,5 @@ +import maplibregl from '../rollup/build/tsc/index' + +export default function () { + return new Worker(maplibregl.workerUrl); +} \ No newline at end of file diff --git a/debug/.eslintrc b/debug/.eslintrc index 62ffd8a1f1..ab4c19add0 100644 --- a/debug/.eslintrc +++ b/debug/.eslintrc @@ -15,6 +15,7 @@ "strict": "off", "no-restricted-properties": "off", "no-unused-vars": "off", + "@typescript-eslint/no-unused-vars": "off", "prefer-template": "off" }, "env": { diff --git a/debug/2762.html b/debug/2762.html index d2dd80e153..5ffff0b9a4 100644 --- a/debug/2762.html +++ b/debug/2762.html @@ -20,35 +20,35 @@ var map = new maplibregl.Map({ container: 'map', style: { - "version": 8, - "sources": { - "geojson": { - "type": "geojson", - "data": { - "type": "Point", - "coordinates": [0, 0] + 'version': 8, + 'sources': { + 'geojson': { + 'type': 'geojson', + 'data': { + 'type': 'Point', + 'coordinates': [0, 0] } } }, - "transition": { - "duration": 1000 + 'transition': { + 'duration': 1000 }, - "layers": [ + 'layers': [ { - "id": "circle", - "type": "circle", - "source": "geojson", - "paint": { - "circle-translate": [-50, -50] + 'id': 'circle', + 'type': 'circle', + 'source': 'geojson', + 'paint': { + 'circle-translate': [-50, -50] } } ] } }); -map.on('click', function(e) { - map.setPaintProperty("circle", "circle-color", "red"); - map.setPaintProperty("circle", "circle-translate", [50, 50]); +map.on('click', function(_) { + map.setPaintProperty('circle', 'circle-color', 'red'); + map.setPaintProperty('circle', 'circle-translate', [50, 50]); }); diff --git a/debug/7517.html b/debug/7517.html index 3e3ecbdcff..59deded219 100644 --- a/debug/7517.html +++ b/debug/7517.html @@ -62,11 +62,11 @@ ]; const maineBBoxPolygon = { - "type": "Feature", - "properties": {}, - "geometry": { - "type": "Polygon", - "coordinates": [ + 'type': 'Feature', + 'properties': {}, + 'geometry': { + 'type': 'Polygon', + 'coordinates': [ [ [-71.08482, 43.08003225358635], [-66.96466, 43.08003225358635], diff --git a/debug/animate.html b/debug/animate.html index 71b558ed2a..e74d952774 100644 --- a/debug/animate.html +++ b/debug/animate.html @@ -27,10 +27,10 @@ function line(angle, radius) { return { - "type": "Feature", - "geometry": { - "type": "LineString", - "coordinates": [ + 'type': 'Feature', + 'geometry': { + 'type': 'LineString', + 'coordinates': [ [-Math.cos(angle) * radius, -Math.sin(angle) * radius + 1], [Math.cos(angle) * radius, Math.sin(angle) * radius + 1], ] @@ -40,8 +40,8 @@ function crossWithAngle(angle) { return { - "type": "FeatureCollection", - "features": [ + 'type': 'FeatureCollection', + 'features': [ line(angle - Math.PI / 4, radius), line(angle + Math.PI / 4, radius) ] @@ -51,27 +51,27 @@ map.on('load', function () { // Add a source and layer displaying a point which will be animated in a circle. map.addSource('lines', { - "type": "geojson", - "data": crossWithAngle(0) + 'type': 'geojson', + 'data': crossWithAngle(0) }); map.addLayer({ - "id": "lines", - "source": "lines", - "type": "line", - "paint": { - "line-width": 4, - "line-color": "#007cbf" + 'id': 'lines', + 'source': 'lines', + 'type': 'line', + 'paint': { + 'line-width': 4, + 'line-color': '#007cbf' } }); map.addLayer({ - "id": "dot", - "source": "lines", - "type": "circle", - "paint": { - "circle-radius": 10, - "circle-color": "#007cbf" + 'id': 'dot', + 'source': 'lines', + 'type': 'circle', + 'paint': { + 'circle-radius': 10, + 'circle-color': '#007cbf' } }); diff --git a/debug/bounds.html b/debug/bounds.html index a99fb2d50c..c7ab8a6272 100644 --- a/debug/bounds.html +++ b/debug/bounds.html @@ -49,7 +49,7 @@ type: 'fill', source: 'bounds', paint: { - 'fill-color': "rgba(255,0,0,0.2)" + 'fill-color': 'rgba(255,0,0,0.2)' } }); diff --git a/debug/cache_api.html b/debug/cache_api.html index 591ca44818..d68818d587 100644 --- a/debug/cache_api.html +++ b/debug/cache_api.html @@ -111,38 +111,38 @@ map.on('style.load', function() { // add traffic layer that shouldn't be cached because of short expiry map.addLayer({ - "id": "traffic", - "source": { - "url": "mapbox://mapbox.mapbox-traffic-v1", - "type": "vector" + 'id': 'traffic', + 'source': { + 'url': 'mapbox://mapbox.mapbox-traffic-v1', + 'type': 'vector' }, - "source-layer": "traffic", - "type": "line", - "paint": { - "line-width": 1.5, - "line-color": "red" + 'source-layer': 'traffic', + 'type': 'line', + 'paint': { + 'line-width': 1.5, + 'line-color': 'red' } }); // add third party source that shouldn't be cached map.addLayer({ - "id": "mapillary", - "type": "line", - "source": { - "type": "vector", - "tiles": ["https://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt"], - "minzoom": 6, - "maxzoom": 14 + 'id': 'mapillary', + 'type': 'line', + 'source': { + 'type': 'vector', + 'tiles': ['https://d25uarhxywzl1j.cloudfront.net/v0.1/{z}/{x}/{y}.mvt'], + 'minzoom': 6, + 'maxzoom': 14 }, - "source-layer": "mapillary-sequences", - "layout": { - "line-cap": "round", - "line-join": "round" + 'source-layer': 'mapillary-sequences', + 'layout': { + 'line-cap': 'round', + 'line-join': 'round' }, - "paint": { - "line-opacity": 0.6, - "line-color": "rgb(53, 175, 109)", - "line-width": 2 + 'paint': { + 'line-opacity': 0.6, + 'line-color': 'rgb(53, 175, 109)', + 'line-width': 2 } }); @@ -155,25 +155,25 @@ const dontCache = ['traffic', 'style', 'fonts', 'd25uarhxywzl1j.cloudfront.net']; for (const urlSubstring of dontCache) { - log(!matchURL(keys, urlSubstring), "Does not cache wrong resource: " + urlSubstring); + log(!matchURL(keys, urlSubstring), 'Does not cache wrong resource: ' + urlSubstring); } } function testFirstView(done) { cache.keys().catch(catchError).then(keys => { - log(keys.length === 4, "keys.length = 4"); + log(keys.length === 4, 'keys.length = 4'); // check for expected cache entries const expected = [ - "mapbox.mapbox-streets-v7/12/1171/1566.vector.pbf", - "mapbox.mapbox-streets-v7/12/1171/1567.vector.pbf", - "mapbox.mapbox-streets-v7/12/1172/1566.vector.pbf", - "mapbox.mapbox-streets-v7/12/1172/1567.vector.pbf", + 'mapbox.mapbox-streets-v7/12/1171/1566.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1171/1567.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1172/1566.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1172/1567.vector.pbf', ]; for (const expect of expected) { - log(matchURL(keys, expect), "Caches correct resource: " + expect); + log(matchURL(keys, expect), 'Caches correct resource: ' + expect); } checkNotCached(keys); @@ -191,18 +191,18 @@ cache.keys().catch(catchError).then(keys => { // some tiles were evicted! - log(keys.length === 6, "Enforces cache size limit: keys.length = 6"); + log(keys.length === 6, 'Enforces cache size limit: keys.length = 6'); // all the most recent tiles are in the cache const expected = [ - "mapbox.mapbox-streets-v7/13/2342/3133.vector.pbf", - "mapbox.mapbox-streets-v7/13/2342/3134.vector.pbf", - "mapbox.mapbox-streets-v7/13/2343/3133.vector.pbf", - "mapbox.mapbox-streets-v7/13/2343/3134.vector.pbf", + 'mapbox.mapbox-streets-v7/13/2342/3133.vector.pbf', + 'mapbox.mapbox-streets-v7/13/2342/3134.vector.pbf', + 'mapbox.mapbox-streets-v7/13/2343/3133.vector.pbf', + 'mapbox.mapbox-streets-v7/13/2343/3134.vector.pbf', ]; for (const expect of expected) { - log(matchURL(keys, expect), "Evicts correct tiles: still has " + expect); + log(matchURL(keys, expect), 'Evicts correct tiles: still has ' + expect); } checkNotCached(keys); @@ -220,7 +220,7 @@ cache.keys().catch(catchError).then(keys => { // some tiles were evicted! - log(keys.length === 6, "Enforces cache size limit: keys.length = 6"); + log(keys.length === 6, 'Enforces cache size limit: keys.length = 6'); // check that the cache entries are ordered in order of most least use @@ -231,14 +231,14 @@ // all the most recent tiles are in the cache const expected = [ - "mapbox.mapbox-streets-v7/12/1171/1566.vector.pbf", - "mapbox.mapbox-streets-v7/12/1171/1567.vector.pbf", - "mapbox.mapbox-streets-v7/12/1172/1566.vector.pbf", - "mapbox.mapbox-streets-v7/12/1172/1567.vector.pbf", + 'mapbox.mapbox-streets-v7/12/1171/1566.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1171/1567.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1172/1566.vector.pbf', + 'mapbox.mapbox-streets-v7/12/1172/1567.vector.pbf', ]; for (const expect of expected) { - log(matchURL(keys, expect), "Evicts correct tiles: still has " + expect); + log(matchURL(keys, expect), 'Evicts correct tiles: still has ' + expect); } checkNotCached(keys); diff --git a/debug/canvas.html b/debug/canvas.html index 461593bdfa..e22544c5c6 100644 --- a/debug/canvas.html +++ b/debug/canvas.html @@ -34,13 +34,13 @@ } var canvasStyle = { - "version": 8, - "sources": { - "canvas": { - "type": "canvas", - "canvas": "testCanvasID", - "animate": false, - "coordinates": [ + 'version': 8, + 'sources': { + 'canvas': { + 'type': 'canvas', + 'canvas': 'testCanvasID', + 'animate': false, + 'coordinates': [ [-122.51596391201019, 37.56238816766053], [-122.51467645168304, 37.56410183312965], [-122.51309394836426, 37.563391708549425], @@ -48,20 +48,20 @@ ] } }, - "layers": [{ - "id": "background", - "type": "background", - "paint": { - "background-color": "rgb(4,7,14)" + 'layers': [{ + 'id': 'background', + 'type': 'background', + 'paint': { + 'background-color': 'rgb(4,7,14)' } }, { - "id": "canvas", - "type": "raster", - "source": "canvas" + 'id': 'canvas', + 'type': 'raster', + 'source': 'canvas' }] }; -var map = new maplibregl.Map({ +new maplibregl.Map({ container: 'map', minZoom: 14, zoom: 17, diff --git a/debug/chinese.html b/debug/chinese.html index f971e7880c..c7e664d3cb 100644 --- a/debug/chinese.html +++ b/debug/chinese.html @@ -38,23 +38,23 @@ map.addControl(new maplibregl.NavigationControl()); map.on('load', function () { - map.addSource("points", { - "type": "geojson", - "data": '/test/integration/data/chinese.geojson' + map.addSource('points', { + 'type': 'geojson', + 'data': '/test/integration/data/chinese.geojson' }); map.addLayer({ - "id": "points", - "type": "symbol", - "source": "points", - "layout": { - "icon-image": "{icon}-15", - "text-field": "{name}", - "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"], - "text-offset": [0, 0.6], - "text-anchor": "top", - "text-allow-overlap": true, - "icon-allow-overlap": true + 'id': 'points', + 'type': 'symbol', + 'source': 'points', + 'layout': { + 'icon-image': '{icon}-15', + 'text-field': '{name}', + 'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'], + 'text-offset': [0, 0.6], + 'text-anchor': 'top', + 'text-allow-overlap': true, + 'icon-allow-overlap': true } }); }); diff --git a/debug/circles.html b/debug/circles.html index b74cefc70b..90e0a0bd34 100644 --- a/debug/circles.html +++ b/debug/circles.html @@ -31,53 +31,53 @@ map.on('load', function() { map.addSource('circles', { - "type": "geojson", - "data": "/test/integration/data/places.geojson" + 'type': 'geojson', + 'data': '/test/integration/data/places.geojson' }); map.addLayer({ - "id": "circles", - "type": "circle", - "source": "circles", - "paint": { - "circle-radius": [ - "interpolate", - ["exponential", 2.0], - ["zoom"], + 'id': 'circles', + 'type': 'circle', + 'source': 'circles', + 'paint': { + 'circle-radius': [ + 'interpolate', + ['exponential', 2.0], + ['zoom'], 0, 5, - 5, ['*', ["get", "scalerank"], 20], + 5, ['*', ['get', 'scalerank'], 20], ], - "circle-color": [ - "match", - ["get", "featureclass"], - "cape", "orange", - "island", "#0088ff", - "plain", "yellow", - "pole", "white", - "waterfall", "blue", - "red" + 'circle-color': [ + 'match', + ['get', 'featureclass'], + 'cape', 'orange', + 'island', '#0088ff', + 'plain', 'yellow', + 'pole', 'white', + 'waterfall', 'blue', + 'red' ], - "circle-pitch-scale": "map", - "circle-pitch-alignment": "map" + 'circle-pitch-scale': 'map', + 'circle-pitch-alignment': 'map' } }); map.addLayer({ - "id": "labels", - "type": "symbol", - "source": "circles", - "minzoom": 1, - "layout": { - "text-field": [ - "concat", - ["get", "name"], - " (", + 'id': 'labels', + 'type': 'symbol', + 'source': 'circles', + 'minzoom': 1, + 'layout': { + 'text-field': [ + 'concat', + ['get', 'name'], + ' (', [ - "coalesce", - ["get", "subregion"], - ["get", "region"] + 'coalesce', + ['get', 'subregion'], + ['get', 'region'] ], - ")" + ')' ] } }); diff --git a/debug/cluster.html b/debug/cluster.html index 4fa5f8b5ca..a5eb315f72 100644 --- a/debug/cluster.html +++ b/debug/cluster.html @@ -27,67 +27,67 @@ map.on('load', () => { map.addSource('geojson', { - "type": "geojson", - "data": "/test/integration/data/places.geojson", - "cluster": true, - "clusterRadius": 50, - "clusterProperties": { - "max": ["max", ["get", "scalerank"]], - "sum": ["+", ["get", "scalerank"]], - "has_island": ["any", ["==", ["get", "featureclass"], "island"]] + 'type': 'geojson', + 'data': '/test/integration/data/places.geojson', + 'cluster': true, + 'clusterRadius': 50, + 'clusterProperties': { + 'max': ['max', ['get', 'scalerank']], + 'sum': ['+', ['get', 'scalerank']], + 'has_island': ['any', ['==', ['get', 'featureclass'], 'island']] } }); map.addLayer({ - "id": "cluster", - "type": "circle", - "source": "geojson", - "filter": ["==", "cluster", true], - "paint": { - "circle-color": ["case", ["get", "has_island"], "orange", "rgba(0, 200, 0, 1)"], - "circle-radius": 20 + 'id': 'cluster', + 'type': 'circle', + 'source': 'geojson', + 'filter': ['==', 'cluster', true], + 'paint': { + 'circle-color': ['case', ['get', 'has_island'], 'orange', 'rgba(0, 200, 0, 1)'], + 'circle-radius': 20 } }); map.addLayer({ - "id": "cluster_label", - "type": "symbol", - "source": "geojson", - "filter": ["==", "cluster", true], - "layout": { - "text-field": "{point_count} ({max})", - "text-font": ["Open Sans Semibold", "Arial Unicode MS Bold"], - "text-size": 12, - "text-allow-overlap": true, - "text-ignore-placement": true + 'id': 'cluster_label', + 'type': 'symbol', + 'source': 'geojson', + 'filter': ['==', 'cluster', true], + 'layout': { + 'text-field': '{point_count} ({max})', + 'text-font': ['Open Sans Semibold', 'Arial Unicode MS Bold'], + 'text-size': 12, + 'text-allow-overlap': true, + 'text-ignore-placement': true } }); map.addLayer({ - "id": "unclustered_point", - "type": "circle", - "source": "geojson", - "filter": ["!=", "cluster", true], - "paint": { - "circle-color": "rgb(0, 0, 200)", - "circle-radius": 10 + 'id': 'unclustered_point', + 'type': 'circle', + 'source': 'geojson', + 'filter': ['!=', 'cluster', true], + 'paint': { + 'circle-color': 'rgb(0, 0, 200)', + 'circle-radius': 10 } }); var hoverData = { - "type": "FeatureCollection", - "features": [] + 'type': 'FeatureCollection', + 'features': [] }; map.addSource('cluster_children', { - "type": "geojson", - "data": hoverData + 'type': 'geojson', + 'data': hoverData }); map.addLayer({ - "id": "cluster_children", - "type": "circle", - "source": "cluster_children", - "paint": { - "circle-color": "rgb(0, 150, 0)", - "circle-radius": 7 + 'id': 'cluster_children', + 'type': 'circle', + 'source': 'cluster_children', + 'paint': { + 'circle-color': 'rgb(0, 150, 0)', + 'circle-radius': 7 } }); @@ -117,7 +117,7 @@ }); }); - map.on('mouseleave', 'cluster', (e) => { + map.on('mouseleave', 'cluster', (_) => { map.getCanvas().style.cursor = ''; updateHover([]); }); diff --git a/debug/color_spaces.html b/debug/color_spaces.html index 466ab836dc..c9fc0df5aa 100644 --- a/debug/color_spaces.html +++ b/debug/color_spaces.html @@ -46,19 +46,19 @@ map.on('load', function() { map.addSource('geojson', { - "type": "geojson", - "data": "https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_110m_admin_0_countries.geojson" + 'type': 'geojson', + 'data': 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_110m_admin_0_countries.geojson' }); map.addLayer({ - "id": "countries", - "type": "fill", - "source": "geojson", - "paint": { - "fill-color": { - "property": "pop_est", - "colorSpace": "lab", - "stops": [ + 'id': 'countries', + 'type': 'fill', + 'source': 'geojson', + 'paint': { + 'fill-color': { + 'property': 'pop_est', + 'colorSpace': 'lab', + 'stops': [ [0, 'blue'], [140041247, 'red'] ] @@ -69,9 +69,9 @@ function pickInterpolation(input) { map.setPaintProperty('countries', 'fill-color', { - "property": "pop_est", - "colorSpace": input.value, - "stops": [ + 'property': 'pop_est', + 'colorSpace': input.value, + 'stops': [ [0, 'blue'], [140041247, 'red'] ] diff --git a/debug/csp-static.html b/debug/csp-static.html index 6db7070814..26b27d4e1f 100644 --- a/debug/csp-static.html +++ b/debug/csp-static.html @@ -22,7 +22,7 @@ maplibregl.workerUrl = '/dist/maplibre-gl-csp-worker.js'; -var map = window.map = new maplibregl.Map({ +new maplibregl.Map({ container: 'map', zoom: 12.5, center: [-77.01866, 38.888], diff --git a/debug/csp.html b/debug/csp.html index 80e56c1772..bc2457c462 100644 --- a/debug/csp.html +++ b/debug/csp.html @@ -18,7 +18,7 @@ diff --git a/debug/wms.html b/debug/wms.html index caeb843dbf..cac0fc1e1d 100644 --- a/debug/wms.html +++ b/debug/wms.html @@ -29,17 +29,17 @@ map.on('load', function() { map.addSource('wms-test', { - "type": "raster", - "tiles": ['https://img.nj.gov/imagerywms/Natural2015?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&transparent=true&width=256&height=256&layers=Natural2015' + 'type': 'raster', + 'tiles': ['https://img.nj.gov/imagerywms/Natural2015?bbox={bbox-epsg-3857}&format=image/png&service=WMS&version=1.1.1&request=GetMap&srs=EPSG:3857&transparent=true&width=256&height=256&layers=Natural2015' ], - "tileSize": 256 + 'tileSize': 256 }); map.addLayer({ - "id": "wms-test-layer", - "type": "raster", - "source": "wms-test", - "paint": {} + 'id': 'wms-test-layer', + 'type': 'raster', + 'source': 'wms-test', + 'paint': {} }); }); diff --git a/docs/life-of-a-tile.md b/docs/life-of-a-tile.md index ded919dd5d..83f09bd2fa 100644 --- a/docs/life-of-a-tile.md +++ b/docs/life-of-a-tile.md @@ -12,67 +12,67 @@ Ideally the event loop and render frame run at 60 frames per second, and all of ![Event Loop Sequence Diagram](diagrams/event-loop.plantuml.svg) -- [Transform](../src/geo/transform.js) holds the current viewport details (pitch, zoom, bearing, bounds, etc.). Two places in the code update transform directly: - - [Camera](../src/ui/camera.js) (parent class of [Map](../src/ui/map)) in response to explicit calls to [Camera#panTo](../src/ui/camera.js#L211), [Camera#setCenter](../src/ui/camera.js#L173) - - [HandlerManager](../src/ui/handler_manager.js) in response to DOM events. It forwards those events to interaction processors that live in [src/ui/handler](../src/ui/handler), which accumulate a merged [HandlerResult](../src/ui/handler_manager.js#L70) that kick off a render frame loop, decreasing the inertia and nudging map.transform by that amount on each frame from [HandlerManager#\_updateMapTransform()](../src/ui/handler_manager.js#L412). That loop continues in the inertia decreases to 0. -- Both camera and handler_manager are responsible for firing `move`, `zoom`, `movestart`, `moveend`, ... events on the map after they update transform. Each of these events (along with style changes and data load events) triggers a call to [Map#\_render()](../src/ui/map.js#L2428) which renders a single frame of the map. +- [Transform](../src/geo/transform.ts) holds the current viewport details (pitch, zoom, bearing, bounds, etc.). Two places in the code update transform directly: + - [Camera](../src/ui/camera.ts) (parent class of [Map](../src/ui/map)) in response to explicit calls to [Camera#panTo](../src/ui/camera.ts#L207), [Camera#setCenter](../src/ui/camera.ts#L169) + - [HandlerManager](../src/ui/handler_manager.ts) in response to DOM events. It forwards those events to interaction processors that live in [src/ui/handler](../src/ui/handler), which accumulate a merged [HandlerResult](../src/ui/handler_manager.ts#L64) that kick off a render frame loop, decreasing the inertia and nudging map.transform by that amount on each frame from [HandlerManager#\_updateMapTransform()](../src/ui/handler_manager.ts#L413). That loop continues in the inertia decreases to 0. +- Both camera and handler_manager are responsible for firing `move`, `zoom`, `movestart`, `moveend`, ... events on the map after they update transform. Each of these events (along with style changes and data load events) triggers a call to [Map#\_render()](../src/ui/map.ts#L2480) which renders a single frame of the map. ## Tile loading ![Fetch Tile Sequence Diagram](diagrams/fetch-tile.plantuml.svg) -[Map#\_render()](../src/ui/map.js#L2428) works in 2 different modes based on the value of `Map._sourcesDirty`. When `Map._sourcesDirty === true`, it starts by asking each source if it needs to load any new data: +[Map#\_render()](../src/ui/map.ts#L2480) works in 2 different modes based on the value of `Map._sourcesDirty`. When `Map._sourcesDirty === true`, it starts by asking each source if it needs to load any new data: -- Call [SourceCache#update(transform)](../src/source/source_cache.js#L474) on each map data source. This computes the ideal tiles that cover the current viewport and requests missing ones. When a tile is missing, searches child/parent tiles to find the best alternative to show while the ideal tile is loading. +- Call [SourceCache#update(transform)](../src/source/source_cache.ts#L479) on each map data source. This computes the ideal tiles that cover the current viewport and requests missing ones. When a tile is missing, searches child/parent tiles to find the best alternative to show while the ideal tile is loading. - Call `Source#loadTile(tile, callback)` on each source to load the missing tile. Each source implements this differently: - - [RasterTileSource#loadTile](../src/source/raster_tile_source.js#L112) just kicks off a getImage request using [src/util/ajax](../src/util/ajax.js) which keeps a queue of pending requests and limits the number of in-progress requests. - - [RasterDEMTileSource#loadTile](../src/source/raster_dem_tile_source.js#L42) starts off the same to fetch the image, but then it sends the bytes in a `loadDEMTile` message to a worker to process before returning the results. Getting pixels from the image response requires drawing it to a canvas and reading the pixels back. This can be expensive, so when the browser supports `OffscreenCanvas`, do that in a worker, otherwise do it here before sending. - - `[in web worker]` [RasterDEMTileWorkerSource#loadTile](../src/source/raster_dem_tile_worker_source.js#L25) loads raw rgb data into a [DEMData](../src/data/dem_data.js) instance. This copies edge pixels out to a 1px border to avoid edge artifacts and passes that back to the main thread. - - [VectorTileSource#loadTile](../src/source/vector_tile_source.js#L184) sends a `loadTile` or `reloadTile` message to a worker: - - `[in web worker]` [Worker#loadTile](../src/source/worker.js#L99) handles the message and passes it to [VectorTileWorkerSource#loadTile](../src/source/vector_tile_worker_source.js#L102) - - Calls [VectorTileWorkerSource#loadVectorTile](../src/source/vector_tile_worker_source.js#L44) which uses - - [ajax#getArrayBuffer()](../src/util/ajax.js#L271) to fetch raw bytes + - [RasterTileSource#loadTile](../src/source/raster_tile_source.ts#L110) just kicks off a getImage request using [src/util/ajax](../src/util/ajax.ts) which keeps a queue of pending requests and limits the number of in-progress requests. + - [RasterDEMTileSource#loadTile](../src/source/raster_dem_tile_source.ts#L39) starts off the same to fetch the image, but then it sends the bytes in a `loadDEMTile` message to a worker to process before returning the results. Getting pixels from the image response requires drawing it to a canvas and reading the pixels back. This can be expensive, so when the browser supports `OffscreenCanvas`, do that in a worker, otherwise do it here before sending. + - `[in web worker]` [RasterDEMTileWorkerSource#loadTile](../src/source/raster_dem_tile_worker_source.ts#L21) loads raw rgb data into a [DEMData](../src/data/dem_data.ts) instance. This copies edge pixels out to a 1px border to avoid edge artifacts and passes that back to the main thread. + - [VectorTileSource#loadTile](../src/source/vector_tile_source.ts#L184) sends a `loadTile` or `reloadTile` message to a worker: + - `[in web worker]` [Worker#loadTile](../src/source/worker.ts#L96) handles the message and passes it to [VectorTileWorkerSource#loadTile](../src/source/vector_tile_worker_source.ts#L100) + - Calls [VectorTileWorkerSource#loadVectorTile](../src/source/vector_tile_worker_source.ts#L42) which uses + - [ajax#getArrayBuffer()](../src/util/ajax.ts#L284) to fetch raw bytes - [pbf](https://github.com/mapbox/pbf) to decode the protobuf, then - [@mapbox/vector-tile#VectorTile](https://github.com/mapbox/vector-tile) to parse the vector tile. - - The result goes into a new [WorkerTile](../src/source/worker_tile.js) instance. - - Calls [WorkerTile#parse()](../src/source/worker_tile.js#L66) and caches the result in the worker by tile ID: + - The result goes into a new [WorkerTile](../src/source/worker_tile.ts) instance. + - Calls [WorkerTile#parse()](../src/source/worker_tile.ts#L64) and caches the result in the worker by tile ID: - For each vector tile source layer, for each style layer that depends on the source layer that is currently visible ("layer family"): - Calculate layout properties (recalculateLayers) - - Call style.createBucket, which delegates to a bucket type in [src/data/bucket/\*](../src/data/bucket), which are subclasses of [src/data/bucket](../src/data/bucket.js) - - Call [Bucket#populate()](../src/data/bucket.js) with the features from this source layer in the vector tile. This precomputes all the data that the main thread needs to load into the GPU to render each frame (ie. buffers containing vertices of all the triangles that compose the shape) + - Call style.createBucket, which delegates to a bucket type in [src/data/bucket/\*](../src/data/bucket), which are subclasses of [src/data/bucket](../src/data/bucket.ts) + - Call [Bucket#populate()](../src/data/bucket.ts) with the features from this source layer in the vector tile. This precomputes all the data that the main thread needs to load into the GPU to render each frame (ie. buffers containing vertices of all the triangles that compose the shape) - Most layer types just store triangulated features on that first pass, but some layers have data dependencies, so ask the main thread for: - Font PBFs (getGlyphs) - - Handled by [GlyphManager](../src/render/glyph_manager.js) on the main thread which serves as a global cache for glyphs we’ve retrieved. When one is missing it either uses [tinysdf](https://github.com/mapbox/tiny-sdf) to render the character on a canvas, or makes a network request to load the font PBF file for the range that contains the missing glyphs. + - Handled by [GlyphManager](../src/render/glyph_manager.ts) on the main thread which serves as a global cache for glyphs we’ve retrieved. When one is missing it either uses [tinysdf](https://github.com/mapbox/tiny-sdf) to render the character on a canvas, or makes a network request to load the font PBF file for the range that contains the missing glyphs. - Icons and patterns (getImages({type: 'icon' | 'pattern' })) - - Handled by [ImageManager](../src/render/image_manager.js) on the main thread which caches images we’ve already fetched and fetches them if missing - - When all data dependencies are available [WorkerTile#maybePrepare()](../src/source/worker_tile.js#L178), create a new [GlyphAtlas](../src/render/glyph_atlas.js) and [ImageAtlas](../src/render/image_atlas.js) that store the used font glyph symbols and icon/pattern images into a square matrix that can be loaded into the GPU using [potpack](https://github.com/mapbox/potpack). Then call [StyleLayer#recalculate()](../src/style/style_layer.js#L198) on each layer that was waiting for a data dependency and: + - Handled by [ImageManager](../src/render/image_manager.ts) on the main thread which caches images we’ve already fetched and fetches them if missing + - When all data dependencies are available [WorkerTile#maybePrepare()](../src/source/worker_tile.ts#L180), create a new [GlyphAtlas](../src/render/glyph_atlas.ts) and [ImageAtlas](../src/render/image_atlas.ts) that store the used font glyph symbols and icon/pattern images into a square matrix that can be loaded into the GPU using [potpack](https://github.com/mapbox/potpack). Then call [StyleLayer#recalculate()](../src/style/style_layer.ts#L204) on each layer that was waiting for a data dependency and: - Call `addFeatures` on each bucket waiting for a pattern - - Call [src/symbol/symbol_layout#performSymbolLayout()](../src/symbol/symbol_layout.js#L150) for each bucket waiting for symbols, which computes text layout properties for the zoom level and places each individual symbol based on character shapes and font layout parameters, and stores the triangulated symbol geometries. Also computes collision boxes that will be used to determine which labels to show to avoid collisions + - Call [src/symbol/symbol_layout#performSymbolLayout()](../src/symbol/symbol_layout.ts#L148) for each bucket waiting for symbols, which computes text layout properties for the zoom level and places each individual symbol based on character shapes and font layout parameters, and stores the triangulated symbol geometries. Also computes collision boxes that will be used to determine which labels to show to avoid collisions - Pass the buckets, featureIndex, collision boxes, glyphAtlasImage, and imageAtlas back to the main thread - - [GeojsonSource#loadTile()](../src/source/geojson_source.js) also sends a loadTile or reloadTile message to a worker. The handling is almost exactly the same as a vector tile, except [GeojsonWorkerSource](../src/source/geojson_worker_source.js) extends [VectorTileWorkerSource](../src/source/vector_tile_worker_source.js) and overrides `loadVectorData` so that instead of making a network request and parsing the PBF, it loads the initial geojson data into [geojson-vt](https://github.com/mapbox/geojson-vt) and calls the [getTile](https://github.com/mapbox/geojson-vt/blob/35f4ad75feed64e80ff2cd02994976c6335859cd/src/index.js#L161) method to get vector tile data from the geojson for each tile the main thread needs. - - [ImageSource#loadTile()](../src/source/image_source.js#L245) computes the most-zoomed-in tile that contains the entire bounds of the image being rendered and only returns success if the main thread is requesting that tile (the image was already requested when layer was added to the map) -- When the vector sources (geojson/vector tile) responses get back to the main thread, it calls [Tile#loadVectorData](../src/source/tile.js#L140) with the result which deserializes and stores the buckets for each style layer, image/glyph atlases, and lazy-loads the RTL text plugin if this is the first tile to contain RTL text. -- Back up in [SourceCache](../src/source/source_cache.js), now that it has the loaded tile: - - [SourceCache#\_backfillDEM](../src/source/source_cache.js#L274) copies the edge pixels to and from all neighboring tiles so that there are no rendering artifacts when each tile computes the slope up to the very edge of the tile. - - Fire a `data {dataType: 'source'}` event on the source, which bubbles up to [SourceCache](../src/source/source_cache.js), [Style](../src/style/style.js), and [Map](../src/ui/map.js), which translates it to a `sourcedata` event and also calls [Map#\_update()](../src/ui/map.js#L2391) which calls [Map#triggerRepaint()](../src/ui/map.js#L2612) then [Map#\_render()](../src/ui/map.js#L2428) which renders a new frame just like when user interaction triggers transform change. + - [GeojsonSource#loadTile()](../src/source/geojson_source.ts) also sends a loadTile or reloadTile message to a worker. The handling is almost exactly the same as a vector tile, except [GeojsonWorkerSource](../src/source/geojson_worker_source.ts) extends [VectorTileWorkerSource](../src/source/vector_tile_worker_source.ts) and overrides `loadVectorData` so that instead of making a network request and parsing the PBF, it loads the initial geojson data into [geojson-vt](https://github.com/mapbox/geojson-vt) and calls the [getTile](https://github.com/mapbox/geojson-vt/blob/35f4ad75feed64e80ff2cd02994976c6335859cd/src/index.js#L161) method to get vector tile data from the geojson for each tile the main thread needs. + - [ImageSource#loadTile()](../src/source/image_source.ts#L246) computes the most-zoomed-in tile that contains the entire bounds of the image being rendered and only returns success if the main thread is requesting that tile (the image was already requested when layer was added to the map) +- When the vector sources (geojson/vector tile) responses get back to the main thread, it calls [Tile#loadVectorData](../src/source/tile.ts#L140) with the result which deserializes and stores the buckets for each style layer, image/glyph atlases, and lazy-loads the RTL text plugin if this is the first tile to contain RTL text. +- Back up in [SourceCache](../src/source/source_cache.ts), now that it has the loaded tile: + - [SourceCache#\_backfillDEM](../src/source/source_cache.ts#L275) copies the edge pixels to and from all neighboring tiles so that there are no rendering artifacts when each tile computes the slope up to the very edge of the tile. + - Fire a `data {dataType: 'source'}` event on the source, which bubbles up to [SourceCache](../src/source/source_cache.ts), [Style](../src/style/style.ts), and [Map](../src/ui/map.ts), which translates it to a `sourcedata` event and also calls [Map#\_update()](../src/ui/map.ts#L2443) which calls [Map#triggerRepaint()](../src/ui/map.ts#L2664) then [Map#\_render()](../src/ui/map.ts#L2480) which renders a new frame just like when user interaction triggers transform change. ## Render loop ![Render Frame Sequence Diagram](diagrams/render-frame.plantuml.svg) -When `map._sourcesDirty === false`, [map#\_render()](../src/ui/map.js#L2428) just renders a new frame entirely within the main UI thread: +When `map._sourcesDirty === false`, [map#\_render()](../src/ui/map.ts#L2480) just renders a new frame entirely within the main UI thread: -- Recompute "paint properties" based on the current zoom and current transition status by calling [Style#update()](../src/style/style.js) with the new transform. This calls `recalculate()` on each style layer to compute the new paint properties. -- Fetch new tiles by calling [SourceCache#update(transform)](../src/source/source_cache.js#L474) (see above) -- Call [Painter#render(style)](../src/render/painter.js#L357) with the current style - - Calls [SourceCache#prepare(context)](../src/source/source_cache.js#L169) on each source +- Recompute "paint properties" based on the current zoom and current transition status by calling [Style#update()](../src/style/style.ts) with the new transform. This calls `recalculate()` on each style layer to compute the new paint properties. +- Fetch new tiles by calling [SourceCache#update(transform)](../src/source/source_cache.ts#L479) (see above) +- Call [Painter#render(style)](../src/render/painter.ts#L359) with the current style + - Calls [SourceCache#prepare(context)](../src/source/source_cache.ts#L170) on each source - Then for each tile in the source: - - Call [Tile#upload(context)](../src/source/tile.js#L241) which calls [Bucket#upload(context)](../src/data/bucket.js) on the bucket for each layer in the tile, which uploads all of the vertex attributes needed for rendering to the GPU. - - Call [Tile#prepare(imageManager)](../src/source/tile.js#L261) uploads image textures (patterns, icons) for this tile to the GPU. + - Call [Tile#upload(context)](../src/source/tile.ts#L241) which calls [Bucket#upload(context)](../src/data/bucket.ts) on the bucket for each layer in the tile, which uploads all of the vertex attributes needed for rendering to the GPU. + - Call [Tile#prepare(imageManager)](../src/source/tile.ts#L261) uploads image textures (patterns, icons) for this tile to the GPU. - Make 4 passes over each layer, calling `renderLayer()` on the [src/render/draw\_\*](../src/render) file for each kind of layer: - `offscreen` pass uses the GPU to precompute and cache data to an offscreen framebuffer for custom, hillshading, and heatmap layers. Hillshading precomputes slope using the GPU and heatmap - `opaque` pass renders fill and background layers with no opacity from top to bottom - `translucent` pass renders each other layer from bottom to top - `debug` pass renders debug collision boxes, tile boundaries, etc. on top - - Each `renderLayer()` call loops through each visible tile to paint and for each binds textures, and uses a vertex and attribute shader program defined in [src/shaders](../src/shaders) and calls [Program#draw()](../src/render/program.js#L123) which sets GPU configuration for the program, sets uniforms needed by the program and calls `gl.drawElements()` which actually renders the layer on the screen for that tile. + - Each `renderLayer()` call loops through each visible tile to paint and for each binds textures, and uses a vertex and attribute shader program defined in [src/shaders](../src/shaders) and calls [Program#draw()](../src/render/program.ts#L123) which sets GPU configuration for the program, sets uniforms needed by the program and calls `gl.drawElements()` which actually renders the layer on the screen for that tile. - Finally, trigger another repaint if there is any more rendering to do. Otherwise trigger an `idle` event because the map is done loading. diff --git a/flow-typed/gl.js b/flow-typed/gl.js deleted file mode 100644 index 7fe9f46faa..0000000000 --- a/flow-typed/gl.js +++ /dev/null @@ -1,5 +0,0 @@ -// @flow strict -declare module "gl" { - declare function gl(width: number, height: number, attributes: WebGLContextAttributes): WebGLRenderingContext; - declare module.exports: typeof gl; -} diff --git a/flow-typed/jsdom.js b/flow-typed/jsdom.js deleted file mode 100644 index d9aa8c4080..0000000000 --- a/flow-typed/jsdom.js +++ /dev/null @@ -1,18 +0,0 @@ -// @flow strict - -import type Window from '../src/types/window'; - -declare module "jsdom" { - declare class JSDOM { - constructor(content: string, options: Object): JSDOM; - window: Window; - } - declare class VirtualConsole { - constructor(): VirtualConsole; - sendTo(console: typeof console): VirtualConsole; - } - declare module.exports: { - JSDOM: typeof JSDOM, - VirtualConsole: typeof VirtualConsole - }; -} diff --git a/flow-typed/mapbox-gl-supported.js b/flow-typed/mapbox-gl-supported.js deleted file mode 100644 index 71c3430c94..0000000000 --- a/flow-typed/mapbox-gl-supported.js +++ /dev/null @@ -1,9 +0,0 @@ -// @flow -'use strict'; -declare module "@mapbox/mapbox-gl-supported" { - declare type isSupported = { - (options?: {failIfMajorPerformanceCaveat: boolean}): boolean, - webGLContextAttributes: WebGLContextAttributes - }; - declare module.exports: isSupported; -} diff --git a/flow-typed/mapbox-unitbezier.js b/flow-typed/mapbox-unitbezier.js deleted file mode 100644 index cb127d13a2..0000000000 --- a/flow-typed/mapbox-unitbezier.js +++ /dev/null @@ -1,14 +0,0 @@ -'use strict'; -// @flow - -declare module "@mapbox/unitbezier" { - declare class UnitBezier { - constructor(p1x: number, p1y: number, p2x: number, p2y: number): UnitBezier; - sampleCurveX(t: number): number; - sampleCurveY(t: number): number; - sampleCurveDerivativeX(t: number): number; - solveCurveX(x: number, epsilon: number | void): number; - solve(x: number, epsilon: number | void): number; - } - declare module.exports: typeof UnitBezier; -} diff --git a/flow-typed/offscreen-canvas.js b/flow-typed/offscreen-canvas.js deleted file mode 100644 index 6c9617dad1..0000000000 --- a/flow-typed/offscreen-canvas.js +++ /dev/null @@ -1,9 +0,0 @@ -// @flow strict - -declare class OffscreenCanvas { - width: number; - height: number; - - constructor(width: number, height: number): OffscreenCanvas; - getContext(contextType: '2d'): CanvasRenderingContext2D; -} diff --git a/flow-typed/pbf.js b/flow-typed/pbf.js deleted file mode 100644 index ca92463be8..0000000000 --- a/flow-typed/pbf.js +++ /dev/null @@ -1,25 +0,0 @@ -declare module "pbf" { - declare type ReadFunction = (tag: number, result: T, pbf: Pbf) => void; - - declare class Pbf { - constructor(buf?: ArrayBuffer | Uint8Array): Pbf; - - readFields(readField: ReadFunction, result: T, end?: number): T; - readMessage(readField: ReadFunction, result: T): T; - - readFixed32(): number; - readSFixed32(): number; - readFixed64(): number; - readSFixed64(): number; - readFloat(): number; - readDouble(): number; - readVarint(): number; - readVarint64(): number; - readSVarint(): number; - readBoolean(): boolean; - readString(): string; - readBytes(): Uint8Array; - } - - declare module.exports: typeof Pbf -} diff --git a/flow-typed/point-geometry.js b/flow-typed/point-geometry.js deleted file mode 100644 index 38f7a8b85e..0000000000 --- a/flow-typed/point-geometry.js +++ /dev/null @@ -1,44 +0,0 @@ -declare module "@mapbox/point-geometry" { - declare type PointLike = Point | [number, number]; - - declare class Point { - x: number; - y: number; - constructor(x: number, y: number): Point; - clone(): Point; - add(point: Point): Point; - sub(point: Point): Point; - multByPoint(point: Point): Point; - divByPoint(point: Point): Point; - mult(k: number): Point; - div(k: number): Point; - rotate(angle: number): Point; - rotateAround(angle: number, point: Point): Point; - matMult(matrix: [number, number, number, number]): Point; - unit(): Point; - perp(): Point; - round(): Point; - mag(): number; - equals(point: Point): boolean; - dist(point: Point): number; - distSqr(point: Point): number; - angle(): number; - angleTo(point: Point): number; - angleWith(point: Point): number; - angleWithSep(x: number, y: number): number; - _matMult(matrix: [number, number, number, number]): Point; - _add(point: Point): Point; - _sub(point: Point): Point; - _mult(k: number): Point; - _div(k: number): Point; - _multByPoint(point: Point): Point; - _divByPoint(point: Point): Point; - _unit(): Point; - _perp(): Point; - _rotate(angle: number): Point; - _rotateAround(angle: number, point: Point): Point; - _round(): Point; - static convert(a: PointLike): Point; - } - declare module.exports: typeof Point; -} diff --git a/flow-typed/potpack.js b/flow-typed/potpack.js deleted file mode 100644 index 48fe21c825..0000000000 --- a/flow-typed/potpack.js +++ /dev/null @@ -1,12 +0,0 @@ -declare module "potpack" { - declare type Bin = { - x: number, - y: number, - w: number, - h: number - }; - - declare function potpack(bins: Array): {w: number, h: number, fill: number}; - - declare module.exports: typeof potpack; -} diff --git a/flow-typed/sinon.js b/flow-typed/sinon.js deleted file mode 100644 index be0350bd52..0000000000 --- a/flow-typed/sinon.js +++ /dev/null @@ -1,28 +0,0 @@ -// @flow strict -declare module "sinon" { - declare type SpyCall = { - args: Array - }; - declare type Spy = { - (): any, - calledOnce: number, - getCall(i: number): SpyCall - }; - declare type Stub = { - callsFake(fn: mixed): Spy - }; - declare class FakeServer { - xhr: XMLHttpRequest - } - declare type Sandbox = { - xhr: {supportsCORS: boolean}, - fakeServer: {create: () => FakeServer}, - - createSandbox(options: mixed): Sandbox, - stub(obj?: mixed, prop?: string): Stub, - spy(obj?: mixed, prop?: string): Spy, - restore(): void; - }; - - declare module.exports: Sandbox; -} diff --git a/flow-typed/vector-tile.js b/flow-typed/vector-tile.js deleted file mode 100644 index c56b04d33d..0000000000 --- a/flow-typed/vector-tile.js +++ /dev/null @@ -1,41 +0,0 @@ -import type Pbf from 'pbf'; -import type Point from '@mapbox/point-geometry'; -import type { GeoJSONFeature } from '@mapbox/geojson-types'; - -declare interface VectorTile { - layers: {[_: string]: VectorTileLayer}; -} - -declare interface VectorTileLayer { - version?: number; - name: string; - extent: number; - length: number; - feature(i: number): VectorTileFeature; -} - -declare interface VectorTileFeature { - extent: number; - type: 1 | 2 | 3; - id: number; - properties: {[_: string]: string | number | boolean}; - - loadGeometry(): Array>; - toGeoJSON(x: number, y: number, z: number): GeoJSONFeature; -} - -declare module "@mapbox/vector-tile" { - declare class VectorTileImpl { - constructor(pbf: Pbf): VectorTile; - } - - declare class VectorTileFeatureImpl { - static types: ['Unknown', 'Point', 'LineString', 'Polygon']; - toGeoJSON(x: number, y: number, z: number): GeoJSONFeature; - } - - declare module.exports: { - VectorTile: typeof VectorTileImpl; - VectorTileFeature: typeof VectorTileFeatureImpl; - } -} diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000000..1d2c9855f5 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,20833 @@ +{ + "name": "maplibre-gl", + "version": "2.0.0-pre.1", + "lockfileVersion": 1, + "requires": true, + "dependencies": { + "@babel/code-frame": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.14.5.tgz", + "integrity": "sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.14.5" + } + }, + "@babel/compat-data": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.14.7.tgz", + "integrity": "sha512-nS6dZaISCXJ3+518CWiBfEr//gHyMO02uDxBkXTKZDN5POruCnOZ1N4YBRZDCabwF8nZMWBpRxIicmXtBs+fvw==", + "dev": true + }, + "@babel/core": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.14.6.tgz", + "integrity": "sha512-gJnOEWSqTk96qG5BoIrl5bVtc23DCycmIePPYnamY9RboYdI4nFy5vAQMSl81O5K/W0sLDWfGysnOECC+KUUCA==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helpers": "^7.14.6", + "@babel/parser": "^7.14.6", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5", + "convert-source-map": "^1.7.0", + "debug": "^4.1.0", + "gensync": "^1.0.0-beta.2", + "json5": "^2.1.2", + "semver": "^6.3.0", + "source-map": "^0.5.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.14.5.tgz", + "integrity": "sha512-y3rlP+/G25OIX3mYKKIOlQRcqj7YgrvHxOLbVmyLJ9bPmi5ttvUmpydVjcFjZphOktWuA7ovbx91ECloWTfjIA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5", + "jsesc": "^2.5.1", + "source-map": "^0.5.0" + } + }, + "@babel/helper-annotate-as-pure": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.14.5.tgz", + "integrity": "sha512-EivH9EgBIb+G8ij1B2jAwSH36WnGvkQSEC6CkX/6v6ZFlw5fVOHvsgGF4uiEHO2GzMvunZb6tDLQEQSdrdocrA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-builder-binary-assignment-operator-visitor": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.14.5.tgz", + "integrity": "sha512-YTA/Twn0vBXDVGJuAX6PwW7x5zQei1luDDo2Pl6q1qZ7hVNl0RZrhHCQG/ArGpR29Vl7ETiB8eJyrvpuRp300w==", + "dev": true, + "requires": { + "@babel/helper-explode-assignable-expression": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-compilation-targets": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.14.5.tgz", + "integrity": "sha512-v+QtZqXEiOnpO6EYvlImB6zCD2Lel06RzOPzmkz/D/XgQiUu3C/Jb1LOqSt/AIA34TYi/Q+KlT8vTQrgdxkbLw==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "browserslist": "^4.16.6", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-create-class-features-plugin": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.14.6.tgz", + "integrity": "sha512-Z6gsfGofTxH/+LQXqYEK45kxmcensbzmk/oi8DmaQytlQCgqNZt9XQF8iqlI/SeXWVjaMNxvYvzaYw+kh42mDg==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5" + } + }, + "@babel/helper-create-regexp-features-plugin": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz", + "integrity": "sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "regexpu-core": "^4.7.1" + } + }, + "@babel/helper-define-polyfill-provider": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.2.3.tgz", + "integrity": "sha512-RH3QDAfRMzj7+0Nqu5oqgO5q9mFtQEVvCRsi8qCEfzLR9p2BHfn5FzhSB2oj1fF7I2+DcTORkYaQ6aTR9Cofew==", + "dev": true, + "requires": { + "@babel/helper-compilation-targets": "^7.13.0", + "@babel/helper-module-imports": "^7.12.13", + "@babel/helper-plugin-utils": "^7.13.0", + "@babel/traverse": "^7.13.0", + "debug": "^4.1.1", + "lodash.debounce": "^4.0.8", + "resolve": "^1.14.2", + "semver": "^6.1.2" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/helper-explode-assignable-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.14.5.tgz", + "integrity": "sha512-Htb24gnGJdIGT4vnRKMdoXiOIlqOLmdiUYpAQ0mYfgVT/GDm8GOYhgi4GL+hMKrkiPRohO4ts34ELFsGAPQLDQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.14.5.tgz", + "integrity": "sha512-Gjna0AsXWfFvrAuX+VKcN/aNNWonizBj39yGwUzVDVTlMYJMK2Wp6xdpy72mfArFq5uK+NOuexfzZlzI1z9+AQ==", + "dev": true, + "requires": { + "@babel/helper-get-function-arity": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-get-function-arity": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-get-function-arity/-/helper-get-function-arity-7.14.5.tgz", + "integrity": "sha512-I1Db4Shst5lewOM4V+ZKJzQ0JGGaZ6VY1jYvMghRjqs6DWgxLCIyFt30GlnKkfUeFLpJt2vzbMVEXVSXlIFYUg==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-hoist-variables": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.14.5.tgz", + "integrity": "sha512-R1PXiz31Uc0Vxy4OEOm07x0oSjKAdPPCh3tPivn/Eo8cvz6gveAeuyUUPB21Hoiif0uoPQSSdhIPS3352nvdyQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-member-expression-to-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.14.7.tgz", + "integrity": "sha512-TMUt4xKxJn6ccjcOW7c4hlwyJArizskAhoSTOCkA0uZ+KghIaci0Qg9R043kUMWI9mtQfgny+NQ5QATnZ+paaA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-imports": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.14.5.tgz", + "integrity": "sha512-SwrNHu5QWS84XlHwGYPDtCxcA0hrSlL2yhWYLgeOc0w7ccOl2qv4s/nARI0aYZW+bSwAL5CukeXA47B/1NKcnQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-module-transforms": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.14.5.tgz", + "integrity": "sha512-iXpX4KW8LVODuAieD7MzhNjmM6dzYY5tfRqT+R9HDXWl0jPn/djKmA+G9s/2C2T9zggw5tK1QNqZ70USfedOwA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-optimise-call-expression": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.14.5.tgz", + "integrity": "sha512-IqiLIrODUOdnPU9/F8ib1Fx2ohlgDhxnIDU7OEVi+kAbEZcyiF7BLU8W6PfvPi9LzztjS7kcbzbmL7oG8kD6VA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-plugin-utils": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.14.5.tgz", + "integrity": "sha512-/37qQCE3K0vvZKwoK4XU/irIJQdIfCJuhU5eKnNxpFDsOkgFaUAwbv+RYw6eYgsC0E4hS7r5KqGULUogqui0fQ==", + "dev": true + }, + "@babel/helper-remap-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.14.5.tgz", + "integrity": "sha512-rLQKdQU+HYlxBwQIj8dk4/0ENOUEhA/Z0l4hN8BexpvmSMN9oA9EagjnhnDpNsRdWCfjwa4mn/HyBXO9yhQP6A==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-replace-supers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-replace-supers/-/helper-replace-supers-7.14.5.tgz", + "integrity": "sha512-3i1Qe9/8x/hCHINujn+iuHy+mMRLoc77b2nI9TB0zjH1hvn9qGlXjWlggdwUcju36PkPCy/lpM7LLUdcTyH4Ow==", + "dev": true, + "requires": { + "@babel/helper-member-expression-to-functions": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-simple-access": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.14.5.tgz", + "integrity": "sha512-nfBN9xvmCt6nrMZjfhkl7i0oTV3yxR4/FztsbOASyTvVcoYd0TRHh7eMLdlEcCqobydC0LAF3LtC92Iwxo0wyw==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-skip-transparent-expression-wrappers": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.14.5.tgz", + "integrity": "sha512-dmqZB7mrb94PZSAOYtr+ZN5qt5owZIAgqtoTuqiFbHFtxgEcmQlRJVI+bO++fciBunXtB6MK7HrzrfcAzIz2NQ==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-split-export-declaration": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.14.5.tgz", + "integrity": "sha512-hprxVPu6e5Kdp2puZUmvOGjaLv9TCe58E/Fl6hRq4YiVQxIcNvuq6uTM2r1mT/oPskuS9CgR+I94sqAYv0NGKA==", + "dev": true, + "requires": { + "@babel/types": "^7.14.5" + } + }, + "@babel/helper-validator-identifier": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.14.5.tgz", + "integrity": "sha512-5lsetuxCLilmVGyiLEfoHBRX8UCFD+1m2x3Rj97WrW3V7H3u4RWRXA4evMjImCsin2J2YT0QaVDGf+z8ondbAg==", + "dev": true + }, + "@babel/helper-validator-option": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.14.5.tgz", + "integrity": "sha512-OX8D5eeX4XwcroVW45NMvoYaIuFI+GQpA2a8Gi+X/U/cDUIRsV37qQfF905F0htTRCREQIB4KqPeaveRJUl3Ow==", + "dev": true + }, + "@babel/helper-wrap-function": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/helper-wrap-function/-/helper-wrap-function-7.14.5.tgz", + "integrity": "sha512-YEdjTCq+LNuNS1WfxsDCNpgXkJaIyqco6DAelTUjT4f2KIWC1nBcaCaSdHTBqQVLnTBexBcVcFhLSU1KnYuePQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/helpers": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.14.6.tgz", + "integrity": "sha512-yesp1ENQBiLI+iYHSJdoZKUtRpfTlL1grDIX9NRlAVppljLw/4tTyYupIB7uIYmC3stW/imAv8EqaKaS/ibmeA==", + "dev": true, + "requires": { + "@babel/template": "^7.14.5", + "@babel/traverse": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/highlight": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.14.5.tgz", + "integrity": "sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "@babel/parser": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.14.7.tgz", + "integrity": "sha512-X67Z5y+VBJuHB/RjwECp8kSl5uYi0BvRbNeWqkaJCVh+LiTPl19WBUfG627psSgp9rSf6ojuXghQM3ha6qHHdA==", + "dev": true + }, + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ZoJS2XCKPBfTmL122iP6NM9dOg+d4lc9fFk3zxc8iDjvt8Pk4+TlsHSKhIPf6X+L5ORCdBzqMZDjL/WHj7WknQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5" + } + }, + "@babel/plugin-proposal-async-generator-functions": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.14.7.tgz", + "integrity": "sha512-RK8Wj7lXLY3bqei69/cc25gwS5puEc3dknoFPFbqfy3XxYQBQFvu4ioWpafMBAB+L9NyptQK4nMOa5Xz16og8Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4" + } + }, + "@babel/plugin-proposal-class-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.14.5.tgz", + "integrity": "sha512-q/PLpv5Ko4dVc1LYMpCY7RVAAO4uk55qPwrIuJ5QJ8c6cVuAmhu7I/49JOppXL6gXf7ZHzpRVEUZdYoPLM04Gg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-class-static-block/-/plugin-proposal-class-static-block-7.14.5.tgz", + "integrity": "sha512-KBAH5ksEnYHCegqseI5N9skTdxgJdmDoAOc0uXa+4QMYKeZD0w5IARh4FMlTNtaHhbB8v+KzMdTgxMMzsIy6Yg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-class-static-block": "^7.14.5" + } + }, + "@babel/plugin-proposal-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.14.5.tgz", + "integrity": "sha512-LYz5nvQcvYeRVjui1Ykn28i+3aUiXwQ/3MGoEy0InTaz1pJo/lAzmIDXX+BQny/oufgHzJ6vnEEiXQ8KZjEVFg==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-decorators": "^7.14.5" + } + }, + "@babel/plugin-proposal-do-expressions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.14.5.tgz", + "integrity": "sha512-i40m/CLe5WBGYMZL/SC3xtjJ/B0i+XblaonSsinumgfNIqmBOf4LEcZJXijoQeQbQVl55PyM0siWSWWJ9lV7cA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-do-expressions": "^7.14.5" + } + }, + "@babel/plugin-proposal-dynamic-import": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.14.5.tgz", + "integrity": "sha512-ExjiNYc3HDN5PXJx+bwC50GIx/KKanX2HiggnIUAYedbARdImiCU4RhhHfdf0Kd7JNXGpsBBBCOm+bBVy3Gb0g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3" + } + }, + "@babel/plugin-proposal-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.14.5.tgz", + "integrity": "sha512-T8KZ5abXvKMjF6JcoXjgac3ElmXf0AWzJwi2O/42Jk+HmCky3D9+i1B7NPP1FblyceqTevKeV/9szeikFoaMDg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-default-from": "^7.14.5" + } + }, + "@babel/plugin-proposal-export-namespace-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.14.5.tgz", + "integrity": "sha512-g5POA32bXPMmSBu5Dx/iZGLGnKmKPc5AiY7qfZgurzrCYgIztDlHFbznSNCoQuv57YQLnQfaDi7dxCtLDIdXdA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3" + } + }, + "@babel/plugin-proposal-function-bind": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.14.5.tgz", + "integrity": "sha512-PSQk5JImi81nFAzIebCEqkd0aiP9LDVKLCIH+0yR66JV8cQ1oZ8IRK9NNaA5nw9sjo0cPXxuBPCqgqcpugR8tA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-function-bind": "^7.14.5" + } + }, + "@babel/plugin-proposal-function-sent": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.14.5.tgz", + "integrity": "sha512-3Hvb9m1dvFK1cor9kObPCPK8q0xlcakm+haBwHQy7V5BN1As6iys9oOKyWpHVbop+tW8JYs0v9Ahcp1BOxC3Ng==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-wrap-function": "^7.14.5", + "@babel/plugin-syntax-function-sent": "^7.14.5" + } + }, + "@babel/plugin-proposal-json-strings": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.14.5.tgz", + "integrity": "sha512-NSq2fczJYKVRIsUJyNxrVUMhB27zb7N7pOFGQOhBKJrChbGcgEAqyZrmZswkPk18VMurEeJAaICbfm57vUeTbQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-json-strings": "^7.8.3" + } + }, + "@babel/plugin-proposal-logical-assignment-operators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.14.5.tgz", + "integrity": "sha512-YGn2AvZAo9TwyhlLvCCWxD90Xq8xJ4aSgaX3G5D/8DW94L8aaT+dS5cSP+Z06+rCJERGSr9GxMBZ601xoc2taw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4" + } + }, + "@babel/plugin-proposal-nullish-coalescing-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.14.5.tgz", + "integrity": "sha512-gun/SOnMqjSb98Nkaq2rTKMwervfdAoz6NphdY0vTfuzMfryj+tDGb2n6UkDKwez+Y8PZDhE3D143v6Gepp4Hg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3" + } + }, + "@babel/plugin-proposal-numeric-separator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.14.5.tgz", + "integrity": "sha512-yiclALKe0vyZRZE0pS6RXgjUOt87GWv6FYa5zqj15PvhOGFO69R5DusPlgK/1K5dVnCtegTiWu9UaBSrLLJJBg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-numeric-separator": "^7.10.4" + } + }, + "@babel/plugin-proposal-object-rest-spread": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.14.7.tgz", + "integrity": "sha512-082hsZz+sVabfmDWo1Oct1u1AgbKbUAyVgmX4otIc7bdsRgHBXwTwb3DpDmD4Eyyx6DNiuz5UAATT655k+kL5g==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-transform-parameters": "^7.14.5" + } + }, + "@babel/plugin-proposal-optional-catch-binding": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.14.5.tgz", + "integrity": "sha512-3Oyiixm0ur7bzO5ybNcZFlmVsygSIQgdOa7cTfOYCMY+wEPAYhZAJxi3mixKFCTCKUhQXuCTtQ1MzrpL3WT8ZQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3" + } + }, + "@babel/plugin-proposal-optional-chaining": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.14.5.tgz", + "integrity": "sha512-ycz+VOzo2UbWNI1rQXxIuMOzrDdHGrI23fRiz/Si2R4kv2XZQ1BK8ccdHwehMKBlcH/joGW/tzrUmo67gbJHlQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5", + "@babel/plugin-syntax-optional-chaining": "^7.8.3" + } + }, + "@babel/plugin-proposal-pipeline-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.14.5.tgz", + "integrity": "sha512-JahWUHYn1mij/tYte6/wGElJFUIuLGu0Eqiz329QK2yl50aQfL0sRyqGy1GhM+w0R6KWSQ9V6FDewDF2ST/xRA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-pipeline-operator": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-methods": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.14.5.tgz", + "integrity": "sha512-838DkdUA1u+QTCplatfq4B7+1lnDa/+QMI89x5WZHBcnNv+47N8QEj2k9I2MUU9xIv8XJ4XvPCviM/Dj7Uwt9g==", + "dev": true, + "requires": { + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-proposal-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-62EyfyA3WA0mZiF2e2IV9mc9Ghwxcg8YTu8BS4Wss4Y3PY725OmS9M0qLORbJwLqFtGh+jiE4wAmocK2CTUK2Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-create-class-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5" + } + }, + "@babel/plugin-proposal-throw-expressions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.14.5.tgz", + "integrity": "sha512-Db2JCIPhe409U3qy0sWpDun6Xa1k77TfNsKTzUY0PDRTpiho7e2uIhYMJVwGrHOkHRH03D6yQLZRosNahnpi1Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-throw-expressions": "^7.14.5" + } + }, + "@babel/plugin-proposal-unicode-property-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.14.5.tgz", + "integrity": "sha512-6axIeOU5LnY471KenAB9vI8I5j7NQ2d652hIYwVyRfgaZT5UpiqFKCuVXCDMSrU+3VFafnu2c5m3lrWIlr6A5Q==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-async-generators": { + "version": "7.8.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz", + "integrity": "sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-class-properties": { + "version": "7.12.13", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz", + "integrity": "sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.12.13" + } + }, + "@babel/plugin-syntax-class-static-block": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz", + "integrity": "sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-decorators": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.14.5.tgz", + "integrity": "sha512-c4sZMRWL4GSvP1EXy0woIP7m4jkVcEuG8R1TOZxPBPtp4FSM/kiPZub9UIs/Jrb5ZAOzvTUSGYrWsrSu1JvoPw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-do-expressions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.14.5.tgz", + "integrity": "sha512-IpVyxRlfFCU2emBiq2OxUX10PD6FoGZ30yWwGt1qdkIPUDhAodG5Il1LStODgATndKRhQgqT21ksqA5fd39AwA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-dynamic-import": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz", + "integrity": "sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-export-default-from": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.14.5.tgz", + "integrity": "sha512-snWDxjuaPEobRBnhpqEfZ8RMxDbHt8+87fiEioGuE+Uc0xAKgSD8QiuL3lF93hPVQfZFAcYwrrf+H5qUhike3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-export-namespace-from": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz", + "integrity": "sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.3" + } + }, + "@babel/plugin-syntax-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.14.5.tgz", + "integrity": "sha512-9WK5ZwKCdWHxVuU13XNT6X73FGmutAXeor5lGFq6qhOFtMFUF4jkbijuyUdZZlpYq6E2hZeZf/u3959X9wsv0Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-function-bind": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.14.5.tgz", + "integrity": "sha512-gstAIrKtlPwrQaRz4uK+kT7zI2p5MQqX41SeO+kZKH1XGO1jL0nLZBWznRigPpkem6LfIoG2EduQZmPBcUwEmg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-function-sent": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.14.5.tgz", + "integrity": "sha512-FNN0Ve2/6yxCa0xMG7wUlM81t+HOPu8HNWk683Xav1B+vjHKQQujX82NEKYdDYNUX7/ky8pUCHfRUYVmigs69Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-import-meta": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz", + "integrity": "sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-json-strings": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz", + "integrity": "sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.14.5.tgz", + "integrity": "sha512-ohuFIsOMXJnbOMRfX7/w7LocdR6R7whhuRD4ax8IipLcLPlZGJKkBxgHp++U4N/vKyU16/YDQr2f5seajD3jIw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-logical-assignment-operators": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz", + "integrity": "sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-nullish-coalescing-operator": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz", + "integrity": "sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-numeric-separator": { + "version": "7.10.4", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz", + "integrity": "sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.10.4" + } + }, + "@babel/plugin-syntax-object-rest-spread": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz", + "integrity": "sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-catch-binding": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz", + "integrity": "sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-optional-chaining": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz", + "integrity": "sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.8.0" + } + }, + "@babel/plugin-syntax-pipeline-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.14.5.tgz", + "integrity": "sha512-yyV4QIHExzKJwYoZ0yRorVLROdsZ96H6iamG60rvDghWyfo7BaSPjvoHWGRirebzUj+Vv5Ih6yhhMLx04Gnvyw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-private-property-in-object": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz", + "integrity": "sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-throw-expressions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.14.5.tgz", + "integrity": "sha512-4aFC2goA9+JceXayipcSY017nGspvcAkzR+sdsT6hN4DUuHWvM88wdjf/Nxja5sTE7oYPmfuN84ViREdgjingw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-syntax-top-level-await": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz", + "integrity": "sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-arrow-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.14.5.tgz", + "integrity": "sha512-KOnO0l4+tD5IfOdi4x8C1XmEIRWUjNRV8wc6K2vz/3e8yAOoZZvsRXRRIF/yo/MAOFb4QjtAw9xSxMXbSMRy8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-async-to-generator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.14.5.tgz", + "integrity": "sha512-szkbzQ0mNk0rpu76fzDdqSyPu0MuvpXgC+6rz5rpMb5OIRxdmHfQxrktL8CYolL2d8luMCZTR0DpIMIdL27IjA==", + "dev": true, + "requires": { + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-remap-async-to-generator": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoped-functions": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.14.5.tgz", + "integrity": "sha512-dtqWqdWZ5NqBX3KzsVCWfQI3A53Ft5pWFCT2eCVUftWZgjc5DpDponbIF1+c+7cSGk2wN0YK7HGL/ezfRbpKBQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-block-scoping": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.14.5.tgz", + "integrity": "sha512-LBYm4ZocNgoCqyxMLoOnwpsmQ18HWTQvql64t3GvMUzLQrNoV1BDG0lNftC8QKYERkZgCCT/7J5xWGObGAyHDw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-classes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-classes/-/plugin-transform-classes-7.14.5.tgz", + "integrity": "sha512-J4VxKAMykM06K/64z9rwiL6xnBHgB1+FVspqvlgCdwD1KUbQNfszeKVVOMh59w3sztHYIZDgnhOC4WbdEfHFDA==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-optimise-call-expression": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "globals": "^11.1.0" + } + }, + "@babel/plugin-transform-computed-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.14.5.tgz", + "integrity": "sha512-pWM+E4283UxaVzLb8UBXv4EIxMovU4zxT1OPnpHJcmnvyY9QbPPTKZfEj31EUvG3/EQRbYAGaYEUZ4yWOBC2xg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-destructuring": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.14.7.tgz", + "integrity": "sha512-0mDE99nK+kVh3xlc5vKwB6wnP9ecuSj+zQCa/n0voENtP/zymdT4HH6QEb65wjjcbqr1Jb/7z9Qp7TF5FtwYGw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-dotall-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.14.5.tgz", + "integrity": "sha512-loGlnBdj02MDsFaHhAIJzh7euK89lBrGIdM9EAtHFo6xKygCUGuuWe07o1oZVk287amtW1n0808sQM99aZt3gw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-duplicate-keys": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.14.5.tgz", + "integrity": "sha512-iJjbI53huKbPDAsJ8EmVmvCKeeq21bAze4fu9GBQtSLqfvzj2oRuHVx4ZkDwEhg1htQ+5OBZh/Ab0XDf5iBZ7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-exponentiation-operator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.14.5.tgz", + "integrity": "sha512-jFazJhMBc9D27o9jDnIE5ZErI0R0m7PbKXVq77FFvqFbzvTMuv8jaAwLZ5PviOLSFttqKIW0/wxNSDbjLk0tYA==", + "dev": true, + "requires": { + "@babel/helper-builder-binary-assignment-operator-visitor": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-flow-strip-types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.14.5.tgz", + "integrity": "sha512-KhcolBKfXbvjwI3TV7r7TkYm8oNXHNBqGOy6JDVwtecFaRoKYsUUqJdS10q0YDKW1c6aZQgO+Ys3LfGkox8pXA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-flow": "^7.14.5" + } + }, + "@babel/plugin-transform-for-of": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.14.5.tgz", + "integrity": "sha512-CfmqxSUZzBl0rSjpoQSFoR9UEj3HzbGuGNL21/iFTmjb5gFggJp3ph0xR1YBhexmLoKRHzgxuFvty2xdSt6gTA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-function-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.14.5.tgz", + "integrity": "sha512-vbO6kv0fIzZ1GpmGQuvbwwm+O4Cbm2NrPzwlup9+/3fdkuzo1YqOZcXw26+YUJB84Ja7j9yURWposEHLYwxUfQ==", + "dev": true, + "requires": { + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-literals/-/plugin-transform-literals-7.14.5.tgz", + "integrity": "sha512-ql33+epql2F49bi8aHXxvLURHkxJbSmMKl9J5yHqg4PLtdE6Uc48CH1GS6TQvZ86eoB/ApZXwm7jlA+B3kra7A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-member-expression-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.14.5.tgz", + "integrity": "sha512-WkNXxH1VXVTKarWFqmso83xl+2V3Eo28YY5utIkbsmXoItO8Q3aZxN4BTS2k0hz9dGUloHK26mJMyQEYfkn/+Q==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-modules-amd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.14.5.tgz", + "integrity": "sha512-3lpOU8Vxmp3roC4vzFpSdEpGUWSMsHFreTWOMMLzel2gNGfHE5UWIh/LN6ghHs2xurUp4jRFYMUIZhuFbody1g==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-commonjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.14.5.tgz", + "integrity": "sha512-en8GfBtgnydoao2PS+87mKyw62k02k7kJ9ltbKe0fXTHrQmG6QZZflYuGI1VVG7sVpx4E1n7KBpNlPb8m78J+A==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-simple-access": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-systemjs": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.14.5.tgz", + "integrity": "sha512-mNMQdvBEE5DcMQaL5LbzXFMANrQjd2W7FPzg34Y4yEz7dBgdaC+9B84dSO+/1Wba98zoDbInctCDo4JGxz1VYA==", + "dev": true, + "requires": { + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-identifier": "^7.14.5", + "babel-plugin-dynamic-import-node": "^2.3.3" + } + }, + "@babel/plugin-transform-modules-umd": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.14.5.tgz", + "integrity": "sha512-RfPGoagSngC06LsGUYyM9QWSXZ8MysEjDJTAea1lqRjNECE3y0qIJF/qbvJxc4oA4s99HumIMdXOrd+TdKaAAA==", + "dev": true, + "requires": { + "@babel/helper-module-transforms": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-named-capturing-groups-regex": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.14.7.tgz", + "integrity": "sha512-DTNOTaS7TkW97xsDMrp7nycUVh6sn/eq22VaxWfEdzuEbRsiaOU0pqU7DlyUGHVsbQbSghvjKRpEl+nUCKGQSg==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5" + } + }, + "@babel/plugin-transform-new-target": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.14.5.tgz", + "integrity": "sha512-Nx054zovz6IIRWEB49RDRuXGI4Gy0GMgqG0cII9L3MxqgXz/+rgII+RU58qpo4g7tNEx1jG7rRVH4ihZoP4esQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-object-super": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.14.5.tgz", + "integrity": "sha512-MKfOBWzK0pZIrav9z/hkRqIk/2bTv9qvxHzPQc12RcVkMOzpIKnFCNYJip00ssKWYkd8Sf5g0Wr7pqJ+cmtuFg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-replace-supers": "^7.14.5" + } + }, + "@babel/plugin-transform-parameters": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.14.5.tgz", + "integrity": "sha512-Tl7LWdr6HUxTmzQtzuU14SqbgrSKmaR77M0OKyq4njZLQTPfOvzblNKyNkGwOfEFCEx7KeYHQHDI0P3F02IVkA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-property-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.14.5.tgz", + "integrity": "sha512-r1uilDthkgXW8Z1vJz2dKYLV1tuw2xsbrp3MrZmD99Wh9vsfKoob+JTgri5VUb/JqyKRXotlOtwgu4stIYCmnw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-display-name": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.14.5.tgz", + "integrity": "sha512-07aqY1ChoPgIxsuDviptRpVkWCSbXWmzQqcgy65C6YSFOfPFvb/DX3bBRHh7pCd/PMEEYHYWUTSVkCbkVainYQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.14.5.tgz", + "integrity": "sha512-7RylxNeDnxc1OleDm0F5Q/BSL+whYRbOAR+bwgCxIr0L32v7UFh/pz1DLMZideAUxKT6eMoS2zQH6fyODLEi8Q==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-module-imports": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/plugin-syntax-jsx": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/plugin-transform-react-jsx-development": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.14.5.tgz", + "integrity": "sha512-rdwG/9jC6QybWxVe2UVOa7q6cnTpw8JRRHOxntG/h6g/guAOe6AhtQHJuJh5FwmnXIT1bdm5vC2/5huV8ZOorQ==", + "dev": true, + "requires": { + "@babel/plugin-transform-react-jsx": "^7.14.5" + } + }, + "@babel/plugin-transform-react-pure-annotations": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.14.5.tgz", + "integrity": "sha512-3X4HpBJimNxW4rhUy/SONPyNQHp5YRr0HhJdT2OH1BRp0of7u3Dkirc7x9FRJMKMqTBI079VZ1hzv7Ouuz///g==", + "dev": true, + "requires": { + "@babel/helper-annotate-as-pure": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-regenerator": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.14.5.tgz", + "integrity": "sha512-NVIY1W3ITDP5xQl50NgTKlZ0GrotKtLna08/uGY6ErQt6VEQZXla86x/CTddm5gZdcr+5GSsvMeTmWA5Ii6pkg==", + "dev": true, + "requires": { + "regenerator-transform": "^0.14.2" + } + }, + "@babel/plugin-transform-reserved-words": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.14.5.tgz", + "integrity": "sha512-cv4F2rv1nD4qdexOGsRQXJrOcyb5CrgjUH9PKrrtyhSDBNWGxd0UIitjyJiWagS+EbUGjG++22mGH1Pub8D6Vg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-shorthand-properties": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.14.5.tgz", + "integrity": "sha512-xLucks6T1VmGsTB+GWK5Pl9Jl5+nRXD1uoFdA5TSO6xtiNjtXTjKkmPdFXVLGlK5A2/or/wQMKfmQ2Y0XJfn5g==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-spread": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-spread/-/plugin-transform-spread-7.14.6.tgz", + "integrity": "sha512-Zr0x0YroFJku7n7+/HH3A2eIrGMjbmAIbJSVv0IZ+t3U2WUQUA64S/oeied2e+MaGSjmt4alzBCsK9E8gh+fag==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-skip-transparent-expression-wrappers": "^7.14.5" + } + }, + "@babel/plugin-transform-sticky-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.14.5.tgz", + "integrity": "sha512-Z7F7GyvEMzIIbwnziAZmnSNpdijdr4dWt+FJNBnBLz5mwDFkqIXU9wmBcWWad3QeJF5hMTkRe4dAq2sUZiG+8A==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-template-literals": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.14.5.tgz", + "integrity": "sha512-22btZeURqiepOfuy/VkFr+zStqlujWaarpMErvay7goJS6BWwdd6BY9zQyDLDa4x2S3VugxFb162IZ4m/S/+Gg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-typeof-symbol": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.14.5.tgz", + "integrity": "sha512-lXzLD30ffCWseTbMQzrvDWqljvZlHkXU+CnseMhkMNqU1sASnCsz3tSzAaH3vCUXb9PHeUb90ZT1BdFTm1xxJw==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-escapes": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.14.5.tgz", + "integrity": "sha512-crTo4jATEOjxj7bt9lbYXcBAM3LZaUrbP2uUdxb6WIorLmjNKSpHfIybgY4B8SRpbf8tEVIWH3Vtm7ayCrKocA==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/plugin-transform-unicode-regex": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.14.5.tgz", + "integrity": "sha512-UygduJpC5kHeCiRw/xDVzC+wj8VaYSoKl5JNVmbP7MadpNinAm3SvZCxZ42H37KZBKztz46YC73i9yV34d0Tzw==", + "dev": true, + "requires": { + "@babel/helper-create-regexp-features-plugin": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5" + } + }, + "@babel/preset-env": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/preset-env/-/preset-env-7.14.7.tgz", + "integrity": "sha512-itOGqCKLsSUl0Y+1nSfhbuuOlTs0MJk2Iv7iSH+XT/mR8U1zRLO7NjWlYXB47yhK4J/7j+HYty/EhFZDYKa/VA==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.14.7", + "@babel/helper-compilation-targets": "^7.14.5", + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-async-generator-functions": "^7.14.7", + "@babel/plugin-proposal-class-properties": "^7.14.5", + "@babel/plugin-proposal-class-static-block": "^7.14.5", + "@babel/plugin-proposal-dynamic-import": "^7.14.5", + "@babel/plugin-proposal-export-namespace-from": "^7.14.5", + "@babel/plugin-proposal-json-strings": "^7.14.5", + "@babel/plugin-proposal-logical-assignment-operators": "^7.14.5", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.14.5", + "@babel/plugin-proposal-numeric-separator": "^7.14.5", + "@babel/plugin-proposal-object-rest-spread": "^7.14.7", + "@babel/plugin-proposal-optional-catch-binding": "^7.14.5", + "@babel/plugin-proposal-optional-chaining": "^7.14.5", + "@babel/plugin-proposal-private-methods": "^7.14.5", + "@babel/plugin-proposal-private-property-in-object": "^7.14.5", + "@babel/plugin-proposal-unicode-property-regex": "^7.14.5", + "@babel/plugin-syntax-async-generators": "^7.8.4", + "@babel/plugin-syntax-class-properties": "^7.12.13", + "@babel/plugin-syntax-class-static-block": "^7.14.5", + "@babel/plugin-syntax-dynamic-import": "^7.8.3", + "@babel/plugin-syntax-export-namespace-from": "^7.8.3", + "@babel/plugin-syntax-json-strings": "^7.8.3", + "@babel/plugin-syntax-logical-assignment-operators": "^7.10.4", + "@babel/plugin-syntax-nullish-coalescing-operator": "^7.8.3", + "@babel/plugin-syntax-numeric-separator": "^7.10.4", + "@babel/plugin-syntax-object-rest-spread": "^7.8.3", + "@babel/plugin-syntax-optional-catch-binding": "^7.8.3", + "@babel/plugin-syntax-optional-chaining": "^7.8.3", + "@babel/plugin-syntax-private-property-in-object": "^7.14.5", + "@babel/plugin-syntax-top-level-await": "^7.14.5", + "@babel/plugin-transform-arrow-functions": "^7.14.5", + "@babel/plugin-transform-async-to-generator": "^7.14.5", + "@babel/plugin-transform-block-scoped-functions": "^7.14.5", + "@babel/plugin-transform-block-scoping": "^7.14.5", + "@babel/plugin-transform-classes": "^7.14.5", + "@babel/plugin-transform-computed-properties": "^7.14.5", + "@babel/plugin-transform-destructuring": "^7.14.7", + "@babel/plugin-transform-dotall-regex": "^7.14.5", + "@babel/plugin-transform-duplicate-keys": "^7.14.5", + "@babel/plugin-transform-exponentiation-operator": "^7.14.5", + "@babel/plugin-transform-for-of": "^7.14.5", + "@babel/plugin-transform-function-name": "^7.14.5", + "@babel/plugin-transform-literals": "^7.14.5", + "@babel/plugin-transform-member-expression-literals": "^7.14.5", + "@babel/plugin-transform-modules-amd": "^7.14.5", + "@babel/plugin-transform-modules-commonjs": "^7.14.5", + "@babel/plugin-transform-modules-systemjs": "^7.14.5", + "@babel/plugin-transform-modules-umd": "^7.14.5", + "@babel/plugin-transform-named-capturing-groups-regex": "^7.14.7", + "@babel/plugin-transform-new-target": "^7.14.5", + "@babel/plugin-transform-object-super": "^7.14.5", + "@babel/plugin-transform-parameters": "^7.14.5", + "@babel/plugin-transform-property-literals": "^7.14.5", + "@babel/plugin-transform-regenerator": "^7.14.5", + "@babel/plugin-transform-reserved-words": "^7.14.5", + "@babel/plugin-transform-shorthand-properties": "^7.14.5", + "@babel/plugin-transform-spread": "^7.14.6", + "@babel/plugin-transform-sticky-regex": "^7.14.5", + "@babel/plugin-transform-template-literals": "^7.14.5", + "@babel/plugin-transform-typeof-symbol": "^7.14.5", + "@babel/plugin-transform-unicode-escapes": "^7.14.5", + "@babel/plugin-transform-unicode-regex": "^7.14.5", + "@babel/preset-modules": "^0.1.4", + "@babel/types": "^7.14.5", + "babel-plugin-polyfill-corejs2": "^0.2.2", + "babel-plugin-polyfill-corejs3": "^0.2.2", + "babel-plugin-polyfill-regenerator": "^0.2.2", + "core-js-compat": "^3.15.0", + "semver": "^6.3.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "@babel/preset-flow": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-flow/-/preset-flow-7.14.5.tgz", + "integrity": "sha512-pP5QEb4qRUSVGzzKx9xqRuHUrM/jEzMqdrZpdMA+oUCRgd5zM1qGr5y5+ZgAL/1tVv1H0dyk5t4SKJntqyiVtg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-flow-strip-types": "^7.14.5" + } + }, + "@babel/preset-modules": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@babel/preset-modules/-/preset-modules-0.1.4.tgz", + "integrity": "sha512-J36NhwnfdzpmH41M1DrnkkgAqhZaqr/NBdPfQ677mLzlaXo+oDiv1deyCDtgAhz8p328otdob0Du7+xgHGZbKg==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.0.0", + "@babel/plugin-proposal-unicode-property-regex": "^7.4.4", + "@babel/plugin-transform-dotall-regex": "^7.4.4", + "@babel/types": "^7.4.4", + "esutils": "^2.0.2" + } + }, + "@babel/preset-react": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/preset-react/-/preset-react-7.14.5.tgz", + "integrity": "sha512-XFxBkjyObLvBaAvkx1Ie95Iaq4S/GUEIrejyrntQ/VCMKUYvKLoyKxOBzJ2kjA3b6rC9/KL6KXfDC2GqvLiNqQ==", + "dev": true, + "requires": { + "@babel/helper-plugin-utils": "^7.14.5", + "@babel/helper-validator-option": "^7.14.5", + "@babel/plugin-transform-react-display-name": "^7.14.5", + "@babel/plugin-transform-react-jsx": "^7.14.5", + "@babel/plugin-transform-react-jsx-development": "^7.14.5", + "@babel/plugin-transform-react-pure-annotations": "^7.14.5" + } + }, + "@babel/preset-stage-0": { + "version": "7.8.3", + "resolved": "https://registry.npmjs.org/@babel/preset-stage-0/-/preset-stage-0-7.8.3.tgz", + "integrity": "sha512-+l6FlG1j73t4wh78W41StbcCz0/9a1/y+vxfnjtHl060kSmcgMfGzK9MEkLvrCOXfhp9RCX+d88sm6rOqxEIEQ==", + "dev": true + }, + "@babel/runtime": { + "version": "7.14.6", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.14.6.tgz", + "integrity": "sha512-/PCB2uJ7oM44tz8YhC4Z/6PeOKXp4K588f+5M3clr1M4zbqztlo0XEfJ2LEzj/FgwfgGcIdl8n7YYjTCI0BYwg==", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@babel/template": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.14.5.tgz", + "integrity": "sha512-6Z3Po85sfxRGachLULUhOmvAaOo7xCvqGQtxINai2mEGPFm6pQ4z5QInFnUrRpfoSV60BnjyF5F3c+15fxFV1g==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/parser": "^7.14.5", + "@babel/types": "^7.14.5" + } + }, + "@babel/traverse": { + "version": "7.14.7", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.14.7.tgz", + "integrity": "sha512-9vDr5NzHu27wgwejuKL7kIOm4bwEtaPQ4Z6cpCmjSuaRqpH/7xc4qcGEscwMqlkwgcXl6MvqoAjZkQ24uSdIZQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.14.5", + "@babel/generator": "^7.14.5", + "@babel/helper-function-name": "^7.14.5", + "@babel/helper-hoist-variables": "^7.14.5", + "@babel/helper-split-export-declaration": "^7.14.5", + "@babel/parser": "^7.14.7", + "@babel/types": "^7.14.5", + "debug": "^4.1.0", + "globals": "^11.1.0" + } + }, + "@babel/types": { + "version": "7.14.5", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.14.5.tgz", + "integrity": "sha512-M/NzBpEL95I5Hh4dwhin5JlE7EzO5PHMAuzjxss3tiOBD46KfQvVedN/3jEPZvdRvtsK2222XfdHogNIttFgcg==", + "dev": true, + "requires": { + "@babel/helper-validator-identifier": "^7.14.5", + "to-fast-properties": "^2.0.0" + } + }, + "@es-joy/jsdoccomment": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.10.7.tgz", + "integrity": "sha512-aNKZEoMESDzOBjKxCWrFuG50mcpMeKVBnBNko4+IZZ5t9zXYs8GT1KB0ZaOq1YUsKumDRc6YII/TQm309MJ0KQ==", + "dev": true, + "requires": { + "comment-parser": "1.2.3", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "1.1.1" + } + }, + "@eslint/eslintrc": { + "version": "0.4.3", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-0.4.3.tgz", + "integrity": "sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.1.1", + "espree": "^7.3.0", + "globals": "^13.9.0", + "ignore": "^4.0.6", + "import-fresh": "^3.2.1", + "js-yaml": "^3.13.1", + "minimatch": "^3.0.4", + "strip-json-comments": "^3.1.1" + }, + "dependencies": { + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + } + } + }, + "@humanwhocodes/config-array": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.5.0.tgz", + "integrity": "sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==", + "dev": true, + "requires": { + "@humanwhocodes/object-schema": "^1.2.0", + "debug": "^4.1.1", + "minimatch": "^3.0.4" + } + }, + "@humanwhocodes/object-schema": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.0.tgz", + "integrity": "sha512-wdppn25U8z/2yiaT6YGquE6X8sSv7hNMWSXYSSU1jGv/yd6XqjXgTDJ8KP4NgjTXfJ3GbRjeeb8RTV7a/VpM+w==", + "dev": true + }, + "@mapbox/gazetteer": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/@mapbox/gazetteer/-/gazetteer-4.0.4.tgz", + "integrity": "sha512-XzOaDedR2EAfjlVApDn+cV6Upi8tsa8J6fBRWHxzmG0ekdC03jvqXkOKPS/P4BkUDyBD6bMLMJ8WH5A0iZNmwQ==", + "dev": true, + "requires": { + "@mapbox/geojsonhint": "^2.2.0" + } + }, + "@mapbox/geojson-rewind": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.1.tgz", + "integrity": "sha512-eL7fMmfTBKjrb+VFHXCGv9Ot0zc3C0U+CwXo1IrP+EPwDczLoXv34Tgq3y+2mPSFNVUXgU42ILWJTC7145KPTA==", + "requires": { + "get-stream": "^6.0.1", + "minimist": "^1.2.5" + } + }, + "@mapbox/geojsonhint": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/geojsonhint/-/geojsonhint-2.2.0.tgz", + "integrity": "sha512-8qQYRB+/2z2JsN5s6D0WAnpo69+3V3nvJsSFLwMB1dsaWz1V4oZeuoje9srbYAxxL8PXCwIywfhYa3GxOkBv5Q==", + "dev": true, + "requires": { + "concat-stream": "^1.6.1", + "jsonlint-lines": "1.7.1", + "minimist": "1.2.0", + "vfile": "^4.0.0", + "vfile-reporter": "^5.1.1" + }, + "dependencies": { + "minimist": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.0.tgz", + "integrity": "sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ=", + "dev": true + } + } + }, + "@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha1-zlblOfg1UrWNENZy6k1vya3HsjQ=" + }, + "@mapbox/mapbox-gl-rtl-text": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-rtl-text/-/mapbox-gl-rtl-text-0.2.3.tgz", + "integrity": "sha512-RaCYfnxULUUUxNwcUimV9C/o2295ktTyLEUzD/+VWkqXqvaVfFcZ5slytGzb2Sd/Jj4MlbxD0DCZbfa6CzcmMw==", + "dev": true + }, + "@mapbox/mapbox-gl-supported": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz", + "integrity": "sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg==" + }, + "@mapbox/mvt-fixtures": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@mapbox/mvt-fixtures/-/mvt-fixtures-3.6.0.tgz", + "integrity": "sha512-YgaODBQdutOcCnOiRJzbJO3lRejuaeuwfYk0XxfVlAi6L+UDXVHzi7NlpAa6GAYGzQm1V1KLk+2Io8+aSv8I+w==", + "dev": true, + "requires": { + "@mapbox/sphericalmercator": "^1.0.5", + "@mapbox/vector-tile": "^1.3.0", + "d3-queue": "^3.0.7", + "pbf": "^3.0.5", + "protocol-buffers-schema": "^3.3.2" + } + }, + "@mapbox/node-pre-gyp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@mapbox/node-pre-gyp/-/node-pre-gyp-1.0.5.tgz", + "integrity": "sha512-4srsKPXWlIxp5Vbqz5uLfBN+du2fJChBoYn/f2h991WLdk7jUvcSk/McVLSv/X+xQIPI8eGD5GjrnygdyHnhPA==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "https-proxy-agent": "^5.0.0", + "make-dir": "^3.1.0", + "node-fetch": "^2.6.1", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "rimraf": "^3.0.2", + "semver": "^7.3.4", + "tar": "^6.1.0" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI=" + }, + "@mapbox/sphericalmercator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz", + "integrity": "sha512-pEsfZyG4OMThlfFQbCte4gegvHUjxXCjz0KZ4Xk8NdOYTQBLflj6U8PL05RPAiuRAMAQNUUKJuL6qYZ5Y4kAWA==", + "dev": true + }, + "@mapbox/tiny-sdf": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-1.2.5.tgz", + "integrity": "sha512-cD8A/zJlm6fdJOk6DqPUV8mcpyJkRz2x2R+/fYcWDYG3oWbG7/L7Yl/WqQ1VZCjnL9OTIMAn6c+BC5Eru4sQEw==" + }, + "@mapbox/unitbezier": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz", + "integrity": "sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4=" + }, + "@mapbox/vector-tile": { + "version": "1.3.1", + "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/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==" + }, + "@mrmlnc/readdir-enhanced": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz", + "integrity": "sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g==", + "dev": true, + "requires": { + "call-me-maybe": "^1.0.1", + "glob-to-regexp": "^0.3.0" + } + }, + "@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + } + } + }, + "@nodelib/fs.stat": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz", + "integrity": "sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw==", + "dev": true + }, + "@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "requires": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + } + }, + "@octokit/auth-token": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.4.5.tgz", + "integrity": "sha512-BpGYsPgJt05M7/L/5FoE1PiAbdxXFZkX/3kDYcsvd1v6UhlnE5e96dTDr0ezX/EFwciQxf3cNV0loipsURU+WA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } + }, + "@octokit/endpoint": { + "version": "6.0.12", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", + "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + } + } + }, + "@octokit/openapi-types": { + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-8.3.0.tgz", + "integrity": "sha512-ZFyQ30tNpoATI7o+Z9MWFUzUgWisB8yduhcky7S4UYsRijgIGSnwUKzPBDGzf/Xkx1DuvUtqzvmuFlDSqPJqmQ==", + "dev": true + }, + "@octokit/plugin-paginate-rest": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz", + "integrity": "sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/plugin-request-log": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", + "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", + "dev": true + }, + "@octokit/plugin-rest-endpoint-methods": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz", + "integrity": "sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.1", + "deprecation": "^2.3.1" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/request": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.0.tgz", + "integrity": "sha512-4cPp/N+NqmaGQwbh3vUsYqokQIzt7VjsgTYVXiwpUP2pxd5YiZB2XuTedbb0SPtv9XS7nzAKjAuQxmY8/aZkiA==", + "dev": true, + "requires": { + "@octokit/endpoint": "^6.0.1", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.1", + "universal-user-agent": "^6.0.0" + }, + "dependencies": { + "@octokit/request-error": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", + "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "deprecation": "^2.0.0", + "once": "^1.4.0" + } + }, + "universal-user-agent": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", + "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", + "dev": true + } + } + }, + "@octokit/request-error": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-1.2.1.tgz", + "integrity": "sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA==", + "dev": true, + "requires": { + "@octokit/types": "^2.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" + }, + "dependencies": { + "@octokit/types": { + "version": "2.16.2", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-2.16.2.tgz", + "integrity": "sha512-O75k56TYvJ8WpAakWwYRN8Bgu60KrmX0z1KqFp1kNiFNkgW+JW+9EBKZ+S33PU6SLvbihqd+3drvPxKK68Ee8Q==", + "dev": true, + "requires": { + "@types/node": ">= 8" + } + } + } + }, + "@octokit/rest": { + "version": "16.43.2", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-16.43.2.tgz", + "integrity": "sha512-ngDBevLbBTFfrHZeiS7SAMAZ6ssuVmXuya+F/7RaVvlysgGa1JKJkKWY+jV6TCJYcW0OALfJ7nTIGXcBXzycfQ==", + "dev": true, + "requires": { + "@octokit/auth-token": "^2.4.0", + "@octokit/plugin-paginate-rest": "^1.1.1", + "@octokit/plugin-request-log": "^1.0.0", + "@octokit/plugin-rest-endpoint-methods": "2.4.0", + "@octokit/request": "^5.2.0", + "@octokit/request-error": "^1.0.2", + "atob-lite": "^2.0.0", + "before-after-hook": "^2.0.0", + "btoa-lite": "^1.0.0", + "deprecation": "^2.0.0", + "lodash.get": "^4.4.2", + "lodash.set": "^4.3.2", + "lodash.uniq": "^4.5.0", + "octokit-pagination-methods": "^1.1.0", + "once": "^1.4.0", + "universal-user-agent": "^4.0.0" + } + }, + "@octokit/types": { + "version": "6.19.0", + "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.19.0.tgz", + "integrity": "sha512-9wdZFiJfonDyU6DjIgDHxAIn92vdSUBOwAXbO2F9rOFt6DJwuAkyGLu1CvdJPphCbPBoV9iSDMX7y4fu0v6AtA==", + "dev": true, + "requires": { + "@octokit/openapi-types": "^8.3.0" + } + }, + "@rollup/plugin-commonjs": { + "version": "20.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-20.0.0.tgz", + "integrity": "sha512-5K0g5W2Ol8hAcTHqcTBHiA7M58tfmYi1o9KxeJuuRNpGaTa5iLjcyemBitCBcKXaHamOBBEH2dGom6v6Unmqjg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "commondir": "^1.0.1", + "estree-walker": "^2.0.1", + "glob": "^7.1.6", + "is-reference": "^1.2.1", + "magic-string": "^0.25.7", + "resolve": "^1.17.0" + }, + "dependencies": { + "estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + } + } + }, + "@rollup/plugin-json": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-4.1.0.tgz", + "integrity": "sha512-yfLbTdNS6amI/2OpmbiBoW12vngr5NW2jCJVZSBEz+H5KfUJZ2M7sDjk0U6GOOdCWFVScShte29o9NezJ53TPw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.8" + } + }, + "@rollup/plugin-node-resolve": { + "version": "13.0.4", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-13.0.4.tgz", + "integrity": "sha512-eYq4TFy40O8hjeDs+sIxEH/jc9lyuI2k9DM557WN6rO5OpnC2qXMBNj4IKH1oHrnAazL49C5p0tgP0/VpqJ+/w==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "@types/resolve": "1.17.1", + "builtin-modules": "^3.1.0", + "deepmerge": "^4.2.2", + "is-module": "^1.0.0", + "resolve": "^1.19.0" + }, + "dependencies": { + "@types/resolve": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", + "dev": true, + "requires": { + "@types/node": "*" + } + } + } + }, + "@rollup/plugin-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-3.0.0.tgz", + "integrity": "sha512-3c7JCbMuYXM4PbPWT4+m/4Y6U60SgsnDT/cCyAyUKwFHg7pTSfsSQzIpETha3a3ig6OdOKzZz87D9ZXIK3qsDg==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.1.0", + "magic-string": "^0.25.7" + } + }, + "@rollup/plugin-strip": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-strip/-/plugin-strip-1.3.3.tgz", + "integrity": "sha512-jBZYNi9Wa5lSv8wXUepgqLFcv5PMJiP2VcWSIqjAzYOwZiQA09e3vwtar9EYHSYfIONyc1hG0IkSDz2VvGBZcA==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.4", + "estree-walker": "^1.0.1", + "magic-string": "^0.25.5" + } + }, + "@rollup/pluginutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", + "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "estree-walker": "^1.0.1", + "picomatch": "^2.2.2" + } + }, + "@sinonjs/commons": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-1.8.3.tgz", + "integrity": "sha512-xkNcLAn/wZaX14RPlwizcKicDk9G3F8m2nU3L7Ukm5zBgTwiT0wsoFAHx9Jq56fJA1z/7uKGtCRu16sOUCLIHQ==", + "dev": true, + "requires": { + "type-detect": "4.0.8" + } + }, + "@sinonjs/formatio": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@sinonjs/formatio/-/formatio-3.2.2.tgz", + "integrity": "sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1", + "@sinonjs/samsam": "^3.1.0" + } + }, + "@sinonjs/samsam": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/@sinonjs/samsam/-/samsam-3.3.3.tgz", + "integrity": "sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.3.0", + "array-from": "^2.1.1", + "lodash": "^4.17.15" + } + }, + "@sinonjs/text-encoding": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz", + "integrity": "sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ==", + "dev": true + }, + "@types/babel-core": { + "version": "6.25.7", + "resolved": "https://registry.npmjs.org/@types/babel-core/-/babel-core-6.25.7.tgz", + "integrity": "sha512-WPnyzNFVRo6bxpr7bcL27qXtNKNQ3iToziNBpibaXHyKGWQA0+tTLt73QQxC/5zzbM544ih6Ni5L5xrck6rGwg==", + "dev": true, + "requires": { + "@types/babel-generator": "*", + "@types/babel-template": "*", + "@types/babel-traverse": "*", + "@types/babel-types": "*", + "@types/babylon": "*" + } + }, + "@types/babel-generator": { + "version": "6.25.4", + "resolved": "https://registry.npmjs.org/@types/babel-generator/-/babel-generator-6.25.4.tgz", + "integrity": "sha512-Rnsen+ckop5mbl9d43bempS7i9wdTN1vytiTlmQla/YiNm6kH8kEVABVSXmp1UbnpkUV44nUCPeDQoa+Mu7ALA==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/babel-template": { + "version": "6.25.2", + "resolved": "https://registry.npmjs.org/@types/babel-template/-/babel-template-6.25.2.tgz", + "integrity": "sha512-QKtDQRJmAz3Y1HSxfMl0syIHebMc/NnOeH/8qeD0zjgU2juD0uyC922biMxCy5xjTNvHinigML2l8kxE8eEBmw==", + "dev": true, + "requires": { + "@types/babel-types": "*", + "@types/babylon": "*" + } + }, + "@types/babel-traverse": { + "version": "6.25.6", + "resolved": "https://registry.npmjs.org/@types/babel-traverse/-/babel-traverse-6.25.6.tgz", + "integrity": "sha512-kPGq7V3SP3sipa2ddQBKa0cIA5ji4vInn15rYRt9c0FRT+4Mo6TcbfRZTF/7TnPC8RgTJT0FE+LftqK1iV+0SA==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/babel-types": { + "version": "7.0.10", + "resolved": "https://registry.npmjs.org/@types/babel-types/-/babel-types-7.0.10.tgz", + "integrity": "sha512-g7zrcqL4MiRu3jZzdZZYk0g0KcKk2fddXazSdP1PacEpmjihRsNGU50aaEKnPFuKzfN7WkRktUiCXvs4zU9XXQ==", + "dev": true + }, + "@types/babel__core": { + "version": "7.1.15", + "resolved": "https://registry.npmjs.org/@types/babel__core/-/babel__core-7.1.15.tgz", + "integrity": "sha512-bxlMKPDbY8x5h6HBwVzEOk2C8fb6SLfYQ5Jw3uBYuYF1lfWk/kbLd81la82vrIkBb0l+JdmrZaDikPrNxpS/Ew==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0", + "@types/babel__generator": "*", + "@types/babel__template": "*", + "@types/babel__traverse": "*" + } + }, + "@types/babel__generator": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/@types/babel__generator/-/babel__generator-7.6.3.tgz", + "integrity": "sha512-/GWCmzJWqV7diQW54smJZzWbSFf4QYtF71WCKhcx6Ru/tFyQIY2eiiITcCAeuPbNSvT9YCGkVMqqvSk2Z0mXiA==", + "dev": true, + "requires": { + "@babel/types": "^7.0.0" + } + }, + "@types/babel__template": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/@types/babel__template/-/babel__template-7.4.1.tgz", + "integrity": "sha512-azBFKemX6kMg5Io+/rdGT0dkGreboUVR0Cdm3fz9QJWpaQGJRQXl7C+6hOTCZcMll7KFyEQpgbYI2lHdsS4U7g==", + "dev": true, + "requires": { + "@babel/parser": "^7.1.0", + "@babel/types": "^7.0.0" + } + }, + "@types/babel__traverse": { + "version": "7.14.2", + "resolved": "https://registry.npmjs.org/@types/babel__traverse/-/babel__traverse-7.14.2.tgz", + "integrity": "sha512-K2waXdXBi2302XUdcHcR1jCeU0LL4TD9HRs/gk0N2Xvrht+G/BfJa4QObBQZfhMdxiCpV3COl5Nfq4uKTeTnJA==", + "dev": true, + "requires": { + "@babel/types": "^7.3.0" + } + }, + "@types/babelify": { + "version": "7.3.7", + "resolved": "https://registry.npmjs.org/@types/babelify/-/babelify-7.3.7.tgz", + "integrity": "sha512-OjGe1SBi3M7I/uk5+x4mNhVNymJNyK4RqeStCL5U/H2pB+K1FhC0PYbLJiPTyZpWs/8eVmQJKWoF4hGgqIdYhA==", + "dev": true, + "requires": { + "@types/babel-core": "*", + "@types/node": "*" + } + }, + "@types/babylon": { + "version": "6.16.6", + "resolved": "https://registry.npmjs.org/@types/babylon/-/babylon-6.16.6.tgz", + "integrity": "sha512-G4yqdVlhr6YhzLXFKy5F7HtRBU8Y23+iWy7UKthMq/OSQnL1hbsoeXESQ2LY8zEDlknipDG3nRGhUC9tkwvy/w==", + "dev": true, + "requires": { + "@types/babel-types": "*" + } + }, + "@types/benchmark": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/benchmark/-/benchmark-2.1.1.tgz", + "integrity": "sha512-XmdNOarpSSxnb3DE2rRFOFsEyoqXLUL+7H8nSGS25vs+JS0018bd+cW5Ma9vdlkPmoTHSQ6e8EUFMFMxeE4l+g==", + "dev": true + }, + "@types/browserify": { + "version": "12.0.37", + "resolved": "https://registry.npmjs.org/@types/browserify/-/browserify-12.0.37.tgz", + "integrity": "sha512-rGVZQhqlBMdnU0Wcq/RDO6+I1tppM42SqVq5ZEXiw2ft/A55Ro+dz4aKTy28gniwOIxZhRFqb5N+qnbg7J040g==", + "dev": true, + "requires": { + "@types/insert-module-globals": "*", + "@types/node": "*" + } + }, + "@types/caseless": { + "version": "0.12.2", + "resolved": "https://registry.npmjs.org/@types/caseless/-/caseless-0.12.2.tgz", + "integrity": "sha512-6ckxMjBBD8URvjB6J3NcnuAn5Pkl7t3TizAg+xdlzzQGSPSmBcXf8KoIH0ua/i+tio+ZRUHEXp0HEmvaR4kt0w==", + "dev": true + }, + "@types/component-emitter": { + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/@types/component-emitter/-/component-emitter-1.2.10.tgz", + "integrity": "sha512-bsjleuRKWmGqajMerkzox19aGbscQX5rmmvvXl3wlIp5gMG1HgkiwPxsN5p070fBDKTNSPgojVbuY1+HWMbFhg==", + "dev": true + }, + "@types/cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-XW/Aa8APYr6jSVVA1y/DEIZX0/GMKLEVekNG727R8cs56ahETkRAy/3DR7+fJyh7oUgGwNQaRfXCun0+KbWY7Q==", + "dev": true + }, + "@types/cors": { + "version": "2.8.12", + "resolved": "https://registry.npmjs.org/@types/cors/-/cors-2.8.12.tgz", + "integrity": "sha512-vt+kDhq/M2ayberEtJcIN/hxXy1Pk+59g2FV/ZQceeaTyCtCucjL2Q7FXlFjtWn4n15KCr1NE2lNNFhp0lEThw==", + "dev": true + }, + "@types/cssnano": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/cssnano/-/cssnano-4.0.1.tgz", + "integrity": "sha512-hGOroxRTBkYl5gSBRJOffhV4+io+Y2bFX1VP7LgKEVHJt/LPPJaWUIuDAz74Vlp7l7hCDZfaDi7iPxwNwuVA4Q==", + "dev": true, + "requires": { + "postcss": "5 - 7" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "@types/d3": { + "version": "4.13.12", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-4.13.12.tgz", + "integrity": "sha512-/bbFtkOBc04gGGN8N9rMG5ps3T0eIj5I8bnYe9iIyeM5qoOrydPCbFYlEPUnj2h9ibc2i+QZfDam9jY5XTrTxQ==", + "dev": true, + "requires": { + "@types/d3-array": "^1", + "@types/d3-axis": "^1", + "@types/d3-brush": "^1", + "@types/d3-chord": "^1", + "@types/d3-collection": "*", + "@types/d3-color": "^1", + "@types/d3-dispatch": "^1", + "@types/d3-drag": "^1", + "@types/d3-dsv": "^1", + "@types/d3-ease": "^1", + "@types/d3-force": "^1", + "@types/d3-format": "^1", + "@types/d3-geo": "^1", + "@types/d3-hierarchy": "^1", + "@types/d3-interpolate": "^1", + "@types/d3-path": "^1", + "@types/d3-polygon": "^1", + "@types/d3-quadtree": "^1", + "@types/d3-queue": "*", + "@types/d3-random": "^1", + "@types/d3-request": "*", + "@types/d3-scale": "^1", + "@types/d3-selection": "^1", + "@types/d3-shape": "^1", + "@types/d3-time": "^1", + "@types/d3-time-format": "^2", + "@types/d3-timer": "^1", + "@types/d3-transition": "^1", + "@types/d3-voronoi": "*", + "@types/d3-zoom": "^1" + } + }, + "@types/d3-array": { + "version": "1.2.9", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-1.2.9.tgz", + "integrity": "sha512-E/7RgPr2ylT5dWG0CswMi9NpFcjIEDqLcUSBgNHe/EMahfqYaTx4zhcggG3khqoEB/leY4Vl6nTSbwLUPjXceA==", + "dev": true + }, + "@types/d3-axis": { + "version": "1.0.16", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-1.0.16.tgz", + "integrity": "sha512-p7085weOmo4W+DzlRRVC/7OI/jugaKbVa6WMQGCQscaMylcbuaVEGk7abJLNyGVFLeCBNrHTdDiqRGnzvL0nXQ==", + "dev": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-brush": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-1.1.5.tgz", + "integrity": "sha512-4zGkBafJf5zCsBtLtvDj/pNMo5X9+Ii/1hUz0GvQ+wEwelUBm2AbIDAzJnp2hLDFF307o0fhxmmocHclhXC+tw==", + "dev": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-chord": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-1.0.11.tgz", + "integrity": "sha512-0DdfJ//bxyW3G9Nefwq/LDgazSKNN8NU0lBT3Cza6uVuInC2awMNsAcv1oKyRFLn9z7kXClH5XjwpveZjuz2eg==", + "dev": true + }, + "@types/d3-collection": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-collection/-/d3-collection-1.0.10.tgz", + "integrity": "sha512-54Fdv8u5JbuXymtmXm2SYzi1x/Svt+jfWBU5junkhrCewL92VjqtCBDn97coBRVwVFmYNnVTNDyV8gQyPYfm+A==", + "dev": true + }, + "@types/d3-color": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-1.4.2.tgz", + "integrity": "sha512-fYtiVLBYy7VQX+Kx7wU/uOIkGQn8aAEY8oWMoyja3N4dLd8Yf6XgSIR/4yWvMuveNOH5VShnqCgRqqh/UNanBA==", + "dev": true + }, + "@types/d3-dispatch": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-1.0.9.tgz", + "integrity": "sha512-zJ44YgjqALmyps+II7b1mZLhrtfV/FOxw9owT87mrweGWcg+WK5oiJX2M3SYJ0XUAExBduarysfgbR11YxzojQ==", + "dev": true + }, + "@types/d3-drag": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-1.2.5.tgz", + "integrity": "sha512-7NeTnfolst1Js3Vs7myctBkmJWu6DMI3k597AaHUX98saHjHWJ6vouT83UrpE+xfbSceHV+8A0JgxuwgqgmqWw==", + "dev": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-dsv": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-1.2.1.tgz", + "integrity": "sha512-LLmJmjiqp/fTNEdij5bIwUJ6P6TVNk5hKM9/uk5RPO2YNgEu9XvKO0dJ7Iqd3psEdmZN1m7gB1bOsjr4HmO2BA==", + "dev": true + }, + "@types/d3-ease": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-1.0.10.tgz", + "integrity": "sha512-fMFTCzd8DOwruE9zlu2O8ci5ct+U5jkGcDS+cH+HCidnJlDs0MZ+TuSVCFtEzh4E5MasItwy+HvgoFtxPHa5Cw==", + "dev": true + }, + "@types/d3-force": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-1.2.4.tgz", + "integrity": "sha512-fkorLTKvt6AQbFBQwn4aq7h9rJ4c7ZVcPMGB8X6eFFveAyMZcv7t7m6wgF4Eg93rkPgPORU7sAho1QSHNcZu6w==", + "dev": true + }, + "@types/d3-format": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-1.4.2.tgz", + "integrity": "sha512-WeGCHAs7PHdZYq6lwl/+jsl+Nfc1J2W1kNcMeIMYzQsT6mtBDBgtJ/rcdjZ0k0rVIvqEZqhhuD5TK/v3P2gFHQ==", + "dev": true + }, + "@types/d3-geo": { + "version": "1.12.3", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-1.12.3.tgz", + "integrity": "sha512-yZbPb7/5DyL/pXkeOmZ7L5ySpuGr4H48t1cuALjnJy5sXQqmSSAYBiwa6Ya/XpWKX2rJqGDDubmh3nOaopOpeA==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/d3-hierarchy": { + "version": "1.1.8", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-1.1.8.tgz", + "integrity": "sha512-AbStKxNyWiMDQPGDguG2Kuhlq1Sv539pZSxYbx4UZeYkutpPwXCcgyiRrlV4YH64nIOsKx7XVnOMy9O7rJsXkg==", + "dev": true + }, + "@types/d3-interpolate": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-1.4.2.tgz", + "integrity": "sha512-ylycts6llFf8yAEs1tXzx2loxxzDZHseuhPokrqKprTQSTcD3JbJI1omZP1rphsELZO3Q+of3ff0ZS7+O6yVzg==", + "dev": true, + "requires": { + "@types/d3-color": "^1" + } + }, + "@types/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-NaIeSIBiFgSC6IGUBjZWcscUJEq7vpVu7KthHN8eieTV9d9MqkSOZLH4chq1PmcKy06PNe3axLeKmRIyxJ+PZQ==", + "dev": true + }, + "@types/d3-polygon": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-1.0.8.tgz", + "integrity": "sha512-1TOJPXCBJC9V3+K3tGbTqD/CsqLyv/YkTXAcwdsZzxqw5cvpdnCuDl42M4Dvi8XzMxZNCT9pL4ibrK2n4VmAcw==", + "dev": true + }, + "@types/d3-quadtree": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-1.0.9.tgz", + "integrity": "sha512-5E0OJJn2QVavITFEc1AQlI8gLcIoDZcTKOD3feKFckQVmFV4CXhqRFt83tYNVNIN4ZzRkjlAMavJa1ldMhf5rA==", + "dev": true + }, + "@types/d3-queue": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-queue/-/d3-queue-3.0.8.tgz", + "integrity": "sha512-1FWOiI/MYwS5Z1Sa9EvS1Xet3isiVIIX5ozD6iGnwHonGcqL+RcC1eThXN5VfDmAiYt9Me9EWNEv/9J9k9RIKQ==", + "dev": true + }, + "@types/d3-random": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-1.1.3.tgz", + "integrity": "sha512-XXR+ZbFCoOd4peXSMYJzwk0/elP37WWAzS/DG+90eilzVbUSsgKhBcWqylGWe+lA2ubgr7afWAOBaBxRgMUrBQ==", + "dev": true + }, + "@types/d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-4nRKDUBg3EBx8VowpMvM3NAVMiMMI1qFUOYv3OJsclGjHX6xjtu09nsWhRQ0fvSUla3MEjb5Ch4IeaYarMEi1w==", + "dev": true, + "requires": { + "@types/d3-dsv": "^1" + } + }, + "@types/d3-scale": { + "version": "1.0.17", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-1.0.17.tgz", + "integrity": "sha512-baIP5/gw+PS8Axs1lfZCeIjcOXen/jxQmgFEjbYThwaj2drvivOIrJMh2Ig4MeenrogCH6zkhiOxCPRkvN1scA==", + "dev": true, + "requires": { + "@types/d3-time": "^1" + } + }, + "@types/d3-selection": { + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-1.4.3.tgz", + "integrity": "sha512-GjKQWVZO6Sa96HiKO6R93VBE8DUW+DDkFpIMf9vpY5S78qZTlRRSNUsHr/afDpF7TvLDV7VxrUFOWW7vdIlYkA==", + "dev": true + }, + "@types/d3-shape": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-1.3.8.tgz", + "integrity": "sha512-gqfnMz6Fd5H6GOLYixOZP/xlrMtJms9BaS+6oWxTKHNqPGZ93BkWWupQSCYm6YHqx6h9wjRupuJb90bun6ZaYg==", + "dev": true, + "requires": { + "@types/d3-path": "^1" + } + }, + "@types/d3-time": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-1.1.1.tgz", + "integrity": "sha512-ULX7LoqXTCYtM+tLYOaeAJK7IwCT+4Gxlm2MaH0ErKLi07R5lh8NHCAyWcDkCCmx1AfRcBEV6H9QE9R25uP7jw==", + "dev": true + }, + "@types/d3-time-format": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-2.3.1.tgz", + "integrity": "sha512-fck0Z9RGfIQn3GJIEKVrp15h9m6Vlg0d5XXeiE/6+CQiBmMDZxfR21XtjEPuDeg7gC3bBM0SdieA5XF3GW1wKA==", + "dev": true + }, + "@types/d3-timer": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-1.0.10.tgz", + "integrity": "sha512-ZnAbquVqy+4ZjdW0cY6URp+qF/AzTVNda2jYyOzpR2cPT35FTXl78s15Bomph9+ckOiI1TtkljnWkwbIGAb6rg==", + "dev": true + }, + "@types/d3-transition": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-1.3.2.tgz", + "integrity": "sha512-J+a3SuF/E7wXbOSN19p8ZieQSFIm5hU2Egqtndbc54LXaAEOpLfDx4sBu/PKAKzHOdgKK1wkMhINKqNh4aoZAg==", + "dev": true, + "requires": { + "@types/d3-selection": "^1" + } + }, + "@types/d3-voronoi": { + "version": "1.1.9", + "resolved": "https://registry.npmjs.org/@types/d3-voronoi/-/d3-voronoi-1.1.9.tgz", + "integrity": "sha512-DExNQkaHd1F3dFPvGA/Aw2NGyjMln6E9QzsiqOcBgnE+VInYnFBHBBySbZQts6z6xD+5jTfKCP7M4OqMyVjdwQ==", + "dev": true + }, + "@types/d3-zoom": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-1.8.3.tgz", + "integrity": "sha512-3kHkL6sPiDdbfGhzlp5gIHyu3kULhtnHTTAl3UBZVtWB1PzcLL8vdmz5mTx7plLiUqOA2Y+yT2GKjt/TdA2p7Q==", + "dev": true, + "requires": { + "@types/d3-interpolate": "^1", + "@types/d3-selection": "^1" + } + }, + "@types/diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@types/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-mIenTfsIe586/yzsyfql69KRnA75S8SVXQbTLpDejRrjH0QSJcpu3AUOi/Vjnt9IOsXKxPhJfGpQUNMueIU1fQ==", + "dev": true + }, + "@types/earcut": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/@types/earcut/-/earcut-2.1.1.tgz", + "integrity": "sha512-w8oigUCDjElRHRRrMvn/spybSMyX8MTkKA5Dv+tS1IE/TgmNZPqUYtvYBXGY8cieSE66gm+szeK+bnbxC2xHTQ==", + "dev": true + }, + "@types/ejs": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@types/ejs/-/ejs-2.7.0.tgz", + "integrity": "sha512-kM2g9Fdk/du24fKuuQhA/LBleFR4Z4JP2MVKpLxQQSzofF1uJ06D+c05zfLDAkkDO55aEeNwJih0gHrE/Ci20A==", + "dev": true + }, + "@types/eslint": { + "version": "7.28.0", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-7.28.0.tgz", + "integrity": "sha512-07XlgzX0YJUn4iG1ocY4IX9DzKSmMGUs6ESKlxWhZRaa0fatIWaHWUVapcuGa8r5HFnTqzj+4OCjd5f7EZ/i/A==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "0.0.39", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", + "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", + "dev": true + }, + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==", + "dev": true + }, + "@types/gl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@types/gl/-/gl-4.1.0.tgz", + "integrity": "sha512-XdyM2/Q+XAsdw69t23YD812fY3KDw9dYmULZTOGMFM2tLaweBtcVzUnOwsMzF7i0dvFDL0GnawYwEq/+hvUZtw==", + "dev": true + }, + "@types/glob": { + "version": "7.1.4", + "resolved": "https://registry.npmjs.org/@types/glob/-/glob-7.1.4.tgz", + "integrity": "sha512-w+LsMxKyYQm347Otw+IfBXOv9UWVjpHpCDdbBMt8Kz/xbvCYNjP+0qPh91Km3iKfSRLBB0P7fAMf0KHrPu+MyA==", + "dev": true, + "requires": { + "@types/minimatch": "*", + "@types/node": "*" + } + }, + "@types/insert-module-globals": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/@types/insert-module-globals/-/insert-module-globals-7.0.2.tgz", + "integrity": "sha512-b+XCUBUioZoveg4e8+D/wGVIvQcuV6TNHPy53aeY0YBydOOZhAtX2Sdr4x97uWKKy9Xrt0SUKsPxbT9e0u/x9Q==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/jsdom": { + "version": "16.2.13", + "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-16.2.13.tgz", + "integrity": "sha512-8JQCjdeAidptSsOcRWk2iTm9wCcwn9l+kRG6k5bzUacrnm1ezV4forq0kWjUih/tumAeoG+OspOvQEbbRucBTw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/parse5": "*", + "@types/tough-cookie": "*" + } + }, + "@types/json-schema": { + "version": "7.0.8", + "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.8.tgz", + "integrity": "sha512-YSBPTLTVm2e2OoQIDYx8HaeWJ5tTToLH67kXR7zYNGupXMEHa2++G8k+DczX2cFVgalypqtyZIcU19AFcmOpmg==", + "dev": true + }, + "@types/jsonwebtoken": { + "version": "8.5.4", + "resolved": "https://registry.npmjs.org/@types/jsonwebtoken/-/jsonwebtoken-8.5.4.tgz", + "integrity": "sha512-4L8msWK31oXwdtC81RmRBAULd0ShnAHjBuKT9MRQpjP0piNrZdXyTRcKY9/UIfhGeKIT4PvF5amOOUbbT/9Wpg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/lodash": { + "version": "4.14.171", + "resolved": "https://registry.npmjs.org/@types/lodash/-/lodash-4.14.171.tgz", + "integrity": "sha512-7eQ2xYLLI/LsicL2nejW9Wyko3lcpN6O/z0ZLHrEQsg280zIdCv1t/0m6UtBjUHokCGBQ3gYTbHzDkZ1xOBwwg==", + "dev": true + }, + "@types/lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/@types/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-4LgHxK16IPbGR7TmXpPvNT7iNGsLCdQY6Rc0mi1a/JECt8et/D4hx6NMVAJej/d932sj1mJsg0QYHKL189O0Qw==", + "dev": true, + "requires": { + "@types/lodash": "*" + } + }, + "@types/minimatch": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz", + "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", + "dev": true + }, + "@types/minimist": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", + "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", + "dev": true + }, + "@types/murmurhash-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@types/murmurhash-js/-/murmurhash-js-1.0.3.tgz", + "integrity": "sha512-PxJwTlcFOBRPqv9pSoC3O1FpKN8GnM5hMJIkG6U3omH8b4GAh28fO1c+TMR4oxj0BG43/ICbrIK3KBfzad2heg==", + "dev": true + }, + "@types/node": { + "version": "16.3.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-16.3.3.tgz", + "integrity": "sha512-8h7k1YgQKxKXWckzFCMfsIwn0Y61UK6tlD6y2lOb3hTOIMlK3t9/QwHOhc81TwU+RMf0As5fj7NPjroERCnejQ==", + "dev": true + }, + "@types/node-notifier": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/@types/node-notifier/-/node-notifier-8.0.1.tgz", + "integrity": "sha512-oEaec3j6vw1u0xT/rEniM0yarkV5dZsZvjgTX3IlgekpjDGlv8EGD+Pnpbt3D9IMkoosprPeRtvYc/1t9XBduw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/npm-packlist": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@types/npm-packlist/-/npm-packlist-1.1.2.tgz", + "integrity": "sha512-9NYoEH87t90e6dkaQOuUTY/R1xUE0a67sXzJBuAB+b+/z4FysHFD19g/O154ToGjyWqKYkezVUtuBdtfd4hyfw==", + "dev": true + }, + "@types/parse5": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@types/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-ARATsLdrGPUnaBvxLhUlnltcMgn7pQG312S8ccdYlnyijabrX9RN/KN/iGj9Am96CoW8e/K9628BA7Bv4XHdrA==", + "dev": true + }, + "@types/pbf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.2.tgz", + "integrity": "sha512-EDrLIPaPXOZqDjrkzxxbX7UlJSeQVgah3i0aA4pOSzmK9zq3BIh7/MZIQxED7slJByvKM4Gc6Hypyu2lJzh3SQ==", + "dev": true + }, + "@types/pixelmatch": { + "version": "5.2.4", + "resolved": "https://registry.npmjs.org/@types/pixelmatch/-/pixelmatch-5.2.4.tgz", + "integrity": "sha512-HDaSHIAv9kwpMN7zlmwfTv6gax0PiporJOipcrGsVNF3Ba+kryOZc0Pio5pn6NhisgWr7TaajlPEKTbTAypIBQ==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/pngjs": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/@types/pngjs/-/pngjs-3.4.2.tgz", + "integrity": "sha512-LJVPDraJ5YFEnMHnzxTN4psdWz1M61MtaAAWPn3qnDk5fvs7BAmmQ9pd3KPlrdrvozMyne4ktanD4pg0L7x1Pw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/prop-types": { + "version": "15.7.4", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.4.tgz", + "integrity": "sha512-rZ5drC/jWjrArrS8BR6SIr4cWpW09RNTYt9AMZo3Jwwif+iacXAqgVjm0B0Bv/S1jhDXKHqRVNCbACkJ89RAnQ==", + "dev": true + }, + "@types/puppeteer": { + "version": "1.20.8", + "resolved": "https://registry.npmjs.org/@types/puppeteer/-/puppeteer-1.20.8.tgz", + "integrity": "sha512-yJZzz9NeEmTxRGaZzUxUtBIEAoVXTtAx40mG8K0eDPwEeWyuxXKC7Lredxs6uNcgbvMDc8xzYy4v54jbbpoqrg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/q": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@types/q/-/q-1.5.5.tgz", + "integrity": "sha512-L28j2FcJfSZOnL1WBjDYp2vUHCeIFlyYI/53EwD/rKUBQ7MtUUfbQWiyKJGpcnv4/WgrhWsFKrcPstcAt/J0tQ==", + "dev": true + }, + "@types/react": { + "version": "16.14.11", + "resolved": "https://registry.npmjs.org/@types/react/-/react-16.14.11.tgz", + "integrity": "sha512-Don0MtsZZ3fjwTJ2BsoqkyOy7e176KplEAKOpr/4XDdzinlyJBn9yfsKn5mcSgn4kh1B22+3tBnzBC1z63ybtQ==", + "dev": true, + "requires": { + "@types/prop-types": "*", + "@types/scheduler": "*", + "csstype": "^3.0.2" + } + }, + "@types/react-dom": { + "version": "16.9.14", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-16.9.14.tgz", + "integrity": "sha512-FIX2AVmPTGP30OUJ+0vadeIFJJ07Mh1m+U0rxfgyW34p3rTlXI+nlenvAxNn4BP36YyI9IJ/+UJ7Wu22N1pI7A==", + "dev": true, + "requires": { + "@types/react": "^16" + } + }, + "@types/request": { + "version": "2.48.6", + "resolved": "https://registry.npmjs.org/@types/request/-/request-2.48.6.tgz", + "integrity": "sha512-vrZaV3Ij7j/l/3hz6OttZFtpRCu7zlq7XgkYHJP6FwVEAZkGQ095WqyJV08/GlW9eyXKVcp/xmtruHm8eHpw1g==", + "dev": true, + "requires": { + "@types/caseless": "*", + "@types/node": "*", + "@types/tough-cookie": "*", + "form-data": "^2.5.0" + }, + "dependencies": { + "form-data": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.5.1.tgz", + "integrity": "sha512-m21N3WOmEEURgk6B9GLOE4RuWOFf28Lhh9qGYeNlGq4VDXUlJy2th2slBNU8Gp8EzloYZOibZJ7t5ecIrFSjVA==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + } + } + }, + "@types/rollup-plugin-json": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/rollup-plugin-json/-/rollup-plugin-json-3.0.3.tgz", + "integrity": "sha512-5Y5fTYRCXS1llyLzQ3X1XhDRpw/31jkfWOMpDRgz000d9ABOsdLWDg/f6mqwT8BKGYV/+6tje4uGQnuebuk7dg==", + "dev": true, + "requires": { + "@types/node": "*", + "rollup": "^0.63.4" + }, + "dependencies": { + "rollup": { + "version": "0.63.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.63.5.tgz", + "integrity": "sha512-dFf8LpUNzIj3oE0vCvobX6rqOzHzLBoblyFp+3znPbjiSmSvOoK2kMKx+Fv9jYduG1rvcCfCveSgEaQHjWRF6g==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + } + } + }, + "@types/rollup-plugin-sourcemaps": { + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@types/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz", + "integrity": "sha512-dqF1rMFy4O8yNlQYwYPos5Cfav0f6M7PLH8B33gsslQ0zA9MX1jMGokwNuJ3Z3EXAzsKF/xAWNHpFmELcgYJww==", + "dev": true, + "requires": { + "@types/node": "*", + "rollup": "^0.63.4" + }, + "dependencies": { + "rollup": { + "version": "0.63.5", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-0.63.5.tgz", + "integrity": "sha512-dFf8LpUNzIj3oE0vCvobX6rqOzHzLBoblyFp+3znPbjiSmSvOoK2kMKx+Fv9jYduG1rvcCfCveSgEaQHjWRF6g==", + "dev": true, + "requires": { + "@types/estree": "0.0.39", + "@types/node": "*" + } + } + } + }, + "@types/scheduler": { + "version": "0.16.2", + "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", + "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", + "dev": true + }, + "@types/selenium-webdriver": { + "version": "4.0.15", + "resolved": "https://registry.npmjs.org/@types/selenium-webdriver/-/selenium-webdriver-4.0.15.tgz", + "integrity": "sha512-5760PIZkzhPejy3hsKAdCKe5LJygGdxLKOLxmZL9GEUcFlO5OgzM6G2EbdbvOnaw4xvUSa9Uip6Ipwkih12BPA==", + "dev": true + }, + "@types/shuffle-seed": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@types/shuffle-seed/-/shuffle-seed-1.1.0.tgz", + "integrity": "sha512-h6UW72XuE07bSDVTkNjMMapFj6ERJmvf+RajssOoEIVhuU53/+zyCSBjBrSpDJSzVYjGr4CYxW3ABrY0C6s8qA==", + "dev": true + }, + "@types/sinon": { + "version": "7.5.2", + "resolved": "https://registry.npmjs.org/@types/sinon/-/sinon-7.5.2.tgz", + "integrity": "sha512-T+m89VdXj/eidZyejvmoP9jivXgBDdkOSBVQjU9kF349NEx10QdPNGxHeZUaj1IlJ32/ewdyXJjnJxyxJroYwg==", + "dev": true + }, + "@types/stylelint": { + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/@types/stylelint/-/stylelint-9.10.1.tgz", + "integrity": "sha512-au+n/CjGixNopJmh51GeZSkqf/ahwOBkzcvizHPe3flfwWag0T+/L7uHD0Hjx7ZhmXGFSEwOCqEybD4domcyRw==", + "dev": true, + "requires": { + "postcss": "7.x.x" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "@types/supercluster": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-5.0.3.tgz", + "integrity": "sha512-XMSqQEr7YDuNtFwSgaHHOjsbi0ZGL62V9Js4CW45RBuRYlNWSW/KDqN+RFFE7HdHcGhJPtN0klKvw06r9Kg7rg==", + "dev": true, + "requires": { + "@types/geojson": "*" + } + }, + "@types/tape": { + "version": "4.13.1", + "resolved": "https://registry.npmjs.org/@types/tape/-/tape-4.13.1.tgz", + "integrity": "sha512-p6eHt3Yi7C9o7lpjchpVnfKb3ldFjHR/1sBaQdpuZnjAFtsc2UgsFlu+XKQH2l5pgt98oFcINYNTRAwWbrZjnw==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@types/tough-cookie": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.1.tgz", + "integrity": "sha512-Y0K95ThC3esLEYD6ZuqNek29lNX2EM1qxV8y2FTLUB0ff5wWrk7az+mLrnNFUnaXcgKye22+sFBRXOgpPILZNg==", + "dev": true + }, + "@types/unist": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-2.0.6.tgz", + "integrity": "sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==", + "dev": true + }, + "@types/vfile": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/vfile/-/vfile-3.0.2.tgz", + "integrity": "sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw==", + "dev": true, + "requires": { + "@types/node": "*", + "@types/unist": "*", + "@types/vfile-message": "*" + } + }, + "@types/vfile-message": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@types/vfile-message/-/vfile-message-2.0.0.tgz", + "integrity": "sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw==", + "dev": true, + "requires": { + "vfile-message": "*" + } + }, + "@types/window-or-global": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@types/window-or-global/-/window-or-global-1.0.4.tgz", + "integrity": "sha512-+tJmApNoyWOxINwhTuMD8b9UegcB8HUSoLzBHPKIxq2XMnmUKCwPV2/+n8qkjkabx2diA68hDSAohESC9uC2kg==", + "dev": true, + "requires": { + "@types/node": "*" + } + }, + "@typescript-eslint/eslint-plugin": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-4.29.1.tgz", + "integrity": "sha512-AHqIU+SqZZgBEiWOrtN94ldR3ZUABV5dUG94j8Nms9rQnHFc8fvDOue/58K4CFz6r8OtDDc35Pw9NQPWo0Ayrw==", + "dev": true, + "requires": { + "@typescript-eslint/experimental-utils": "4.29.1", + "@typescript-eslint/scope-manager": "4.29.1", + "debug": "^4.3.1", + "functional-red-black-tree": "^1.0.1", + "regexpp": "^3.1.0", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@typescript-eslint/scope-manager": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", + "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1" + } + }, + "@typescript-eslint/types": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", + "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", + "dev": true + }, + "@typescript-eslint/visitor-keys": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", + "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "@typescript-eslint/experimental-utils": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-4.29.1.tgz", + "integrity": "sha512-kl6QG6qpzZthfd2bzPNSJB2YcZpNOrP6r9jueXupcZHnL74WiuSjaft7WSu17J9+ae9zTlk0KJMXPUj0daBxMw==", + "dev": true, + "requires": { + "@types/json-schema": "^7.0.7", + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", + "eslint-scope": "^5.1.1", + "eslint-utils": "^3.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "@typescript-eslint/scope-manager": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", + "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1" + } + }, + "@typescript-eslint/types": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", + "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz", + "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", + "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "eslint-visitor-keys": "^2.0.0" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@typescript-eslint/parser": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-4.29.1.tgz", + "integrity": "sha512-3fL5iN20hzX3Q4OkG7QEPFjZV2qsVGiDhEwwh+EkmE/w7oteiOvUNzmpu5eSwGJX/anCryONltJ3WDmAzAoCMg==", + "dev": true, + "requires": { + "@typescript-eslint/scope-manager": "4.29.1", + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/typescript-estree": "4.29.1", + "debug": "^4.3.1" + } + }, + "@typescript-eslint/scope-manager": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-4.29.1.tgz", + "integrity": "sha512-Hzv/uZOa9zrD/W5mftZa54Jd5Fed3tL6b4HeaOpwVSabJK8CJ+2MkDasnX/XK4rqP5ZTWngK1ZDeCi6EnxPQ7A==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1" + } + }, + "@typescript-eslint/types": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-4.29.1.tgz", + "integrity": "sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==", + "dev": true + }, + "@typescript-eslint/typescript-estree": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-4.29.1.tgz", + "integrity": "sha512-lIkkrR9E4lwZkzPiRDNq0xdC3f2iVCUjw/7WPJ4S2Sl6C3nRWkeE1YXCQ0+KsiaQRbpY16jNaokdWnm9aUIsfw==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "@typescript-eslint/visitor-keys": "4.29.1", + "debug": "^4.3.1", + "globby": "^11.0.3", + "is-glob": "^4.0.1", + "semver": "^7.3.5", + "tsutils": "^3.21.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + } + } + }, + "@typescript-eslint/visitor-keys": { + "version": "4.29.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-4.29.1.tgz", + "integrity": "sha512-zLqtjMoXvgdZY/PG6gqA73V8BjqPs4af1v2kiiETBObp+uC6gRYnJLmJHxC0QyUrrHDLJPIWNYxoBV3wbcRlag==", + "dev": true, + "requires": { + "@typescript-eslint/types": "4.29.1", + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "JSONStream": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", + "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", + "dev": true, + "requires": { + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" + } + }, + "JSV": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", + "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=", + "dev": true + }, + "abab": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/abab/-/abab-2.0.5.tgz", + "integrity": "sha512-9IK9EadsbHo6jLWIpxpR6pL0sazTXV6+SQv25ZB+F7Bj9mJNaOc4nCRabwd5M/JwmUa8idz6Eci6eKfJryPs6Q==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "accepts": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.7.tgz", + "integrity": "sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA==", + "dev": true, + "requires": { + "mime-types": "~2.1.24", + "negotiator": "0.6.2" + } + }, + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + }, + "acorn-globals": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/acorn-globals/-/acorn-globals-4.3.4.tgz", + "integrity": "sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A==", + "dev": true, + "requires": { + "acorn": "^6.0.1", + "acorn-walk": "^6.0.1" + }, + "dependencies": { + "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 + }, + "acorn-walk": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-6.2.0.tgz", + "integrity": "sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA==", + "dev": true + } + } + }, + "acorn-jsx": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", + "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", + "dev": true + }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "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 + }, + "address": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/address/-/address-1.1.2.tgz", + "integrity": "sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA==", + "dev": true + }, + "agent-base": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", + "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", + "dev": true, + "requires": { + "debug": "4" + } + }, + "ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + } + }, + "alphanum-sort": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/alphanum-sort/-/alphanum-sort-1.0.2.tgz", + "integrity": "sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM=", + "dev": true + }, + "amdefine": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/amdefine/-/amdefine-1.0.1.tgz", + "integrity": "sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU=", + "dev": true + }, + "ansi-colors": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz", + "integrity": "sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==", + "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=", + "dev": true + }, + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "anymatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", + "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "dev": true, + "requires": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + } + }, + "append-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/append-buffer/-/append-buffer-1.0.2.tgz", + "integrity": "sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE=", + "dev": true, + "requires": { + "buffer-equal": "^1.0.0" + } + }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, + "arg": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", + "integrity": "sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==", + "dev": true + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "arr-diff": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", + "integrity": "sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA=", + "dev": true + }, + "arr-flatten": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/arr-flatten/-/arr-flatten-1.1.0.tgz", + "integrity": "sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg==", + "dev": true + }, + "arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ=", + "dev": true + }, + "array-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/array-equal/-/array-equal-1.0.0.tgz", + "integrity": "sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM=", + "dev": true + }, + "array-find-index": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/array-find-index/-/array-find-index-1.0.2.tgz", + "integrity": "sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E=", + "dev": true + }, + "array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha1-ml9pkFGx5wczKPKgCJaLZOopVdI=", + "dev": true + }, + "array-from": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/array-from/-/array-from-2.1.1.tgz", + "integrity": "sha1-z+nYwmYoudxa7MYqn12PHzUsEZU=", + "dev": true + }, + "array-includes": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.3.tgz", + "integrity": "sha512-gcem1KlBU7c9rB+Rq8/3PPKsK2kjqeEBa3bD5kkQo4nYlOHQCJqIJFqBXDEfwaRuYTT4E+FxA9xez7Gf/e3Q7A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "get-intrinsic": "^1.1.1", + "is-string": "^1.0.5" + } + }, + "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.1" + } + }, + "array-uniq": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/array-uniq/-/array-uniq-1.0.3.tgz", + "integrity": "sha1-r2rId6Jcx/dOBYiUdThY39sk/bY=", + "dev": true + }, + "array-unique": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.3.2.tgz", + "integrity": "sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg=", + "dev": true + }, + "array.prototype.flat": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.2.4.tgz", + "integrity": "sha512-4470Xi3GAPAjZqFcljX2xzckv1qeKPizoNkiS0+O4IoPR2ZNpcjE0pkhdihlDouK+x6QOast26B4Q/O9DJnwSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1" + } + }, + "array.prototype.flatmap": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.2.4.tgz", + "integrity": "sha512-r9Z0zYoxqHz60vvQbWEdXIEtCwHF0yxaWfno9qzXeNHvfyl3BZqygmGzb84dsubyaXLH4husF+NFgMSdpZhk2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.1", + "function-bind": "^1.1.1" + } + }, + "arrify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", + "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", + "dev": true + }, + "asn1": { + "version": "0.2.4", + "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.4.tgz", + "integrity": "sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg==", + "dev": true, + "requires": { + "safer-buffer": "~2.1.0" + } + }, + "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 + } + } + }, + "assert": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/assert/-/assert-1.5.0.tgz", + "integrity": "sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA==", + "dev": true, + "requires": { + "object-assign": "^4.1.1", + "util": "0.10.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.1.tgz", + "integrity": "sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE=", + "dev": true + }, + "util": { + "version": "0.10.3", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.3.tgz", + "integrity": "sha1-evsa/lCAUkZInj23/g7TeTNqwPk=", + "dev": true, + "requires": { + "inherits": "2.0.1" + } + } + } + }, + "assert-plus": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", + "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", + "dev": true + }, + "assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c=", + "dev": true + }, + "astral-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-1.0.0.tgz", + "integrity": "sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg==", + "dev": true + }, + "async": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/async/-/async-0.2.10.tgz", + "integrity": "sha1-trvgsGdLnXGXCMo43owjfLUmw9E=", + "dev": true + }, + "async-cache": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/async-cache/-/async-cache-1.1.0.tgz", + "integrity": "sha1-SppaidBl7F2OUlS9nulrp2xTK1o=", + "dev": true, + "requires": { + "lru-cache": "^4.0.0" + }, + "dependencies": { + "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 + } + } + }, + "async-each": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/async-each/-/async-each-1.0.3.tgz", + "integrity": "sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==", + "dev": true + }, + "async-limiter": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", + "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", + "dev": true + }, + "asynckit": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true + }, + "at-least-node": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/at-least-node/-/at-least-node-1.0.0.tgz", + "integrity": "sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg==", + "dev": true + }, + "atob": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/atob/-/atob-2.1.2.tgz", + "integrity": "sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg==", + "dev": true + }, + "atob-lite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/atob-lite/-/atob-lite-2.0.0.tgz", + "integrity": "sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY=", + "dev": true + }, + "autoprefixer": { + "version": "9.8.6", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-9.8.6.tgz", + "integrity": "sha512-XrvP4VVHdRBCdX1S3WXVD8+RyG9qeb1D5Sn1DeLiG2xfSpzellk5k54xbUERJ3M5DggQxes39UGOTP8CFrEGbg==", + "dev": true, + "requires": { + "browserslist": "^4.12.0", + "caniuse-lite": "^1.0.30001109", + "colorette": "^1.2.1", + "normalize-range": "^0.1.2", + "num2fraction": "^1.2.2", + "postcss": "^7.0.32", + "postcss-value-parser": "^4.1.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "aws-sign2": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", + "integrity": "sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg=", + "dev": true + }, + "aws4": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.11.0.tgz", + "integrity": "sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==", + "dev": true + }, + "babel-eslint": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/babel-eslint/-/babel-eslint-10.1.0.tgz", + "integrity": "sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.0.0", + "@babel/parser": "^7.7.0", + "@babel/traverse": "^7.7.0", + "@babel/types": "^7.7.0", + "eslint-visitor-keys": "^1.0.0", + "resolve": "^1.12.0" + } + }, + "babel-plugin-dynamic-import-node": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.3.tgz", + "integrity": "sha512-jZVI+s9Zg3IqA/kdi0i6UDCybUI3aSBLnglhYbSSjKlV7yF1F/5LWv8MakQmvYpnbJDS6fcBL2KzHSxNCMtWSQ==", + "dev": true, + "requires": { + "object.assign": "^4.1.0" + } + }, + "babel-plugin-polyfill-corejs2": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.2.2.tgz", + "integrity": "sha512-kISrENsJ0z5dNPq5eRvcctITNHYXWOA4DUZRFYCz3jYCcvTb/A546LIddmoGNMVYg2U38OyFeNosQwI9ENTqIQ==", + "dev": true, + "requires": { + "@babel/compat-data": "^7.13.11", + "@babel/helper-define-polyfill-provider": "^0.2.2", + "semver": "^6.1.1" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "babel-plugin-polyfill-corejs3": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.2.3.tgz", + "integrity": "sha512-rCOFzEIJpJEAU14XCcV/erIf/wZQMmMT5l5vXOpL5uoznyOGfDIjPj6FVytMvtzaKSTSVKouOCTPJ5OMUZH30g==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2", + "core-js-compat": "^3.14.0" + } + }, + "babel-plugin-polyfill-regenerator": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.2.2.tgz", + "integrity": "sha512-Goy5ghsc21HgPDFtzRkSirpZVW35meGoTmTOb2bxqdl60ghub4xOidgNTHaZfQ2FaxQsKmwvXtOAkcIS4SMBWg==", + "dev": true, + "requires": { + "@babel/helper-define-polyfill-provider": "^0.2.2" + } + }, + "babelify": { + "version": "10.0.0", + "resolved": "https://registry.npmjs.org/babelify/-/babelify-10.0.0.tgz", + "integrity": "sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg==", + "dev": true + }, + "backbone": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/backbone/-/backbone-1.4.0.tgz", + "integrity": "sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ==", + "dev": true, + "requires": { + "underscore": ">=1.8.3" + }, + "dependencies": { + "underscore": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.13.1.tgz", + "integrity": "sha512-hzSoAVtJF+3ZtiFX0VgfFPHEDRm7Y/QPjGyNo4TVdnDTdft3tr8hEkD25a1jC+TjTuE7tkHGKkhwCgs9dgBB2g==", + "dev": true + } + } + }, + "bail": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/bail/-/bail-1.0.5.tgz", + "integrity": "sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ==", + "dev": true + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "base": { + "version": "0.11.2", + "resolved": "https://registry.npmjs.org/base/-/base-0.11.2.tgz", + "integrity": "sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==", + "dev": true, + "requires": { + "cache-base": "^1.0.1", + "class-utils": "^0.3.5", + "component-emitter": "^1.2.1", + "define-property": "^1.0.0", + "isobject": "^3.0.1", + "mixin-deep": "^1.2.0", + "pascalcase": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "base64-arraybuffer": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/base64-arraybuffer/-/base64-arraybuffer-0.1.4.tgz", + "integrity": "sha1-mBjHngWbE1X5fgQooBfIOOkLqBI=", + "dev": true + }, + "base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true + }, + "base64id": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/base64id/-/base64id-2.0.0.tgz", + "integrity": "sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==", + "dev": true + }, + "bcrypt-pbkdf": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", + "integrity": "sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4=", + "dev": true, + "requires": { + "tweetnacl": "^0.14.3" + } + }, + "before-after-hook": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", + "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", + "dev": true + }, + "benchmark": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/benchmark/-/benchmark-2.1.4.tgz", + "integrity": "sha1-CfPeMckWQl1JjMLuVloOvzwqVik=", + "dev": true, + "requires": { + "lodash": "^4.17.4", + "platform": "^1.3.3" + } + }, + "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 + }, + "bind-obj-methods": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/bind-obj-methods/-/bind-obj-methods-2.0.2.tgz", + "integrity": "sha512-bUkRdEOppT1Xg/jG0+bp0JSjUD9U0r7skxb/42WeBUjfBpW6COQTIgQmKX5J2Z3aMXcORKgN2N+d7IQwTK3pag==", + "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" + } + }, + "bit-twiddle": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/bit-twiddle/-/bit-twiddle-1.0.2.tgz", + "integrity": "sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4=", + "dev": true + }, + "bl": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", + "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "dev": true, + "requires": { + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" + }, + "dependencies": { + "buffer": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", + "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "dev": true, + "requires": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" + } + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "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=", + "dev": true, + "requires": { + "inherits": "~2.0.0" + } + }, + "bluebird": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/bluebird/-/bluebird-3.7.2.tgz", + "integrity": "sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg==", + "dev": true + }, + "bn.js": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-5.2.0.tgz", + "integrity": "sha512-D7iWRBvnZE8ecXiLj/9wbxH7Tk79fAh8IHaTNq1RWRixsS02W+5qS+iE9yq6RYl0asXx5tw0bLhmT5pIfbSquw==", + "dev": true + }, + "body": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/body/-/body-5.1.0.tgz", + "integrity": "sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk=", + "dev": true, + "requires": { + "continuable-cache": "^0.3.1", + "error": "^7.0.0", + "raw-body": "~1.1.0", + "safe-json-parse": "~1.0.1" + } + }, + "body-parser": { + "version": "1.19.0", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", + "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "content-type": "~1.0.4", + "debug": "2.6.9", + "depd": "~1.1.2", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "on-finished": "~2.3.0", + "qs": "6.7.0", + "raw-body": "2.4.0", + "type-is": "~1.6.17" + }, + "dependencies": { + "bytes": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", + "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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 + }, + "raw-body": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", + "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", + "dev": true, + "requires": { + "bytes": "3.1.0", + "http-errors": "1.7.2", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + } + } + } + }, + "boolbase": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", + "integrity": "sha1-aN/1++YMUes3cl6p4+0xDcwed24=", + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dev": true, + "requires": { + "fill-range": "^7.0.1" + } + }, + "brorand": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/brorand/-/brorand-1.1.0.tgz", + "integrity": "sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8=", + "dev": true + }, + "browser-pack": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/browser-pack/-/browser-pack-6.1.0.tgz", + "integrity": "sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "combine-source-map": "~0.8.0", + "defined": "^1.0.0", + "safe-buffer": "^5.1.1", + "through2": "^2.0.0", + "umd": "^3.0.0" + } + }, + "browser-process-hrtime": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz", + "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==", + "dev": true + }, + "browser-resolve": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-2.0.0.tgz", + "integrity": "sha512-7sWsQlYL2rGLy2IWm8WL8DCTJvYLc/qlOnsakDac87SOoCd16WLsaAMdCiAqsTNHIe+SXfaqyxyo6THoWqs8WQ==", + "dev": true, + "requires": { + "resolve": "^1.17.0" + } + }, + "browserify": { + "version": "16.5.2", + "resolved": "https://registry.npmjs.org/browserify/-/browserify-16.5.2.tgz", + "integrity": "sha512-TkOR1cQGdmXU9zW4YukWzWVSJwrxmNdADFbqbE3HFgQWe5wqZmOawqZ7J/8MPCwk/W8yY7Y0h+7mOtcZxLP23g==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "assert": "^1.4.0", + "browser-pack": "^6.0.1", + "browser-resolve": "^2.0.0", + "browserify-zlib": "~0.2.0", + "buffer": "~5.2.1", + "cached-path-relative": "^1.0.0", + "concat-stream": "^1.6.0", + "console-browserify": "^1.1.0", + "constants-browserify": "~1.0.0", + "crypto-browserify": "^3.0.0", + "defined": "^1.0.0", + "deps-sort": "^2.0.0", + "domain-browser": "^1.2.0", + "duplexer2": "~0.1.2", + "events": "^2.0.0", + "glob": "^7.1.0", + "has": "^1.0.0", + "htmlescape": "^1.1.0", + "https-browserify": "^1.0.0", + "inherits": "~2.0.1", + "insert-module-globals": "^7.0.0", + "labeled-stream-splicer": "^2.0.0", + "mkdirp-classic": "^0.5.2", + "module-deps": "^6.2.3", + "os-browserify": "~0.3.0", + "parents": "^1.0.1", + "path-browserify": "~0.0.0", + "process": "~0.11.0", + "punycode": "^1.3.2", + "querystring-es3": "~0.2.0", + "read-only-stream": "^2.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.1.4", + "shasum": "^1.0.0", + "shell-quote": "^1.6.1", + "stream-browserify": "^2.0.0", + "stream-http": "^3.0.0", + "string_decoder": "^1.1.1", + "subarg": "^1.0.0", + "syntax-error": "^1.1.1", + "through2": "^2.0.0", + "timers-browserify": "^1.0.1", + "tty-browserify": "0.0.1", + "url": "~0.11.0", + "util": "~0.10.1", + "vm-browserify": "^1.0.0", + "xtend": "^4.0.0" + } + }, + "browserify-aes": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/browserify-aes/-/browserify-aes-1.2.0.tgz", + "integrity": "sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==", + "dev": true, + "requires": { + "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": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/browserify-cipher/-/browserify-cipher-1.0.1.tgz", + "integrity": "sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==", + "dev": true, + "requires": { + "browserify-aes": "^1.0.4", + "browserify-des": "^1.0.0", + "evp_bytestokey": "^1.0.0" + } + }, + "browserify-des": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/browserify-des/-/browserify-des-1.0.2.tgz", + "integrity": "sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==", + "dev": true, + "requires": { + "cipher-base": "^1.0.1", + "des.js": "^1.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "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" + } + }, + "browserify-sign": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/browserify-sign/-/browserify-sign-4.2.1.tgz", + "integrity": "sha512-/vrA5fguVAKKAVTNJjgSm1tRQDHUU6DbwO9IROu/0WAzC8PKhucDSh18J0RMvVeHAn5puMd+QHC2erPRNf8lmg==", + "dev": true, + "requires": { + "bn.js": "^5.1.1", + "browserify-rsa": "^4.0.1", + "create-hash": "^1.2.0", + "create-hmac": "^1.1.7", + "elliptic": "^6.5.3", + "inherits": "^2.0.4", + "parse-asn1": "^5.1.5", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/browserify-zlib/-/browserify-zlib-0.2.0.tgz", + "integrity": "sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==", + "dev": true, + "requires": { + "pako": "~1.0.5" + } + }, + "browserslist": { + "version": "4.16.6", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.16.6.tgz", + "integrity": "sha512-Wspk/PqO+4W9qp5iUTJsa1B/QrYn1keNCcEP5OvP7WBwT4KaDly0uONYmC6Xa3Z5IqnUgS0KcgLYu1l74x0ZXQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001219", + "colorette": "^1.2.2", + "electron-to-chromium": "^1.3.723", + "escalade": "^3.1.1", + "node-releases": "^1.1.71" + } + }, + "btoa": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz", + "integrity": "sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==", + "dev": true + }, + "btoa-lite": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/btoa-lite/-/btoa-lite-1.0.0.tgz", + "integrity": "sha1-M3dm2hWAEhD92VbCLpxokaudAzc=", + "dev": true + }, + "buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.2.1.tgz", + "integrity": "sha512-c+Ko0loDaFfuPWiL02ls9Xd3GO3cPVmUobQ6t3rXNUk304u6hGq+8N/kFi+QEIKhzK3uwolVhLzszmfLmMLnqg==", + "dev": true, + "requires": { + "base64-js": "^1.0.2", + "ieee754": "^1.1.4" + } + }, + "buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=", + "dev": true + }, + "buffer-equal": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-equal/-/buffer-equal-1.0.0.tgz", + "integrity": "sha1-WWFrSYME1Var1GaWayLu2j7KX74=", + "dev": true + }, + "buffer-equal-constant-time": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz", + "integrity": "sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk=", + "dev": true + }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, + "buffer-shims": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/buffer-shims/-/buffer-shims-1.0.0.tgz", + "integrity": "sha1-mXjOMXOIxkmth5MCjDR37wRKi1E=", + "dev": true + }, + "buffer-xor": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", + "integrity": "sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk=", + "dev": true + }, + "builtin-modules": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", + "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", + "dev": true + }, + "builtin-status-codes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz", + "integrity": "sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug=", + "dev": true + }, + "bytes": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-1.0.0.tgz", + "integrity": "sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g=", + "dev": true + }, + "cache-base": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/cache-base/-/cache-base-1.0.1.tgz", + "integrity": "sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ==", + "dev": true, + "requires": { + "collection-visit": "^1.0.0", + "component-emitter": "^1.2.1", + "get-value": "^2.0.6", + "has-value": "^1.0.0", + "isobject": "^3.0.1", + "set-value": "^2.0.0", + "to-object-path": "^0.3.0", + "union-value": "^1.0.0", + "unset-value": "^1.0.0" + } + }, + "cached-path-relative": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/cached-path-relative/-/cached-path-relative-1.0.2.tgz", + "integrity": "sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg==", + "dev": true + }, + "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-matcher": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-2.0.0.tgz", + "integrity": "sha512-CIDC5wZZfZ2VjZu849WQckS58Z3pJXFfRaSjNjgo/q3in5zxkhTwVL83vttgtmvyLG7TuDlLlBya7SKP6CjDIA==", + "dev": true, + "requires": { + "deep-equal": "^1.0.0", + "espurify": "^2.0.0", + "estraverse": "^4.0.0" + } + }, + "call-me-maybe": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.1.tgz", + "integrity": "sha1-JtII6onje1y95gJQoV8DHBak1ms=", + "dev": true + }, + "caller-callsite": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-callsite/-/caller-callsite-2.0.0.tgz", + "integrity": "sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ=", + "dev": true, + "requires": { + "callsites": "^2.0.0" + } + }, + "caller-path": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/caller-path/-/caller-path-2.0.0.tgz", + "integrity": "sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ=", + "dev": true, + "requires": { + "caller-callsite": "^2.0.0" + } + }, + "callsites": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-2.0.0.tgz", + "integrity": "sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA=", + "dev": true + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "camelcase-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-2.1.0.tgz", + "integrity": "sha1-MIvur/3ygRkFHvodkyITyRuPkuc=", + "dev": true, + "requires": { + "camelcase": "^2.0.0", + "map-obj": "^1.0.0" + }, + "dependencies": { + "camelcase": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-2.1.1.tgz", + "integrity": "sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8=", + "dev": true + } + } + }, + "caniuse-api": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/caniuse-api/-/caniuse-api-3.0.0.tgz", + "integrity": "sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-lite": "^1.0.0", + "lodash.memoize": "^4.1.2", + "lodash.uniq": "^4.5.0" + }, + "dependencies": { + "lodash.memoize": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-4.1.2.tgz", + "integrity": "sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4=", + "dev": true + } + } + }, + "caniuse-lite": { + "version": "1.0.30001245", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001245.tgz", + "integrity": "sha512-768fM9j1PKXpOCKws6eTo3RHmvTUsG9UrpT4WoREFeZgJBTi4/X9g565azS/rVUGtqb8nt7FjLeF5u4kukERnA==", + "dev": true + }, + "canvas": { + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/canvas/-/canvas-2.8.0.tgz", + "integrity": "sha512-gLTi17X8WY9Cf5GZ2Yns8T5lfBOcGgFehDFb+JQwDqdOoBOcECS9ZWMEAqMSVcMYwXD659J8NyzjRY/2aE+C2Q==", + "dev": true, + "requires": { + "@mapbox/node-pre-gyp": "^1.0.0", + "nan": "^2.14.0", + "simple-get": "^3.0.3" + } + }, + "capture-stack-trace": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz", + "integrity": "sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw==", + "dev": true + }, + "caseless": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", + "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", + "dev": true + }, + "ccount": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/ccount/-/ccount-1.1.0.tgz", + "integrity": "sha512-vlNK021QdI7PNeiUh/lKkC/mNHHfV0m/Ad5JoI0TYtlBnJAslM/JIkm/tGC88bkLIwO6OQ5uV6ztS6kVAtCDlg==", + "dev": true + }, + "chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "character-entities": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/character-entities/-/character-entities-1.2.4.tgz", + "integrity": "sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==", + "dev": true + }, + "character-entities-html4": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-html4/-/character-entities-html4-1.1.4.tgz", + "integrity": "sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==", + "dev": true + }, + "character-entities-legacy": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz", + "integrity": "sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==", + "dev": true + }, + "character-reference-invalid": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz", + "integrity": "sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==", + "dev": true + }, + "charm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/charm/-/charm-1.0.2.tgz", + "integrity": "sha1-it02cVOm2aWBMxBSxAkJkdqZXjU=", + "dev": true, + "requires": { + "inherits": "^2.0.1" + } + }, + "chokidar": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.2.tgz", + "integrity": "sha512-ekGhOnNVPgT77r4K/U3GDhu+FQ2S8TnK/s2KbIGXi0SZWuwkZ2QNyfWdZW+TVfn84DpEP7rLeCt2UI6bJ8GwbQ==", + "dev": 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" + } + }, + "chownr": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-2.0.0.tgz", + "integrity": "sha512-bIomtDF5KGpdogkLd9VspvFzk9KfpyyGlS8YFVZl7TGPBHL5snIOnxeshwVgPteQ9b4Eydl+pVbIyE1DcvCWgQ==", + "dev": true + }, + "cipher-base": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/cipher-base/-/cipher-base-1.0.4.tgz", + "integrity": "sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "class-utils": { + "version": "0.3.6", + "resolved": "https://registry.npmjs.org/class-utils/-/class-utils-0.3.6.tgz", + "integrity": "sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "define-property": "^0.2.5", + "isobject": "^3.0.0", + "static-extend": "^0.1.1" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "clean-yaml-object": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz", + "integrity": "sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g=", + "dev": true + }, + "cliui": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.1.0.tgz", + "integrity": "sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ==", + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "clone": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/clone/-/clone-2.1.2.tgz", + "integrity": "sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18=", + "dev": true + }, + "clone-buffer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-buffer/-/clone-buffer-1.0.0.tgz", + "integrity": "sha1-4+JbIHrE5wGvch4staFnksrD3Fg=", + "dev": true + }, + "clone-regexp": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/clone-regexp/-/clone-regexp-1.0.1.tgz", + "integrity": "sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw==", + "dev": true, + "requires": { + "is-regexp": "^1.0.0", + "is-supported-regexp-flag": "^1.0.0" + } + }, + "clone-stats": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz", + "integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=", + "dev": true + }, + "cloneable-readable": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.3.tgz", + "integrity": "sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "process-nextick-args": "^2.0.0", + "readable-stream": "^2.3.5" + } + }, + "coa": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/coa/-/coa-2.0.2.tgz", + "integrity": "sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA==", + "dev": true, + "requires": { + "@types/q": "^1.5.1", + "chalk": "^2.4.1", + "q": "^1.1.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, + "collapse-white-space": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/collapse-white-space/-/collapse-white-space-1.0.6.tgz", + "integrity": "sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ==", + "dev": true + }, + "collection-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", + "integrity": "sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA=", + "dev": true, + "requires": { + "map-visit": "^1.0.0", + "object-visit": "^1.0.0" + } + }, + "color": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/color/-/color-3.2.0.tgz", + "integrity": "sha512-4ximSqKXLTQmYLJuvrRHtpOqniR+ASoaVK+Rxdy6ZpfsLvUqtIM7oGGgopRG+O4p9NRv/AfuVD3jsvdxyXqozQ==", + "dev": true, + "requires": { + "color-convert": "^2.0.1", + "color-string": "^1.6.0" + }, + "dependencies": { + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + } + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "dev": true, + "requires": { + "color-name": "1.1.3" + } + }, + "color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", + "dev": true + }, + "color-string": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.6.0.tgz", + "integrity": "sha512-c/hGS+kRWJutUBEngKKmk4iH3sD59MBkoxVapS/0wgpCz2u7XsNloxknyvBhzwEs1IbV36D9PwqLPJ2DTu3vMA==", + "dev": true, + "requires": { + "color-name": "^1.0.0", + "simple-swizzle": "^0.2.2" + } + }, + "color-support": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", + "integrity": "sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg==", + "dev": true + }, + "colorette": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-1.2.2.tgz", + "integrity": "sha512-MKGMzyfeuutC/ZJ1cba9NqcNpfeqMUcYmyF1ZFY6/Cn7CNSAKx6a+s48sqLqyAiZuaP2TcqMhoo+dlwFnVxT9w==", + "dev": true + }, + "colors": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/colors/-/colors-0.6.2.tgz", + "integrity": "sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w=", + "dev": true + }, + "combine-source-map": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/combine-source-map/-/combine-source-map-0.8.0.tgz", + "integrity": "sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos=", + "dev": true, + "requires": { + "convert-source-map": "~1.1.0", + "inline-source-map": "~0.6.0", + "lodash.memoize": "~3.0.3", + "source-map": "~0.5.3" + }, + "dependencies": { + "convert-source-map": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.1.3.tgz", + "integrity": "sha1-SCnId+n+SbMWHzvzZziI4gRpmGA=", + "dev": true + } + } + }, + "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" + } + }, + "comma-separated-tokens": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz", + "integrity": "sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw==", + "dev": true + }, + "commander": { + "version": "2.20.3", + "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", + "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", + "dev": true + }, + "comment-parser": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.2.3.tgz", + "integrity": "sha512-vnqDwBSXSsdAkGS5NjwMIPelE47q+UkEgWKHvCDNhVIIaQSUFY6sNnEYGzdoPGMdpV+7KR3ZkRd7oyWIjtuvJg==", + "dev": true + }, + "commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", + "dev": true + }, + "component-emitter": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/component-emitter/-/component-emitter-1.3.0.tgz", + "integrity": "sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg==", + "dev": true + }, + "compressible": { + "version": "2.0.18", + "resolved": "https://registry.npmjs.org/compressible/-/compressible-2.0.18.tgz", + "integrity": "sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg==", + "dev": true, + "requires": { + "mime-db": ">= 1.43.0 < 2" + } + }, + "compression": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/compression/-/compression-1.7.4.tgz", + "integrity": "sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ==", + "dev": true, + "requires": { + "accepts": "~1.3.5", + "bytes": "3.0.0", + "compressible": "~2.0.16", + "debug": "2.6.9", + "on-headers": "~1.0.2", + "safe-buffer": "5.1.2", + "vary": "~1.1.2" + }, + "dependencies": { + "bytes": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", + "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=", + "dev": true + }, + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", + "dev": true + }, + "concat-stream": { + "version": "1.6.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.6.2.tgz", + "integrity": "sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^2.2.2", + "typedarray": "^0.0.6" + } + }, + "console-browserify": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/console-browserify/-/console-browserify-1.2.0.tgz", + "integrity": "sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==", + "dev": true + }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, + "consolidate": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/consolidate/-/consolidate-0.15.1.tgz", + "integrity": "sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw==", + "dev": true, + "requires": { + "bluebird": "^3.1.1" + } + }, + "constants-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", + "integrity": "sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U=", + "dev": true + }, + "content-disposition": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", + "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", + "dev": true, + "requires": { + "safe-buffer": "5.1.2" + } + }, + "content-type": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.4.tgz", + "integrity": "sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA==", + "dev": true + }, + "continuable-cache": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/continuable-cache/-/continuable-cache-0.3.1.tgz", + "integrity": "sha1-vXJ6f67XfnH/OYWskzUakSczrQ8=", + "dev": true + }, + "convert-source-map": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.8.0.tgz", + "integrity": "sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==", + "dev": true, + "requires": { + "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==", + "dev": true + }, + "cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha1-4wOogrNCzD7oylE6eZmXNNqzriw=", + "dev": true + }, + "copy-descriptor": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/copy-descriptor/-/copy-descriptor-0.1.1.tgz", + "integrity": "sha1-Z29us8OZl8LuGsOpJP1hJHSPV40=", + "dev": true + }, + "core-js-compat": { + "version": "3.15.2", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.15.2.tgz", + "integrity": "sha512-Wp+BJVvwopjI+A1EFqm2dwUmWYXrvucmtIB2LgXn/Rb+gWPKYxtmb4GKHGKG/KGF1eK9jfjzT38DITbTOCX/SQ==", + "dev": true, + "requires": { + "browserslist": "^4.16.6", + "semver": "7.0.0" + }, + "dependencies": { + "semver": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.0.0.tgz", + "integrity": "sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A==", + "dev": true + } + } + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dev": true, + "requires": { + "object-assign": "^4", + "vary": "^1" + } + }, + "cosmiconfig": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-5.2.1.tgz", + "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" + } + }, + "coveralls": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/coveralls/-/coveralls-3.1.1.tgz", + "integrity": "sha512-+dxnG2NHncSD1NrqbSM3dn/lE57O6Qf/koe9+I7c+wzkqRmEvcp0kgJdxKInzYzkICKkFMZsX3Vct3++tsF9ww==", + "dev": true, + "requires": { + "js-yaml": "^3.13.1", + "lcov-parse": "^1.0.0", + "log-driver": "^1.2.7", + "minimist": "^1.2.5", + "request": "^2.88.2" + } + }, + "create-ecdh": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/create-ecdh/-/create-ecdh-4.0.4.tgz", + "integrity": "sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "elliptic": "^6.5.3" + }, + "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 + } + } + }, + "create-error-class": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", + "integrity": "sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y=", + "dev": true, + "requires": { + "capture-stack-trace": "^1.0.0" + } + }, + "create-hash": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/create-hash/-/create-hash-1.2.0.tgz", + "integrity": "sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==", + "dev": true, + "requires": { + "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": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/create-hmac/-/create-hmac-1.1.7.tgz", + "integrity": "sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==", + "dev": true, + "requires": { + "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-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.1" + }, + "dependencies": { + "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" + } + }, + "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 + }, + "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 + }, + "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" + } + } + } + }, + "cross-spawn": { + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-6.0.5.tgz", + "integrity": "sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ==", + "dev": true, + "requires": { + "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": { + "version": "3.12.0", + "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", + "integrity": "sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg==", + "dev": true, + "requires": { + "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-color-names": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/css-color-names/-/css-color-names-0.0.4.tgz", + "integrity": "sha1-gIrcLnnPhHOAabZGyyDsJ762KeA=", + "dev": true + }, + "css-declaration-sorter": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz", + "integrity": "sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA==", + "dev": true, + "requires": { + "postcss": "^7.0.1", + "timsort": "^0.3.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "css-select": { + "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": "^3.2.1", + "domutils": "^1.7.0", + "nth-check": "^1.0.2" + } + }, + "css-select-base-adapter": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz", + "integrity": "sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w==", + "dev": true + }, + "css-tree": { + "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": "2.0.4", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "css-what": { + "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": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/csscolorparser/-/csscolorparser-1.0.3.tgz", + "integrity": "sha1-s085HupNqPPpgjHizNjfnAQfFxs=" + }, + "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 + }, + "cssnano": { + "version": "4.1.11", + "resolved": "https://registry.npmjs.org/cssnano/-/cssnano-4.1.11.tgz", + "integrity": "sha512-6gZm2htn7xIPJOHY824ERgj8cNPgPxyCSnkXc4v7YvNW+TdVfzgngHcEhy/8D11kUWRUMbke+tC+AUcUsnMz2g==", + "dev": true, + "requires": { + "cosmiconfig": "^5.0.0", + "cssnano-preset-default": "^4.0.8", + "is-resolvable": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "cssnano-preset-default": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-4.0.8.tgz", + "integrity": "sha512-LdAyHuq+VRyeVREFmuxUZR1TXjQm8QQU/ktoo/x7bz+SdOge1YKc5eMN6pRW7YWBmyq59CqYba1dJ5cUukEjLQ==", + "dev": true, + "requires": { + "css-declaration-sorter": "^4.0.1", + "cssnano-util-raw-cache": "^4.0.1", + "postcss": "^7.0.0", + "postcss-calc": "^7.0.1", + "postcss-colormin": "^4.0.3", + "postcss-convert-values": "^4.0.1", + "postcss-discard-comments": "^4.0.2", + "postcss-discard-duplicates": "^4.0.2", + "postcss-discard-empty": "^4.0.1", + "postcss-discard-overridden": "^4.0.1", + "postcss-merge-longhand": "^4.0.11", + "postcss-merge-rules": "^4.0.3", + "postcss-minify-font-values": "^4.0.2", + "postcss-minify-gradients": "^4.0.2", + "postcss-minify-params": "^4.0.2", + "postcss-minify-selectors": "^4.0.2", + "postcss-normalize-charset": "^4.0.1", + "postcss-normalize-display-values": "^4.0.2", + "postcss-normalize-positions": "^4.0.2", + "postcss-normalize-repeat-style": "^4.0.2", + "postcss-normalize-string": "^4.0.2", + "postcss-normalize-timing-functions": "^4.0.2", + "postcss-normalize-unicode": "^4.0.1", + "postcss-normalize-url": "^4.0.1", + "postcss-normalize-whitespace": "^4.0.2", + "postcss-ordered-values": "^4.1.2", + "postcss-reduce-initial": "^4.0.3", + "postcss-reduce-transforms": "^4.0.2", + "postcss-svgo": "^4.0.3", + "postcss-unique-selectors": "^4.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "cssnano-util-get-arguments": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz", + "integrity": "sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8=", + "dev": true + }, + "cssnano-util-get-match": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz", + "integrity": "sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0=", + "dev": true + }, + "cssnano-util-raw-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz", + "integrity": "sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "cssnano-util-same-parent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz", + "integrity": "sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q==", + "dev": true + }, + "csso": { + "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.1.2" + }, + "dependencies": { + "css-tree": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-1.1.3.tgz", + "integrity": "sha512-tRpdppF7TRazZrjJ6v3stzv93qxRcSsFmW6cX0Zm2NVKpxE1WV1HblnghVv9TreireHkqI/VDEsfolRF1p6y7Q==", + "dev": true, + "requires": { + "mdn-data": "2.0.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.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "cssom": { + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/cssom/-/cssom-0.3.8.tgz", + "integrity": "sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg==", + "dev": true + }, + "cssstyle": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-1.4.0.tgz", + "integrity": "sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA==", + "dev": true, + "requires": { + "cssom": "0.3.x" + } + }, + "csstype": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.0.8.tgz", + "integrity": "sha512-jXKhWqXPmlUeoQnF/EhTtTl4C9SnrxSH/jZUih3jmO6lBKr99rP3/+FmrMj4EFpOXzMtXHAZkd3x0E6h6Fgflw==", + "dev": true + }, + "currently-unhandled": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/currently-unhandled/-/currently-unhandled-0.4.1.tgz", + "integrity": "sha1-mI3zP+qxke95mmE2nddsF635V+o=", + "dev": true, + "requires": { + "array-find-index": "^1.0.1" + } + }, + "d3": { + "version": "4.13.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-4.13.0.tgz", + "integrity": "sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ==", + "dev": true, + "requires": { + "d3-array": "1.2.1", + "d3-axis": "1.0.8", + "d3-brush": "1.0.4", + "d3-chord": "1.0.4", + "d3-collection": "1.0.4", + "d3-color": "1.0.3", + "d3-dispatch": "1.0.3", + "d3-drag": "1.2.1", + "d3-dsv": "1.0.8", + "d3-ease": "1.0.3", + "d3-force": "1.1.0", + "d3-format": "1.2.2", + "d3-geo": "1.9.1", + "d3-hierarchy": "1.1.5", + "d3-interpolate": "1.1.6", + "d3-path": "1.0.5", + "d3-polygon": "1.0.3", + "d3-quadtree": "1.0.3", + "d3-queue": "3.0.7", + "d3-random": "1.1.0", + "d3-request": "1.0.6", + "d3-scale": "1.0.7", + "d3-selection": "1.3.0", + "d3-shape": "1.2.0", + "d3-time": "1.0.8", + "d3-time-format": "2.1.1", + "d3-timer": "1.0.7", + "d3-transition": "1.1.1", + "d3-voronoi": "1.1.2", + "d3-zoom": "1.7.1" + } + }, + "d3-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-1.2.1.tgz", + "integrity": "sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw==", + "dev": true + }, + "d3-axis": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-1.0.8.tgz", + "integrity": "sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo=", + "dev": true + }, + "d3-brush": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-1.0.4.tgz", + "integrity": "sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q=", + "dev": true, + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "d3-chord": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-1.0.4.tgz", + "integrity": "sha1-fexPC6iG9xP+ERxF92NBT290yiw=", + "dev": true, + "requires": { + "d3-array": "1", + "d3-path": "1" + } + }, + "d3-collection": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/d3-collection/-/d3-collection-1.0.4.tgz", + "integrity": "sha1-NC39EoN8kJdPM/HMCnha6lcNzcI=", + "dev": true + }, + "d3-color": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-1.0.3.tgz", + "integrity": "sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs=", + "dev": true + }, + "d3-dispatch": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-1.0.3.tgz", + "integrity": "sha1-RuFJHqqbWMNY/OW+TovtYm54cfg=", + "dev": true + }, + "d3-drag": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-1.2.1.tgz", + "integrity": "sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ==", + "dev": true, + "requires": { + "d3-dispatch": "1", + "d3-selection": "1" + } + }, + "d3-dsv": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-1.0.8.tgz", + "integrity": "sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A==", + "dev": true, + "requires": { + "commander": "2", + "iconv-lite": "0.4", + "rw": "1" + } + }, + "d3-ease": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-1.0.3.tgz", + "integrity": "sha1-aL+8NJM4o4DETYrMT7wzBKotjA4=", + "dev": true + }, + "d3-force": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-1.1.0.tgz", + "integrity": "sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg==", + "dev": true, + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-quadtree": "1", + "d3-timer": "1" + } + }, + "d3-format": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-1.2.2.tgz", + "integrity": "sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw==", + "dev": true + }, + "d3-geo": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-1.9.1.tgz", + "integrity": "sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA==", + "dev": true, + "requires": { + "d3-array": "1" + } + }, + "d3-hierarchy": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz", + "integrity": "sha1-ochFxC+Eoga88cAcAQmOpN2qeiY=", + "dev": true + }, + "d3-interpolate": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-1.1.6.tgz", + "integrity": "sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A==", + "dev": true, + "requires": { + "d3-color": "1" + } + }, + "d3-path": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.5.tgz", + "integrity": "sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q=", + "dev": true + }, + "d3-polygon": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-1.0.3.tgz", + "integrity": "sha1-FoiOkCZGCTPysXllKtN4Ik04LGI=", + "dev": true + }, + "d3-quadtree": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-1.0.3.tgz", + "integrity": "sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg=", + "dev": true + }, + "d3-queue": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/d3-queue/-/d3-queue-3.0.7.tgz", + "integrity": "sha1-yTouVLQXwJWRKdfXP2z31Ckudhg=", + "dev": true + }, + "d3-random": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-1.1.0.tgz", + "integrity": "sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM=", + "dev": true + }, + "d3-request": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/d3-request/-/d3-request-1.0.6.tgz", + "integrity": "sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w==", + "dev": true, + "requires": { + "d3-collection": "1", + "d3-dispatch": "1", + "d3-dsv": "1", + "xmlhttprequest": "1" + } + }, + "d3-scale": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-1.0.7.tgz", + "integrity": "sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw==", + "dev": true, + "requires": { + "d3-array": "^1.2.0", + "d3-collection": "1", + "d3-color": "1", + "d3-format": "1", + "d3-interpolate": "1", + "d3-time": "1", + "d3-time-format": "2" + } + }, + "d3-selection": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-1.3.0.tgz", + "integrity": "sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA==", + "dev": true + }, + "d3-shape": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.2.0.tgz", + "integrity": "sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c=", + "dev": true, + "requires": { + "d3-path": "1" + } + }, + "d3-time": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-1.0.8.tgz", + "integrity": "sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ==", + "dev": true + }, + "d3-time-format": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-2.1.1.tgz", + "integrity": "sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw==", + "dev": true, + "requires": { + "d3-time": "1" + } + }, + "d3-timer": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-1.0.7.tgz", + "integrity": "sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA==", + "dev": true + }, + "d3-transition": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-1.1.1.tgz", + "integrity": "sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ==", + "dev": true, + "requires": { + "d3-color": "1", + "d3-dispatch": "1", + "d3-ease": "1", + "d3-interpolate": "1", + "d3-selection": "^1.1.0", + "d3-timer": "1" + } + }, + "d3-voronoi": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/d3-voronoi/-/d3-voronoi-1.1.2.tgz", + "integrity": "sha1-Fodmfo8TotFYyAwUgMWinLDYlzw=", + "dev": true + }, + "d3-zoom": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-1.7.1.tgz", + "integrity": "sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ==", + "dev": true, + "requires": { + "d3-dispatch": "1", + "d3-drag": "1", + "d3-interpolate": "1", + "d3-selection": "1", + "d3-transition": "1" + } + }, + "dash-ast": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dash-ast/-/dash-ast-1.0.0.tgz", + "integrity": "sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA==", + "dev": true + }, + "dashdash": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", + "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0" + } + }, + "data-urls": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-1.1.0.tgz", + "integrity": "sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "whatwg-mimetype": "^2.2.0", + "whatwg-url": "^7.0.0" + } + }, + "de-indent": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/de-indent/-/de-indent-1.0.2.tgz", + "integrity": "sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0=", + "dev": true + }, + "debug": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", + "dev": true, + "requires": { + "ms": "2.1.2" + } + }, + "decamelize": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", + "integrity": "sha1-9lNNFRSCabIDUue+4m9QH5oZEpA=", + "dev": true + }, + "decamelize-keys": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", + "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", + "dev": true, + "requires": { + "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=", + "dev": true + }, + "decompress-response": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-4.2.1.tgz", + "integrity": "sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw==", + "dev": true, + "requires": { + "mimic-response": "^2.0.0" + } + }, + "deep-equal": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/deep-equal/-/deep-equal-1.1.1.tgz", + "integrity": "sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g==", + "dev": true, + "requires": { + "is-arguments": "^1.0.4", + "is-date-object": "^1.0.1", + "is-regex": "^1.0.4", + "object-is": "^1.0.1", + "object-keys": "^1.1.1", + "regexp.prototype.flags": "^1.2.0" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true + }, + "deep-is": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.3.tgz", + "integrity": "sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ=", + "dev": true + }, + "deepmerge": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", + "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", + "dev": true + }, + "define-properties": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.1.3.tgz", + "integrity": "sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ==", + "dev": true, + "requires": { + "object-keys": "^1.0.12" + } + }, + "define-property": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-2.0.2.tgz", + "integrity": "sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==", + "dev": true, + "requires": { + "is-descriptor": "^1.0.2", + "isobject": "^3.0.1" + }, + "dependencies": { + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM=", + "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 + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "depd": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/depd/-/depd-1.1.2.tgz", + "integrity": "sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak=", + "dev": true + }, + "dependency-graph": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/dependency-graph/-/dependency-graph-0.9.0.tgz", + "integrity": "sha512-9YLIBURXj4DJMFALxXw9K3Y3rwb5Fk0X5/8ipCzaN84+gKxoHK43tVKRNakCQbiEx07E8Uwhuq21BpUagFhZ8w==", + "dev": true + }, + "deprecation": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", + "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", + "dev": true + }, + "deps-sort": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/deps-sort/-/deps-sort-2.0.1.tgz", + "integrity": "sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "shasum-object": "^1.0.0", + "subarg": "^1.0.0", + "through2": "^2.0.0" + } + }, + "des.js": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.1.tgz", + "integrity": "sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA==", + "dev": true, + "requires": { + "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=", + "dev": true + }, + "detab": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/detab/-/detab-2.0.4.tgz", + "integrity": "sha512-8zdsQA5bIkoRECvCrNKPla84lyoR7DSAyf7p0YgXzBO9PDJx8KntPUay7NS6yp+KdxdVtiE5SpHKtbp2ZQyA9g==", + "dev": true, + "requires": { + "repeat-string": "^1.5.4" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true + }, + "detective": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.0.tgz", + "integrity": "sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg==", + "dev": true, + "requires": { + "acorn-node": "^1.6.1", + "defined": "^1.0.0", + "minimist": "^1.1.1" + } + }, + "diff": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/diff/-/diff-4.0.2.tgz", + "integrity": "sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==", + "dev": true + }, + "diffie-hellman": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/diffie-hellman/-/diffie-hellman-5.0.3.tgz", + "integrity": "sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "miller-rabin": "^4.0.0", + "randombytes": "^2.0.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 + } + } + }, + "dir-glob": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-2.2.2.tgz", + "integrity": "sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw==", + "dev": true, + "requires": { + "path-type": "^3.0.0" + } + }, + "doctrine": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", + "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "doctrine-temporary-fork": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine-temporary-fork/-/doctrine-temporary-fork-2.1.0.tgz", + "integrity": "sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "documentation": { + "version": "12.1.4", + "resolved": "https://registry.npmjs.org/documentation/-/documentation-12.1.4.tgz", + "integrity": "sha512-GGS635tR8bBR/m/AuUZ6MCZmFXZA25Wk9S/TTHNe+EMkTCoDdlcft56dZCjF7voCmfnMqKRo8sXAukf/ciA5IA==", + "dev": true, + "requires": { + "@babel/core": "^7.1.2", + "@babel/generator": "^7.1.3", + "@babel/parser": "7.1.3", + "@babel/plugin-proposal-class-properties": "^7.1.0", + "@babel/plugin-proposal-decorators": "^7.1.2", + "@babel/plugin-proposal-do-expressions": "^7.0.0", + "@babel/plugin-proposal-export-default-from": "^7.0.0", + "@babel/plugin-proposal-export-namespace-from": "^7.0.0", + "@babel/plugin-proposal-function-bind": "^7.0.0", + "@babel/plugin-proposal-function-sent": "^7.1.0", + "@babel/plugin-proposal-json-strings": "^7.0.0", + "@babel/plugin-proposal-logical-assignment-operators": "^7.0.0", + "@babel/plugin-proposal-nullish-coalescing-operator": "^7.0.0", + "@babel/plugin-proposal-numeric-separator": "^7.0.0", + "@babel/plugin-proposal-optional-chaining": "^7.0.0", + "@babel/plugin-proposal-pipeline-operator": "^7.0.0", + "@babel/plugin-proposal-throw-expressions": "^7.0.0", + "@babel/plugin-syntax-dynamic-import": "^7.0.0", + "@babel/plugin-syntax-import-meta": "^7.0.0", + "@babel/preset-env": "^7.1.0", + "@babel/preset-flow": "^7.0.0", + "@babel/preset-react": "^7.0.0", + "@babel/preset-stage-0": "^7.0.0", + "@babel/traverse": "^7.1.4", + "@babel/types": "^7.1.3", + "ansi-html": "^0.0.7", + "babelify": "^10.0.0", + "chalk": "^2.3.0", + "chokidar": "^2.0.4", + "concat-stream": "^1.6.0", + "diff": "^4.0.1", + "doctrine-temporary-fork": "2.1.0", + "get-port": "^4.0.0", + "git-url-parse": "^11.1.2", + "github-slugger": "1.2.0", + "glob": "^7.1.2", + "globals-docs": "^2.4.0", + "highlight.js": "^9.15.5", + "ini": "^1.3.5", + "js-yaml": "^3.10.0", + "lodash": "^4.17.10", + "mdast-util-inject": "^1.1.0", + "micromatch": "^3.1.5", + "mime": "^2.2.0", + "module-deps-sortable": "5.0.0", + "parse-filepath": "^1.0.2", + "pify": "^4.0.0", + "read-pkg-up": "^4.0.0", + "remark": "^9.0.0", + "remark-html": "^8.0.0", + "remark-reference-links": "^4.0.1", + "remark-toc": "^5.0.0", + "resolve": "^1.8.1", + "stream-array": "^1.1.2", + "strip-json-comments": "^2.0.1", + "tiny-lr": "^1.1.0", + "unist-builder": "^1.0.2", + "unist-util-visit": "^1.3.0", + "vfile": "^4.0.0", + "vfile-reporter": "^6.0.0", + "vfile-sort": "^2.1.0", + "vinyl": "^2.1.0", + "vinyl-fs": "^3.0.2", + "vue-template-compiler": "^2.5.16", + "yargs": "^12.0.2" + }, + "dependencies": { + "@babel/parser": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.1.3.tgz", + "integrity": "sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w==", + "dev": true + }, + "acorn": { + "version": "5.7.4", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.7.4.tgz", + "integrity": "sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "anymatch": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-2.0.0.tgz", + "integrity": "sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw==", + "dev": true, + "requires": { + "micromatch": "^3.1.4", + "normalize-path": "^2.1.1" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "binary-extensions": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-1.13.1.tgz", + "integrity": "sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw==", + "dev": true + }, + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + } + }, + "browser-resolve": { + "version": "1.11.3", + "resolved": "https://registry.npmjs.org/browser-resolve/-/browser-resolve-1.11.3.tgz", + "integrity": "sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ==", + "dev": true, + "requires": { + "resolve": "1.1.7" + }, + "dependencies": { + "resolve": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.1.7.tgz", + "integrity": "sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs=", + "dev": true + } + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "chokidar": { + "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" + } + }, + "detective": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-4.7.1.tgz", + "integrity": "sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig==", + "dev": true, + "requires": { + "acorn": "^5.2.1", + "defined": "^1.0.0" + } + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "dev": true, + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } + }, + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "is-binary-path": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-1.0.1.tgz", + "integrity": "sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg=", + "dev": true, + "requires": { + "binary-extensions": "^1.0.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-fullwidth-code-point": { + "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 + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + }, + "module-deps-sortable": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/module-deps-sortable/-/module-deps-sortable-5.0.0.tgz", + "integrity": "sha512-bnGGeghQmz/t/6771/KC4FmxpVm126iR6AAzzq4N6hVZQVl4+ZZBv+VF3PJmDyxXtVtgcgTSSP7NL+jq1QAHrg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^1.7.0", + "cached-path-relative": "^1.0.0", + "concat-stream": "~1.5.0", + "defined": "^1.0.0", + "detective": "^4.0.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "readable-stream": "^2.0.2", + "resolve": "^1.1.3", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + }, + "dependencies": { + "concat-stream": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/concat-stream/-/concat-stream-1.5.2.tgz", + "integrity": "sha1-cIl4Yk2FavQaWnQd790mHadSwmY=", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "~2.0.0", + "typedarray": "~0.0.5" + }, + "dependencies": { + "readable-stream": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.0.6.tgz", + "integrity": "sha1-j5A0HmilPMySh4jaz80Rs265t44=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + } + } + } + } + }, + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readdirp": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-2.2.1.tgz", + "integrity": "sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "micromatch": "^3.1.10", + "readable-stream": "^2.0.2" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + }, + "vfile-reporter": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-6.0.2.tgz", + "integrity": "sha512-GN2bH2gs4eLnw/4jPSgfBjo+XCuvnX9elHICJZjVD4+NM0nsUrMTvdjGY5Sc/XG69XVTgLwj7hknQVc6M9FukA==", + "dev": true, + "requires": { + "repeat-string": "^1.5.0", + "string-width": "^4.0.0", + "supports-color": "^6.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-sort": "^2.1.2", + "vfile-statistics": "^1.1.0" + }, + "dependencies": { + "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" + } + } + } + } + } + }, + "dom-serializer": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-0.2.2.tgz", + "integrity": "sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "entities": "^2.0.0" + }, + "dependencies": { + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + } + } + }, + "domain-browser": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", + "integrity": "sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA==", + "dev": true + }, + "domelementtype": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-1.3.1.tgz", + "integrity": "sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w==", + "dev": true + }, + "domexception": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/domexception/-/domexception-1.0.1.tgz", + "integrity": "sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug==", + "dev": true, + "requires": { + "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==", + "dev": true, + "requires": { + "domelementtype": "1" + } + }, + "domutils": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-1.7.0.tgz", + "integrity": "sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg==", + "dev": true, + "requires": { + "dom-serializer": "0", + "domelementtype": "1" + } + }, + "dot-prop": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", + "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", + "dev": true, + "requires": { + "is-obj": "^2.0.0" + } + }, + "dotignore": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/dotignore/-/dotignore-0.1.2.tgz", + "integrity": "sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "duplexer": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz", + "integrity": "sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==", + "dev": true + }, + "duplexer2": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", + "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "duplexer3": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/duplexer3/-/duplexer3-0.1.4.tgz", + "integrity": "sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI=", + "dev": true + }, + "duplexify": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.7.1.tgz", + "integrity": "sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==", + "dev": true, + "requires": { + "end-of-stream": "^1.0.0", + "inherits": "^2.0.1", + "readable-stream": "^2.0.0", + "stream-shift": "^1.0.0" + } + }, + "earcut": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", + "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==" + }, + "ecc-jsbn": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", + "integrity": "sha1-OoOpBOVDUyh4dMVkt1SThoSamMk=", + "dev": true, + "requires": { + "jsbn": "~0.1.0", + "safer-buffer": "^2.1.0" + } + }, + "ecdsa-sig-formatter": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz", + "integrity": "sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=", + "dev": true + }, + "ejs": { + "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.779", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.779.tgz", + "integrity": "sha512-nreave0y/1Qhmo8XtO6C/LpawNyC6U26+q7d814/e+tIqUK073pM+4xW7WUXyqCRa5K4wdxHmNMBAi8ap9nEew==", + "dev": true + }, + "elliptic": { + "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": { + "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 + } + } + }, + "emoji-regex": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-6.1.1.tgz", + "integrity": "sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4=", + "dev": true + }, + "encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=", + "dev": true + }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "engine.io": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/engine.io/-/engine.io-5.1.1.tgz", + "integrity": "sha512-aMWot7H5aC8L4/T8qMYbLdvKlZOdJTH54FxfdFunTGvhMx1BHkJOntWArsVfgAZVwAO9LC2sryPWRcEeUzCe5w==", + "dev": true, + "requires": { + "accepts": "~1.3.4", + "base64id": "2.0.0", + "cookie": "~0.4.1", + "cors": "~2.8.5", + "debug": "~4.3.1", + "engine.io-parser": "~4.0.0", + "ws": "~7.4.2" + }, + "dependencies": { + "cookie": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.1.tgz", + "integrity": "sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==", + "dev": true + }, + "ws": { + "version": "7.4.6", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.4.6.tgz", + "integrity": "sha512-YmhHDO4MzaDLB+M9ym/mDA5z0naX8j7SIlT8f8z+I0VtzsRbekxEutHSme7NPS2qE8StCYQNUnfWdXta/Yu85A==", + "dev": true + } + } + }, + "engine.io-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/engine.io-parser/-/engine.io-parser-4.0.2.tgz", + "integrity": "sha512-sHfEQv6nmtJrq6TKuIz5kyEKH/qSdK56H/A+7DnAuUPWosnIZAS2NHNcPLmyjtY3cGS/MqJdZbUjW97JU72iYg==", + "dev": true, + "requires": { + "base64-arraybuffer": "0.1.4" + } + }, + "enquirer": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/enquirer/-/enquirer-2.3.6.tgz", + "integrity": "sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==", + "dev": true, + "requires": { + "ansi-colors": "^4.1.1" + } + }, + "entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "dev": true + }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, + "error": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/error/-/error-7.2.1.tgz", + "integrity": "sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA==", + "dev": true, + "requires": { + "string-template": "~0.2.1" + } + }, + "error-ex": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", + "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es-abstract": { + "version": "1.18.3", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.18.3.tgz", + "integrity": "sha512-nQIr12dxV7SSxE6r6f1l3DtAeEYdsGpps13dR0TwJg1S8gyp4ZPgy3FZcHBgbiQqnoqSTb+oC+kO4UQ0C/J8vw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "es-to-primitive": "^1.2.1", + "function-bind": "^1.1.1", + "get-intrinsic": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.2", + "is-callable": "^1.2.3", + "is-negative-zero": "^2.0.1", + "is-regex": "^1.1.3", + "is-string": "^1.0.6", + "object-inspect": "^1.10.3", + "object-keys": "^1.1.1", + "object.assign": "^4.1.2", + "string.prototype.trimend": "^1.0.4", + "string.prototype.trimstart": "^1.0.4", + "unbox-primitive": "^1.0.1" + } + }, + "es-to-primitive": { + "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" + } + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } + }, + "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", + "integrity": "sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=", + "dev": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", + "dev": true + }, + "escodegen": { + "version": "1.14.3", + "resolved": "https://registry.npmjs.org/escodegen/-/escodegen-1.14.3.tgz", + "integrity": "sha512-qFcX0XJkdg+PB3xjZZG/wKSuT1PnQWx57+TVSjIMmILd2yC/6ByYElPwJnslDsuWuSAp4AwJGumarAAmJch5Kw==", + "dev": true, + "requires": { + "esprima": "^4.0.1", + "estraverse": "^4.2.0", + "esutils": "^2.0.2", + "optionator": "^0.8.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "optional": true + } + } + }, + "eslint": { + "version": "7.32.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-7.32.0.tgz", + "integrity": "sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==", + "dev": true, + "requires": { + "@babel/code-frame": "7.12.11", + "@eslint/eslintrc": "^0.4.3", + "@humanwhocodes/config-array": "^0.5.0", + "ajv": "^6.10.0", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.0.1", + "doctrine": "^3.0.0", + "enquirer": "^2.3.5", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^5.1.1", + "eslint-utils": "^2.1.0", + "eslint-visitor-keys": "^2.0.0", + "espree": "^7.3.1", + "esquery": "^1.4.0", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "functional-red-black-tree": "^1.0.1", + "glob-parent": "^5.1.2", + "globals": "^13.6.0", + "ignore": "^4.0.6", + "import-fresh": "^3.0.0", + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "js-yaml": "^3.13.1", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.0.4", + "natural-compare": "^1.4.0", + "optionator": "^0.9.1", + "progress": "^2.0.0", + "regexpp": "^3.1.0", + "semver": "^7.2.1", + "strip-ansi": "^6.0.0", + "strip-json-comments": "^3.1.0", + "table": "^6.0.9", + "text-table": "^0.2.0", + "v8-compile-cache": "^2.0.3" + }, + "dependencies": { + "@babel/code-frame": { + "version": "7.12.11", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", + "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", + "dev": true, + "requires": { + "@babel/highlight": "^7.10.4" + } + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "astral-regex": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/astral-regex/-/astral-regex-2.0.0.tgz", + "integrity": "sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==", + "dev": true + }, + "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": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "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" + } + }, + "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 + }, + "escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", + "dev": true + }, + "eslint-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", + "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^1.1.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "globals": { + "version": "13.10.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.10.0.tgz", + "integrity": "sha512-piHC3blgLGFjvOuMmWZX60f+na1lXFDhQXBf1UYp2fXPXqvEUbOhNwi6BsQ0bQishwedgnjkwv1d9zKf+MWw3g==", + "dev": true, + "requires": { + "type-fest": "^0.20.2" + } + }, + "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 + }, + "import-fresh": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", + "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "dev": true, + "requires": { + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" + } + }, + "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 + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", + "dev": true + }, + "levn": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", + "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" + } + }, + "optionator": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.1.tgz", + "integrity": "sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==", + "dev": true, + "requires": { + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0", + "word-wrap": "^1.2.3" + } + }, + "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 + }, + "prelude-ls": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", + "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", + "dev": true + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "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 + }, + "slice-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz", + "integrity": "sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "astral-regex": "^2.0.0", + "is-fullwidth-code-point": "^3.0.0" + } + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "strip-json-comments": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", + "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", + "dev": true + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "table": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/table/-/table-6.7.1.tgz", + "integrity": "sha512-ZGum47Yi6KOOFDE8m223td53ath2enHcYLgOCjGr5ngu8bdIARQk6mN/wRMv4yMRcHnCSnHbCEha4sobQx5yWg==", + "dev": true, + "requires": { + "ajv": "^8.0.1", + "lodash.clonedeep": "^4.5.0", + "lodash.truncate": "^4.4.2", + "slice-ansi": "^4.0.0", + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ajv": { + "version": "8.6.2", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.2.tgz", + "integrity": "sha512-9807RlWAgT564wT+DjeyU5OFMPjmzxVobvDFmNAhY+5zD6A2ly3jDp6sgnfyDtlIQ+7H97oc/DGCzzfu9rjw9w==", + "dev": true, + "requires": { + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + } + } + } + }, + "type-check": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", + "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", + "dev": true, + "requires": { + "prelude-ls": "^1.2.1" + } + }, + "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" + } + } + } + }, + "eslint-config-mourner": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-config-mourner/-/eslint-config-mourner-3.0.0.tgz", + "integrity": "sha512-QWMt3Cbqkhg/73fZ2UrTNa/p27nF3JhI1Ej2Jg7qSBri88Y0bg4LFzz0/6I5IrvFR10c6UPwDS+DsV9Ec42aVQ==", + "dev": true + }, + "eslint-import-resolver-node": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.5.tgz", + "integrity": "sha512-XMoPKjSpXbkeJ7ZZ9icLnJMTY5Mc1kZbCakHquaFsXPpyWOwK0TK6CODO+0ca54UoM9LKOxyUNnoVZRl8TeaAg==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "resolve": "^1.20.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-module-utils": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.6.2.tgz", + "integrity": "sha512-QG8pcgThYOuqxupd06oYTZoNOGaUdTY1PqK+oS6ElF6vs4pBdk/aYxFVQQXzcrAqp9m7cl7lb2ubazX+g16k2Q==", + "dev": true, + "requires": { + "debug": "^3.2.7", + "pkg-dir": "^2.0.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "eslint-plugin-html": { + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-html/-/eslint-plugin-html-6.1.2.tgz", + "integrity": "sha512-bhBIRyZFqI4EoF12lGDHAmgfff8eLXx6R52/K3ESQhsxzCzIE6hdebS7Py651f7U3RBotqroUnC3L29bR7qJWQ==", + "dev": true, + "requires": { + "htmlparser2": "^6.0.1" + }, + "dependencies": { + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "htmlparser2": { + "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": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" + } + } + } + }, + "eslint-plugin-import": { + "version": "2.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.24.0.tgz", + "integrity": "sha512-Kc6xqT9hiYi2cgybOc0I2vC9OgAYga5o/rAFinam/yF/t5uBqxQbauNPMC6fgb640T/89P0gFoO27FOilJ/Cqg==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flat": "^1.2.4", + "debug": "^2.6.9", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.5", + "eslint-module-utils": "^2.6.2", + "find-up": "^2.0.0", + "has": "^1.0.3", + "is-core-module": "^2.4.0", + "minimatch": "^3.0.4", + "object.values": "^1.1.3", + "pkg-up": "^2.0.0", + "read-pkg-up": "^3.0.0", + "resolve": "^1.20.0", + "tsconfig-paths": "^3.9.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "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": { + "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" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "p-limit": { + "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-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.1.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=", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + } + } + } + }, + "eslint-plugin-jsdoc": { + "version": "36.0.6", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-36.0.6.tgz", + "integrity": "sha512-vOm27rI2SMfi1bOAYmzzGkanMCD/boquKwvN5ECi8EF9ASsXJwlnCzYtiOYpsDpbC2+6JXEHAmWMkqYNA3BWRw==", + "dev": true, + "requires": { + "@es-joy/jsdoccomment": "0.10.7", + "comment-parser": "1.2.3", + "debug": "^4.3.2", + "esquery": "^1.4.0", + "jsdoc-type-pratt-parser": "^1.1.1", + "lodash": "^4.17.21", + "regextras": "^0.8.0", + "semver": "^7.3.5", + "spdx-expression-parse": "^3.0.1" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + } + } + }, + "eslint-plugin-react": { + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-react/-/eslint-plugin-react-7.24.0.tgz", + "integrity": "sha512-KJJIx2SYx7PBx3ONe/mEeMz4YE0Lcr7feJTCMyyKb/341NcjuAgim3Acgan89GfPv7nxXK2+0slu0CWXYM4x+Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.3", + "array.prototype.flatmap": "^1.2.4", + "doctrine": "^2.1.0", + "has": "^1.0.3", + "jsx-ast-utils": "^2.4.1 || ^3.0.0", + "minimatch": "^3.0.4", + "object.entries": "^1.1.4", + "object.fromentries": "^2.0.4", + "object.values": "^1.1.4", + "prop-types": "^15.7.2", + "resolve": "^2.0.0-next.3", + "string.prototype.matchall": "^4.0.5" + }, + "dependencies": { + "doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, + "requires": { + "esutils": "^2.0.2" + } + }, + "resolve": { + "version": "2.0.0-next.3", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-2.0.0-next.3.tgz", + "integrity": "sha512-W8LucSynKUIDu9ylraa7ueVZ7hc0uAgJBxVsQSKOXOyle8a93qXhcz+XAXZ8bIq2d6i4Ehddn6Evt+0/UwKk6Q==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + } + } + }, + "eslint-scope": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", + "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + } + } + }, + "eslint-visitor-keys": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", + "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", + "dev": true + }, + "espree": { + "version": "7.3.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-7.3.1.tgz", + "integrity": "sha512-v3JCNCE64umkFpmkFGqzVKsOT0tN1Zr+ueqLZfpV1Ob8e+CEgPWa+OxCoGH3tnhimMKIaBm4m/vaRpJ/krRz2g==", + "dev": true, + "requires": { + "acorn": "^7.4.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^1.3.0" + } + }, + "esprima": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", + "integrity": "sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==", + "dev": true + }, + "espurify": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/espurify/-/espurify-2.1.1.tgz", + "integrity": "sha512-zttWvnkhcDyGOhSH4vO2qCBILpdCMv/MX8lp4cqgRkQoDRGK2oZxi2GfWhlP2dIXmk7BaKeOTuzbHhyC68o8XQ==", + "dev": true + }, + "esquery": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.4.0.tgz", + "integrity": "sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==", + "dev": true, + "requires": { + "estraverse": "^5.1.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "esrecurse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", + "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", + "dev": true, + "requires": { + "estraverse": "^5.2.0" + }, + "dependencies": { + "estraverse": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.2.0.tgz", + "integrity": "sha512-BxbNGGNm0RyRYvUdHpIwv9IWzeM9XClbOxwoATuFdOE7ZE6wHL+HQ5T8hoPM+zHvmKzzsEqhgy0GrQ5X13afiQ==", + "dev": true + } + } + }, + "estraverse": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", + "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "dev": true + }, + "estree-walker": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", + "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", + "dev": true + }, + "esutils": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", + "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", + "dev": true + }, + "etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=", + "dev": true + }, + "eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==", + "dev": true + }, + "events": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/events/-/events-2.1.0.tgz", + "integrity": "sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg==", + "dev": true + }, + "events-to-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/events-to-array/-/events-to-array-1.1.2.tgz", + "integrity": "sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y=", + "dev": true + }, + "evp_bytestokey": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz", + "integrity": "sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==", + "dev": true, + "requires": { + "md5.js": "^1.3.4", + "safe-buffer": "^5.1.1" + } + }, + "execa": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-1.0.0.tgz", + "integrity": "sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "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" + } + } + } + }, + "execall": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/execall/-/execall-1.0.0.tgz", + "integrity": "sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M=", + "dev": true, + "requires": { + "clone-regexp": "^1.0.0" + } + }, + "expand-brackets": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-2.1.4.tgz", + "integrity": "sha1-t3c14xXOMPa27/D4OwQVGiJEliI=", + "dev": true, + "requires": { + "debug": "^2.3.3", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "posix-character-classes": "^0.1.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "expand-template": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", + "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", + "dev": true + }, + "express": { + "version": "4.17.1", + "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", + "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", + "dev": true, + "requires": { + "accepts": "~1.3.7", + "array-flatten": "1.1.1", + "body-parser": "1.19.0", + "content-disposition": "0.5.3", + "content-type": "~1.0.4", + "cookie": "0.4.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "~1.1.2", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "~1.1.2", + "fresh": "0.5.2", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.5", + "qs": "6.7.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.1.2", + "send": "0.17.1", + "serve-static": "1.14.1", + "setprototypeof": "1.1.1", + "statuses": "~1.5.0", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w=", + "dev": true + }, + "qs": { + "version": "6.7.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", + "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", + "dev": true + } + } + }, + "extend": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", + "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", + "dev": true + }, + "extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg=", + "dev": true, + "requires": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "extglob": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-2.0.4.tgz", + "integrity": "sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw==", + "dev": true, + "requires": { + "array-unique": "^0.3.2", + "define-property": "^1.0.0", + "expand-brackets": "^2.1.4", + "extend-shallow": "^2.0.1", + "fragment-cache": "^0.2.1", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "extract-zip": { + "version": "1.7.0", + "resolved": "https://registry.npmjs.org/extract-zip/-/extract-zip-1.7.0.tgz", + "integrity": "sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==", + "dev": true, + "requires": { + "concat-stream": "^1.6.2", + "debug": "^2.6.9", + "mkdirp": "^0.5.4", + "yauzl": "^2.10.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "extsprintf": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", + "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", + "dev": true + }, + "fast-deep-equal": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", + "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", + "dev": true + }, + "fast-glob": { + "version": "2.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-2.2.7.tgz", + "integrity": "sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw==", + "dev": true, + "requires": { + "@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" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + }, + "dependencies": { + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + } + } + }, + "fast-json-stable-stringify": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", + "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", + "dev": true + }, + "fast-levenshtein": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", + "integrity": "sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc=", + "dev": true + }, + "fast-safe-stringify": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/fast-safe-stringify/-/fast-safe-stringify-2.0.8.tgz", + "integrity": "sha512-lXatBjf3WPjmWD6DpIZxkeSsCOwqI0maYMpgDlx8g4U2qi4lbjA9oH/HD2a87G+KfsUmo5WbJFmqBZlPxtptag==", + "dev": true + }, + "fastq": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.11.1.tgz", + "integrity": "sha512-HOnr8Mc60eNYl1gzwp6r5RoUyAn5/glBolUzP/Ez6IFVPMPirxn/9phgL6zhOtaTy7ISwPvQ+wT+hfcRZh/bzw==", + "dev": true, + "requires": { + "reusify": "^1.0.4" + } + }, + "faye-websocket": { + "version": "0.10.0", + "resolved": "https://registry.npmjs.org/faye-websocket/-/faye-websocket-0.10.0.tgz", + "integrity": "sha1-TkkvjQTftviQA1B/btvy1QHnxvQ=", + "dev": true, + "requires": { + "websocket-driver": ">=0.5.1" + } + }, + "fd": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/fd/-/fd-0.0.3.tgz", + "integrity": "sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA==", + "dev": true + }, + "fd-slicer": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/fd-slicer/-/fd-slicer-1.1.0.tgz", + "integrity": "sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=", + "dev": true, + "requires": { + "pend": "~1.2.0" + } + }, + "file-entry-cache": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", + "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "dev": true, + "requires": { + "flat-cache": "^3.0.4" + }, + "dependencies": { + "flat-cache": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", + "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", + "dev": true, + "requires": { + "flatted": "^3.1.0", + "rimraf": "^3.0.2" + } + }, + "flatted": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.2.tgz", + "integrity": "sha512-JaTY/wtrcSyvXJl4IMFHPKyFur1sE9AUqc0QnhOaJ0CxHtAoIV8pYDzeEfAaNEtGkOfq4gr3LBFmdXW5mOQFnA==", + "dev": true + } + } + }, + "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 + }, + "filelist": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.2.tgz", + "integrity": "sha512-z7O0IS8Plc39rTCq6i6iHxk43duYOn8uFJiWSewIq0Bww1RNybVHSCjahmcC87ZqAm4OTvFzlzeGu3XAzG1ctQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "filter-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/filter-obj/-/filter-obj-1.1.0.tgz", + "integrity": "sha1-mzERErxsYSehbgFsbF1/GeCAXFs=", + "dev": true + }, + "finalhandler": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.1.2.tgz", + "integrity": "sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA==", + "dev": true, + "requires": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "~2.3.0", + "parseurl": "~1.3.3", + "statuses": "~1.5.0", + "unpipe": "~1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "find-up": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-3.0.0.tgz", + "integrity": "sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg==", + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "fireworm": { + "version": "0.7.1", + "resolved": "https://registry.npmjs.org/fireworm/-/fireworm-0.7.1.tgz", + "integrity": "sha1-zPIPeUHxCIg/zduZOD2+bhhhx1g=", + "dev": true, + "requires": { + "async": "~0.2.9", + "is-type": "0.0.1", + "lodash.debounce": "^3.1.1", + "lodash.flatten": "^3.0.2", + "minimatch": "^3.0.2" + }, + "dependencies": { + "lodash.debounce": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-3.1.1.tgz", + "integrity": "sha1-gSIRw3ipTMKdWqTjNGzwv846ffU=", + "dev": true, + "requires": { + "lodash._getnative": "^3.0.0" + } + } + } + }, + "flat-cache": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-2.0.1.tgz", + "integrity": "sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA==", + "dev": true, + "requires": { + "flatted": "^2.0.0", + "rimraf": "2.6.3", + "write": "1.0.3" + }, + "dependencies": { + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "flatted": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-2.0.2.tgz", + "integrity": "sha512-r5wGx7YeOwNWNlCA0wQ86zKyDLMQr+/RB8xy74M4hTphfmjlijTSSXGuH8rnvKZnfT9i+75zmd8jcKdMR4O6jA==", + "dev": true + }, + "flush-write-stream": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.1.1.tgz", + "integrity": "sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "readable-stream": "^2.3.6" + } + }, + "follow-redirects": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.14.1.tgz", + "integrity": "sha512-HWqDgT7ZEkqRzBvc2s64vSZ/hfOceEol3ac/7tKwzuvEyWx3/4UegXh5oBOIotkGsObyk3xznnSRVADBgWSQVg==", + "dev": true + }, + "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": { + "is-callable": "^1.1.3" + } + }, + "for-in": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", + "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", + "dev": true + }, + "foreground-child": { + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-1.5.6.tgz", + "integrity": "sha1-T9ca0t/elnibmApcCilZN8svXOk=", + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + }, + "dependencies": { + "cross-spawn": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-4.0.2.tgz", + "integrity": "sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE=", + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "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 + } + } + }, + "forever-agent": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", + "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", + "dev": true + }, + "form-data": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", + "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", + "dev": true, + "requires": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.6", + "mime-types": "^2.1.12" + } + }, + "forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "dev": true + }, + "fragment-cache": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", + "integrity": "sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk=", + "dev": true, + "requires": { + "map-cache": "^0.2.2" + } + }, + "fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=", + "dev": true + }, + "fs-constants": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", + "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", + "dev": true + }, + "fs-exists-cached": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz", + "integrity": "sha1-zyVVTKBQ3EmuZla0HeQiWJidy84=", + "dev": true + }, + "fs-extra": { + "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", + "dev": true, + "requires": { + "at-least-node": "^1.0.0", + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + } + }, + "fs-minipass": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", + "integrity": "sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==", + "dev": true, + "requires": { + "minipass": "^3.0.0" + } + }, + "fs-mkdirp-stream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz", + "integrity": "sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "through2": "^2.0.3" + } + }, + "fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", + "dev": true + }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "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, + "requires": { + "graceful-fs": "^4.1.2", + "inherits": "~2.0.0", + "mkdirp": ">=0.5 0", + "rimraf": "2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "function-bind": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", + "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", + "dev": true + }, + "function-loop": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/function-loop/-/function-loop-1.0.2.tgz", + "integrity": "sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA==", + "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 + }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "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.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "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-assigned-identifiers": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz", + "integrity": "sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ==", + "dev": true + }, + "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.1", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.1.1.tgz", + "integrity": "sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has": "^1.0.3", + "has-symbols": "^1.0.1" + } + }, + "get-npm-tarball-url": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/get-npm-tarball-url/-/get-npm-tarball-url-2.0.2.tgz", + "integrity": "sha512-2dPhgT0K4pVyciTqdS0gr9nEwyCQwt9ql1/t5MCUMvcjWjAysjGJgT7Sx4n6oq3tFBjBN238mxX4RfTjT3838Q==", + "dev": true, + "requires": { + "normalize-registry-url": "^1.0.0" + } + }, + "get-port": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/get-port/-/get-port-4.2.0.tgz", + "integrity": "sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw==", + "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": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==" + }, + "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" + } + }, + "git-up": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/git-up/-/git-up-4.0.5.tgz", + "integrity": "sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "parse-url": "^6.0.0" + } + }, + "git-url-parse": { + "version": "11.5.0", + "resolved": "https://registry.npmjs.org/git-url-parse/-/git-url-parse-11.5.0.tgz", + "integrity": "sha512-TZYSMDeM37r71Lqg1mbnMlOqlHd7BSij9qN7XwTkRqSAYFMihGLGhfHwgqQob3GUhEneKnV4nskN9rbQw2KGxA==", + "dev": true, + "requires": { + "git-up": "^4.0.0" + } + }, + "github-from-package": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", + "integrity": "sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4=", + "dev": true + }, + "github-slugger": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.2.0.tgz", + "integrity": "sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q==", + "dev": true, + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "gl": { + "version": "4.9.0", + "resolved": "https://registry.npmjs.org/gl/-/gl-4.9.0.tgz", + "integrity": "sha512-5Qz8fM4kO4xTo/Ofv80hq/iXEGNlMxOCSo1+9cvT9CX/j84tIFBsbFLXkBVFZiKulA3H2VPQGSs0qZIMwv3KEA==", + "dev": true, + "requires": { + "bindings": "^1.5.0", + "bit-twiddle": "^1.0.2", + "glsl-tokenizer": "^2.0.2", + "nan": "^2.14.1", + "node-abi": "^2.18.0", + "node-gyp": "^7.1.0", + "prebuild-install": "^5.3.5" + } + }, + "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.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.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "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, + "requires": { + "is-glob": "^4.0.1" + } + }, + "glob-stream": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/glob-stream/-/glob-stream-6.1.0.tgz", + "integrity": "sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ=", + "dev": true, + "requires": { + "extend": "^3.0.0", + "glob": "^7.1.1", + "glob-parent": "^3.1.0", + "is-negated-glob": "^1.0.0", + "ordered-read-streams": "^1.0.0", + "pumpify": "^1.3.5", + "readable-stream": "^2.1.5", + "remove-trailing-separator": "^1.0.1", + "to-absolute-glob": "^2.0.0", + "unique-stream": "^2.0.2" + }, + "dependencies": { + "glob-parent": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-3.1.0.tgz", + "integrity": "sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4=", + "dev": true, + "requires": { + "is-glob": "^3.1.0", + "path-dirname": "^1.0.0" + } + }, + "is-glob": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-3.1.0.tgz", + "integrity": "sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo=", + "dev": true, + "requires": { + "is-extglob": "^2.1.0" + } + } + } + }, + "glob-to-regexp": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz", + "integrity": "sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs=", + "dev": true + }, + "global-modules": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", + "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", + "dev": true, + "requires": { + "global-prefix": "^3.0.0" + } + }, + "global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "requires": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + } + }, + "globals": { + "version": "11.12.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", + "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", + "dev": true + }, + "globals-docs": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/globals-docs/-/globals-docs-2.4.1.tgz", + "integrity": "sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg==", + "dev": true + }, + "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.6", + "glob": "^7.1.3", + "ignore": "^4.0.3", + "pify": "^4.0.1", + "slash": "^2.0.0" + } + }, + "globjoin": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/globjoin/-/globjoin-0.1.4.tgz", + "integrity": "sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM=", + "dev": true + }, + "glsl-tokenizer": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz", + "integrity": "sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA==", + "dev": true, + "requires": { + "through2": "^0.6.3" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + }, + "readable-stream": { + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + }, + "through2": { + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg=", + "dev": true, + "requires": { + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" + } + } + } + }, + "gonzales-pe": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/gonzales-pe/-/gonzales-pe-4.3.0.tgz", + "integrity": "sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "got": { + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/got/-/got-6.7.1.tgz", + "integrity": "sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA=", + "dev": true, + "requires": { + "create-error-class": "^3.0.0", + "duplexer3": "^0.1.4", + "get-stream": "^3.0.0", + "is-redirect": "^1.0.0", + "is-retry-allowed": "^1.0.0", + "is-stream": "^1.0.0", + "lowercase-keys": "^1.0.0", + "safe-buffer": "^5.0.1", + "timed-out": "^4.0.0", + "unzip-response": "^2.0.1", + "url-parse-lax": "^1.0.0" + }, + "dependencies": { + "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 + } + } + }, + "graceful-fs": { + "version": "4.2.6", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", + "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==", + "dev": true + }, + "grid-index": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/grid-index/-/grid-index-1.1.0.tgz", + "integrity": "sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA==" + }, + "growly": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/growly/-/growly-1.3.0.tgz", + "integrity": "sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=", + "dev": true + }, + "gzip-size": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz", + "integrity": "sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==", + "dev": true, + "requires": { + "duplexer": "^0.1.2" + } + }, + "har-schema": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", + "integrity": "sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI=", + "dev": true + }, + "har-validator": { + "version": "5.1.5", + "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", + "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", + "dev": true, + "requires": { + "ajv": "^6.12.3", + "har-schema": "^2.0.0" + } + }, + "has": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", + "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1" + } + }, + "has-bigints": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.1.tgz", + "integrity": "sha512-LSBS2LjbNBTf6287JEbEzvJgftkF5qFkmCo9hDRpAzKhUOlJ+hx8dd4USs00SgsUNwc4617J9ki5YtEClM2ffA==", + "dev": true + }, + "has-color": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/has-color/-/has-color-0.1.7.tgz", + "integrity": "sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8=", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", + "dev": true + }, + "has-symbols": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.2.tgz", + "integrity": "sha512-chXa79rL/UC2KlX17jo3vRGz0azaWEx5tGqZg5pO3NUyEJVB17dMruQlzCCOfUvElghKcm5194+BCRvi2Rv/Gw==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "has-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-1.0.0.tgz", + "integrity": "sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc=", + "dev": true, + "requires": { + "get-value": "^2.0.6", + "has-values": "^1.0.0", + "isobject": "^3.0.0" + } + }, + "has-values": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-1.0.0.tgz", + "integrity": "sha1-lbC2P+whRmGab+V/51Yo1aOe/k8=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "kind-of": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "kind-of": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-4.0.0.tgz", + "integrity": "sha1-IIE989cSkosgc3hpGkUGb65y3Vc=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "hash-base": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/hash-base/-/hash-base-3.1.0.tgz", + "integrity": "sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==", + "dev": true, + "requires": { + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "safe-buffer": "^5.2.0" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "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 + } + } + }, + "hash.js": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/hash.js/-/hash.js-1.1.7.tgz", + "integrity": "sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "minimalistic-assert": "^1.0.1" + } + }, + "hast-util-is-element": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hast-util-is-element/-/hast-util-is-element-1.1.0.tgz", + "integrity": "sha512-oUmNua0bFbdrD/ELDSSEadRVtWZOf3iF6Lbv81naqsIV99RnSCieTbWuWCY8BAeEfKJTKl0gRdokv+dELutHGQ==", + "dev": true + }, + "hast-util-sanitize": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/hast-util-sanitize/-/hast-util-sanitize-1.3.1.tgz", + "integrity": "sha512-AIeKHuHx0Wk45nSkGVa2/ujQYTksnDl8gmmKo/mwQi7ag7IBZ8cM3nJ2G86SajbjGP/HRpud6kMkPtcM2i0Tlw==", + "dev": true, + "requires": { + "xtend": "^4.0.1" + } + }, + "hast-util-to-html": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz", + "integrity": "sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "comma-separated-tokens": "^1.0.1", + "hast-util-is-element": "^1.0.0", + "hast-util-whitespace": "^1.0.0", + "html-void-elements": "^1.0.0", + "property-information": "^4.0.0", + "space-separated-tokens": "^1.0.0", + "stringify-entities": "^1.0.1", + "unist-util-is": "^2.0.0", + "xtend": "^4.0.1" + }, + "dependencies": { + "unist-util-is": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", + "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==", + "dev": true + } + } + }, + "hast-util-whitespace": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz", + "integrity": "sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A==", + "dev": true + }, + "he": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", + "integrity": "sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==", + "dev": true + }, + "hex-color-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/hex-color-regex/-/hex-color-regex-1.1.0.tgz", + "integrity": "sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ==", + "dev": true + }, + "highlight.js": { + "version": "9.18.5", + "resolved": "https://registry.npmjs.org/highlight.js/-/highlight.js-9.18.5.tgz", + "integrity": "sha512-a5bFyofd/BHCX52/8i8uJkjr9DYwXIPnM/plwI6W7ezItLGqzt7X2G2nXuYSfsIJdkwwj/g9DG1LkcGJI/dDoA==", + "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.0.3", + "minimalistic-assert": "^1.0.0", + "minimalistic-crypto-utils": "^1.0.1" + } + }, + "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==", + "dev": true + }, + "hsl-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsl-regex/-/hsl-regex-1.0.0.tgz", + "integrity": "sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4=", + "dev": true + }, + "hsla-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hsla-regex/-/hsla-regex-1.0.0.tgz", + "integrity": "sha1-wc56MWjIxmFAM6S194d/OyJfnDg=", + "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.1" + } + }, + "html-tags": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/html-tags/-/html-tags-2.0.0.tgz", + "integrity": "sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos=", + "dev": true + }, + "html-void-elements": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/html-void-elements/-/html-void-elements-1.0.5.tgz", + "integrity": "sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w==", + "dev": true + }, + "htmlescape": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/htmlescape/-/htmlescape-1.1.1.tgz", + "integrity": "sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E=", + "dev": true + }, + "htmlparser2": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-3.10.1.tgz", + "integrity": "sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ==", + "dev": true, + "requires": { + "domelementtype": "^1.3.1", + "domhandler": "^2.3.0", + "domutils": "^1.5.1", + "entities": "^1.1.1", + "inherits": "^2.0.1", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "entities": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/entities/-/entities-1.1.2.tgz", + "integrity": "sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "http-errors": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", + "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.3", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "http-parser-js": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/http-parser-js/-/http-parser-js-0.5.3.tgz", + "integrity": "sha512-t7hjvef/5HEK7RWTdUzVUhl8zkEu+LlaE0IYzdMuvbSDipxBRpOn4Uhw8ZyECEa808iVT8XCjzo6xmYt4CiLZg==", + "dev": true + }, + "http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dev": true, + "requires": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + } + }, + "http-signature": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", + "integrity": "sha1-muzZJRFHcvPZW2WmCruPfBj7rOE=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "jsprim": "^1.2.2", + "sshpk": "^1.7.0" + } + }, + "https-browserify": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", + "integrity": "sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM=", + "dev": true + }, + "https-proxy-agent": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.0.tgz", + "integrity": "sha512-EkYm5BcKUGiduxzSt3Eppko+PiNWNEpa4ySk9vTC6wDsQJW9rHSa+UhGNJoRYp7bz6Ht1eaRIa6QaJqO5rCFbA==", + "dev": true, + "requires": { + "agent-base": "6", + "debug": "4" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "ignore": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-4.0.6.tgz", + "integrity": "sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg==", + "dev": true + }, + "ignore-walk": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.4.tgz", + "integrity": "sha512-PY6Ii8o1jMRA1z4F2hRkH/xN59ox43DavKvD3oDpfurRlOJyAHpifIwpbdv1n4jt4ov0jSpw3kQ4GhJnpBL6WQ==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } + }, + "immediate": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/immediate/-/immediate-3.0.6.tgz", + "integrity": "sha1-nbHb0Pr43m++D13V5Wu2BigN5ps=", + "dev": true + }, + "import-cwd": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-cwd/-/import-cwd-3.0.0.tgz", + "integrity": "sha512-4pnzH16plW+hgvRECbDWpQl3cqtvSofHWh44met7ESfZ8UZOWWddm8hEyDTqREJ9RbYHY8gi8DqmaelApoOGMg==", + "dev": true, + "requires": { + "import-from": "^3.0.0" + } + }, + "import-fresh": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-2.0.0.tgz", + "integrity": "sha1-2BNVwVYS04bGH53dOSLUMEgipUY=", + "dev": true, + "requires": { + "caller-path": "^2.0.0", + "resolve-from": "^3.0.0" + } + }, + "import-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", + "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", + "dev": true, + "requires": { + "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", + "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + } + } + }, + "import-lazy": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-3.1.0.tgz", + "integrity": "sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ==", + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", + "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", + "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.0" + } + }, + "indexes-of": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/indexes-of/-/indexes-of-1.0.1.tgz", + "integrity": "sha1-8w9xbI4r00bHtn0985FVZqfAVgc=", + "dev": true + }, + "inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "inline-source-map": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/inline-source-map/-/inline-source-map-0.6.2.tgz", + "integrity": "sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU=", + "dev": true, + "requires": { + "source-map": "~0.5.3" + } + }, + "insert-module-globals": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/insert-module-globals/-/insert-module-globals-7.2.1.tgz", + "integrity": "sha512-ufS5Qq9RZN+Bu899eA9QCAYThY+gGW7oRkmb0vC93Vlyu/CFGcH0OYPEjVkDXA5FEbTt1+VWzdoOD3Ny9N+8tg==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "acorn-node": "^1.5.2", + "combine-source-map": "^0.8.0", + "concat-stream": "^1.6.1", + "is-buffer": "^1.1.0", + "path-is-absolute": "^1.0.1", + "process": "~0.11.0", + "through2": "^2.0.0", + "undeclared-identifiers": "^1.1.2", + "xtend": "^4.0.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + } + } + }, + "internal-slot": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.3.tgz", + "integrity": "sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==", + "dev": true, + "requires": { + "get-intrinsic": "^1.1.0", + "has": "^1.0.3", + "side-channel": "^1.0.4" + } + }, + "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 + }, + "ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "dev": true + }, + "is-absolute": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-absolute/-/is-absolute-1.0.0.tgz", + "integrity": "sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA==", + "dev": true, + "requires": { + "is-relative": "^1.0.0", + "is-windows": "^1.0.1" + } + }, + "is-absolute-url": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-absolute-url/-/is-absolute-url-2.1.0.tgz", + "integrity": "sha1-UFMN+4T8yap9vnhS6Do3uTufKqY=", + "dev": true + }, + "is-accessor-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz", + "integrity": "sha1-qeEss66Nh2cn7u84Q/igiXtcmNY=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-alphabetical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphabetical/-/is-alphabetical-1.0.4.tgz", + "integrity": "sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg==", + "dev": true + }, + "is-alphanumeric": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz", + "integrity": "sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ=", + "dev": true + }, + "is-alphanumerical": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz", + "integrity": "sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A==", + "dev": true, + "requires": { + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0" + } + }, + "is-arguments": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.0.tgz", + "integrity": "sha512-1Ij4lOMPl/xB5kBDn7I+b2ttPMKa8szhEIrXDuXQD/oe3HJLTLhqhgGspwgyGd6MOywBUqVvYicF72lkgDnIHg==", + "dev": true, + "requires": { + "call-bind": "^1.0.0" + } + }, + "is-arrayish": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", + "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", + "dev": true + }, + "is-bigint": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.2.tgz", + "integrity": "sha512-0JV5+SOCQkIdzjBK9buARcV804Ddu7A0Qet6sHi3FimE9ne6m4BGQZfRn+NZiXbBk4F4XmHfDZIipLj9pX8dSA==", + "dev": true + }, + "is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "requires": { + "binary-extensions": "^2.0.0" + } + }, + "is-boolean-object": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.1.tgz", + "integrity": "sha512-bXdQWkECBUIAcCkeH1unwJLIpZYaa5VvuygSyS/c2lf719mTKZDU5UdDRlpd01UjADgmW8RfqaP+mRaVPdr/Ng==", + "dev": true, + "requires": { + "call-bind": "^1.0.2" + } + }, + "is-buffer": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-2.0.5.tgz", + "integrity": "sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==", + "dev": true + }, + "is-builtin-module": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.1.0.tgz", + "integrity": "sha512-OV7JjAgOTfAFJmHZLvpSTb4qi0nIILDV1gWPYDnDJUTNFM5aGlRAhk4QcT8i7TuAleeEV5Fdkqn3t4mS+Q11fg==", + "dev": true, + "requires": { + "builtin-modules": "^3.0.0" + } + }, + "is-callable": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.3.tgz", + "integrity": "sha512-J1DcMe8UYTBSrKezuIUTUwjXsho29693unXM2YhJUTR2txK/eG47bvNa/wipPFmZFgr/N6f1GA66dv0mEyTIyQ==", + "dev": true + }, + "is-color-stop": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-color-stop/-/is-color-stop-1.1.0.tgz", + "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" + } + }, + "is-core-module": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.5.0.tgz", + "integrity": "sha512-TXCMSDsEHMEEZ6eCA8rwRDbLu55MRGmrctljsBX/2v1d9/GzqHOxW5c5oPSgrUt2vBFXebu9rGqckXGPWOlYpg==", + "dev": true, + "requires": { + "has": "^1.0.3" + } + }, + "is-data-descriptor": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz", + "integrity": "sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "is-date-object": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.4.tgz", + "integrity": "sha512-/b4ZVsG7Z5XVtIxs/h9W8nvfLgSAyKYdtGWQLbqy6jA1icmgjf8WCoTKgeS4wy5tYaPePouzFMANbnj94c2Z+A==", + "dev": true + }, + "is-decimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-decimal/-/is-decimal-1.0.4.tgz", + "integrity": "sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw==", + "dev": true + }, + "is-descriptor": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-0.1.6.tgz", + "integrity": "sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^0.1.6", + "is-data-descriptor": "^0.1.4", + "kind-of": "^5.0.0" + }, + "dependencies": { + "kind-of": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-5.1.0.tgz", + "integrity": "sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw==", + "dev": true + } + } + }, + "is-directory": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/is-directory/-/is-directory-0.3.1.tgz", + "integrity": "sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=", + "dev": true + }, + "is-docker": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/is-docker/-/is-docker-2.2.1.tgz", + "integrity": "sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==", + "dev": true + }, + "is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik=", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", + "dev": true + }, + "is-finite": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finite/-/is-finite-1.1.0.tgz", + "integrity": "sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "is-glob": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", + "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-hexadecimal": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz", + "integrity": "sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==", + "dev": true + }, + "is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", + "dev": true + }, + "is-negated-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-negated-glob/-/is-negated-glob-1.0.0.tgz", + "integrity": "sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI=", + "dev": true + }, + "is-negative-zero": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.1.tgz", + "integrity": "sha512-2z6JzQvZRa9A2Y7xC6dQQm4FSTSTNWjKIYYTt4246eMTJmIo0Q+ZyOsU66X8lxK1AbB92dFeglPLrhwpeRKO6w==", + "dev": true + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "is-number-object": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.5.tgz", + "integrity": "sha512-RU0lI/n95pMoUKu9v1BZP5MBcZuNSVJkMkAG2dJqC4z2GlkGUNeH68SuHuBKBD/XFe+LHZ+f9BKkLET60Niedw==", + "dev": true + }, + "is-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", + "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", + "dev": true + }, + "is-plain-obj": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", + "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", + "dev": true + }, + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + }, + "is-redirect": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-redirect/-/is-redirect-1.0.0.tgz", + "integrity": "sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ=", + "dev": true + }, + "is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "requires": { + "@types/estree": "*" + } + }, + "is-regex": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.3.tgz", + "integrity": "sha512-qSVXFz28HM7y+IWX6vLCsexdlvzT1PJNFSBuaQLQ5o0IEw8UDYW6/2+eCMVyIsbM8CNLX2a/QWmSpyxYEHY7CQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "has-symbols": "^1.0.2" + } + }, + "is-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-regexp/-/is-regexp-1.0.0.tgz", + "integrity": "sha1-/S2INUXEa6xaYz57mgnof6LLUGk=", + "dev": true + }, + "is-relative": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-relative/-/is-relative-1.0.0.tgz", + "integrity": "sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA==", + "dev": true, + "requires": { + "is-unc-path": "^1.0.0" + } + }, + "is-resolvable": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.1.0.tgz", + "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==", + "dev": true + }, + "is-ssh": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/is-ssh/-/is-ssh-1.3.3.tgz", + "integrity": "sha512-NKzJmQzJfEEma3w5cJNcUMxoXfDjz0Zj0eyCalHn2E6VOwlzjZo0yuO2fcBSf8zhFuVCL/82/r5gRcoi6aEPVQ==", + "dev": true, + "requires": { + "protocols": "^1.1.0" + } + }, + "is-stream": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-1.1.0.tgz", + "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", + "dev": true + }, + "is-string": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.6.tgz", + "integrity": "sha512-2gdzbKUuqtQ3lYNrUTQYoClPhm7oQu4UdpSZMp1/DGgkHBT8E2Z1l0yMdb6D4zNAxwDiMv8MdulKROJGNl0Q0w==", + "dev": true + }, + "is-supported-regexp-flag": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz", + "integrity": "sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ==", + "dev": true + }, + "is-symbol": { + "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-type": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/is-type/-/is-type-0.0.1.tgz", + "integrity": "sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w=", + "dev": true, + "requires": { + "core-util-is": "~1.0.0" + } + }, + "is-typedarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", + "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", + "dev": true + }, + "is-unc-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-unc-path/-/is-unc-path-1.0.0.tgz", + "integrity": "sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ==", + "dev": true, + "requires": { + "unc-path-regex": "^0.1.2" + } + }, + "is-url": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/is-url/-/is-url-1.2.4.tgz", + "integrity": "sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==", + "dev": true + }, + "is-utf8": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", + "integrity": "sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI=", + "dev": true + }, + "is-valid-glob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-valid-glob/-/is-valid-glob-1.0.0.tgz", + "integrity": "sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao=", + "dev": true + }, + "is-whitespace-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz", + "integrity": "sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w==", + "dev": true + }, + "is-windows": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-windows/-/is-windows-1.0.2.tgz", + "integrity": "sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==", + "dev": true + }, + "is-word-character": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/is-word-character/-/is-word-character-1.0.4.tgz", + "integrity": "sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA==", + "dev": true + }, + "is-wsl": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-1.1.0.tgz", + "integrity": "sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha1-6PvzdNxVb/iUehDcsFctYz8s+hA=", + "dev": true + }, + "isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", + "dev": true + }, + "isstream": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", + "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz", + "integrity": "sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA==", + "dev": true + }, + "istanbul-lib-instrument": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz", + "integrity": "sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA==", + "dev": true, + "requires": { + "@babel/generator": "^7.4.0", + "@babel/parser": "^7.4.3", + "@babel/template": "^7.4.0", + "@babel/traverse": "^7.4.3", + "@babel/types": "^7.4.0", + "istanbul-lib-coverage": "^2.0.5", + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "jake": { + "version": "10.8.2", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz", + "integrity": "sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A==", + "dev": true, + "requires": { + "async": "0.9.x", + "chalk": "^2.4.2", + "filelist": "^1.0.1", + "minimatch": "^3.0.4" + }, + "dependencies": { + "async": { + "version": "0.9.2", + "resolved": "https://registry.npmjs.org/async/-/async-0.9.2.tgz", + "integrity": "sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0=", + "dev": true + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "jest-worker": { + "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", + "dev": true, + "requires": { + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^7.0.0" + }, + "dependencies": { + "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 + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "js-tokens": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", + "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", + "dev": true + }, + "js-yaml": { + "version": "3.14.1", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", + "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", + "dev": true, + "requires": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + } + }, + "jsbn": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", + "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", + "dev": true + }, + "jsdoc-type-pratt-parser": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/jsdoc-type-pratt-parser/-/jsdoc-type-pratt-parser-1.1.1.tgz", + "integrity": "sha512-uelRmpghNwPBuZScwgBG/OzodaFk5RbO5xaivBdsAY70icWfShwZ7PCMO0x1zSkOa8T1FzHThmrdoyg/0AwV5g==", + "dev": true + }, + "jsdom": { + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-13.2.0.tgz", + "integrity": "sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw==", + "dev": true, + "requires": { + "abab": "^2.0.0", + "acorn": "^6.0.4", + "acorn-globals": "^4.3.0", + "array-equal": "^1.0.0", + "cssom": "^0.3.4", + "cssstyle": "^1.1.1", + "data-urls": "^1.1.0", + "domexception": "^1.0.1", + "escodegen": "^1.11.0", + "html-encoding-sniffer": "^1.0.2", + "nwsapi": "^2.0.9", + "parse5": "5.1.0", + "pn": "^1.1.0", + "request": "^2.88.0", + "request-promise-native": "^1.0.5", + "saxes": "^3.1.5", + "symbol-tree": "^3.2.2", + "tough-cookie": "^2.5.0", + "w3c-hr-time": "^1.0.1", + "w3c-xmlserializer": "^1.0.1", + "webidl-conversions": "^4.0.2", + "whatwg-encoding": "^1.0.5", + "whatwg-mimetype": "^2.3.0", + "whatwg-url": "^7.0.0", + "ws": "^6.1.2", + "xml-name-validator": "^3.0.0" + }, + "dependencies": { + "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 + } + } + }, + "jsesc": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", + "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", + "dev": true + }, + "json-parse-better-errors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", + "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", + "dev": true + }, + "json-schema": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", + "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "dev": true + }, + "json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "json-stable-stringify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz", + "integrity": "sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U=", + "dev": true, + "requires": { + "jsonify": "~0.0.0" + } + }, + "json-stable-stringify-without-jsonify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", + "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", + "dev": true + }, + "json-stringify-pretty-compact": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz", + "integrity": "sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ==", + "dev": true + }, + "json-stringify-safe": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", + "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", + "dev": true + }, + "json5": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.0.tgz", + "integrity": "sha512-f+8cldu7X/y7RAJurMEJmdoKXGB/X550w2Nr3tTbezL6RwEE/iMcm+tZnXeoZtKuOq6ft8+CqzEkrIgx1fPoQA==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.6", + "universalify": "^2.0.0" + } + }, + "jsonify": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", + "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", + "dev": true + }, + "jsonlint-lines": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz", + "integrity": "sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8=", + "dev": true, + "requires": { + "JSV": ">= 4.0.x", + "nomnom": ">= 1.5.x" + } + }, + "jsonparse": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", + "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", + "dev": true + }, + "jsonwebtoken": { + "version": "8.5.1", + "resolved": "https://registry.npmjs.org/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz", + "integrity": "sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w==", + "dev": true, + "requires": { + "jws": "^3.2.2", + "lodash.includes": "^4.3.0", + "lodash.isboolean": "^3.0.3", + "lodash.isinteger": "^4.0.4", + "lodash.isnumber": "^3.0.3", + "lodash.isplainobject": "^4.0.6", + "lodash.isstring": "^4.0.1", + "lodash.once": "^4.0.0", + "ms": "^2.1.1", + "semver": "^5.6.0" + } + }, + "jsprim": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", + "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", + "dev": true, + "requires": { + "assert-plus": "1.0.0", + "extsprintf": "1.3.0", + "json-schema": "0.2.3", + "verror": "1.10.0" + } + }, + "jsx-ast-utils": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/jsx-ast-utils/-/jsx-ast-utils-3.2.0.tgz", + "integrity": "sha512-EIsmt3O3ljsU6sot/J4E1zDRxfBNrhjyf/OKjlydwgEimQuznlM4Wv7U+ueONJMyEn1WRE0K8dhi3dVAXYT24Q==", + "dev": true, + "requires": { + "array-includes": "^3.1.2", + "object.assign": "^4.1.2" + } + }, + "jszip": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/jszip/-/jszip-3.6.0.tgz", + "integrity": "sha512-jgnQoG9LKnWO3mnVNBnfhkh0QknICd1FGSrXcgrl67zioyJ4wgx25o9ZqwNtrROSflGBCGYnJfjrIyRIby1OoQ==", + "dev": true, + "requires": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "set-immediate-shim": "~1.0.1" + } + }, + "just-extend": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-4.2.1.tgz", + "integrity": "sha512-g3UB796vUFIY90VIv/WX3L2c8CS2MdWUww3CNrYmqza1Fg0DURc2K/O4YrnklBdQarSJ/y8JnJYDGc+1iumQjg==", + "dev": true + }, + "jwa": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/jwa/-/jwa-1.4.1.tgz", + "integrity": "sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==", + "dev": true, + "requires": { + "buffer-equal-constant-time": "1.0.1", + "ecdsa-sig-formatter": "1.0.11", + "safe-buffer": "^5.0.1" + } + }, + "jws": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/jws/-/jws-3.2.2.tgz", + "integrity": "sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==", + "dev": true, + "requires": { + "jwa": "^1.4.1", + "safe-buffer": "^5.0.1" + } + }, + "kdbush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-3.0.0.tgz", + "integrity": "sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew==" + }, + "kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true + }, + "known-css-properties": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.11.0.tgz", + "integrity": "sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w==", + "dev": true + }, + "labeled-stream-splicer": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz", + "integrity": "sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "stream-splicer": "^2.0.0" + } + }, + "lazystream": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lazystream/-/lazystream-1.0.0.tgz", + "integrity": "sha1-9plf4PggOS9hOWvolGJAe7dxaOQ=", + "dev": true, + "requires": { + "readable-stream": "^2.0.5" + } + }, + "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" + } + }, + "lcov-parse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lcov-parse/-/lcov-parse-1.0.0.tgz", + "integrity": "sha1-6w1GtUER68VhrLTECO+TY73I9+A=", + "dev": true + }, + "lead": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/lead/-/lead-1.0.0.tgz", + "integrity": "sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI=", + "dev": true, + "requires": { + "flush-write-stream": "^1.0.2" + } + }, + "leven": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-2.1.0.tgz", + "integrity": "sha1-wuep93IJTe6dNCAq6KzORoeHVYA=", + "dev": true + }, + "levn": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/levn/-/levn-0.3.0.tgz", + "integrity": "sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2" + } + }, + "lie": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/lie/-/lie-3.3.0.tgz", + "integrity": "sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==", + "dev": true, + "requires": { + "immediate": "~3.0.5" + } + }, + "lilconfig": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.3.tgz", + "integrity": "sha512-EHKqr/+ZvdKCifpNrJCKxBTgk5XupZA3y/aCPY9mxfgBzmgh93Mt/WqjjQ38oMxXuvDokaKiM3lAgvSH2sjtHg==", + "dev": true + }, + "list-npm-contents": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/list-npm-contents/-/list-npm-contents-1.0.2.tgz", + "integrity": "sha512-cpAkA9+ioEqHnxTuh3UDRewX+obC3mTr9dlYRVnTt0riggK+0IdKIed7BPn1BgkBQP+TVHiso4Rj0ZxGaXzh1Q==", + "dev": true, + "requires": { + "bluebird": "^3.5.0", + "get-npm-tarball-url": "^2.0.0", + "got": "^6.7.1", + "is-url": "^1.2.2", + "ls-archive": "^1.2.3", + "meow": "^3.3.0", + "registry-url": "^4.0.0", + "tmp": "0.0.31" + }, + "dependencies": { + "tmp": { + "version": "0.0.31", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.31.tgz", + "integrity": "sha1-jzirlDjhcxXl29izZX6L+yd65Kc=", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.1" + } + } + } + }, + "livereload-js": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-2.4.0.tgz", + "integrity": "sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw==", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^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=", + "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": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lodash._baseflatten": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz", + "integrity": "sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c=", + "dev": true, + "requires": { + "lodash.isarguments": "^3.0.0", + "lodash.isarray": "^3.0.0" + } + }, + "lodash._getnative": { + "version": "3.9.1", + "resolved": "https://registry.npmjs.org/lodash._getnative/-/lodash._getnative-3.9.1.tgz", + "integrity": "sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U=", + "dev": true + }, + "lodash._isiterateecall": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz", + "integrity": "sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw=", + "dev": true + }, + "lodash._reinterpolate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz", + "integrity": "sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0=", + "dev": true + }, + "lodash.assignin": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assignin/-/lodash.assignin-4.2.0.tgz", + "integrity": "sha1-uo31+4QesKPoBEIysOJjqNxqKKI=", + "dev": true + }, + "lodash.castarray": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz", + "integrity": "sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU=", + "dev": true + }, + "lodash.clonedeep": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz", + "integrity": "sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8=", + "dev": true + }, + "lodash.debounce": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", + "integrity": "sha1-gteb/zCmfEAF/9XiUVMArZyk168=", + "dev": true + }, + "lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=", + "dev": true + }, + "lodash.find": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.find/-/lodash.find-4.6.0.tgz", + "integrity": "sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E=", + "dev": true + }, + "lodash.flatten": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-3.0.2.tgz", + "integrity": "sha1-3hz1d1j49EeTGdNcPpzGDEUBk4w=", + "dev": true, + "requires": { + "lodash._baseflatten": "^3.0.0", + "lodash._isiterateecall": "^3.0.0" + } + }, + "lodash.forown": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.forown/-/lodash.forown-4.4.0.tgz", + "integrity": "sha1-hRFc8E9z75ZuztUlEdOJPMRmg68=", + "dev": true + }, + "lodash.get": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.get/-/lodash.get-4.4.2.tgz", + "integrity": "sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk=", + "dev": true + }, + "lodash.groupby": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.groupby/-/lodash.groupby-4.6.0.tgz", + "integrity": "sha1-Cwih3PaDl8OXhVwyOXg4Mt90A9E=", + "dev": true + }, + "lodash.includes": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.includes/-/lodash.includes-4.3.0.tgz", + "integrity": "sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8=", + "dev": true + }, + "lodash.isarguments": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz", + "integrity": "sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo=", + "dev": true + }, + "lodash.isarray": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.isarray/-/lodash.isarray-3.0.4.tgz", + "integrity": "sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U=", + "dev": true + }, + "lodash.isboolean": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz", + "integrity": "sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY=", + "dev": true + }, + "lodash.isinteger": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz", + "integrity": "sha1-YZwK89A/iwTDH1iChAt3sRzWg0M=", + "dev": true + }, + "lodash.isnumber": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz", + "integrity": "sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w=", + "dev": true + }, + "lodash.isplainobject": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", + "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", + "dev": true + }, + "lodash.isstring": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", + "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", + "dev": true + }, + "lodash.memoize": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/lodash.memoize/-/lodash.memoize-3.0.4.tgz", + "integrity": "sha1-LcvSwofLwKVcxCMovQxzYVDVPj8=", + "dev": true + }, + "lodash.merge": { + "version": "4.6.2", + "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", + "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", + "dev": true + }, + "lodash.once": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/lodash.once/-/lodash.once-4.1.1.tgz", + "integrity": "sha1-DdOXEhPHxW34gJd9UEyI+0cal6w=", + "dev": true + }, + "lodash.set": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/lodash.set/-/lodash.set-4.3.2.tgz", + "integrity": "sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM=", + "dev": true + }, + "lodash.sortby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=", + "dev": true + }, + "lodash.template": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.template/-/lodash.template-4.5.0.tgz", + "integrity": "sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0", + "lodash.templatesettings": "^4.0.0" + } + }, + "lodash.templatesettings": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz", + "integrity": "sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ==", + "dev": true, + "requires": { + "lodash._reinterpolate": "^3.0.0" + } + }, + "lodash.truncate": { + "version": "4.4.2", + "resolved": "https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz", + "integrity": "sha1-WjUNoLERO4N+z//VgSy+WNbq4ZM=", + "dev": true + }, + "lodash.uniq": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.uniq/-/lodash.uniq-4.5.0.tgz", + "integrity": "sha1-0CJTc662Uq3BvILklFM5qEJ1R3M=", + "dev": true + }, + "lodash.uniqby": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", + "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", + "dev": true + }, + "log-driver": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/log-driver/-/log-driver-1.2.7.tgz", + "integrity": "sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg==", + "dev": true + }, + "log-symbols": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-2.2.0.tgz", + "integrity": "sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg==", + "dev": true, + "requires": { + "chalk": "^2.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "lolex": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-4.2.0.tgz", + "integrity": "sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg==", + "dev": true + }, + "longest-streak": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/longest-streak/-/longest-streak-2.0.4.tgz", + "integrity": "sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg==", + "dev": true + }, + "loose-envify": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", + "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "dev": true, + "requires": { + "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=", + "dev": true, + "requires": { + "currently-unhandled": "^0.4.1", + "signal-exit": "^3.0.0" + } + }, + "lowercase-keys": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/lowercase-keys/-/lowercase-keys-1.0.1.tgz", + "integrity": "sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==", + "dev": true + }, + "lru-cache": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", + "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "ls-archive": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/ls-archive/-/ls-archive-1.3.4.tgz", + "integrity": "sha512-7GmjZOckV+gzm4PM1/LcWIsZIRsSkAVmIchoEf5xjquNKU0Ti5KUvGQ3dl/7VsbZIduMOPwRDXrvpo3LVJ0Pmg==", + "dev": true, + "requires": { + "async": "~0.2.9", + "colors": "~0.6.2", + "optimist": "~0.5.2", + "rimraf": "~2.2.6", + "tar": "^2.2.1", + "yauzl": "^2.9.1" + }, + "dependencies": { + "rimraf": { + "version": "2.2.8", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.2.8.tgz", + "integrity": "sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI=", + "dev": true + }, + "tar": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.2.tgz", + "integrity": "sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA==", + "dev": true, + "requires": { + "block-stream": "*", + "fstream": "^1.0.12", + "inherits": "2" + } + } + } + }, + "macos-release": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/macos-release/-/macos-release-2.5.0.tgz", + "integrity": "sha512-EIgv+QZ9r+814gjJj0Bt5vSLJLzswGmSUbUpbi9AIr/fsN2IWFBl2NucV9PAiek+U1STK468tEkxmVYUtuAN3g==", + "dev": true + }, + "magic-string": { + "version": "0.25.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", + "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", + "dev": true, + "requires": { + "sourcemap-codec": "^1.4.4" + } + }, + "make-dir": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-3.1.0.tgz", + "integrity": "sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==", + "dev": true, + "requires": { + "semver": "^6.0.0" + }, + "dependencies": { + "semver": { + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", + "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", + "dev": true + } + } + }, + "make-error": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/make-error/-/make-error-1.3.6.tgz", + "integrity": "sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==", + "dev": true + }, + "map-age-cleaner": { + "version": "0.1.3", + "resolved": "https://registry.npmjs.org/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz", + "integrity": "sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w==", + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "map-cache": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/map-cache/-/map-cache-0.2.2.tgz", + "integrity": "sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8=", + "dev": true + }, + "map-obj": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", + "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", + "dev": true + }, + "map-visit": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/map-visit/-/map-visit-1.0.0.tgz", + "integrity": "sha1-7Nyo8TFE5mDxtb1B8S80edmN+48=", + "dev": true, + "requires": { + "object-visit": "^1.0.0" + } + }, + "mapbox-gl-styles": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/mapbox-gl-styles/-/mapbox-gl-styles-2.0.2.tgz", + "integrity": "sha1-u1Jbd+oNwrBBu4BRZFF283g+KUo=", + "dev": true, + "requires": { + "glob": "^5.0.14" + }, + "dependencies": { + "glob": { + "version": "5.0.15", + "resolved": "https://registry.npmjs.org/glob/-/glob-5.0.15.tgz", + "integrity": "sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E=", + "dev": true, + "requires": { + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "2 || 3", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + } + } + }, + "markdown-escapes": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/markdown-escapes/-/markdown-escapes-1.0.4.tgz", + "integrity": "sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg==", + "dev": true + }, + "markdown-table": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-1.1.3.tgz", + "integrity": "sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q==", + "dev": true + }, + "mathml-tag-names": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", + "integrity": "sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg==", + "dev": true + }, + "md5.js": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/md5.js/-/md5.js-1.3.5.tgz", + "integrity": "sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1", + "safe-buffer": "^5.1.2" + } + }, + "mdast-util-compact": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz", + "integrity": "sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "mdast-util-definitions": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz", + "integrity": "sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA==", + "dev": true, + "requires": { + "unist-util-visit": "^1.0.0" + } + }, + "mdast-util-inject": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz", + "integrity": "sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU=", + "dev": true, + "requires": { + "mdast-util-to-string": "^1.0.0" + } + }, + "mdast-util-to-hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz", + "integrity": "sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.0", + "detab": "^2.0.0", + "mdast-util-definitions": "^1.2.0", + "mdurl": "^1.0.1", + "trim": "0.0.1", + "trim-lines": "^1.0.0", + "unist-builder": "^1.0.1", + "unist-util-generated": "^1.1.0", + "unist-util-position": "^3.0.0", + "unist-util-visit": "^1.1.0", + "xtend": "^4.0.1" + } + }, + "mdast-util-to-string": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz", + "integrity": "sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A==", + "dev": true + }, + "mdast-util-toc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/mdast-util-toc/-/mdast-util-toc-3.1.0.tgz", + "integrity": "sha512-Za0hqL1PqWrvxGtA/3NH9D5nhGAUS9grMM4obEAz5+zsk1RIw/vWUchkaoDLNdrwk05A0CSC5eEXng36/1qE5w==", + "dev": true, + "requires": { + "github-slugger": "^1.2.1", + "mdast-util-to-string": "^1.0.5", + "unist-util-is": "^2.1.2", + "unist-util-visit": "^1.1.0" + }, + "dependencies": { + "github-slugger": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/github-slugger/-/github-slugger-1.3.0.tgz", + "integrity": "sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q==", + "dev": true, + "requires": { + "emoji-regex": ">=6.0.0 <=6.1.1" + } + }, + "unist-util-is": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-2.1.3.tgz", + "integrity": "sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA==", + "dev": true + } + } + }, + "mdn-data": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.4.tgz", + "integrity": "sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA==", + "dev": true + }, + "mdurl": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-1.0.1.tgz", + "integrity": "sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4=", + "dev": true + }, + "media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g=", + "dev": true + }, + "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" + } + }, + "memorystream": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/memorystream/-/memorystream-0.3.1.tgz", + "integrity": "sha1-htcJCzDORV1j+64S3aUaR93K+bI=", + "dev": true + }, + "meow": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-3.7.0.tgz", + "integrity": "sha1-cstmi0JSKCkKu/qFaJJYcwioAfs=", + "dev": true, + "requires": { + "camelcase-keys": "^2.0.0", + "decamelize": "^1.1.2", + "loud-rejection": "^1.0.0", + "map-obj": "^1.0.1", + "minimist": "^1.1.3", + "normalize-package-data": "^2.3.4", + "object-assign": "^4.0.1", + "read-pkg-up": "^1.0.1", + "redent": "^1.0.0", + "trim-newlines": "^1.0.0" + }, + "dependencies": { + "find-up": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-1.1.2.tgz", + "integrity": "sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8=", + "dev": true, + "requires": { + "path-exists": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "load-json-file": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-1.1.0.tgz", + "integrity": "sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^2.2.0", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0", + "strip-bom": "^2.0.0" + } + }, + "parse-json": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", + "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "dev": true, + "requires": { + "error-ex": "^1.2.0" + } + }, + "path-exists": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-2.1.0.tgz", + "integrity": "sha1-D+tsZPD8UY2adU3V77YscCJ2H0s=", + "dev": true, + "requires": { + "pinkie-promise": "^2.0.0" + } + }, + "path-type": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-1.1.0.tgz", + "integrity": "sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE=", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "pify": "^2.0.0", + "pinkie-promise": "^2.0.0" + } + }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + }, + "read-pkg": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-1.1.0.tgz", + "integrity": "sha1-9f+qXs0pyzHAR0vKfXVra7KePyg=", + "dev": true, + "requires": { + "load-json-file": "^1.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^1.0.0" + } + }, + "read-pkg-up": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-1.0.1.tgz", + "integrity": "sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI=", + "dev": true, + "requires": { + "find-up": "^1.0.0", + "read-pkg": "^1.0.0" + } + }, + "strip-bom": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "^0.2.0" + } + } + } + }, + "merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E=", + "dev": true + }, + "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 + }, + "merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true + }, + "methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4=", + "dev": true + }, + "micromatch": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-3.1.10.tgz", + "integrity": "sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "braces": "^2.3.1", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "extglob": "^2.0.4", + "fragment-cache": "^0.2.1", + "kind-of": "^6.0.2", + "nanomatch": "^1.2.9", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.2" + }, + "dependencies": { + "braces": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-2.3.2.tgz", + "integrity": "sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w==", + "dev": true, + "requires": { + "arr-flatten": "^1.1.0", + "array-unique": "^0.3.2", + "extend-shallow": "^2.0.1", + "fill-range": "^4.0.0", + "isobject": "^3.0.1", + "repeat-element": "^1.1.2", + "snapdragon": "^0.8.1", + "snapdragon-node": "^2.0.1", + "split-string": "^3.0.2", + "to-regex": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "fill-range": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-4.0.0.tgz", + "integrity": "sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc=", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-number": "^3.0.0", + "repeat-string": "^1.6.1", + "to-regex-range": "^2.1.0" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + } + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "is-number": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-3.0.0.tgz", + "integrity": "sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex-range": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-2.1.1.tgz", + "integrity": "sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg=", + "dev": true, + "requires": { + "is-number": "^3.0.0", + "repeat-string": "^1.6.1" + } + } + } + }, + "miller-rabin": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/miller-rabin/-/miller-rabin-4.0.1.tgz", + "integrity": "sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==", + "dev": true, + "requires": { + "bn.js": "^4.0.0", + "brorand": "^1.0.1" + }, + "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 + } + } + }, + "mime": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.5.2.tgz", + "integrity": "sha512-tqkh47FzKeCPD2PUiPB6pkbMzsCasjxAfC62/Wap5qrUWcb+sFasXUC5I3gYM5iBM8v/Qpn4UK0x+j0iHyFPDg==", + "dev": true + }, + "mime-db": { + "version": "1.48.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.48.0.tgz", + "integrity": "sha512-FM3QwxV+TnZYQ2aRqhlKBMHxk10lTbMt3bBkMAp54ddrNeVSfcQYOOKuGuy3Ddrm38I04If834fOUSq1yzslJQ==", + "dev": true + }, + "mime-types": { + "version": "2.1.31", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.31.tgz", + "integrity": "sha512-XGZnNzm3QvgKxa8dpzyhFTHmpP3l5YNusmne07VUOXxou9CqUqYa/HBy124RqtVh/O2pECas/MOcsDgpilPOPg==", + "dev": true, + "requires": { + "mime-db": "1.48.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 + }, + "mimic-response": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-2.1.0.tgz", + "integrity": "sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA==", + "dev": true + }, + "minimalistic-assert": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz", + "integrity": "sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==", + "dev": true + }, + "minimalistic-crypto-utils": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz", + "integrity": "sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo=", + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", + "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==" + }, + "minimist-options": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-3.0.2.tgz", + "integrity": "sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ==", + "dev": true, + "requires": { + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0" + } + }, + "minipass": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-3.1.3.tgz", + "integrity": "sha512-Mgd2GdMVzY+x3IJ+oHnVM+KG3lA5c8tnabyJKmHSaG2kAGpudxuOf8ToDkhumF7UzME7DecbQE9uOZhNm7PuJg==", + "dev": true, + "requires": { + "yallist": "^4.0.0" + } + }, + "minizlib": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz", + "integrity": "sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==", + "dev": true, + "requires": { + "minipass": "^3.0.0", + "yallist": "^4.0.0" + } + }, + "mixin-deep": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/mixin-deep/-/mixin-deep-1.3.2.tgz", + "integrity": "sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA==", + "dev": true, + "requires": { + "for-in": "^1.0.2", + "is-extendable": "^1.0.1" + }, + "dependencies": { + "is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "requires": { + "is-plain-object": "^2.0.4" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "mkdirp": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", + "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "dev": true + }, + "mkdirp-classic": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", + "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", + "dev": true + }, + "mock-geolocation": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/mock-geolocation/-/mock-geolocation-1.0.11.tgz", + "integrity": "sha1-LHuZJCoscNvs0xezkrMDEXIpksg=", + "dev": true + }, + "module-deps": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/module-deps/-/module-deps-6.2.3.tgz", + "integrity": "sha512-fg7OZaQBcL4/L+AK5f4iVqf9OMbCclXfy/znXRxTVhJSeW5AIlS9AwheYwDaXM3lVW7OBeaeUEY3gbaC6cLlSA==", + "dev": true, + "requires": { + "JSONStream": "^1.0.3", + "browser-resolve": "^2.0.0", + "cached-path-relative": "^1.0.2", + "concat-stream": "~1.6.0", + "defined": "^1.0.0", + "detective": "^5.2.0", + "duplexer2": "^0.1.2", + "inherits": "^2.0.1", + "parents": "^1.0.0", + "readable-stream": "^2.0.2", + "resolve": "^1.4.0", + "stream-combiner2": "^1.1.1", + "subarg": "^1.0.0", + "through2": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "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 + }, + "multi-stage-sourcemap": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz", + "integrity": "sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ==", + "dev": true, + "requires": { + "source-map": "^0.1.34" + }, + "dependencies": { + "source-map": { + "version": "0.1.43", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.1.43.tgz", + "integrity": "sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y=", + "dev": true, + "requires": { + "amdefine": ">=0.0.4" + } + } + } + }, + "murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E=" + }, + "mustache": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/mustache/-/mustache-3.2.1.tgz", + "integrity": "sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA==", + "dev": true + }, + "nan": { + "version": "2.14.2", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.14.2.tgz", + "integrity": "sha512-M2ufzIiINKCuDfBSAUr1vWQ+vuVcA9kqx8JJUsbQi6yf1uGRyb7HfpdfUr5qLXf3B/t8dPvcjhKMmlfnP47EzQ==", + "dev": true + }, + "nanoid": { + "version": "3.1.23", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.23.tgz", + "integrity": "sha512-FiB0kzdP0FFVGDKlRLEQ1BgDzU87dy5NnzjeW9YZNt+/c3+q82EQDUwniSAUxp/F0gFNI1ZhKU1FqYsMuqZVnw==", + "dev": true + }, + "nanomatch": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/nanomatch/-/nanomatch-1.2.13.tgz", + "integrity": "sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA==", + "dev": true, + "requires": { + "arr-diff": "^4.0.0", + "array-unique": "^0.3.2", + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "fragment-cache": "^0.2.1", + "is-windows": "^1.0.2", + "kind-of": "^6.0.2", + "object.pick": "^1.3.0", + "regex-not": "^1.0.0", + "snapdragon": "^0.8.1", + "to-regex": "^3.0.1" + } + }, + "napi-build-utils": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", + "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", + "dev": true + }, + "natural-compare": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", + "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", + "dev": true + }, + "negotiator": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.2.tgz", + "integrity": "sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw==", + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/nice-try/-/nice-try-1.0.5.tgz", + "integrity": "sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==", + "dev": true + }, + "nise": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/nise/-/nise-1.5.3.tgz", + "integrity": "sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ==", + "dev": true, + "requires": { + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "lolex": "^5.0.1", + "path-to-regexp": "^1.7.0" + }, + "dependencies": { + "lolex": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/lolex/-/lolex-5.1.2.tgz", + "integrity": "sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.7.0" + } + } + } + }, + "node-abi": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-2.30.0.tgz", + "integrity": "sha512-g6bZh3YCKQRdwuO/tSZZYJAw622SjsRfJ2X0Iy4sSOHZ34/sPPdVBn8fev2tj7njzLwuqPw9uMtGsGkO5kIQvg==", + "dev": true, + "requires": { + "semver": "^5.4.1" + } + }, + "node-fetch": { + "version": "2.6.1", + "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "node-gyp": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-7.1.2.tgz", + "integrity": "sha512-CbpcIo7C3eMu3dL1c3d0xw449fHIGALIJsRP4DDPHpyiW8vcriNY7ubh9TE4zEKfSxscY7PjeFnshE7h75ynjQ==", + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.3", + "nopt": "^5.0.0", + "npmlog": "^4.1.2", + "request": "^2.88.2", + "rimraf": "^3.0.2", + "semver": "^7.3.2", + "tar": "^6.0.2", + "which": "^2.0.2" + }, + "dependencies": { + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.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" + } + } + } + }, + "node-modules-regexp": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz", + "integrity": "sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA=", + "dev": true + }, + "node-nailgun-client": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/node-nailgun-client/-/node-nailgun-client-0.1.2.tgz", + "integrity": "sha512-OC611lR0fsDUSptwnhBf8d3sj4DZ5fiRKfS2QaGPe0kR3Dt9YoZr1MY7utK0scFPTbXuQdSBBbeoKYVbME1q5g==", + "dev": true, + "requires": { + "commander": "^2.8.1" + } + }, + "node-nailgun-server": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/node-nailgun-server/-/node-nailgun-server-0.1.4.tgz", + "integrity": "sha512-e0Hbh6XPb/7GqATJ45BePaUEO5AwR7InRW/pGeMKHH1cqPMBFCeqdBNfvi+bkVLnsbYOOQE+pAek9nmNoD8sYw==", + "dev": true, + "requires": { + "commander": "^2.8.1" + } + }, + "node-notifier": { + "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.5.0", + "shellwords": "^0.1.1", + "which": "^1.3.0" + } + }, + "node-plantuml": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/node-plantuml/-/node-plantuml-0.9.0.tgz", + "integrity": "sha512-bUnntTGjbpYu1pvXZI/GS6ctcXf3AOMqJxBMO8vFzTT5RwH8Cj/J5Ca6Dy+PEfMiMDdSBCFKSGnvYyBvYnucXg==", + "dev": true, + "requires": { + "commander": "^2.8.1", + "node-nailgun-client": "^0.1.0", + "node-nailgun-server": "^0.1.4", + "plantuml-encoder": "^1.2.5" + } + }, + "node-releases": { + "version": "1.1.73", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-1.1.73.tgz", + "integrity": "sha512-uW7fodD6pyW2FZNZnp/Z3hvWKeEW1Y8R1+1CnErE8cXFXzl5blBOoVB41CvMer6P6Q0S5FXDwcHgFd1Wj0U9zg==", + "dev": true + }, + "nomnom": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/nomnom/-/nomnom-1.8.1.tgz", + "integrity": "sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc=", + "dev": true, + "requires": { + "chalk": "~0.4.0", + "underscore": "~1.6.0" + }, + "dependencies": { + "ansi-styles": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-1.0.0.tgz", + "integrity": "sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg=", + "dev": true + }, + "chalk": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-0.4.0.tgz", + "integrity": "sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8=", + "dev": true, + "requires": { + "ansi-styles": "~1.0.0", + "has-color": "~0.1.0", + "strip-ansi": "~0.1.0" + } + } + } + }, + "noop-logger": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", + "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=", + "dev": true + }, + "nopt": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", + "integrity": "sha512-Tbj67rffqceeLpcRXrT7vKAN8CwfPeIBgM7E6iBkmKLV7bEMwpGgYLGv0jACUsECaa/vuxP0IjEont6umdMgtQ==", + "dev": true, + "requires": { + "abbrev": "1" + } + }, + "normalize-package-data": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", + "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha1-LRDAa9/TEuqXd2laTShDlFa3WUI=", + "dev": true + }, + "normalize-registry-url": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/normalize-registry-url/-/normalize-registry-url-1.0.0.tgz", + "integrity": "sha512-0v6T4851b72ykk5zEtFoN4QX/Fqyk7pouIj9xZyAvAe9jlDhAwT4z6FlwsoQCHjeuK2EGUoAwy/F4y4B1uZq9A==", + "dev": true + }, + "normalize-selector": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/normalize-selector/-/normalize-selector-0.2.0.tgz", + "integrity": "sha1-0LFF62kRicY6eNIB3E/bEpPvDAM=", + "dev": true + }, + "normalize-url": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-3.3.0.tgz", + "integrity": "sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg==", + "dev": true + }, + "now-and-later": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/now-and-later/-/now-and-later-2.0.1.tgz", + "integrity": "sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ==", + "dev": true, + "requires": { + "once": "^1.3.2" + } + }, + "npm-bundled": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.2.tgz", + "integrity": "sha512-x5DHup0SuyQcmL3s7Rx/YQ8sbw/Hzg0rj48eN0dV7hf5cmQq5PXIeioroH3raV1QC1yh3uTYuMThvEQF3iKgGQ==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-font-open-sans": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/npm-font-open-sans/-/npm-font-open-sans-1.1.0.tgz", + "integrity": "sha512-t1y5ShWm6a8FSLwBdINT47XYMcuKY2rkTBsTdz/76YB2MtX0YD89RUkY2eSS2/XOmlZfBe1HFBAwD+b9+/UfmQ==", + "dev": true + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-packlist": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-2.2.2.tgz", + "integrity": "sha512-Jt01acDvJRhJGthnUJVF/w6gumWOZxO7IkpY/lsX9//zqQgnF7OJaxgQXcerd4uQOLu7W5bkb4mChL9mdfm+Zg==", + "dev": true, + "requires": { + "glob": "^7.1.6", + "ignore-walk": "^3.0.3", + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-run-all": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/npm-run-all/-/npm-run-all-4.1.5.tgz", + "integrity": "sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "chalk": "^2.4.1", + "cross-spawn": "^6.0.5", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.3.0", + "read-pkg": "^3.0.0", + "shell-quote": "^1.6.1", + "string.prototype.padend": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + } + } + }, + "npm-run-path": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-2.0.2.tgz", + "integrity": "sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8=", + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "nth-check": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-1.0.2.tgz", + "integrity": "sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg==", + "dev": true, + "requires": { + "boolbase": "~1.0.0" + } + }, + "num2fraction": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/num2fraction/-/num2fraction-1.2.2.tgz", + "integrity": "sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4=", + "dev": true + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "nwsapi": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.0.tgz", + "integrity": "sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ==", + "dev": true + }, + "nyc": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/nyc/-/nyc-13.3.0.tgz", + "integrity": "sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w==", + "dev": true, + "requires": { + "archy": "^1.0.0", + "arrify": "^1.0.1", + "caching-transform": "^3.0.1", + "convert-source-map": "^1.6.0", + "find-cache-dir": "^2.0.0", + "find-up": "^3.0.0", + "foreground-child": "^1.5.6", + "glob": "^7.1.3", + "istanbul-lib-coverage": "^2.0.3", + "istanbul-lib-hook": "^2.0.3", + "istanbul-lib-instrument": "^3.1.0", + "istanbul-lib-report": "^2.0.4", + "istanbul-lib-source-maps": "^3.0.2", + "istanbul-reports": "^2.1.1", + "make-dir": "^1.3.0", + "merge-source-map": "^1.1.0", + "resolve-from": "^4.0.0", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.2", + "spawn-wrap": "^1.4.2", + "test-exclude": "^5.1.0", + "uuid": "^3.3.2", + "yargs": "^12.0.5", + "yargs-parser": "^11.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "append-transform": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "default-require-extensions": "^2.0.0" + } + }, + "archy": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "arrify": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "async": { + "version": "2.6.2", + "bundled": true, + "dev": true, + "requires": { + "lodash": "^4.17.11" + } + }, + "balanced-match": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "caching-transform": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "hasha": "^3.0.0", + "make-dir": "^1.3.0", + "package-hash": "^3.0.0", + "write-file-atomic": "^2.3.0" + } + }, + "camelcase": { + "version": "5.0.0", + "bundled": true, + "dev": true + }, + "cliui": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^2.1.1", + "strip-ansi": "^4.0.0", + "wrap-ansi": "^2.0.0" + } + }, + "code-point-at": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "commander": { + "version": "2.17.1", + "bundled": true, + "dev": true, + "optional": true + }, + "commondir": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "concat-map": { + "version": "0.0.1", + "bundled": true, + "dev": true + }, + "convert-source-map": { + "version": "1.6.0", + "bundled": true, + "dev": true, + "requires": { + "safe-buffer": "~5.1.1" + } + }, + "cross-spawn": { + "version": "4.0.2", + "bundled": true, + "dev": true, + "requires": { + "lru-cache": "^4.0.1", + "which": "^1.2.9" + } + }, + "debug": { + "version": "4.1.1", + "bundled": true, + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "decamelize": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "default-require-extensions": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "strip-bom": "^3.0.0" + } + }, + "end-of-stream": { + "version": "1.4.1", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "error-ex": { + "version": "1.3.2", + "bundled": true, + "dev": true, + "requires": { + "is-arrayish": "^0.2.1" + } + }, + "es6-error": { + "version": "4.1.1", + "bundled": true, + "dev": true + }, + "execa": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "cross-spawn": { + "version": "6.0.5", + "bundled": true, + "dev": true, + "requires": { + "nice-try": "^1.0.4", + "path-key": "^2.0.1", + "semver": "^5.5.0", + "shebang-command": "^1.2.0", + "which": "^1.2.9" + } + } + } + }, + "find-cache-dir": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "commondir": "^1.0.1", + "make-dir": "^1.0.0", + "pkg-dir": "^3.0.0" + } + }, + "find-up": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "locate-path": "^3.0.0" + } + }, + "foreground-child": { + "version": "1.5.6", + "bundled": true, + "dev": true, + "requires": { + "cross-spawn": "^4", + "signal-exit": "^3.0.0" + } + }, + "fs.realpath": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "get-caller-file": { + "version": "1.0.3", + "bundled": true, + "dev": true + }, + "get-stream": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "pump": "^3.0.0" + } + }, + "glob": { + "version": "7.1.3", + "bundled": true, + "dev": true, + "requires": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.0.4", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + } + }, + "graceful-fs": { + "version": "4.1.15", + "bundled": true, + "dev": true + }, + "handlebars": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "async": "^2.5.0", + "optimist": "^0.6.1", + "source-map": "^0.6.1", + "uglify-js": "^3.1.4" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "has-flag": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "hasha": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "is-stream": "^1.0.1" + } + }, + "hosted-git-info": { + "version": "2.7.1", + "bundled": true, + "dev": true + }, + "imurmurhash": { + "version": "0.1.4", + "bundled": true, + "dev": true + }, + "inflight": { + "version": "1.0.6", + "bundled": true, + "dev": true, + "requires": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "inherits": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "invert-kv": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-arrayish": { + "version": "0.2.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "is-stream": { + "version": "1.1.0", + "bundled": true, + "dev": true + }, + "isexe": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "istanbul-lib-coverage": { + "version": "2.0.3", + "bundled": true, + "dev": true + }, + "istanbul-lib-hook": { + "version": "2.0.3", + "bundled": true, + "dev": true, + "requires": { + "append-transform": "^1.0.0" + } + }, + "istanbul-lib-report": { + "version": "2.0.4", + "bundled": true, + "dev": true, + "requires": { + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "supports-color": "^6.0.0" + }, + "dependencies": { + "supports-color": { + "version": "6.1.0", + "bundled": true, + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "istanbul-lib-source-maps": { + "version": "3.0.2", + "bundled": true, + "dev": true, + "requires": { + "debug": "^4.1.1", + "istanbul-lib-coverage": "^2.0.3", + "make-dir": "^1.3.0", + "rimraf": "^2.6.2", + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "istanbul-reports": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "handlebars": "^4.1.0" + } + }, + "json-parse-better-errors": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "lcid": { + "version": "2.0.0", + "bundled": true, + "dev": true, + "requires": { + "invert-kv": "^2.0.0" + } + }, + "load-json-file": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + } + }, + "locate-path": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-locate": "^3.0.0", + "path-exists": "^3.0.0" + } + }, + "lodash": { + "version": "4.17.11", + "bundled": true, + "dev": true + }, + "lodash.flattendeep": { + "version": "4.4.0", + "bundled": true, + "dev": true + }, + "lru-cache": { + "version": "4.1.5", + "bundled": true, + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, + "make-dir": { + "version": "1.3.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "map-age-cleaner": { + "version": "0.1.3", + "bundled": true, + "dev": true, + "requires": { + "p-defer": "^1.0.0" + } + }, + "mem": { + "version": "4.1.0", + "bundled": true, + "dev": true, + "requires": { + "map-age-cleaner": "^0.1.1", + "mimic-fn": "^1.0.0", + "p-is-promise": "^2.0.0" + } + }, + "merge-source-map": { + "version": "1.1.0", + "bundled": true, + "dev": true, + "requires": { + "source-map": "^0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true + } + } + }, + "mimic-fn": { + "version": "1.2.0", + "bundled": true, + "dev": true + }, + "minimatch": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + }, + "minimist": { + "version": "0.0.10", + "bundled": true, + "dev": true + }, + "mkdirp": { + "version": "0.5.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "0.0.8" + }, + "dependencies": { + "minimist": { + "version": "0.0.8", + "bundled": true, + "dev": true + } + } + }, + "ms": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "nice-try": { + "version": "1.0.5", + "bundled": true, + "dev": true + }, + "normalize-package-data": { + "version": "2.5.0", + "bundled": true, + "dev": true, + "requires": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "npm-run-path": { + "version": "2.0.2", + "bundled": true, + "dev": true, + "requires": { + "path-key": "^2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "once": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "optimist": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "requires": { + "minimist": "~0.0.1", + "wordwrap": "~0.0.2" + } + }, + "os-homedir": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "os-locale": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "execa": "^1.0.0", + "lcid": "^2.0.0", + "mem": "^4.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "p-is-promise": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "p-limit": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "package-hash": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.15", + "hasha": "^3.0.0", + "lodash.flattendeep": "^4.4.0", + "release-zalgo": "^1.0.0" + } + }, + "parse-json": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "path-exists": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "path-key": { + "version": "2.0.1", + "bundled": true, + "dev": true + }, + "path-parse": { + "version": "1.0.6", + "bundled": true, + "dev": true + }, + "path-type": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "pify": "^3.0.0" + } + }, + "pify": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "pkg-dir": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^3.0.0" + } + }, + "pseudomap": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "pump": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "read-pkg": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "release-zalgo": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "es6-error": "^4.0.1" + } + }, + "require-directory": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "bundled": true, + "dev": true + }, + "resolve": { + "version": "1.10.0", + "bundled": true, + "dev": true, + "requires": { + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "rimraf": { + "version": "2.6.3", + "bundled": true, + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "safe-buffer": { + "version": "5.1.2", + "bundled": true, + "dev": true + }, + "semver": { + "version": "5.6.0", + "bundled": true, + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "shebang-command": { + "version": "1.2.0", + "bundled": true, + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "signal-exit": { + "version": "3.0.2", + "bundled": true, + "dev": true + }, + "spawn-wrap": { + "version": "1.4.2", + "bundled": true, + "dev": true, + "requires": { + "foreground-child": "^1.5.6", + "mkdirp": "^0.5.0", + "os-homedir": "^1.0.1", + "rimraf": "^2.6.2", + "signal-exit": "^3.0.2", + "which": "^1.3.0" + } + }, + "spdx-correct": { + "version": "3.1.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.2.0", + "bundled": true, + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.0", + "bundled": true, + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.3", + "bundled": true, + "dev": true + }, + "string-width": { + "version": "2.1.1", + "bundled": true, + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + }, + "strip-bom": { + "version": "3.0.0", + "bundled": true, + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "bundled": true, + "dev": true + }, + "test-exclude": { + "version": "5.1.0", + "bundled": true, + "dev": true, + "requires": { + "arrify": "^1.0.1", + "minimatch": "^3.0.4", + "read-pkg-up": "^4.0.0", + "require-main-filename": "^1.0.1" + } + }, + "uglify-js": { + "version": "3.4.9", + "bundled": true, + "dev": true, + "optional": true, + "requires": { + "commander": "~2.17.1", + "source-map": "~0.6.1" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "bundled": true, + "dev": true, + "optional": true + } + } + }, + "uuid": { + "version": "3.3.2", + "bundled": true, + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "bundled": true, + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "which": { + "version": "1.3.1", + "bundled": true, + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-module": { + "version": "2.0.0", + "bundled": true, + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "bundled": true, + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "bundled": true, + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "bundled": true, + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "bundled": true, + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "bundled": true, + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "bundled": true, + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "bundled": true, + "dev": true + }, + "write-file-atomic": { + "version": "2.4.2", + "bundled": true, + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "y18n": { + "version": "4.0.0", + "bundled": true, + "dev": true + }, + "yallist": { + "version": "2.1.2", + "bundled": true, + "dev": true + }, + "yargs": { + "version": "12.0.5", + "bundled": true, + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.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 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "bundled": true, + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, + "oauth-sign": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", + "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true + }, + "object-copy": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/object-copy/-/object-copy-0.1.0.tgz", + "integrity": "sha1-fn2Fi3gb18mRpBupde04EnVOmYw=", + "dev": true, + "requires": { + "copy-descriptor": "^0.1.0", + "define-property": "^0.2.5", + "kind-of": "^3.0.3" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "object-inspect": { + "version": "1.11.0", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.11.0.tgz", + "integrity": "sha512-jp7ikS6Sd3GxQfZJPyH3cjcbJF6GZPClgdV+EFygjFLQ5FmW/dRUnTd9PQ9k0JhoNDabWFbpF1yCdSWCC6gexg==", + "dev": true + }, + "object-is": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", + "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "object-keys": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", + "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", + "dev": true + }, + "object-visit": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/object-visit/-/object-visit-1.0.1.tgz", + "integrity": "sha1-95xEk68MU3e1n+OdOV5BBC3QRbs=", + "dev": true, + "requires": { + "isobject": "^3.0.0" + } + }, + "object.assign": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.2.tgz", + "integrity": "sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.0", + "define-properties": "^1.1.3", + "has-symbols": "^1.0.1", + "object-keys": "^1.1.1" + } + }, + "object.entries": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.entries/-/object.entries-1.1.4.tgz", + "integrity": "sha512-h4LWKWE+wKQGhtMjZEBud7uLGhqyLwj8fpHOarZhD2uY3C9cRtk57VQ89ke3moByLXMedqs3XCHzyb4AmA2DjA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "object.fromentries": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.4.tgz", + "integrity": "sha512-EsFBshs5RUUpQEY1D4q/m59kMfz4YJvxuNCJcv/jWwOJr34EaVnG11ZrZa0UHB3wnzV1wx8m58T4hQL8IuNXlQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2", + "has": "^1.0.3" + } + }, + "object.getownpropertydescriptors": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.2.tgz", + "integrity": "sha512-WtxeKSzfBjlzL+F9b7M7hewDzMwy+C8NRssHd1YrNlzHzIDrXcXiNOMrezdAEM4UXixgV+vvnyBeN7Rygl2ttQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "object.pick": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/object.pick/-/object.pick-1.3.0.tgz", + "integrity": "sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c=", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + }, + "object.values": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.4.tgz", + "integrity": "sha512-TnGo7j4XSnKQoK3MfvkzqKCi0nVe/D9I9IjwTNYdb/fxYHpjrluHVOgw0AF6jrRFGMPHdfuidR09tIDiIvnaSg==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2" + } + }, + "octokit-pagination-methods": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz", + "integrity": "sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ==", + "dev": true + }, + "on-finished": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.3.0.tgz", + "integrity": "sha1-IPEzZIGwg811M3mSoWlxqi2QaUc=", + "dev": true, + "requires": { + "ee-first": "1.1.1" + } + }, + "on-headers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/on-headers/-/on-headers-1.0.2.tgz", + "integrity": "sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA==", + "dev": true + }, + "once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", + "dev": true, + "requires": { + "wrappy": "1" + } + }, + "open": { + "version": "7.4.2", + "resolved": "https://registry.npmjs.org/open/-/open-7.4.2.tgz", + "integrity": "sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==", + "dev": true, + "requires": { + "is-docker": "^2.0.0", + "is-wsl": "^2.1.1" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + } + } + }, + "opener": { + "version": "1.5.2", + "resolved": "https://registry.npmjs.org/opener/-/opener-1.5.2.tgz", + "integrity": "sha512-ur5UIdyw5Y7yEj9wLzhqXiy6GZ3Mwx0yGI+5sMn2r0N0v3cKJvUmFH5yPP+WXh9e0xfyzyJX95D8l088DNFj7A==", + "dev": true + }, + "optimist": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/optimist/-/optimist-0.5.2.tgz", + "integrity": "sha1-hcjBRUszFeSniUfoV7HfAzRQv7w=", + "dev": true, + "requires": { + "wordwrap": "~0.0.2" + } + }, + "optionator": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.8.3.tgz", + "integrity": "sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==", + "dev": true, + "requires": { + "deep-is": "~0.1.3", + "fast-levenshtein": "~2.0.6", + "levn": "~0.3.0", + "prelude-ls": "~1.1.2", + "type-check": "~0.3.2", + "word-wrap": "~1.2.3" + } + }, + "ordered-read-streams": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz", + "integrity": "sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4=", + "dev": true, + "requires": { + "readable-stream": "^2.0.1" + } + }, + "os-browserify": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/os-browserify/-/os-browserify-0.3.0.tgz", + "integrity": "sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc=", + "dev": true + }, + "os-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" + } + }, + "os-name": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/os-name/-/os-name-3.1.0.tgz", + "integrity": "sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg==", + "dev": true, + "requires": { + "macos-release": "^2.2.0", + "windows-release": "^3.1.0" + } + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "own-or": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/own-or/-/own-or-1.0.0.tgz", + "integrity": "sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw=", + "dev": true + }, + "own-or-env": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/own-or-env/-/own-or-env-1.0.1.tgz", + "integrity": "sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw==", + "dev": true, + "requires": { + "own-or": "^1.0.0" + } + }, + "p-defer": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-defer/-/p-defer-1.0.0.tgz", + "integrity": "sha1-n26xgvbJqozXQwBKfU+WsZaw+ww=", + "dev": true + }, + "p-finally": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/p-finally/-/p-finally-1.0.0.tgz", + "integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=", + "dev": true + }, + "p-is-promise": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-2.1.0.tgz", + "integrity": "sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg==", + "dev": true + }, + "p-limit": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", + "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", + "dev": true, + "requires": { + "p-try": "^2.0.0" + } + }, + "p-locate": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-3.0.0.tgz", + "integrity": "sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ==", + "dev": true, + "requires": { + "p-limit": "^2.0.0" + } + }, + "p-try": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/p-try/-/p-try-2.2.0.tgz", + "integrity": "sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==", + "dev": true + }, + "pako": { + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/pako/-/pako-1.0.11.tgz", + "integrity": "sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==", + "dev": true + }, + "parent-module": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", + "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", + "dev": true, + "requires": { + "callsites": "^3.0.0" + }, + "dependencies": { + "callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true + } + } + }, + "parents": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/parents/-/parents-1.0.1.tgz", + "integrity": "sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E=", + "dev": true, + "requires": { + "path-platform": "~0.11.15" + } + }, + "parse-asn1": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/parse-asn1/-/parse-asn1-5.1.6.tgz", + "integrity": "sha512-RnZRo1EPU6JBnra2vGHj0yhp6ebyjBZpmUCLHWiFhxlzvBCCpAuZ7elsBp1PVAbQN0/04VD/19rfzlBSwLstMw==", + "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" + } + }, + "parse-entities": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/parse-entities/-/parse-entities-1.2.2.tgz", + "integrity": "sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg==", + "dev": true, + "requires": { + "character-entities": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "character-reference-invalid": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "parse-filepath": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/parse-filepath/-/parse-filepath-1.0.2.tgz", + "integrity": "sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "map-cache": "^0.2.0", + "path-root": "^0.1.1" + } + }, + "parse-json": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", + "dev": true, + "requires": { + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" + } + }, + "parse-path": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/parse-path/-/parse-path-4.0.3.tgz", + "integrity": "sha512-9Cepbp2asKnWTJ9x2kpw6Fe8y9JDbqwahGCTvklzd/cEq5C5JC59x2Xb0Kx+x0QZ8bvNquGO8/BWP0cwBHzSAA==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "protocols": "^1.4.0", + "qs": "^6.9.4", + "query-string": "^6.13.8" + } + }, + "parse-url": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/parse-url/-/parse-url-6.0.0.tgz", + "integrity": "sha512-cYyojeX7yIIwuJzledIHeLUBVJ6COVLeT4eF+2P6aKVzwvgKQPndCBv3+yQ7pcWjqToYwaligxzSYNNmGoMAvw==", + "dev": true, + "requires": { + "is-ssh": "^1.3.0", + "normalize-url": "^6.1.0", + "parse-path": "^4.0.0", + "protocols": "^1.4.0" + }, + "dependencies": { + "normalize-url": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", + "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", + "dev": true + } + } + }, + "parse5": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-5.1.0.tgz", + "integrity": "sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ==", + "dev": true + }, + "parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "dev": true + }, + "pascalcase": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/pascalcase/-/pascalcase-0.1.1.tgz", + "integrity": "sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ=", + "dev": true + }, + "path-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-0.0.1.tgz", + "integrity": "sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ==", + "dev": true + }, + "path-dirname": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/path-dirname/-/path-dirname-1.0.2.tgz", + "integrity": "sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA=", + "dev": true + }, + "path-exists": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", + "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", + "dev": true + }, + "path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", + "dev": true + }, + "path-key": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-2.0.1.tgz", + "integrity": "sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A=", + "dev": true + }, + "path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "path-platform": { + "version": "0.11.15", + "resolved": "https://registry.npmjs.org/path-platform/-/path-platform-0.11.15.tgz", + "integrity": "sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I=", + "dev": true + }, + "path-root": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/path-root/-/path-root-0.1.1.tgz", + "integrity": "sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc=", + "dev": true, + "requires": { + "path-root-regex": "^0.1.0" + } + }, + "path-root-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/path-root-regex/-/path-root-regex-0.1.2.tgz", + "integrity": "sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0=", + "dev": true + }, + "path-to-regexp": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-1.8.0.tgz", + "integrity": "sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA==", + "dev": true, + "requires": { + "isarray": "0.0.1" + }, + "dependencies": { + "isarray": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", + "integrity": "sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8=", + "dev": true + } + } + }, + "path-type": { + "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" + }, + "dependencies": { + "pify": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", + "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", + "dev": true + } + } + }, + "pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "requires": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + } + }, + "pbkdf2": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/pbkdf2/-/pbkdf2-3.1.2.tgz", + "integrity": "sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==", + "dev": true, + "requires": { + "create-hash": "^1.1.2", + "create-hmac": "^1.1.4", + "ripemd160": "^2.0.1", + "safe-buffer": "^5.0.1", + "sha.js": "^2.4.8" + } + }, + "pend": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/pend/-/pend-1.2.0.tgz", + "integrity": "sha1-elfrVQpng/kRUzH89GY9XI4AelA=", + "dev": true + }, + "performance-now": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", + "integrity": "sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns=", + "dev": true + }, + "picomatch": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.0.tgz", + "integrity": "sha512-lY1Q/PiJGC2zOv/z391WOTD+Z02bCgsFfvxoXXf6h7kv9o+WmsmzYqrAwY63sNgOxE4xEdq0WyUnXfKeBrSvYw==", + "dev": true + }, + "pidtree": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.3.1.tgz", + "integrity": "sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==", + "dev": true + }, + "pify": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", + "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", + "dev": true + }, + "pinkie": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/pinkie/-/pinkie-2.0.4.tgz", + "integrity": "sha1-clVrgM+g1IqXToDnckjoDtT3+HA=", + "dev": true + }, + "pinkie-promise": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pinkie-promise/-/pinkie-promise-2.0.1.tgz", + "integrity": "sha1-ITXW36ejWMBprJsXh3YogihFD/o=", + "dev": true, + "requires": { + "pinkie": "^2.0.0" + } + }, + "pirates": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.1.tgz", + "integrity": "sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA==", + "dev": true, + "requires": { + "node-modules-regexp": "^1.0.0" + } + }, + "pixelmatch": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/pixelmatch/-/pixelmatch-5.2.1.tgz", + "integrity": "sha512-WjcAdYSnKrrdDdqTcVEY7aB7UhhwjYQKYhHiBXdJef0MOaQeYpUdQ+iVyBLa5YBKS8MPVPPMX7rpOByISLpeEQ==", + "dev": true, + "requires": { + "pngjs": "^4.0.1" + }, + "dependencies": { + "pngjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-4.0.1.tgz", + "integrity": "sha512-rf5+2/ioHeQxR6IxuYNYGFytUyG3lma/WW1nsmjeHlWwtb2aByla6dkVc8pmJ9nplzkTA0q2xx7mMWrOTqT4Gg==", + "dev": true + } + } + }, + "pkg-dir": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz", + "integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "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": { + "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-limit": { + "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-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.1.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=", + "dev": true + } + } + }, + "pkg-up": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/pkg-up/-/pkg-up-2.0.0.tgz", + "integrity": "sha1-yBmscoBZpGHKscOImivjxJoATX8=", + "dev": true, + "requires": { + "find-up": "^2.1.0" + }, + "dependencies": { + "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": { + "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-limit": { + "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-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.1.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=", + "dev": true + } + } + }, + "plantuml-encoder": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz", + "integrity": "sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g==", + "dev": true + }, + "platform": { + "version": "1.3.6", + "resolved": "https://registry.npmjs.org/platform/-/platform-1.3.6.tgz", + "integrity": "sha512-fnWVljUchTro6RiCFvCXBbNhJc2NijN7oIQxbwsyL0buWJPG85v81ehlHI9fXrJsMNgTofEoWIQeClKpgxFLrg==", + "dev": true + }, + "pn": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/pn/-/pn-1.1.0.tgz", + "integrity": "sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA==", + "dev": true + }, + "pngjs": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/pngjs/-/pngjs-3.4.0.tgz", + "integrity": "sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==", + "dev": true + }, + "posix-character-classes": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/posix-character-classes/-/posix-character-classes-0.1.1.tgz", + "integrity": "sha1-AerA/jta9xoqbAL+q7jB/vfgDqs=", + "dev": true + }, + "postcss": { + "version": "8.3.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.6.tgz", + "integrity": "sha512-wG1cc/JhRgdqB6WHEuyLTedf3KIRuD0hG6ldkFEZNCjRxiC+3i6kkWUUbiJQayP28iwG35cEmAbe98585BYV0A==", + "dev": true, + "requires": { + "colorette": "^1.2.2", + "nanoid": "^3.1.23", + "source-map-js": "^0.6.2" + } + }, + "postcss-calc": { + "version": "7.0.5", + "resolved": "https://registry.npmjs.org/postcss-calc/-/postcss-calc-7.0.5.tgz", + "integrity": "sha512-1tKHutbGtLtEZF6PT4JSihCHfIVldU72mZ8SdZHIYriIZ9fh9k9aWSppaT8rHsyI3dX+KSR+W+Ix9BMY3AODrg==", + "dev": true, + "requires": { + "postcss": "^7.0.27", + "postcss-selector-parser": "^6.0.2", + "postcss-value-parser": "^4.0.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-cli": { + "version": "8.3.1", + "resolved": "https://registry.npmjs.org/postcss-cli/-/postcss-cli-8.3.1.tgz", + "integrity": "sha512-leHXsQRq89S3JC9zw/tKyiVV2jAhnfQe0J8VI4eQQbUjwIe0XxVqLrR+7UsahF1s9wi4GlqP6SJ8ydf44cgF2Q==", + "dev": true, + "requires": { + "chalk": "^4.0.0", + "chokidar": "^3.3.0", + "dependency-graph": "^0.9.0", + "fs-extra": "^9.0.0", + "get-stdin": "^8.0.0", + "globby": "^11.0.0", + "postcss-load-config": "^3.0.0", + "postcss-reporter": "^7.0.0", + "pretty-hrtime": "^1.0.3", + "read-cache": "^1.0.0", + "slash": "^3.0.0", + "yargs": "^16.0.0" + }, + "dependencies": { + "@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true + }, + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "array-union": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", + "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "dev": true + }, + "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": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "dir-glob": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", + "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", + "dev": true, + "requires": { + "path-type": "^4.0.0" + } + }, + "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 + }, + "fast-glob": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.7.tgz", + "integrity": "sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q==", + "dev": true, + "requires": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "get-stdin": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-8.0.0.tgz", + "integrity": "sha512-sY22aA6xchAzprjyqmSEQv4UbAAzRN0L2dQB0NlN5acTTK9Don6nhoc3eAbUnpZiCANAMfd/+40kVdKfFygohg==", + "dev": true + }, + "globby": { + "version": "11.0.4", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", + "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", + "dev": true, + "requires": { + "array-union": "^2.1.0", + "dir-glob": "^3.0.1", + "fast-glob": "^3.1.1", + "ignore": "^5.1.4", + "merge2": "^1.3.0", + "slash": "^3.0.0" + } + }, + "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 + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "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 + }, + "micromatch": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.4.tgz", + "integrity": "sha512-pRmzw/XUcwXGpD9aI9q/0XOwLNygjETJ8y0ao0wdqprrzDa4YnxLcz7fQRZr8voh8V10kGhABbNcHVk5wHgWwg==", + "dev": true, + "requires": { + "braces": "^3.0.1", + "picomatch": "^2.2.3" + } + }, + "path-type": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", + "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", + "dev": true + }, + "postcss-reporter": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-7.0.2.tgz", + "integrity": "sha512-JyQ96NTQQsso42y6L1H1RqHfWH1C3Jr0pt91mVv5IdYddZAE9DUZxuferNgk6q0o6vBVOrfVJb10X1FgDzjmDw==", + "dev": true, + "requires": { + "colorette": "^1.2.1", + "lodash.difference": "^4.5.0", + "lodash.forown": "^4.4.0", + "lodash.get": "^4.4.2", + "lodash.groupby": "^4.6.0", + "lodash.sortby": "^4.7.0" + } + }, + "slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^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": "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 + } + } + }, + "postcss-colormin": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-4.0.3.tgz", + "integrity": "sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "color": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-convert-values": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz", + "integrity": "sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-discard-comments": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz", + "integrity": "sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-discard-duplicates": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz", + "integrity": "sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-discard-empty": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz", + "integrity": "sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-discard-overridden": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz", + "integrity": "sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-html": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-0.36.0.tgz", + "integrity": "sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw==", + "dev": true, + "requires": { + "htmlparser2": "^3.10.0" + } + }, + "postcss-inline-svg": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/postcss-inline-svg/-/postcss-inline-svg-5.0.0.tgz", + "integrity": "sha512-Agqkrn91Qgi+KAO+cTvUS1IAZbHPD4sryPoG0q5U0ThokL4UGoMcmwvNV6tDoRp69B5tgD1VNkn9P09E+xpQAg==", + "dev": true, + "requires": { + "css-select": "^3.1.0", + "dom-serializer": "^1.1.0", + "htmlparser2": "^5.0.1", + "postcss-value-parser": "^4.0.0" + }, + "dependencies": { + "css-select": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-3.1.2.tgz", + "integrity": "sha512-qmss1EihSuBNWNNhHjxzxSfJoFBM/lERB/Q4EnsJQQC62R2evJDW481091oAdOr9uh46/0n4nrg0It5cAnj1RA==", + "dev": true, + "requires": { + "boolbase": "^1.0.0", + "css-what": "^4.0.0", + "domhandler": "^4.0.0", + "domutils": "^2.4.3", + "nth-check": "^2.0.0" + } + }, + "css-what": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/css-what/-/css-what-4.0.0.tgz", + "integrity": "sha512-teijzG7kwYfNVsUh2H/YN62xW3KK9YhXEgSlbxMlcyjPNvdKJqFx5lrwlJgoFP1ZHlB89iGDlo/JyshKeRhv5A==", + "dev": true + }, + "dom-serializer": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.3.2.tgz", + "integrity": "sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" + } + }, + "domelementtype": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.2.0.tgz", + "integrity": "sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==", + "dev": true + }, + "domhandler": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.2.0.tgz", + "integrity": "sha512-zk7sgt970kzPks2Bf+dwT/PLzghLnsivb9CcxkvR8Mzr66Olr0Ofd8neSbglHJHaHa2MadfoSdNlKYAaafmWfA==", + "dev": true, + "requires": { + "domelementtype": "^2.2.0" + } + }, + "domutils": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.7.0.tgz", + "integrity": "sha512-8eaHa17IwJUPAiB+SoTYBo5mCdeMgdcAoXJ59m6DT1vw+5iLS3gNoqYaRowaBKtGVrOF1Jz4yDTgYKLK2kvfJg==", + "dev": true, + "requires": { + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" + } + }, + "htmlparser2": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-5.0.1.tgz", + "integrity": "sha512-vKZZra6CSe9qsJzh0BjBGXo8dvzNsq/oGvsjfRdOrrryfeD9UOBEEQdeoqCRmKZchF5h2zOBMQ6YuQ0uRUmdbQ==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1", + "domhandler": "^3.3.0", + "domutils": "^2.4.2", + "entities": "^2.0.0" + }, + "dependencies": { + "domhandler": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-3.3.0.tgz", + "integrity": "sha512-J1C5rIANUbuYK+FuFL98650rihynUOEzRLxW+90bKZRWB6A1X1Tf82GxR1qAWLyfNPRvjqfip3Q5tdYlmAa9lA==", + "dev": true, + "requires": { + "domelementtype": "^2.0.1" + } + } + } + }, + "nth-check": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.0.0.tgz", + "integrity": "sha512-i4sc/Kj8htBrAiH1viZ0TgU8Y5XqCaV/FziYK6TBczxmeKm3AEFWqqF3195yKudrarqy7Zu80Ra5dobFjn9X/Q==", + "dev": true, + "requires": { + "boolbase": "^1.0.0" + } + } + } + }, + "postcss-jsx": { + "version": "0.36.4", + "resolved": "https://registry.npmjs.org/postcss-jsx/-/postcss-jsx-0.36.4.tgz", + "integrity": "sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA==", + "dev": true, + "requires": { + "@babel/core": ">=7.2.2" + } + }, + "postcss-less": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-3.1.4.tgz", + "integrity": "sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA==", + "dev": true, + "requires": { + "postcss": "^7.0.14" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-load-config": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.0.tgz", + "integrity": "sha512-ipM8Ds01ZUophjDTQYSVP70slFSYg3T0/zyfII5vzhN6V57YSxMgG5syXuwi5VtS8wSf3iL30v0uBdoIVx4Q0g==", + "dev": true, + "requires": { + "import-cwd": "^3.0.0", + "lilconfig": "^2.0.3", + "yaml": "^1.10.2" + } + }, + "postcss-markdown": { + "version": "0.36.0", + "resolved": "https://registry.npmjs.org/postcss-markdown/-/postcss-markdown-0.36.0.tgz", + "integrity": "sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ==", + "dev": true, + "requires": { + "remark": "^10.0.1", + "unist-util-find-all-after": "^1.0.2" + }, + "dependencies": { + "remark": { + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/remark/-/remark-10.0.1.tgz", + "integrity": "sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ==", + "dev": true, + "requires": { + "remark-parse": "^6.0.0", + "remark-stringify": "^6.0.0", + "unified": "^7.0.0" + } + }, + "remark-parse": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-6.0.3.tgz", + "integrity": "sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-stringify": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-6.0.4.tgz", + "integrity": "sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "unified": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-7.1.0.tgz", + "integrity": "sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "@types/vfile": "^3.0.0", + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^3.0.0", + "x-is-string": "^0.1.0" + } + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "vfile": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-3.0.1.tgz", + "integrity": "sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ==", + "dev": true, + "requires": { + "is-buffer": "^2.0.0", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "postcss-media-query-parser": { + "version": "0.2.3", + "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", + "integrity": "sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ=", + "dev": true + }, + "postcss-merge-longhand": { + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz", + "integrity": "sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw==", + "dev": true, + "requires": { + "css-color-names": "0.0.4", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "stylehacks": "^4.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-merge-rules": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz", + "integrity": "sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ==", + "dev": true, + "requires": { + "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": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "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 + }, + "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" + } + } + } + }, + "postcss-minify-font-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz", + "integrity": "sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-minify-gradients": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz", + "integrity": "sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "is-color-stop": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-minify-params": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz", + "integrity": "sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg==", + "dev": true, + "requires": { + "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" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-minify-selectors": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz", + "integrity": "sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-charset": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz", + "integrity": "sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g==", + "dev": true, + "requires": { + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-normalize-display-values": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz", + "integrity": "sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-positions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz", + "integrity": "sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-repeat-style": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz", + "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.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-string": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz", + "integrity": "sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA==", + "dev": true, + "requires": { + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-timing-functions": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz", + "integrity": "sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-unicode": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz", + "integrity": "sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-url": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz", + "integrity": "sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA==", + "dev": true, + "requires": { + "is-absolute-url": "^2.0.0", + "normalize-url": "^3.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-normalize-whitespace": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz", + "integrity": "sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA==", + "dev": true, + "requires": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-ordered-values": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz", + "integrity": "sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw==", + "dev": true, + "requires": { + "cssnano-util-get-arguments": "^4.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-reduce-initial": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz", + "integrity": "sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "caniuse-api": "^3.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-reduce-transforms": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz", + "integrity": "sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg==", + "dev": true, + "requires": { + "cssnano-util-get-match": "^4.0.0", + "has": "^1.0.0", + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-reporter": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-reporter/-/postcss-reporter-6.0.1.tgz", + "integrity": "sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw==", + "dev": true, + "requires": { + "chalk": "^2.4.1", + "lodash": "^4.17.11", + "log-symbols": "^2.2.0", + "postcss": "^7.0.7" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "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 + } + } + }, + "postcss-resolve-nested-selector": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", + "integrity": "sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4=", + "dev": true + }, + "postcss-safe-parser": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz", + "integrity": "sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g==", + "dev": true, + "requires": { + "postcss": "^7.0.26" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-sass": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/postcss-sass/-/postcss-sass-0.3.5.tgz", + "integrity": "sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A==", + "dev": true, + "requires": { + "gonzales-pe": "^4.2.3", + "postcss": "^7.0.1" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-scss": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/postcss-scss/-/postcss-scss-2.1.1.tgz", + "integrity": "sha512-jQmGnj0hSGLd9RscFw9LyuSVAa5Bl1/KBPqG1NQw9w8ND55nY4ZEsdlVuYJvLPpV+y0nwTV5v/4rHPzZRihQbA==", + "dev": true, + "requires": { + "postcss": "^7.0.6" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-selector-parser": { + "version": "6.0.6", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.6.tgz", + "integrity": "sha512-9LXrvaaX3+mcv5xkg5kFwqSzSH1JIObIx51PrndZwlmznwXRfxMddDvo9gve3gVR8ZTKgoFDdWkbRFmEhT4PMg==", + "dev": true, + "requires": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + } + }, + "postcss-svgo": { + "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": { + "postcss": "^7.0.0", + "postcss-value-parser": "^3.0.0", + "svgo": "^1.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "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 + }, + "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" + } + } + } + }, + "postcss-syntax": { + "version": "0.36.2", + "resolved": "https://registry.npmjs.org/postcss-syntax/-/postcss-syntax-0.36.2.tgz", + "integrity": "sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w==", + "dev": true + }, + "postcss-unique-selectors": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz", + "integrity": "sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg==", + "dev": true, + "requires": { + "alphanum-sort": "^1.0.0", + "postcss": "^7.0.0", + "uniqs": "^2.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "postcss-value-parser": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz", + "integrity": "sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ==", + "dev": true + }, + "potpack": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-1.0.1.tgz", + "integrity": "sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw==" + }, + "prebuild-install": { + "version": "5.3.6", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-5.3.6.tgz", + "integrity": "sha512-s8Aai8++QQGi4sSbs/M1Qku62PFK49Jm1CbgXklGz4nmHveDq0wzJkg7Na5QbnO1uNH8K7iqx2EQ/mV0MZEmOg==", + "dev": true, + "requires": { + "detect-libc": "^1.0.3", + "expand-template": "^2.0.3", + "github-from-package": "0.0.0", + "minimist": "^1.2.3", + "mkdirp-classic": "^0.5.3", + "napi-build-utils": "^1.0.1", + "node-abi": "^2.7.0", + "noop-logger": "^0.1.1", + "npmlog": "^4.0.1", + "pump": "^3.0.0", + "rc": "^1.2.7", + "simple-get": "^3.0.3", + "tar-fs": "^2.0.0", + "tunnel-agent": "^0.6.0", + "which-pm-runs": "^1.0.0" + } + }, + "prelude-ls": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.1.2.tgz", + "integrity": "sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ=", + "dev": true + }, + "prepend-http": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/prepend-http/-/prepend-http-1.0.4.tgz", + "integrity": "sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw=", + "dev": true + }, + "pretty-bytes": { + "version": "5.6.0", + "resolved": "https://registry.npmjs.org/pretty-bytes/-/pretty-bytes-5.6.0.tgz", + "integrity": "sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg==", + "dev": true + }, + "pretty-hrtime": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz", + "integrity": "sha1-t+PqQkNaTJsnWdmeDyAesZWALuE=", + "dev": true + }, + "printf": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/printf/-/printf-0.6.1.tgz", + "integrity": "sha512-is0ctgGdPJ5951KulgfzvHGwJtZ5ck8l042vRkV6jrkpBzTmb/lueTqguWHy2JfVA+RY6gFVlaZgUS0j7S/dsw==", + "dev": true + }, + "process": { + "version": "0.11.10", + "resolved": "https://registry.npmjs.org/process/-/process-0.11.10.tgz", + "integrity": "sha1-czIwDoQBYb2j5podHZGn1LwW8YI=", + "dev": true + }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "prop-types": { + "version": "15.7.2", + "resolved": "https://registry.npmjs.org/prop-types/-/prop-types-15.7.2.tgz", + "integrity": "sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ==", + "dev": true, + "requires": { + "loose-envify": "^1.4.0", + "object-assign": "^4.1.1", + "react-is": "^16.8.1" + } + }, + "property-information": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/property-information/-/property-information-4.2.0.tgz", + "integrity": "sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ==", + "dev": true, + "requires": { + "xtend": "^4.0.1" + } + }, + "protocol-buffers-schema": { + "version": "3.5.1", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.5.1.tgz", + "integrity": "sha512-YVCvdhxWNDP8/nJDyXLuM+UFsuPk4+1PB7WGPVDzm3HTHbzFLxQYeW2iZpS4mmnXrQJGBzt230t/BbEb7PrQaw==" + }, + "protocols": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/protocols/-/protocols-1.4.8.tgz", + "integrity": "sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==", + "dev": true + }, + "proxy-addr": { + "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.2.0", + "ipaddr.js": "1.9.1" + } + }, + "proxy-from-env": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/proxy-from-env/-/proxy-from-env-1.1.0.tgz", + "integrity": "sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==", + "dev": true + }, + "pseudomap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/pseudomap/-/pseudomap-1.0.2.tgz", + "integrity": "sha1-8FKijacOYYkX7wqKw0wa5aaChrM=", + "dev": true + }, + "psl": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.8.0.tgz", + "integrity": "sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ==", + "dev": true + }, + "public-encrypt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/public-encrypt/-/public-encrypt-4.0.3.tgz", + "integrity": "sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==", + "dev": true, + "requires": { + "bn.js": "^4.1.0", + "browserify-rsa": "^4.0.0", + "create-hash": "^1.1.0", + "parse-asn1": "^5.0.0", + "randombytes": "^2.0.1", + "safe-buffer": "^5.1.2" + }, + "dependencies": { + "bn.js": { + "version": "4.12.0", + "resolved": "https://registry.npmjs.org/bn.js/-/bn.js-4.12.0.tgz", + "integrity": "sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==", + "dev": true + } + } + }, + "pump": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", + "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, + "pumpify": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.5.1.tgz", + "integrity": "sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==", + "dev": true, + "requires": { + "duplexify": "^3.6.0", + "inherits": "^2.0.3", + "pump": "^2.0.0" + }, + "dependencies": { + "pump": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/pump/-/pump-2.0.1.tgz", + "integrity": "sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==", + "dev": true, + "requires": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + } + } + }, + "punycode": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.4.1.tgz", + "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", + "dev": true + }, + "puppeteer": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/puppeteer/-/puppeteer-1.20.0.tgz", + "integrity": "sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ==", + "dev": true, + "requires": { + "debug": "^4.1.0", + "extract-zip": "^1.6.6", + "https-proxy-agent": "^2.2.1", + "mime": "^2.0.3", + "progress": "^2.0.1", + "proxy-from-env": "^1.0.0", + "rimraf": "^2.6.1", + "ws": "^6.1.0" + }, + "dependencies": { + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "q": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", + "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", + "dev": true + }, + "qrcode-terminal": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz", + "integrity": "sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ==", + "dev": true + }, + "qs": { + "version": "6.10.1", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.1.tgz", + "integrity": "sha512-M528Hph6wsSVOBiYUnGf+K/7w0hNshs/duGsNXPUCLH5XAqjEtiPGwNONLV0tBH8NoGb0mvD5JubnUTrujKDTg==", + "dev": true, + "requires": { + "side-channel": "^1.0.4" + } + }, + "query-string": { + "version": "6.14.1", + "resolved": "https://registry.npmjs.org/query-string/-/query-string-6.14.1.tgz", + "integrity": "sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==", + "dev": true, + "requires": { + "decode-uri-component": "^0.2.0", + "filter-obj": "^1.1.0", + "split-on-first": "^1.0.0", + "strict-uri-encode": "^2.0.0" + } + }, + "querystring": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/querystring/-/querystring-0.2.0.tgz", + "integrity": "sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA=", + "dev": true + }, + "querystring-es3": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/querystring-es3/-/querystring-es3-0.2.1.tgz", + "integrity": "sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM=", + "dev": true + }, + "queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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=", + "dev": true + }, + "quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==" + }, + "randombytes": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", + "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.0" + } + }, + "randomfill": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/randomfill/-/randomfill-1.0.4.tgz", + "integrity": "sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==", + "dev": true, + "requires": { + "randombytes": "^2.0.5", + "safe-buffer": "^5.1.0" + } + }, + "range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "dev": true + }, + "raw-body": { + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-1.1.7.tgz", + "integrity": "sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU=", + "dev": true, + "requires": { + "bytes": "1", + "string_decoder": "0.10" + }, + "dependencies": { + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "react": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react/-/react-16.14.0.tgz", + "integrity": "sha512-0X2CImDkJGApiAlcf0ODKIneSwBPhqJawOa5wCtKbu7ZECrmS26NvtSILynQ66cgkT/RJ4LidJOc3bUESwmU8g==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2" + } + }, + "react-dom": { + "version": "16.14.0", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-16.14.0.tgz", + "integrity": "sha512-1gCeQXDLoIqMgqD3IO2Ah9bnf0w9kzhwN5q4FGnHZ67hBm9yePzB5JJAIQCc8x3pFnNlwFq4RidZggNAAkzWWw==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1", + "prop-types": "^15.6.2", + "scheduler": "^0.19.1" + } + }, + "react-is": { + "version": "16.13.1", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", + "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha1-5mTvMRYRZsl1HNvo28+GtftY93Q=", + "dev": true, + "requires": { + "pify": "^2.3.0" + }, + "dependencies": { + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "dev": true + } + } + }, + "read-only-stream": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/read-only-stream/-/read-only-stream-2.0.0.tgz", + "integrity": "sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A=", + "dev": true, + "requires": { + "readable-stream": "^2.0.2" + } + }, + "read-pkg": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", + "dev": true, + "requires": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + } + }, + "read-pkg-up": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-4.0.0.tgz", + "integrity": "sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA==", + "dev": true, + "requires": { + "find-up": "^3.0.0", + "read-pkg": "^3.0.0" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, + "readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "requires": { + "picomatch": "^2.2.1" + } + }, + "redent": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/redent/-/redent-1.0.0.tgz", + "integrity": "sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94=", + "dev": true, + "requires": { + "indent-string": "^2.1.0", + "strip-indent": "^1.0.1" + } + }, + "regenerate": { + "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.2.0", + "resolved": "https://registry.npmjs.org/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz", + "integrity": "sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA==", + "dev": true, + "requires": { + "regenerate": "^1.4.0" + } + }, + "regenerator-runtime": { + "version": "0.13.7", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true + }, + "regenerator-transform": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/regenerator-transform/-/regenerator-transform-0.14.5.tgz", + "integrity": "sha512-eOf6vka5IO151Jfsw2NO9WpGX58W6wWmefK3I1zEGr0lOD0u8rwPaNqQL1aRxUaxLeKO3ArNh3VYg1KbaD+FFw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.8.4" + } + }, + "regex-not": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/regex-not/-/regex-not-1.0.2.tgz", + "integrity": "sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.2", + "safe-regex": "^1.1.0" + } + }, + "regexp.prototype.flags": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.3.1.tgz", + "integrity": "sha512-JiBdRBq91WlY7uRJ0ds7R+dU02i6LKi8r3BuQhNXn+kmeLN+EfHhfjqMRis1zJxnlu88hq/4dx0P2OP3APRTOA==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "regexpp": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", + "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", + "dev": true + }, + "regexpu-core": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/regexpu-core/-/regexpu-core-4.7.1.tgz", + "integrity": "sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ==", + "dev": true, + "requires": { + "regenerate": "^1.4.0", + "regenerate-unicode-properties": "^8.2.0", + "regjsgen": "^0.5.1", + "regjsparser": "^0.6.4", + "unicode-match-property-ecmascript": "^1.0.4", + "unicode-match-property-value-ecmascript": "^1.2.0" + } + }, + "regextras": { + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/regextras/-/regextras-0.8.0.tgz", + "integrity": "sha512-k519uI04Z3SaY0fLX843MRXnDeG2+vHOFsyhiPZvNLe7r8rD2YNRjq4BQLZZ0oAr2NrtvZlICsXysGNFPGa3CQ==", + "dev": true + }, + "registry-url": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/registry-url/-/registry-url-4.0.0.tgz", + "integrity": "sha512-WAfGLywivb8s2+Cfblq1UV+kOyzURHzWSJmciDvrmstr4bv/0lnVSB9jfoOfkxx5xNJ1OGlSFmZh9WYBLFJOPg==", + "dev": true, + "requires": { + "rc": "^1.2.7" + } + }, + "regjsgen": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/regjsgen/-/regjsgen-0.5.2.tgz", + "integrity": "sha512-OFFT3MfrH90xIW8OOSyUrk6QHD5E9JOTeGodiJeBS3J6IwlgzJMNE/1bZklWz5oTg+9dCMyEetclvCVXOPoN3A==", + "dev": true + }, + "regjsparser": { + "version": "0.6.9", + "resolved": "https://registry.npmjs.org/regjsparser/-/regjsparser-0.6.9.tgz", + "integrity": "sha512-ZqbNRz1SNjLAiYuwY0zoXW8Ne675IX5q+YHioAGbCw4X96Mjl2+dcX9B2ciaeyYjViDAfvIjFpQjJgLttTEERQ==", + "dev": true, + "requires": { + "jsesc": "~0.5.0" + }, + "dependencies": { + "jsesc": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-0.5.0.tgz", + "integrity": "sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0=", + "dev": true + } + } + }, + "remark": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/remark/-/remark-9.0.0.tgz", + "integrity": "sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A==", + "dev": true, + "requires": { + "remark-parse": "^5.0.0", + "remark-stringify": "^5.0.0", + "unified": "^6.0.0" + } + }, + "remark-html": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/remark-html/-/remark-html-8.0.0.tgz", + "integrity": "sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg==", + "dev": true, + "requires": { + "hast-util-sanitize": "^1.0.0", + "hast-util-to-html": "^4.0.0", + "mdast-util-to-hast": "^3.0.0", + "xtend": "^4.0.1" + } + }, + "remark-parse": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-parse/-/remark-parse-5.0.0.tgz", + "integrity": "sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA==", + "dev": true, + "requires": { + "collapse-white-space": "^1.0.2", + "is-alphabetical": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "is-word-character": "^1.0.0", + "markdown-escapes": "^1.0.0", + "parse-entities": "^1.1.0", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "trim": "0.0.1", + "trim-trailing-lines": "^1.0.0", + "unherit": "^1.0.4", + "unist-util-remove-position": "^1.0.0", + "vfile-location": "^2.0.0", + "xtend": "^4.0.1" + } + }, + "remark-reference-links": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/remark-reference-links/-/remark-reference-links-4.0.4.tgz", + "integrity": "sha512-+2X8hwSQqxG4tvjYZNrTcEC+bXp8shQvwRGG6J/rnFTvBoU4G0BBviZoqKGZizLh/DG+0gSYhiDDWCqyxXW1iQ==", + "dev": true, + "requires": { + "unist-util-visit": "^1.0.0" + } + }, + "remark-slug": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/remark-slug/-/remark-slug-5.1.2.tgz", + "integrity": "sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A==", + "dev": true, + "requires": { + "github-slugger": "^1.0.0", + "mdast-util-to-string": "^1.0.0", + "unist-util-visit": "^1.0.0" + } + }, + "remark-stringify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/remark-stringify/-/remark-stringify-5.0.0.tgz", + "integrity": "sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w==", + "dev": true, + "requires": { + "ccount": "^1.0.0", + "is-alphanumeric": "^1.0.0", + "is-decimal": "^1.0.0", + "is-whitespace-character": "^1.0.0", + "longest-streak": "^2.0.1", + "markdown-escapes": "^1.0.0", + "markdown-table": "^1.1.0", + "mdast-util-compact": "^1.0.0", + "parse-entities": "^1.0.2", + "repeat-string": "^1.5.4", + "state-toggle": "^1.0.0", + "stringify-entities": "^1.0.1", + "unherit": "^1.0.4", + "xtend": "^4.0.1" + } + }, + "remark-toc": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/remark-toc/-/remark-toc-5.1.1.tgz", + "integrity": "sha512-vCPW4YOsm2CfyuScdktM9KDnJXVHJsd/ZeRtst+dnBU3B3KKvt8bc+bs5syJjyptAHfqo7H+5Uhz+2blWBfwow==", + "dev": true, + "requires": { + "mdast-util-toc": "^3.0.0", + "remark-slug": "^5.0.0" + } + }, + "remove-bom-buffer": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz", + "integrity": "sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ==", + "dev": true, + "requires": { + "is-buffer": "^1.1.5", + "is-utf8": "^0.2.1" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + } + } + }, + "remove-bom-stream": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz", + "integrity": "sha1-BfGlk/FuQuH7kOv1nejlaVJflSM=", + "dev": true, + "requires": { + "remove-bom-buffer": "^3.0.0", + "safe-buffer": "^5.1.0", + "through2": "^2.0.3" + } + }, + "remove-trailing-separator": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", + "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", + "dev": true + }, + "repeat-element": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", + "integrity": "sha512-LFiNfRcSu7KK3evMyYOuCzv3L10TW7yC1G2/+StMjK8Y6Vqd2MG7r/Qjw4ghtuCOjFvlnms/iMmLqpvW/ES/WQ==", + "dev": true + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha1-jcrkcOHIirwtYA//Sndihtp15jc=", + "dev": true + }, + "repeating": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/repeating/-/repeating-2.0.1.tgz", + "integrity": "sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo=", + "dev": true, + "requires": { + "is-finite": "^1.0.0" + } + }, + "replace-ext": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/replace-ext/-/replace-ext-1.0.0.tgz", + "integrity": "sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs=", + "dev": true + }, + "request": { + "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" + }, + "dependencies": { + "qs": { + "version": "6.5.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.2.tgz", + "integrity": "sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA==", + "dev": true + } + } + }, + "request-promise-core": { + "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.19" + } + }, + "request-promise-native": { + "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.4", + "stealthy-require": "^1.1.1", + "tough-cookie": "^2.3.3" + } + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true + }, + "require-from-string": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz", + "integrity": "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==", + "dev": true + }, + "require-main-filename": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-1.0.1.tgz", + "integrity": "sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE=", + "dev": true + }, + "requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=", + "dev": true + }, + "resolve": { + "version": "1.20.0", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.20.0.tgz", + "integrity": "sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==", + "dev": true, + "requires": { + "is-core-module": "^2.2.0", + "path-parse": "^1.0.6" + } + }, + "resolve-from": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-3.0.0.tgz", + "integrity": "sha1-six699nWiBvItuZTM17rywoYh0g=", + "dev": true + }, + "resolve-options": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/resolve-options/-/resolve-options-1.1.0.tgz", + "integrity": "sha1-MrueOcBtZzONyTeMDW1gdFZq0TE=", + "dev": true, + "requires": { + "value-or-function": "^3.0.0" + } + }, + "resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "requires": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "resolve-url": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/resolve-url/-/resolve-url-0.2.1.tgz", + "integrity": "sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo=", + "dev": true + }, + "resumer": { + "version": "0.0.0", + "resolved": "https://registry.npmjs.org/resumer/-/resumer-0.0.0.tgz", + "integrity": "sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k=", + "dev": true, + "requires": { + "through": "~2.3.4" + } + }, + "ret": { + "version": "0.1.15", + "resolved": "https://registry.npmjs.org/ret/-/ret-0.1.15.tgz", + "integrity": "sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg==", + "dev": true + }, + "reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true + }, + "rgb-regex": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/rgb-regex/-/rgb-regex-1.0.1.tgz", + "integrity": "sha1-wODWiC3w4jviVKR16O3UGRX+rrE=", + "dev": true + }, + "rgba-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/rgba-regex/-/rgba-regex-1.0.0.tgz", + "integrity": "sha1-QzdOLiyglosO8VI0YLfXMP8i7rM=", + "dev": true + }, + "rimraf": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", + "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "ripemd160": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/ripemd160/-/ripemd160-2.0.2.tgz", + "integrity": "sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==", + "dev": true, + "requires": { + "hash-base": "^3.0.0", + "inherits": "^2.0.1" + } + }, + "rollup": { + "version": "2.56.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.56.1.tgz", + "integrity": "sha512-KkrsNjeiTfGJMUFBi/PNfj3fnt70akqdoNXOjlzwo98uA1qrlkmgt6SGaK5OwhyDYCVnJb6jb2Xa2wbI47P4Nw==", + "dev": true, + "requires": { + "fsevents": "~2.3.2" + } + }, + "rollup-plugin-sourcemaps": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.6.3.tgz", + "integrity": "sha512-paFu+nT1xvuO1tPFYXGe+XnQvg4Hjqv/eIhG8i5EspfYYPBKL57X7iVbfv55aNVASg3dzWvES9dmWsL2KhfByw==", + "dev": true, + "requires": { + "@rollup/pluginutils": "^3.0.9", + "source-map-resolve": "^0.6.0" + }, + "dependencies": { + "source-map-resolve": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.6.0.tgz", + "integrity": "sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w==", + "dev": true, + "requires": { + "atob": "^2.1.2", + "decode-uri-component": "^0.2.0" + } + } + } + }, + "rollup-plugin-terser": { + "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", + "dev": true, + "requires": { + "@babel/code-frame": "^7.10.4", + "jest-worker": "^26.2.1", + "serialize-javascript": "^4.0.0", + "terser": "^5.0.0" + } + }, + "rollup-plugin-unassert": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/rollup-plugin-unassert/-/rollup-plugin-unassert-0.3.0.tgz", + "integrity": "sha512-mdRJ8AinuNdtoS9L+CXVQcoaHLHV+eeEV5b9u76ai3yxOWp3t1oXQOuDjRmRiIjOYWYxCkSYiFQH72QoPdDfwQ==", + "dev": true, + "requires": { + "acorn": "^6.1.1", + "convert-source-map": "^1.6.0", + "escodegen": "^1.11.1", + "multi-stage-sourcemap": "^0.3.1", + "rollup-pluginutils": "^2.5.0", + "unassert": "^1.5.1" + }, + "dependencies": { + "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 + } + } + }, + "rollup-pluginutils": { + "version": "2.8.2", + "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", + "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", + "dev": true, + "requires": { + "estree-walker": "^0.6.1" + }, + "dependencies": { + "estree-walker": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", + "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", + "dev": true + } + } + }, + "run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "requires": { + "queue-microtask": "^1.2.2" + } + }, + "rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q=" + }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safe-json-parse": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/safe-json-parse/-/safe-json-parse-1.0.1.tgz", + "integrity": "sha1-PnZyPjjf3aE8mx0poeB//uSzC1c=", + "dev": true + }, + "safe-regex": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex/-/safe-regex-1.1.0.tgz", + "integrity": "sha1-QKNmnzsHfR6UPURinhV91IAjvy4=", + "dev": true, + "requires": { + "ret": "~0.1.10" + } + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, + "saxes": { + "version": "3.1.11", + "resolved": "https://registry.npmjs.org/saxes/-/saxes-3.1.11.tgz", + "integrity": "sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g==", + "dev": true, + "requires": { + "xmlchars": "^2.1.1" + } + }, + "scheduler": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.19.1.tgz", + "integrity": "sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA==", + "dev": true, + "requires": { + "loose-envify": "^1.1.0", + "object-assign": "^4.1.1" + } + }, + "seedrandom": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.4.tgz", + "integrity": "sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA==", + "dev": true + }, + "selenium-webdriver": { + "version": "4.0.0-beta.4", + "resolved": "https://registry.npmjs.org/selenium-webdriver/-/selenium-webdriver-4.0.0-beta.4.tgz", + "integrity": "sha512-+s/CIYkWzmnC9WASBxxVj7Lm0dcyl6OaFxwIJaFCT5WCuACiimEEr4lUnOOFP/QlKfkDQ56m+aRczaq2EvJEJg==", + "dev": true, + "requires": { + "jszip": "^3.6.0", + "rimraf": "^3.0.2", + "tmp": "^0.2.1", + "ws": ">=7.4.6" + }, + "dependencies": { + "tmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.2.1.tgz", + "integrity": "sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ==", + "dev": true, + "requires": { + "rimraf": "^3.0.0" + } + }, + "ws": { + "version": "7.5.3", + "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.3.tgz", + "integrity": "sha512-kQ/dHIzuLrS6Je9+uv81ueZomEwH0qVYstcAQ4/Z93K8zeko9gtAbttJWzoC5ukqXY1PpoouV3+VSOqEAFt5wg==", + "dev": true + } + } + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "send": { + "version": "0.17.1", + "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", + "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", + "dev": true, + "requires": { + "debug": "2.6.9", + "depd": "~1.1.2", + "destroy": "~1.0.4", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "~1.7.2", + "mime": "1.6.0", + "ms": "2.1.1", + "on-finished": "~2.3.0", + "range-parser": "~1.2.1", + "statuses": "~1.5.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + }, + "dependencies": { + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "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.1", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", + "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", + "dev": true + } + } + }, + "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" + } + }, + "serve-static": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", + "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", + "dev": true, + "requires": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.17.1" + } + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "set-immediate-shim": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz", + "integrity": "sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E=", + "dev": true + }, + "set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "requires": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "dependencies": { + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "requires": { + "isobject": "^3.0.1" + } + } + } + }, + "setprototypeof": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", + "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", + "dev": true + }, + "sha.js": { + "version": "2.4.11", + "resolved": "https://registry.npmjs.org/sha.js/-/sha.js-2.4.11.tgz", + "integrity": "sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "safe-buffer": "^5.0.1" + } + }, + "shasum": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/shasum/-/shasum-1.0.2.tgz", + "integrity": "sha1-5wEjENj0F/TetXEhUOVni4euVl8=", + "dev": true, + "requires": { + "json-stable-stringify": "~0.0.0", + "sha.js": "~2.4.4" + } + }, + "shasum-object": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shasum-object/-/shasum-object-1.0.0.tgz", + "integrity": "sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg==", + "dev": true, + "requires": { + "fast-safe-stringify": "^2.0.7" + } + }, + "shebang-command": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-1.2.0.tgz", + "integrity": "sha1-RKrGW2lbAzmJaMOfNj/uXer98eo=", + "dev": true, + "requires": { + "shebang-regex": "^1.0.0" + } + }, + "shebang-regex": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-1.0.0.tgz", + "integrity": "sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM=", + "dev": true + }, + "shell-quote": { + "version": "1.7.2", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.7.2.tgz", + "integrity": "sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg==", + "dev": true + }, + "shellwords": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/shellwords/-/shellwords-0.1.1.tgz", + "integrity": "sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww==", + "dev": true + }, + "shuffle-seed": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/shuffle-seed/-/shuffle-seed-1.1.6.tgz", + "integrity": "sha1-UzwSaDurO0+j6HUfxOViFGdEJgs=", + "dev": true, + "requires": { + "seedrandom": "^2.4.2" + } + }, + "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" + } + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true + }, + "simple-concat": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", + "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", + "dev": true + }, + "simple-get": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-3.1.0.tgz", + "integrity": "sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA==", + "dev": true, + "requires": { + "decompress-response": "^4.2.0", + "once": "^1.3.1", + "simple-concat": "^1.0.0" + } + }, + "simple-swizzle": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", + "integrity": "sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo=", + "dev": true, + "requires": { + "is-arrayish": "^0.3.1" + }, + "dependencies": { + "is-arrayish": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", + "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", + "dev": true + } + } + }, + "sinon": { + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/sinon/-/sinon-7.5.0.tgz", + "integrity": "sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q==", + "dev": true, + "requires": { + "@sinonjs/commons": "^1.4.0", + "@sinonjs/formatio": "^3.2.1", + "@sinonjs/samsam": "^3.3.3", + "diff": "^3.5.0", + "lolex": "^4.2.0", + "nise": "^1.5.2", + "supports-color": "^5.5.0" + }, + "dependencies": { + "diff": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-3.5.0.tgz", + "integrity": "sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA==", + "dev": true + } + } + }, + "slash": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-2.0.0.tgz", + "integrity": "sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A==", + "dev": true + }, + "slice-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/slice-ansi/-/slice-ansi-2.1.0.tgz", + "integrity": "sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "astral-regex": "^1.0.0", + "is-fullwidth-code-point": "^2.0.0" + } + }, + "snapdragon": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/snapdragon/-/snapdragon-0.8.2.tgz", + "integrity": "sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==", + "dev": true, + "requires": { + "base": "^0.11.1", + "debug": "^2.2.0", + "define-property": "^0.2.5", + "extend-shallow": "^2.0.1", + "map-cache": "^0.2.2", + "source-map": "^0.5.6", + "source-map-resolve": "^0.5.0", + "use": "^3.1.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + }, + "extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8=", + "dev": true, + "requires": { + "is-extendable": "^0.1.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, + "snapdragon-node": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/snapdragon-node/-/snapdragon-node-2.1.1.tgz", + "integrity": "sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==", + "dev": true, + "requires": { + "define-property": "^1.0.0", + "isobject": "^3.0.0", + "snapdragon-util": "^3.0.1" + }, + "dependencies": { + "define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-1.0.0.tgz", + "integrity": "sha1-dp66rz9KY6rTr56NMEybvnm/sOY=", + "dev": true, + "requires": { + "is-descriptor": "^1.0.0" + } + }, + "is-accessor-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz", + "integrity": "sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-data-descriptor": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz", + "integrity": "sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ==", + "dev": true, + "requires": { + "kind-of": "^6.0.0" + } + }, + "is-descriptor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-descriptor/-/is-descriptor-1.0.2.tgz", + "integrity": "sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg==", + "dev": true, + "requires": { + "is-accessor-descriptor": "^1.0.0", + "is-data-descriptor": "^1.0.0", + "kind-of": "^6.0.2" + } + } + } + }, + "snapdragon-util": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/snapdragon-util/-/snapdragon-util-3.0.1.tgz", + "integrity": "sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ==", + "dev": true, + "requires": { + "kind-of": "^3.2.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "socket.io": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/socket.io/-/socket.io-4.1.3.tgz", + "integrity": "sha512-tLkaY13RcO4nIRh1K2hT5iuotfTaIQw7cVIe0FUykN3SuQi0cm7ALxuyT5/CtDswOMWUzMGTibxYNx/gU7In+Q==", + "dev": true, + "requires": { + "@types/cookie": "^0.4.0", + "@types/cors": "^2.8.10", + "@types/node": ">=10.0.0", + "accepts": "~1.3.4", + "base64id": "~2.0.0", + "debug": "~4.3.1", + "engine.io": "~5.1.1", + "socket.io-adapter": "~2.3.1", + "socket.io-parser": "~4.0.4" + } + }, + "socket.io-adapter": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/socket.io-adapter/-/socket.io-adapter-2.3.1.tgz", + "integrity": "sha512-8cVkRxI8Nt2wadkY6u60Y4rpW3ejA1rxgcK2JuyIhmF+RMNpTy1QRtkHIDUOf3B4HlQwakMsWbKftMv/71VMmw==", + "dev": true + }, + "socket.io-parser": { + "version": "4.0.4", + "resolved": "https://registry.npmjs.org/socket.io-parser/-/socket.io-parser-4.0.4.tgz", + "integrity": "sha512-t+b0SS+IxG7Rxzda2EVvyBZbvFPBCjJoyHuE0P//7OAsN23GItzDRdWa6ALxZI/8R5ygK7jAR6t028/z+7295g==", + "dev": true, + "requires": { + "@types/component-emitter": "^1.2.10", + "component-emitter": "~1.3.0", + "debug": "~4.3.1" + } + }, + "source-map": { + "version": "0.5.7", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.7.tgz", + "integrity": "sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w=", + "dev": true + }, + "source-map-explorer": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.5.2.tgz", + "integrity": "sha512-gBwOyCcHPHcdLbgw6Y6kgoH1uLKL6hN3zz0xJcNI2lpnElZliIlmSYAjUVwAWnc7+HscoTyh1ScR7ITtFuEnxg==", + "dev": true, + "requires": { + "btoa": "^1.2.1", + "chalk": "^4.1.0", + "convert-source-map": "^1.7.0", + "ejs": "^3.1.5", + "escape-html": "^1.0.3", + "glob": "^7.1.6", + "gzip-size": "^6.0.0", + "lodash": "^4.17.20", + "open": "^7.3.1", + "source-map": "^0.7.3", + "temp": "^0.9.4", + "yargs": "^16.2.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "chalk": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.1.tgz", + "integrity": "sha512-diHzdDKxcU+bAsUboHLPEDQiw0qEe0qd7SYUn3HgcFlWgbDcfLGswOHYeGrHKzG9z6UYf01d9VFMfZxPM1xZSg==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + } + }, + "cliui": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", + "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "ejs": { + "version": "3.1.6", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.6.tgz", + "integrity": "sha512-9lt9Zse4hPucPkoP7FHDF0LQAlGyF9JVpnClFLFH3aSSbxmyoqINRpp/9wePWJTUl4KOQwRL72Iw3InHPDkoGw==", + "dev": true, + "requires": { + "jake": "^10.6.1" + } + }, + "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 + }, + "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 + }, + "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 + }, + "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 + }, + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + }, + "string-width": { + "version": "4.2.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.2.tgz", + "integrity": "sha512-XBJbT3N4JhVumXE0eoLU9DCjcaF92KLNqTmFCnG1pf8duUxFGwtP6AD6nkjw9a3IdiRtL3E2w3JDiE/xi3vOeA==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.0" + } + }, + "strip-ansi": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", + "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.0" + } + }, + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^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": "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 + } + } + }, + "source-map-js": { + "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", + "dev": true + }, + "source-map-resolve": { + "version": "0.5.3", + "resolved": "https://registry.npmjs.org/source-map-resolve/-/source-map-resolve-0.5.3.tgz", + "integrity": "sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw==", + "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" + } + }, + "source-map-support": { + "version": "0.5.19", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", + "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + }, + "dependencies": { + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } + } + }, + "source-map-url": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/source-map-url/-/source-map-url-0.4.1.tgz", + "integrity": "sha512-cPiFOTLUKvJFIg4SKVScy4ilPPW6rFgMgfuZJPNoDuMs3nC1HbMUycBoJw77xFIp6z1UJQJOfx6C9GMH80DiTw==", + "dev": true + }, + "sourcemap-codec": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", + "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", + "dev": true + }, + "space-separated-tokens": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz", + "integrity": "sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA==", + "dev": true + }, + "spawn-args": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/spawn-args/-/spawn-args-0.2.0.tgz", + "integrity": "sha1-+30L0dcP1DFr2ePew4nmX51jYbs=", + "dev": true + }, + "spdx-correct": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", + "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", + "dev": true, + "requires": { + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-exceptions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", + "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "dev": true + }, + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, + "spdx-license-ids": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz", + "integrity": "sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==", + "dev": true + }, + "specificity": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/specificity/-/specificity-0.4.1.tgz", + "integrity": "sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg==", + "dev": true + }, + "split-on-first": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/split-on-first/-/split-on-first-1.1.0.tgz", + "integrity": "sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==", + "dev": true + }, + "split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "requires": { + "extend-shallow": "^3.0.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true + }, + "sshpk": { + "version": "1.16.1", + "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.16.1.tgz", + "integrity": "sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg==", + "dev": true, + "requires": { + "asn1": "~0.2.3", + "assert-plus": "^1.0.0", + "bcrypt-pbkdf": "^1.0.0", + "dashdash": "^1.12.0", + "ecc-jsbn": "~0.1.1", + "getpass": "^0.1.1", + "jsbn": "~0.1.0", + "safer-buffer": "^2.0.2", + "tweetnacl": "~0.14.0" + } + }, + "st": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/st/-/st-1.2.2.tgz", + "integrity": "sha512-goKkumvz0BMLs6KjjPf5Fub/3T34tRVQxInUI5lqtbaKD+s4HcRlJYP2GPJ8RgAmrsnYOPGmOFEP6ho0KJ+E8g==", + "dev": true, + "requires": { + "async-cache": "~1.1.0", + "bl": "~1.2.1", + "fd": "~0.0.2", + "graceful-fs": "~4.1.11", + "mime": "~1.4.1", + "negotiator": "~0.6.1" + }, + "dependencies": { + "bl": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bl/-/bl-1.2.3.tgz", + "integrity": "sha512-pvcNpa0UU69UT341rO6AYy4FVAIkUHuZXRIWbq+zHnsVcRzDDjIAhGuuYoi0d//cwIwtt4pkpKycWEfjdV+vww==", + "dev": true, + "requires": { + "readable-stream": "^2.3.5", + "safe-buffer": "^5.1.1" + } + }, + "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==", + "dev": true, + "optional": true + }, + "mime": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.4.1.tgz", + "integrity": "sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ==", + "dev": true + } + } + }, + "stable": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/stable/-/stable-0.1.8.tgz", + "integrity": "sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w==", + "dev": true + }, + "stack-utils": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-1.0.5.tgz", + "integrity": "sha512-KZiTzuV3CnSnSvgMRrARVCj+Ht7rMbauGDK0LdVFRGyenwdylpajAp4Q0i6SX8rEmbTpMMf6ryq2gb8pPq2WgQ==", + "dev": true, + "requires": { + "escape-string-regexp": "^2.0.0" + }, + "dependencies": { + "escape-string-regexp": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", + "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", + "dev": true + } + } + }, + "state-toggle": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/state-toggle/-/state-toggle-1.0.3.tgz", + "integrity": "sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ==", + "dev": true + }, + "static-extend": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/static-extend/-/static-extend-0.1.2.tgz", + "integrity": "sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY=", + "dev": true, + "requires": { + "define-property": "^0.2.5", + "object-copy": "^0.1.0" + }, + "dependencies": { + "define-property": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/define-property/-/define-property-0.2.5.tgz", + "integrity": "sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY=", + "dev": true, + "requires": { + "is-descriptor": "^0.1.0" + } + } + } + }, + "statuses": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-1.5.0.tgz", + "integrity": "sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow=", + "dev": true + }, + "stealthy-require": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stealthy-require/-/stealthy-require-1.1.1.tgz", + "integrity": "sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks=", + "dev": true + }, + "stream-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/stream-array/-/stream-array-1.1.2.tgz", + "integrity": "sha1-nl9zRfITfDDuO0mLkRToC1K7frU=", + "dev": true, + "requires": { + "readable-stream": "~2.1.0" + }, + "dependencies": { + "process-nextick-args": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", + "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", + "dev": true + }, + "readable-stream": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz", + "integrity": "sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA=", + "dev": true, + "requires": { + "buffer-shims": "^1.0.0", + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "~1.0.0", + "process-nextick-args": "~1.0.6", + "string_decoder": "~0.10.x", + "util-deprecate": "~1.0.1" + } + }, + "string_decoder": { + "version": "0.10.31", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", + "integrity": "sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ=", + "dev": true + } + } + }, + "stream-browserify": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/stream-browserify/-/stream-browserify-2.0.2.tgz", + "integrity": "sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg==", + "dev": true, + "requires": { + "inherits": "~2.0.1", + "readable-stream": "^2.0.2" + } + }, + "stream-combiner2": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", + "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", + "dev": true, + "requires": { + "duplexer2": "~0.1.0", + "readable-stream": "^2.0.2" + } + }, + "stream-http": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-3.2.0.tgz", + "integrity": "sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==", + "dev": true, + "requires": { + "builtin-status-codes": "^3.0.0", + "inherits": "^2.0.4", + "readable-stream": "^3.6.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "stream-shift": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.1.tgz", + "integrity": "sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ==", + "dev": true + }, + "stream-splicer": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/stream-splicer/-/stream-splicer-2.0.1.tgz", + "integrity": "sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg==", + "dev": true, + "requires": { + "inherits": "^2.0.1", + "readable-stream": "^2.0.2" + } + }, + "strict-uri-encode": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strict-uri-encode/-/strict-uri-encode-2.0.0.tgz", + "integrity": "sha1-ucczDHBChi9rFC3CdLvMWGbONUY=", + "dev": true + }, + "string-template": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/string-template/-/string-template-0.2.1.tgz", + "integrity": "sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + }, + "dependencies": { + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, + "string.prototype.matchall": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/string.prototype.matchall/-/string.prototype.matchall-4.0.5.tgz", + "integrity": "sha512-Z5ZaXO0svs0M2xd/6By3qpeKpLKd9mO4v4q3oMEQrk8Ck4xOD5d5XeBOOjGrmVZZ/AHB1S0CgG4N5r1G9N3E2Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.2", + "get-intrinsic": "^1.1.1", + "has-symbols": "^1.0.2", + "internal-slot": "^1.0.3", + "regexp.prototype.flags": "^1.3.1", + "side-channel": "^1.0.4" + } + }, + "string.prototype.padend": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/string.prototype.padend/-/string.prototype.padend-3.1.2.tgz", + "integrity": "sha512-/AQFLdYvePENU3W5rgurfWSMU6n+Ww8n/3cUt7E+vPBB/D7YDG8x+qjoFs4M/alR2bW7Qg6xMjVwWUOvuQ0XpQ==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "string.prototype.trim": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.4.tgz", + "integrity": "sha512-hWCk/iqf7lp0/AgTF7/ddO1IWtSNPASjlzCicV5irAVdE1grjsneK26YG6xACMBEdCvO8fUST0UzDMh/2Qy+9Q==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3", + "es-abstract": "^1.18.0-next.2" + } + }, + "string.prototype.trimend": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.4.tgz", + "integrity": "sha512-y9xCjw1P23Awk8EvTpcyL2NIr1j7wJ39f+k6lvRnSMz+mz9CGz9NYPelDk42kOz6+ql8xjfK8oYzy3jAP5QU5A==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string.prototype.trimstart": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.4.tgz", + "integrity": "sha512-jh6e984OBfvxS50tdY2nRZnoC5/mLFKOREQfw8t5yytkoUsJRNxvI/E39qu1sD0OtWI3OC0XgKSmcWwziwYuZw==", + "dev": true, + "requires": { + "call-bind": "^1.0.2", + "define-properties": "^1.1.3" + } + }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, + "stringify-entities": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/stringify-entities/-/stringify-entities-1.3.2.tgz", + "integrity": "sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A==", + "dev": true, + "requires": { + "character-entities-html4": "^1.0.0", + "character-entities-legacy": "^1.0.0", + "is-alphanumerical": "^1.0.0", + "is-hexadecimal": "^1.0.0" + } + }, + "strip-ansi": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-0.1.1.tgz", + "integrity": "sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE=", + "dev": true + }, + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", + "dev": true + }, + "strip-eof": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz", + "integrity": "sha1-u0P/VZim6wXYm1n80SnJgzE2Br8=", + "dev": true + }, + "strip-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-1.0.1.tgz", + "integrity": "sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI=", + "dev": true, + "requires": { + "get-stdin": "^4.0.1" + } + }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, + "style-search": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz", + "integrity": "sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI=", + "dev": true + }, + "styled_string": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/styled_string/-/styled_string-0.0.1.tgz", + "integrity": "sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko=", + "dev": true + }, + "stylehacks": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-4.0.3.tgz", + "integrity": "sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g==", + "dev": true, + "requires": { + "browserslist": "^4.0.0", + "postcss": "^7.0.0", + "postcss-selector-parser": "^3.0.0" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "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 + }, + "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" + } + } + } + }, + "stylelint": { + "version": "9.10.1", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-9.10.1.tgz", + "integrity": "sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ==", + "dev": true, + "requires": { + "autoprefixer": "^9.0.0", + "balanced-match": "^1.0.0", + "chalk": "^2.4.1", + "cosmiconfig": "^5.0.0", + "debug": "^4.0.0", + "execall": "^1.0.0", + "file-entry-cache": "^4.0.0", + "get-stdin": "^6.0.0", + "global-modules": "^2.0.0", + "globby": "^9.0.0", + "globjoin": "^0.1.4", + "html-tags": "^2.0.0", + "ignore": "^5.0.4", + "import-lazy": "^3.1.0", + "imurmurhash": "^0.1.4", + "known-css-properties": "^0.11.0", + "leven": "^2.1.0", + "lodash": "^4.17.4", + "log-symbols": "^2.0.0", + "mathml-tag-names": "^2.0.1", + "meow": "^5.0.0", + "micromatch": "^3.1.10", + "normalize-selector": "^0.2.0", + "pify": "^4.0.0", + "postcss": "^7.0.13", + "postcss-html": "^0.36.0", + "postcss-jsx": "^0.36.0", + "postcss-less": "^3.1.0", + "postcss-markdown": "^0.36.0", + "postcss-media-query-parser": "^0.2.3", + "postcss-reporter": "^6.0.0", + "postcss-resolve-nested-selector": "^0.1.1", + "postcss-safe-parser": "^4.0.0", + "postcss-sass": "^0.3.5", + "postcss-scss": "^2.0.0", + "postcss-selector-parser": "^3.1.0", + "postcss-syntax": "^0.36.2", + "postcss-value-parser": "^3.3.0", + "resolve-from": "^4.0.0", + "signal-exit": "^3.0.2", + "slash": "^2.0.0", + "specificity": "^0.4.1", + "string-width": "^3.0.0", + "style-search": "^0.1.0", + "sugarss": "^2.0.0", + "svg-tags": "^1.0.0", + "table": "^5.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "camelcase": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-4.1.0.tgz", + "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", + "dev": true + }, + "camelcase-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-4.2.0.tgz", + "integrity": "sha1-oqpfsa9oh1glnDLBQUJteJI7m3c=", + "dev": true, + "requires": { + "camelcase": "^4.1.0", + "map-obj": "^2.0.0", + "quick-lru": "^1.0.0" + } + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "file-entry-cache": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-4.0.0.tgz", + "integrity": "sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA==", + "dev": true, + "requires": { + "flat-cache": "^2.0.1" + } + }, + "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" + } + }, + "get-stdin": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-6.0.0.tgz", + "integrity": "sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g==", + "dev": true + }, + "ignore": { + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.1.8.tgz", + "integrity": "sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==", + "dev": true + }, + "indent-string": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-3.2.0.tgz", + "integrity": "sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok=", + "dev": true + }, + "locate-path": { + "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" + } + }, + "map-obj": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-2.0.0.tgz", + "integrity": "sha1-plzSkIepJZi4eRJXpSPgISIqwfk=", + "dev": true + }, + "meow": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-5.0.0.tgz", + "integrity": "sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig==", + "dev": true, + "requires": { + "camelcase-keys": "^4.0.0", + "decamelize-keys": "^1.0.0", + "loud-rejection": "^1.0.0", + "minimist-options": "^3.0.1", + "normalize-package-data": "^2.3.4", + "read-pkg-up": "^3.0.0", + "redent": "^2.0.0", + "trim-newlines": "^2.0.0", + "yargs-parser": "^10.0.0" + } + }, + "p-limit": { + "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-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.1.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=", + "dev": true + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + }, + "dependencies": { + "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" + } + } + } + }, + "postcss-selector-parser": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz", + "integrity": "sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA==", + "dev": true, + "requires": { + "dot-prop": "^5.2.0", + "indexes-of": "^1.0.1", + "uniq": "^1.0.1" + } + }, + "postcss-value-parser": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz", + "integrity": "sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ==", + "dev": true + }, + "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=", + "dev": true, + "requires": { + "find-up": "^2.0.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=", + "dev": true, + "requires": { + "indent-string": "^3.0.0", + "strip-indent": "^2.0.0" + } + }, + "resolve-from": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", + "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", + "dev": true + }, + "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": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "strip-indent": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-2.0.0.tgz", + "integrity": "sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g=", + "dev": true + }, + "trim-newlines": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-2.0.0.tgz", + "integrity": "sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA=", + "dev": true + }, + "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==", + "dev": true, + "requires": { + "camelcase": "^4.1.0" + } + } + } + }, + "stylelint-config-recommended": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz", + "integrity": "sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA==", + "dev": true + }, + "stylelint-config-standard": { + "version": "18.3.0", + "resolved": "https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-18.3.0.tgz", + "integrity": "sha512-Tdc/TFeddjjy64LvjPau9SsfVRexmTFqUhnMBrzz07J4p2dVQtmpncRF/o8yZn8ugA3Ut43E6o1GtjX80TFytw==", + "dev": true, + "requires": { + "stylelint-config-recommended": "^2.2.0" + } + }, + "subarg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/subarg/-/subarg-1.0.0.tgz", + "integrity": "sha1-9izxdYHplrSPyWVpn1TAauJouNI=", + "dev": true, + "requires": { + "minimist": "^1.1.0" + } + }, + "sugarss": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/sugarss/-/sugarss-2.0.0.tgz", + "integrity": "sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ==", + "dev": true, + "requires": { + "postcss": "^7.0.2" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "dependencies": { + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + } + } + }, + "postcss": { + "version": "7.0.36", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-7.0.36.tgz", + "integrity": "sha512-BebJSIUMwJHRH0HAQoxN4u1CN86glsrwsW0q7T+/m44eXOUAxSNdHRkNZPYz5vVUbg17hFgOQDE7fZk7li3pZw==", + "dev": true, + "requires": { + "chalk": "^2.4.2", + "source-map": "^0.6.1", + "supports-color": "^6.1.0" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "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" + } + } + } + }, + "supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-7+bR4FbF5SYsmkHfDp61QiwCKtwNDyPsddk9TzfsDA5DQr5Goii5CVD2SXjglweFCxjrzVZf945ahqYfUIk8UA==", + "requires": { + "kdbush": "^3.0.0" + } + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dev": true, + "requires": { + "has-flag": "^3.0.0" + } + }, + "svg-tags": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz", + "integrity": "sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q=", + "dev": true + }, + "svgo": { + "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" + }, + "dependencies": { + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "symbol-tree": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", + "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", + "dev": true + }, + "syntax-error": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/syntax-error/-/syntax-error-1.4.0.tgz", + "integrity": "sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w==", + "dev": true, + "requires": { + "acorn-node": "^1.2.0" + } + }, + "table": { + "version": "5.4.6", + "resolved": "https://registry.npmjs.org/table/-/table-5.4.6.tgz", + "integrity": "sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug==", + "dev": true, + "requires": { + "ajv": "^6.10.2", + "lodash": "^4.17.14", + "slice-ansi": "^2.1.0", + "string-width": "^3.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "emoji-regex": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-7.0.3.tgz", + "integrity": "sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + } + } + }, + "tap": { + "version": "12.4.1", + "resolved": "https://registry.npmjs.org/tap/-/tap-12.4.1.tgz", + "integrity": "sha512-hWh6V5cIIHwvXwmNb3fL/3athC9NyZuL4ZoiyHUHXqRAJJ6/SBmGX7IOfzj/Pf7EzFy9JwDCw/64eOyKx8XikA==", + "dev": true, + "requires": { + "bind-obj-methods": "^2.0.0", + "browser-process-hrtime": "^1.0.0", + "capture-stack-trace": "^1.0.0", + "clean-yaml-object": "^0.1.0", + "color-support": "^1.1.0", + "coveralls": "^3.0.2", + "domain-browser": "^1.2.0", + "foreground-child": "^1.3.3", + "fs-exists-cached": "^1.0.0", + "function-loop": "^1.0.1", + "glob": "^7.1.3", + "isexe": "^2.0.0", + "js-yaml": "^3.12.1", + "minipass": "^2.3.5", + "mkdirp": "^0.5.1", + "nyc": "^13.1.0", + "opener": "^1.5.1", + "os-homedir": "^1.0.2", + "own-or": "^1.0.0", + "own-or-env": "^1.0.1", + "rimraf": "^2.6.3", + "signal-exit": "^3.0.0", + "source-map-support": "^0.5.10", + "stack-utils": "^1.0.2", + "tap-mocha-reporter": "^3.0.7", + "tap-parser": "^7.0.0", + "tmatch": "^4.0.0", + "trivial-deferred": "^1.0.1", + "ts-node": "^8.0.1", + "tsame": "^2.0.1", + "typescript": "^3.2.4", + "write-file-atomic": "^2.3.0", + "yapool": "^1.0.0" + }, + "dependencies": { + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "tap-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", + "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "minipass": "^2.2.0" + } + }, + "typescript": { + "version": "3.9.10", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", + "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "tap-mocha-reporter": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/tap-mocha-reporter/-/tap-mocha-reporter-3.0.9.tgz", + "integrity": "sha512-VO07vhC9EG27EZdOe7bWBj1ldbK+DL9TnRadOgdQmiQOVZjFpUEQuuqO7+rNSO2kfmkq5hWeluYXDWNG/ytXTQ==", + "dev": true, + "requires": { + "color-support": "^1.1.0", + "debug": "^2.1.3", + "diff": "^1.3.2", + "escape-string-regexp": "^1.0.3", + "glob": "^7.0.5", + "js-yaml": "^3.3.1", + "readable-stream": "^2.1.5", + "tap-parser": "^5.1.0", + "unicode-length": "^1.0.0" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "diff": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-1.4.0.tgz", + "integrity": "sha1-fyjS657nsVqX79ic5j3P2qPMur8=", + "dev": true + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + }, + "tap-parser": { + "version": "5.4.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-5.4.0.tgz", + "integrity": "sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "readable-stream": "^2" + } + } + } + }, + "tap-parser": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-10.1.0.tgz", + "integrity": "sha512-FujQeciDaOiOvaIVGS1Rpb0v4R6XkOjvWCWowlz5oKuhPkEJ8U6pxgqt38xuzYhPt8dWEnfHn2jqpZdJEkW7pA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "minipass": "^3.0.0", + "tap-yaml": "^1.0.0" + } + }, + "tap-yaml": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/tap-yaml/-/tap-yaml-1.0.0.tgz", + "integrity": "sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ==", + "dev": true, + "requires": { + "yaml": "^1.5.0" + } + }, + "tape": { + "version": "4.14.0", + "resolved": "https://registry.npmjs.org/tape/-/tape-4.14.0.tgz", + "integrity": "sha512-z0+WrUUJuG6wIdWrl4W3rTte2CR26G6qcPOj3w1hfRdcmhF3kHBhOBW9VHsPVAkz08ZmGzp7phVpDupbLzrYKQ==", + "dev": true, + "requires": { + "call-bind": "~1.0.2", + "deep-equal": "~1.1.1", + "defined": "~1.0.0", + "dotignore": "~0.1.2", + "for-each": "~0.3.3", + "glob": "~7.1.7", + "has": "~1.0.3", + "inherits": "~2.0.4", + "is-regex": "~1.1.3", + "minimist": "~1.2.5", + "object-inspect": "~1.11.0", + "resolve": "~1.20.0", + "resumer": "~0.0.0", + "string.prototype.trim": "~1.2.4", + "through": "~2.3.8" + } + }, + "tape-filter": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/tape-filter/-/tape-filter-1.0.4.tgz", + "integrity": "sha1-HWN6wGTVGSbzOa2I9kLrD4fKncc=", + "dev": true, + "requires": { + "minimist": "^1.2.0" + } + }, + "tar": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.0.tgz", + "integrity": "sha512-DUCttfhsnLCjwoDoFcI+B2iJgYa93vBnDUATYEeRx6sntCTdN01VnqsIuTlALXla/LWooNg0yEGeB+Y8WdFxGA==", + "dev": true, + "requires": { + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^3.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" + } + }, + "tar-fs": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", + "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" + }, + "dependencies": { + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + } + } + }, + "tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, + "requires": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + } + } + }, + "temp": { + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz", + "integrity": "sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1", + "rimraf": "~2.6.2" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "rimraf": { + "version": "2.6.3", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.6.3.tgz", + "integrity": "sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "terser": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.7.1.tgz", + "integrity": "sha512-b3e+d5JbHAe/JSjwsC3Zn55wsBIM7AsHLjKxT31kGCldgbpFePaFo+PiddtO6uwRZWRw7sPXmAN8dTW61xmnSg==", + "dev": true, + "requires": { + "commander": "^2.20.0", + "source-map": "~0.7.2", + "source-map-support": "~0.5.19" + }, + "dependencies": { + "source-map": { + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", + "dev": true + } + } + }, + "testem": { + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/testem/-/testem-3.4.2.tgz", + "integrity": "sha512-5undkzAltqE9fuLHy7c6Co/+pQWt0+03tsLpE97bx6ufymV9lJ1VkSO/tEfvQXk6XpLFcKTmbN/EM0RoK8FIOg==", + "dev": true, + "requires": { + "backbone": "^1.1.2", + "bluebird": "^3.4.6", + "charm": "^1.0.0", + "commander": "^2.6.0", + "compression": "^1.7.4", + "consolidate": "^0.15.1", + "execa": "^1.0.0", + "express": "^4.10.7", + "fireworm": "^0.7.0", + "glob": "^7.0.4", + "http-proxy": "^1.13.1", + "js-yaml": "^3.2.5", + "lodash.assignin": "^4.1.0", + "lodash.castarray": "^4.4.0", + "lodash.clonedeep": "^4.4.1", + "lodash.find": "^4.5.1", + "lodash.uniqby": "^4.7.0", + "mkdirp": "^0.5.1", + "mustache": "^3.0.0", + "node-notifier": "^9.0.1", + "npmlog": "^4.0.0", + "printf": "^0.6.1", + "rimraf": "^2.4.4", + "socket.io": "^4.1.2", + "spawn-args": "^0.2.0", + "styled_string": "0.0.1", + "tap-parser": "^7.0.0", + "tmp": "0.0.33", + "xmldom": "^0.6.0" + }, + "dependencies": { + "is-wsl": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz", + "integrity": "sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==", + "dev": true, + "requires": { + "is-docker": "^2.0.0" + } + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "node-notifier": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/node-notifier/-/node-notifier-9.0.1.tgz", + "integrity": "sha512-fPNFIp2hF/Dq7qLDzSg4vZ0J4e9v60gJR+Qx7RbjbWqzPDdEqeVpEx5CFeDAELIl+A/woaaNn1fQ5nEVerMxJg==", + "dev": true, + "requires": { + "growly": "^1.3.0", + "is-wsl": "^2.2.0", + "semver": "^7.3.2", + "shellwords": "^0.1.1", + "uuid": "^8.3.0", + "which": "^2.0.2" + } + }, + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + }, + "semver": { + "version": "7.3.5", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.5.tgz", + "integrity": "sha512-PoeGJYh8HK4BTO/a9Tf6ZG3veo/A7ZVsYrSA6J8ny9nb3B1VrpkuN+z9OE5wfE5p6H4LchYZsegiQgbJD94ZFQ==", + "dev": true, + "requires": { + "lru-cache": "^6.0.0" + } + }, + "tap-parser": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/tap-parser/-/tap-parser-7.0.0.tgz", + "integrity": "sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA==", + "dev": true, + "requires": { + "events-to-array": "^1.0.1", + "js-yaml": "^3.2.7", + "minipass": "^2.2.0" + } + }, + "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 + }, + "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" + } + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true + } + } + }, + "text-table": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", + "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", + "dev": true + }, + "through": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/through/-/through-2.3.8.tgz", + "integrity": "sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU=", + "dev": true + }, + "through2": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", + "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", + "dev": true, + "requires": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "through2-filter": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/through2-filter/-/through2-filter-3.0.0.tgz", + "integrity": "sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA==", + "dev": true, + "requires": { + "through2": "~2.0.0", + "xtend": "~4.0.0" + } + }, + "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=", + "dev": true + }, + "timers-browserify": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/timers-browserify/-/timers-browserify-1.4.2.tgz", + "integrity": "sha1-ycWLV1voQHN1y14kYtrO50NZ9B0=", + "dev": true, + "requires": { + "process": "~0.11.0" + } + }, + "timsort": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/timsort/-/timsort-0.3.0.tgz", + "integrity": "sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q=", + "dev": true + }, + "tiny-lr": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/tiny-lr/-/tiny-lr-1.1.1.tgz", + "integrity": "sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA==", + "dev": true, + "requires": { + "body": "^5.1.0", + "debug": "^3.1.0", + "faye-websocket": "~0.10.0", + "livereload-js": "^2.3.0", + "object-assign": "^4.1.0", + "qs": "^6.4.0" + }, + "dependencies": { + "debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + } + } + }, + "tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==" + }, + "tmatch": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/tmatch/-/tmatch-4.0.0.tgz", + "integrity": "sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg==", + "dev": true + }, + "tmp": { + "version": "0.0.33", + "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", + "integrity": "sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==", + "dev": true, + "requires": { + "os-tmpdir": "~1.0.2" + } + }, + "to-absolute-glob": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz", + "integrity": "sha1-GGX0PZ50sIItufFFt4z/fQ98hJs=", + "dev": true, + "requires": { + "is-absolute": "^1.0.0", + "is-negated-glob": "^1.0.0" + } + }, + "to-fast-properties": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", + "integrity": "sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4=", + "dev": true + }, + "to-object-path": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/to-object-path/-/to-object-path-0.3.0.tgz", + "integrity": "sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68=", + "dev": true, + "requires": { + "kind-of": "^3.0.2" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "^1.1.5" + } + } + } + }, + "to-regex": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/to-regex/-/to-regex-3.0.2.tgz", + "integrity": "sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw==", + "dev": true, + "requires": { + "define-property": "^2.0.2", + "extend-shallow": "^3.0.2", + "regex-not": "^1.0.2", + "safe-regex": "^1.1.0" + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "to-through": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/to-through/-/to-through-2.0.0.tgz", + "integrity": "sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY=", + "dev": true, + "requires": { + "through2": "^2.0.3" + } + }, + "toidentifier": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.0.tgz", + "integrity": "sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw==", + "dev": true + }, + "tough-cookie": { + "version": "2.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.28", + "punycode": "^2.1.1" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "tr46": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "trim": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/trim/-/trim-0.0.1.tgz", + "integrity": "sha1-WFhUf2spB1fulczMZm+1AITEYN0=", + "dev": true + }, + "trim-lines": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/trim-lines/-/trim-lines-1.1.3.tgz", + "integrity": "sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA==", + "dev": true + }, + "trim-newlines": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-1.0.0.tgz", + "integrity": "sha1-WIeWa7WCpFA6QetST301ARgVphM=", + "dev": true + }, + "trim-trailing-lines": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/trim-trailing-lines/-/trim-trailing-lines-1.1.4.tgz", + "integrity": "sha512-rjUWSqnfTNrjbB9NQWfPMH/xRK1deHeGsHoVfpxJ++XeYXE0d6B1En37AHfw3jtfTU7dzMzZL2jjpe8Qb5gLIQ==", + "dev": true + }, + "trivial-deferred": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/trivial-deferred/-/trivial-deferred-1.0.1.tgz", + "integrity": "sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM=", + "dev": true + }, + "trough": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/trough/-/trough-1.0.5.tgz", + "integrity": "sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA==", + "dev": true + }, + "ts-node": { + "version": "8.10.2", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-8.10.2.tgz", + "integrity": "sha512-ISJJGgkIpDdBhWVu3jufsWpK3Rzo7bdiIXJjQc0ynKxVOVcg2oIrf2H2cejminGrptVc6q6/uynAHNCuWGbpVA==", + "dev": true, + "requires": { + "arg": "^4.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "source-map-support": "^0.5.17", + "yn": "3.1.1" + } + }, + "tsame": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/tsame/-/tsame-2.0.1.tgz", + "integrity": "sha512-jxyxgKVKa4Bh5dPcO42TJL22lIvfd9LOVJwdovKOnJa4TLLrHxquK+DlGm4rkGmrcur+GRx+x4oW00O2pY/fFw==", + "dev": true + }, + "tsconfig-paths": { + "version": "3.10.1", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.10.1.tgz", + "integrity": "sha512-rETidPDgCpltxF7MjBZlAFPUHv5aHH2MymyPvh+vEyWAED4Eb/WeMbsnD/JDr4OKPOA1TssDHgIcpTN5Kh0p6Q==", + "dev": true, + "requires": { + "json5": "^2.2.0", + "minimist": "^1.2.0", + "strip-bom": "^3.0.0" + } + }, + "tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, + "tsutils": { + "version": "3.21.0", + "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", + "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "dev": true, + "requires": { + "tslib": "^1.8.1" + } + }, + "tty-browserify": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.1.tgz", + "integrity": "sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==", + "dev": true + }, + "tunnel-agent": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", + "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", + "dev": true, + "requires": { + "safe-buffer": "^5.0.1" + } + }, + "tweetnacl": { + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", + "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", + "dev": true + }, + "type-check": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.3.2.tgz", + "integrity": "sha1-WITKtRLPHTVeP7eE8wgEsrUg23I=", + "dev": true, + "requires": { + "prelude-ls": "~1.1.2" + } + }, + "type-detect": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", + "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", + "dev": true + }, + "type-fest": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", + "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", + "dev": true + }, + "type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dev": true, + "requires": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + } + }, + "typedarray": { + "version": "0.0.6", + "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", + "integrity": "sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=", + "dev": true + }, + "typescript": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.3.5.tgz", + "integrity": "sha512-DqQgihaQ9cUrskJo9kIyW/+g0Vxsk8cDtZ52a3NGh0YNTfpUSArXSohyUGnvbPazEPLu398C0UxmKSOrPumUzA==", + "dev": true + }, + "umd": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/umd/-/umd-3.0.3.tgz", + "integrity": "sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow==", + "dev": true + }, + "unassert": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/unassert/-/unassert-1.6.0.tgz", + "integrity": "sha512-GoMtWTwGSxSFuRD0NKmbjlx3VJkgvSogzDzMPpJXYmBZv6MIWButsyMqEYhMx3NI4osXACcZA9mXiBteXyJtRw==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "call-matcher": "^2.0.0", + "deep-equal": "^1.0.0", + "espurify": "^2.0.1", + "estraverse": "^4.1.0", + "esutils": "^2.0.2", + "object-assign": "^4.1.0" + } + }, + "unbox-primitive": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.1.tgz", + "integrity": "sha512-tZU/3NqK3dA5gpE1KtyiJUrEB0lxnGkMFHptJ7q6ewdZ8s12QrODwNbhIJStmJkd1QDXa1NRA8aF2A1zk/Ypyw==", + "dev": true, + "requires": { + "function-bind": "^1.1.1", + "has-bigints": "^1.0.1", + "has-symbols": "^1.0.2", + "which-boxed-primitive": "^1.0.2" + } + }, + "unc-path-regex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/unc-path-regex/-/unc-path-regex-0.1.2.tgz", + "integrity": "sha1-5z3T17DXxe2G+6xrCufYxqadUPo=", + "dev": true + }, + "undeclared-identifiers": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz", + "integrity": "sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw==", + "dev": true, + "requires": { + "acorn-node": "^1.3.0", + "dash-ast": "^1.0.0", + "get-assigned-identifiers": "^1.2.0", + "simple-concat": "^1.0.0", + "xtend": "^4.0.1" + } + }, + "underscore": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/underscore/-/underscore-1.6.0.tgz", + "integrity": "sha1-izixDKze9jM3uLJOT/htRa6lKag=", + "dev": true + }, + "unherit": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/unherit/-/unherit-1.1.3.tgz", + "integrity": "sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ==", + "dev": true, + "requires": { + "inherits": "^2.0.0", + "xtend": "^4.0.0" + } + }, + "unicode-canonical-property-names-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz", + "integrity": "sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ==", + "dev": true + }, + "unicode-length": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/unicode-length/-/unicode-length-1.0.3.tgz", + "integrity": "sha1-Wtp6f+1RhBpBijKM8UlHisg1irs=", + "dev": true, + "requires": { + "punycode": "^1.3.2", + "strip-ansi": "^3.0.1" + }, + "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 + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "unicode-match-property-ecmascript": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz", + "integrity": "sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg==", + "dev": true, + "requires": { + "unicode-canonical-property-names-ecmascript": "^1.0.4", + "unicode-property-aliases-ecmascript": "^1.0.4" + } + }, + "unicode-match-property-value-ecmascript": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz", + "integrity": "sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ==", + "dev": true + }, + "unicode-property-aliases-ecmascript": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz", + "integrity": "sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg==", + "dev": true + }, + "unified": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/unified/-/unified-6.2.0.tgz", + "integrity": "sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA==", + "dev": true, + "requires": { + "bail": "^1.0.0", + "extend": "^3.0.0", + "is-plain-obj": "^1.1.0", + "trough": "^1.0.0", + "vfile": "^2.0.0", + "x-is-string": "^0.1.0" + }, + "dependencies": { + "is-buffer": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/is-buffer/-/is-buffer-1.1.6.tgz", + "integrity": "sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==", + "dev": true + }, + "unist-util-stringify-position": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz", + "integrity": "sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ==", + "dev": true + }, + "vfile": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-2.3.0.tgz", + "integrity": "sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w==", + "dev": true, + "requires": { + "is-buffer": "^1.1.4", + "replace-ext": "1.0.0", + "unist-util-stringify-position": "^1.0.0", + "vfile-message": "^1.0.0" + } + }, + "vfile-message": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-1.1.1.tgz", + "integrity": "sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA==", + "dev": true, + "requires": { + "unist-util-stringify-position": "^1.1.1" + } + } + } + }, + "union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "requires": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + } + }, + "uniq": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/uniq/-/uniq-1.0.1.tgz", + "integrity": "sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8=", + "dev": true + }, + "uniqs": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/uniqs/-/uniqs-2.0.0.tgz", + "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", + "dev": true + }, + "unique-stream": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/unique-stream/-/unique-stream-2.3.1.tgz", + "integrity": "sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A==", + "dev": true, + "requires": { + "json-stable-stringify-without-jsonify": "^1.0.1", + "through2-filter": "^3.0.0" + } + }, + "unist-builder": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/unist-builder/-/unist-builder-1.0.4.tgz", + "integrity": "sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg==", + "dev": true, + "requires": { + "object-assign": "^4.1.0" + } + }, + "unist-util-find-all-after": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz", + "integrity": "sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "unist-util-generated": { + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/unist-util-generated/-/unist-util-generated-1.1.6.tgz", + "integrity": "sha512-cln2Mm1/CZzN5ttGK7vkoGw+RZ8VcUH6BtGbq98DDtRGquAAOXig1mrBQYelOwMXYS8rK+vZDyyojSjp7JX+Lg==", + "dev": true + }, + "unist-util-is": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/unist-util-is/-/unist-util-is-3.0.0.tgz", + "integrity": "sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A==", + "dev": true + }, + "unist-util-position": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/unist-util-position/-/unist-util-position-3.1.0.tgz", + "integrity": "sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA==", + "dev": true + }, + "unist-util-remove-position": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz", + "integrity": "sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A==", + "dev": true, + "requires": { + "unist-util-visit": "^1.1.0" + } + }, + "unist-util-stringify-position": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz", + "integrity": "sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==", + "dev": true, + "requires": { + "@types/unist": "^2.0.2" + } + }, + "unist-util-visit": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/unist-util-visit/-/unist-util-visit-1.4.1.tgz", + "integrity": "sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw==", + "dev": true, + "requires": { + "unist-util-visit-parents": "^2.0.0" + } + }, + "unist-util-visit-parents": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz", + "integrity": "sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g==", + "dev": true, + "requires": { + "unist-util-is": "^3.0.0" + } + }, + "universal-user-agent": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-4.0.1.tgz", + "integrity": "sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg==", + "dev": true, + "requires": { + "os-name": "^3.1.0" + } + }, + "universalify": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", + "dev": true + }, + "unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw=", + "dev": true + }, + "unquote": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/unquote/-/unquote-1.1.1.tgz", + "integrity": "sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ=", + "dev": true + }, + "unset-value": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unset-value/-/unset-value-1.0.0.tgz", + "integrity": "sha1-g3aHP30jNRef+x5vw6jtDfyKtVk=", + "dev": true, + "requires": { + "has-value": "^0.3.1", + "isobject": "^3.0.0" + }, + "dependencies": { + "has-value": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/has-value/-/has-value-0.3.1.tgz", + "integrity": "sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8=", + "dev": true, + "requires": { + "get-value": "^2.0.3", + "has-values": "^0.1.4", + "isobject": "^2.0.0" + }, + "dependencies": { + "isobject": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-2.1.0.tgz", + "integrity": "sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk=", + "dev": true, + "requires": { + "isarray": "1.0.0" + } + } + } + }, + "has-values": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/has-values/-/has-values-0.1.4.tgz", + "integrity": "sha1-bWHeldkd/Km5oCCJrThL/49it3E=", + "dev": true + } + } + }, + "unzip-response": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/unzip-response/-/unzip-response-2.0.1.tgz", + "integrity": "sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c=", + "dev": true + }, + "upath": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/upath/-/upath-1.2.0.tgz", + "integrity": "sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==", + "dev": true + }, + "uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "requires": { + "punycode": "^2.1.0" + }, + "dependencies": { + "punycode": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.1.1.tgz", + "integrity": "sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==", + "dev": true + } + } + }, + "urix": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/urix/-/urix-0.1.0.tgz", + "integrity": "sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI=", + "dev": true + }, + "url": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/url/-/url-0.11.0.tgz", + "integrity": "sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE=", + "dev": true, + "requires": { + "punycode": "1.3.2", + "querystring": "0.2.0" + }, + "dependencies": { + "punycode": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", + "integrity": "sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0=", + "dev": true + } + } + }, + "url-parse-lax": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/url-parse-lax/-/url-parse-lax-1.0.0.tgz", + "integrity": "sha1-evjzA2Rem9eaJy56FKxovAYJ2nM=", + "dev": true, + "requires": { + "prepend-http": "^1.0.1" + } + }, + "use": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/use/-/use-3.1.1.tgz", + "integrity": "sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ==", + "dev": true + }, + "util": { + "version": "0.10.4", + "resolved": "https://registry.npmjs.org/util/-/util-0.10.4.tgz", + "integrity": "sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A==", + "dev": true, + "requires": { + "inherits": "2.0.3" + }, + "dependencies": { + "inherits": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", + "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", + "dev": true + } + } + }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "util.promisify": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/util.promisify/-/util.promisify-1.0.1.tgz", + "integrity": "sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA==", + "dev": true, + "requires": { + "define-properties": "^1.1.3", + "es-abstract": "^1.17.2", + "has-symbols": "^1.0.1", + "object.getownpropertydescriptors": "^2.1.0" + } + }, + "utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM=", + "dev": true + }, + "uuid": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", + "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", + "dev": true + }, + "v8-compile-cache": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", + "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", + "dev": true + }, + "validate-npm-package-license": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", + "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", + "dev": true, + "requires": { + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" + } + }, + "value-or-function": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/value-or-function/-/value-or-function-3.0.0.tgz", + "integrity": "sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM=", + "dev": true + }, + "vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha1-IpnwLG3tMNSllhsLn3RSShj2NPw=", + "dev": true + }, + "vendors": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/vendors/-/vendors-1.0.4.tgz", + "integrity": "sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w==", + "dev": true + }, + "verror": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", + "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", + "dev": true, + "requires": { + "assert-plus": "^1.0.0", + "core-util-is": "1.0.2", + "extsprintf": "^1.2.0" + } + }, + "vfile": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/vfile/-/vfile-4.2.1.tgz", + "integrity": "sha512-O6AE4OskCG5S1emQ/4gl8zK586RqA3srz3nfK/Viy0UPToBc5Trp9BVFb1u0CjsKrAWwnpr4ifM/KBXPWwJbCA==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "is-buffer": "^2.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-message": "^2.0.0" + } + }, + "vfile-location": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-2.0.6.tgz", + "integrity": "sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA==", + "dev": true + }, + "vfile-message": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/vfile-message/-/vfile-message-2.0.4.tgz", + "integrity": "sha512-DjssxRGkMvifUOJre00juHoP9DPWuzjxKuMDrhNbk2TdaYYBNMStsNhEOt3idrtI12VQYM/1+iM0KOzXi4pxwQ==", + "dev": true, + "requires": { + "@types/unist": "^2.0.0", + "unist-util-stringify-position": "^2.0.0" + } + }, + "vfile-reporter": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/vfile-reporter/-/vfile-reporter-5.1.2.tgz", + "integrity": "sha512-b15sTuss1wOPWVlyWOvu+n6wGJ/eTYngz3uqMLimQvxZ+Q5oFQGYZZP1o3dR9sk58G5+wej0UPCZSwQBX/mzrQ==", + "dev": true, + "requires": { + "repeat-string": "^1.5.0", + "string-width": "^2.0.0", + "supports-color": "^5.0.0", + "unist-util-stringify-position": "^2.0.0", + "vfile-sort": "^2.1.2", + "vfile-statistics": "^1.1.0" + } + }, + "vfile-sort": { + "version": "2.2.2", + "resolved": "https://registry.npmjs.org/vfile-sort/-/vfile-sort-2.2.2.tgz", + "integrity": "sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA==", + "dev": true + }, + "vfile-statistics": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/vfile-statistics/-/vfile-statistics-1.1.4.tgz", + "integrity": "sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA==", + "dev": true + }, + "vinyl": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-2.2.1.tgz", + "integrity": "sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw==", + "dev": true, + "requires": { + "clone": "^2.1.1", + "clone-buffer": "^1.0.0", + "clone-stats": "^1.0.0", + "cloneable-readable": "^1.0.0", + "remove-trailing-separator": "^1.0.1", + "replace-ext": "^1.0.0" + } + }, + "vinyl-fs": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/vinyl-fs/-/vinyl-fs-3.0.3.tgz", + "integrity": "sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng==", + "dev": true, + "requires": { + "fs-mkdirp-stream": "^1.0.0", + "glob-stream": "^6.1.0", + "graceful-fs": "^4.0.0", + "is-valid-glob": "^1.0.0", + "lazystream": "^1.0.0", + "lead": "^1.0.0", + "object.assign": "^4.0.4", + "pumpify": "^1.3.5", + "readable-stream": "^2.3.3", + "remove-bom-buffer": "^3.0.0", + "remove-bom-stream": "^1.2.0", + "resolve-options": "^1.1.0", + "through2": "^2.0.0", + "to-through": "^2.0.0", + "value-or-function": "^3.0.0", + "vinyl": "^2.0.0", + "vinyl-sourcemap": "^1.1.0" + } + }, + "vinyl-sourcemap": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz", + "integrity": "sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY=", + "dev": true, + "requires": { + "append-buffer": "^1.0.2", + "convert-source-map": "^1.5.0", + "graceful-fs": "^4.1.6", + "normalize-path": "^2.1.1", + "now-and-later": "^2.0.0", + "remove-bom-buffer": "^3.0.0", + "vinyl": "^2.0.0" + }, + "dependencies": { + "normalize-path": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", + "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", + "dev": true, + "requires": { + "remove-trailing-separator": "^1.0.1" + } + } + } + }, + "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 + }, + "vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "requires": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "vue-template-compiler": { + "version": "2.6.14", + "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.6.14.tgz", + "integrity": "sha512-ODQS1SyMbjKoO1JBJZojSw6FE4qnh9rIpUZn2EUT86FKizx9uH5z6uXiIrm4/Nb/gwxTi/o17ZDEGWAXHvtC7g==", + "dev": true, + "requires": { + "de-indent": "^1.0.2", + "he": "^1.1.0" + } + }, + "w3c-hr-time": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz", + "integrity": "sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==", + "dev": true, + "requires": { + "browser-process-hrtime": "^1.0.0" + } + }, + "w3c-xmlserializer": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz", + "integrity": "sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg==", + "dev": true, + "requires": { + "domexception": "^1.0.1", + "webidl-conversions": "^4.0.2", + "xml-name-validator": "^3.0.0" + } + }, + "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 + }, + "websocket-driver": { + "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.1", + "safe-buffer": ">=5.1.0", + "websocket-extensions": ">=0.1.1" + } + }, + "websocket-extensions": { + "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": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz", + "integrity": "sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==", + "dev": true, + "requires": { + "iconv-lite": "0.4.24" + } + }, + "whatwg-mimetype": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz", + "integrity": "sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==", + "dev": true + }, + "whatwg-url": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", + "dev": true, + "requires": { + "lodash.sortby": "^4.7.0", + "tr46": "^1.0.1", + "webidl-conversions": "^4.0.2" + } + }, + "which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "which-boxed-primitive": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", + "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "dev": true, + "requires": { + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" + } + }, + "which-module": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/which-module/-/which-module-2.0.0.tgz", + "integrity": "sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho=", + "dev": true + }, + "which-pm-runs": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/which-pm-runs/-/which-pm-runs-1.0.0.tgz", + "integrity": "sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + } + }, + "windows-release": { + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/windows-release/-/windows-release-3.3.3.tgz", + "integrity": "sha512-OSOGH1QYiW5yVor9TtmXKQvt2vjQqbYS+DqmsZw+r7xDwLXEeT3JGW0ZppFmHx4diyXmxt238KFR3N9jzevBRg==", + "dev": true, + "requires": { + "execa": "^1.0.0" + } + }, + "word-wrap": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.3.tgz", + "integrity": "sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==", + "dev": true + }, + "wordwrap": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-0.0.3.tgz", + "integrity": "sha1-o9XabNXAvAAI03I0u68b7WMFkQc=", + "dev": true + }, + "wrap-ansi": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-2.1.0.tgz", + "integrity": "sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU=", + "dev": true, + "requires": { + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1" + }, + "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.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, + "wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", + "dev": true + }, + "write": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/write/-/write-1.0.3.tgz", + "integrity": "sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig==", + "dev": true, + "requires": { + "mkdirp": "^0.5.1" + }, + "dependencies": { + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + } + } + }, + "write-file-atomic": { + "version": "2.4.3", + "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-2.4.3.tgz", + "integrity": "sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } + }, + "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" + } + }, + "x-is-string": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/x-is-string/-/x-is-string-0.1.0.tgz", + "integrity": "sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI=", + "dev": true + }, + "xml-name-validator": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-3.0.0.tgz", + "integrity": "sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==", + "dev": true + }, + "xmlchars": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", + "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", + "dev": true + }, + "xmldom": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/xmldom/-/xmldom-0.6.0.tgz", + "integrity": "sha512-iAcin401y58LckRZ0TkI4k0VSM1Qg0KGSc3i8rU+xrxe19A/BN1zHyVSJY7uoutVlaTSzYyk/v5AmkewAP7jtg==", + "dev": true + }, + "xmlhttprequest": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz", + "integrity": "sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw=", + "dev": true + }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true + }, + "y18n": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-4.0.3.tgz", + "integrity": "sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==", + "dev": true + }, + "yallist": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", + "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", + "dev": true + }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, + "yapool": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/yapool/-/yapool-1.0.0.tgz", + "integrity": "sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o=", + "dev": true + }, + "yargs": { + "version": "12.0.5", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-12.0.5.tgz", + "integrity": "sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw==", + "dev": true, + "requires": { + "cliui": "^4.0.0", + "decamelize": "^1.2.0", + "find-up": "^3.0.0", + "get-caller-file": "^1.0.1", + "os-locale": "^3.0.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 || ^4.0.0", + "yargs-parser": "^11.1.1" + } + }, + "yargs-parser": { + "version": "11.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-11.1.1.tgz", + "integrity": "sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + }, + "yauzl": { + "version": "2.10.0", + "resolved": "https://registry.npmjs.org/yauzl/-/yauzl-2.10.0.tgz", + "integrity": "sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=", + "dev": true, + "requires": { + "buffer-crc32": "~0.2.3", + "fd-slicer": "~1.1.0" + } + }, + "yn": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yn/-/yn-3.1.1.tgz", + "integrity": "sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==", + "dev": true + } + } +} diff --git a/package.json b/package.json index ff28c1d17d..5d1cfedffb 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "maplibre-gl", "description": "BSD licensed community fork of mapbox-gl, a WebGL interactive maps library", - "version": "1.15.2", + "version": "2.0.0-pre.1", "main": "dist/maplibre-gl.js", "style": "dist/maplibre-gl.css", "license": "BSD-3-Clause", @@ -10,15 +10,14 @@ "url": "git://github.com/maplibre/maplibre-gl-js.git" }, "engines": { - "node": ">=6.4.0" + "node": ">=14.0.0" }, - "types": "src/index.d.ts", + "types": "types/index.d.ts", + "type": "module", "dependencies": { "@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", @@ -40,13 +39,53 @@ }, "devDependencies": { "@babel/core": "^7.9.0", - "@mapbox/flow-remove-types": "^1.3.0-await.upstream.2", "@mapbox/gazetteer": "^4.0.4", "@mapbox/mapbox-gl-rtl-text": "^0.2.1", "@mapbox/mvt-fixtures": "^3.6.0", "@octokit/rest": "^16.30.1", + "@rollup/plugin-commonjs": "^20.0.0", + "@rollup/plugin-json": "^4.1.0", + "@rollup/plugin-node-resolve": "^13.0.4", + "@rollup/plugin-replace": "^3.0.0", "@rollup/plugin-strip": "^1.3.1", + "@types/babel__core": "^7.1.12", + "@types/babelify": "^7.3.6", + "@types/benchmark": "^2.1.0", + "@types/browserify": "^12.0.36", + "@types/cssnano": "^4.0.0", + "@types/d3": "^4.13.12", + "@types/diff": "^4.0.2", + "@types/earcut": "^2.1.1", + "@types/ejs": "^2.7.0", + "@types/eslint": "^7.2.6", "@types/geojson": "^7946.0.7", + "@types/gl": "^4.1.0", + "@types/glob": "^7.1.3", + "@types/jsdom": "^16.2.5", + "@types/jsonwebtoken": "^8.5.0", + "@types/lodash.template": "^4.5.0", + "@types/minimist": "^1.2.1", + "@types/murmurhash-js": "^1.0.3", + "@types/node-notifier": "^8.0.0", + "@types/npm-packlist": "^1.1.1", + "@types/pbf": "^3.0.2", + "@types/pixelmatch": "^5.2.2", + "@types/pngjs": "^3.4.2", + "@types/puppeteer": "^1.20.7", + "@types/react": "^16.14.2", + "@types/react-dom": "^16.9.10", + "@types/request": "^2.48.5", + "@types/rollup-plugin-json": "^3.0.2", + "@types/rollup-plugin-sourcemaps": "^0.4.2", + "@types/selenium-webdriver": "^4.0.10", + "@types/shuffle-seed": "^1.1.0", + "@types/sinon": "^7.5.2", + "@types/stylelint": "^9.10.1", + "@types/supercluster": "^5.0.2", + "@types/tape": "^4.13.0", + "@types/window-or-global": "^1.0.4", + "@typescript-eslint/eslint-plugin": "^4.29.1", + "@typescript-eslint/parser": "^4.29.1", "address": "^1.1.2", "babel-eslint": "^10.0.1", "babelify": "^10.0.0", @@ -61,15 +100,12 @@ "diff": "^4.0.1", "documentation": "~12.1.1", "ejs": "^2.5.7", - "eslint": "^5.15.3", + "eslint": "^7.32.0", "eslint-config-mourner": "^3.0.0", - "eslint-plugin-flowtype": "^3.9.1", - "eslint-plugin-html": "^5.0.5", - "eslint-plugin-import": "^2.16.0", - "eslint-plugin-jsdoc": "^17.1.2", - "eslint-plugin-react": "^7.12.4", - "esm": "~3.0.84", - "flow-bin": "^0.100.0", + "eslint-plugin-html": "^6.1.2", + "eslint-plugin-import": "^2.24.0", + "eslint-plugin-jsdoc": "^36.0.6", + "eslint-plugin-react": "^7.24.0", "gl": "^4.5.3", "glob": "^7.1.4", "is-builtin-module": "^3.0.0", @@ -90,22 +126,18 @@ "pirates": "^4.0.1", "pixelmatch": "^5.1.0", "pngjs": "^3.4.0", - "postcss-cli": "^6.1.2", - "postcss-inline-svg": "^3.1.1", + "postcss": "^8.3.6", + "postcss-cli": "^8.3.1", + "postcss-inline-svg": "^5.0.0", "pretty-bytes": "^5.1.0", "puppeteer": "^1.18.0", "qrcode-terminal": "^0.12.0", "react": "^16.8.6", "react-dom": "^16.8.6", "request": "^2.88.0", - "rollup": "^1.23.1", - "rollup-plugin-buble": "^0.19.8", - "rollup-plugin-commonjs": "^10.1.0", - "rollup-plugin-json": "^4.0.0", - "rollup-plugin-node-resolve": "^5.2.0", - "rollup-plugin-replace": "^2.2.0", - "rollup-plugin-sourcemaps": "^0.4.2", - "rollup-plugin-terser": "^5.1.2", + "rollup": "^2.56.1", + "rollup-plugin-sourcemaps": "^0.6.3", + "rollup-plugin-terser": "^7.0.2", "rollup-plugin-unassert": "^0.3.0", "selenium-webdriver": "^4.0.0-alpha.5", "semver": "^5.5.0", @@ -119,24 +151,25 @@ "tap-parser": "^10.0.1", "tape": "^4.13.2", "tape-filter": "^1.0.4", - "testem": "^3.0.0" + "testem": "^3.0.0", + "typescript": "^4.3.5" }, "browser": { - "./src/shaders/index.js": "./src/shaders/shaders.js", - "./src/util/window.js": "./src/util/browser/window.js", - "./src/util/web_worker.js": "./src/util/browser/web_worker.js" + "./rollup/build/tsc/util/web_worker.js": "./build/web_worker_replacement.js" }, - "esm": true, "scripts": { - "build-dev": "rollup -c --environment BUILD:dev", - "watch-dev": "rollup -c --environment BUILD:dev --watch", - "build-prod": "rollup -c --environment BUILD:production", - "build-prod-min": "rollup -c --environment BUILD:production,MINIFY:true", + "build-glsl": "node rollup/copy-glsl-files.js ./rollup/build/tsc/shaders", + "build-glsl-min": "node rollup/copy-glsl-files.js ./rollup/build/tsc/shaders true", + "build-tsc": "tsc && npm run build-glsl", + "build-tsc-min": "tsc && npm run build-glsl-min", + "build-dev": "npm run build-tsc && rollup -c --environment BUILD:dev", + "watch-dev": "npm run build-tsc && rollup -c --environment BUILD:dev --watch", + "build-prod": "npm run build-tsc && rollup -c --environment BUILD:production", + "build-prod-min": "npm run build-tsc-min && rollup -c --environment BUILD:production,MINIFY:true", "build-csp": "rollup -c rollup.config.csp.js", "build-query-suite": "rollup -c test/integration/rollup.config.test.js", - "build-flow-types": "mkdir -p dist && cp build/maplibre-gl.js.flow dist/maplibre-gl.js.flow && cp build/maplibre-gl.js.flow dist/maplibre-gl-dev.js.flow", "build-css": "postcss -o dist/maplibre-gl.css src/css/maplibre-gl.css", - "build-style-spec": "cd src/style-spec && npm run build && cd ../.. && mkdir -p dist/style-spec && cp src/style-spec/dist/* dist/style-spec", + "build-style-spec": "npm run build-tsc && rollup -c rollup.config.style-spec.js && rollup -c rollup.config.style-spec.js --environment esm", "build-diagrams": "cd docs/diagrams; ls *.plantuml | xargs -I {} puml generate --svg {} -o {}.svg", "watch-css": "postcss --watch -o dist/maplibre-gl.css src/css/maplibre-gl.css", "build-benchmarks": "BENCHMARK_VERSION=${BENCHMARK_VERSION:-\"$(git rev-parse --abbrev-ref HEAD) $(git rev-parse --short=7 HEAD)\"} rollup -c bench/versions/rollup_config_benchmarks.js", @@ -148,23 +181,23 @@ "start-bench": "run-p watch-benchmarks start-server", "start-release": "run-s build-prod-min build-css print-release-url start-server", "diff-tarball": "cross-env build/run-node build/diff-tarball", - "lint": "eslint --cache --ignore-path .gitignore src test bench build debug/*.html", - "lint-docs": "documentation lint src/index.js", + "lint": "eslint --ext \".ts,.js,.html\" --ignore-path .gitignore src build debug/*.html", + "lint-docs": "documentation lint src/index.ts", "lint-css": "stylelint 'src/css/maplibre-gl.css'", - "test": "run-s lint lint-css lint-docs test-flow test-unit", + "test": "run-s lint lint-css lint-docs test-unit", "test-suite": "run-s test-render test-query test-expressions", "test-suite-clean": "find test/integration/{render,query, expressions}-tests -mindepth 2 -type d -exec test -e \"{}/actual.png\" \\; -not \\( -exec test -e \"{}/style.json\" \\; \\) -print | xargs -t rm -r", - "test-unit": "cross-env build/run-tap --reporter classic --no-coverage test/unit", - "test-build": "cross-env build/run-tap --no-coverage test/build/**/*.test.js", - "test-browser": "cross-env build/run-tap --reporter spec --no-coverage test/browser/**/*.test.js", - "test-render": "node --max-old-space-size=2048 test/render.test.js", - "test-query-node": "node test/query.test.js", - "watch-query": "testem -f test/integration/testem.js", - "test-query": "testem ci -f test/integration/testem.js -R xunit > test/integration/query-tests/test-results.xml", - "test-expressions": "cross-env build/run-node test/expression.test.js", - "test-flow": "cross-env build/run-node build/generate-flow-typed-style-spec && flow .", - "test-cov": "nyc --require=@mapbox/flow-remove-types/register --reporter=text-summary --reporter=lcov --cache run-s test-unit test-expressions test-query test-render", - "prepublishOnly": "run-s build-flow-types build-dev build-prod-min build-prod build-csp build-css build-style-spec test-build diff-tarball", + "test-unit": "tap --node-arg --no-warnings --node-arg --experimental-specifier-resolution=node --node-arg --experimental-json-modules --reporter classic --no-coverage test/unit", + "test-unit-file": "tap --node-arg --no-warnings --node-arg --experimental-specifier-resolution=node --node-arg --experimental-json-modules --reporter classic --no-coverage ", + "test-build": "tap --node-arg --no-warnings --node-arg --experimental-specifier-resolution=node --node-arg --experimental-json-modules --reporter classic --no-coverage test/build/**/*.test.js", + "test-browser": "tap --node-arg --no-warnings --node-arg --experimental-specifier-resolution=node --node-arg --experimental-json-modules --reporter classic --no-coverage test/browser/**/*.test.js", + "test-render": "node --experimental-specifier-resolution=node --experimental-json-modules --max-old-space-size=2048 test/render.test.js", + "test-query-node": "node --experimental-specifier-resolution=node --experimental-json-modules test/query.test.js", + "watch-query": "testem -f test/integration/testem.cjs", + "test-query": "testem ci -f test/integration/testem.cjs -R xunit > test/integration/query-tests/test-results.xml", + "test-expressions": "node --experimental-specifier-resolution=node test/expression.test.js", + "test-cov": "nyc --reporter=text-summary --reporter=lcov --cache run-s test-unit test-expressions test-query test-render", + "prepublishOnly": "run-s build-dev build-prod-min build-prod build-csp build-css build-style-spec test-build diff-tarball", "print-release-url": "node build/print-release-url.js", "codegen": "cross-env build/run-node build/generate-style-code.js && build/run-node build/generate-struct-arrays.js" }, @@ -172,8 +205,7 @@ "build/", "dist/maplibre-gl*", "dist/style-spec/", - "flow-typed/*.js", - "src/", - ".flowconfig" + "types/", + "src/" ] } diff --git a/postcss.config.js b/postcss.config.cjs similarity index 100% rename from postcss.config.js rename to postcss.config.cjs diff --git a/rollup.config.csp.js b/rollup.config.csp.js index a829145795..3c4f9f9273 100644 --- a/rollup.config.csp.js +++ b/rollup.config.csp.js @@ -19,6 +19,6 @@ const config = (input, file, format) => ({ }); export default [ - config('src/index.js', 'dist/maplibre-gl-csp.js', 'umd'), - config('src/source/worker.js', 'dist/maplibre-gl-csp-worker.js', 'iife') + config('rollup/build/tsc/index.js', 'dist/maplibre-gl-csp.js', 'umd'), + config('rollup/build/tsc/source/worker.js', 'dist/maplibre-gl-csp-worker.js', 'iife') ]; diff --git a/rollup.config.js b/rollup.config.js index 84600f7523..fba64210da 100644 --- a/rollup.config.js +++ b/rollup.config.js @@ -1,7 +1,7 @@ import fs from 'fs'; import sourcemaps from 'rollup-plugin-sourcemaps'; -import {plugins} from './build/rollup_plugins'; -import banner from './build/banner'; +import {plugins} from './build/rollup_plugins.js'; +import banner from './build/banner.js'; const {BUILD, MINIFY} = process.env; const minified = MINIFY === 'true'; @@ -11,15 +11,15 @@ const outputFile = minified ? 'dist/maplibre-gl.js' : 'dist/maplibre-gl-unminified.js'; export default [{ - // First, use code splitting to bundle GL JS into three "chunks": - // - rollup/build/index.js: the main module, plus all its dependencies not shared by the worker module - // - rollup/build/worker.js: the worker module, plus all dependencies not shared by the main module - // - rollup/build/shared.js: the set of modules that are dependencies of both the main module and the worker module + // Before rollup you should run build-tsc to transpile from typescript to javascript + // and to copy the shaders and convert them to js strings + // Rollup will use code splitting to bundle GL JS into three "chunks": + // - rollup/build/maplibregl/index.js: the main module, plus all its dependencies not shared by the worker module + // - rollup/build/maplibregl/worker.js: the worker module, plus all dependencies not shared by the main module + // - rollup/build/maplibregl/shared.js: the set of modules that are dependencies of both the main module and the worker module // - // This is also where we do all of our source transformations: removing - // flow annotations, transpiling ES6 features using buble, inlining shader - // sources as strings, etc. - input: ['src/index.js', 'src/source/worker.js'], + // This is also where we do all of our source transformations using the plugins. + input: ['rollup/build/tsc/index.js', 'rollup/build/tsc/source/worker.js'], output: { dir: 'rollup/build/maplibregl', format: 'amd', @@ -40,7 +40,7 @@ export default [{ format: 'umd', sourcemap: production ? true : 'inline', indent: false, - intro: fs.readFileSync(require.resolve('./rollup/bundle_prelude.js'), 'utf8'), + intro: fs.readFileSync('./rollup/bundle_prelude.js', 'utf8'), banner }, treeshake: false, diff --git a/src/style-spec/rollup.config.js b/rollup.config.style-spec.js similarity index 69% rename from src/style-spec/rollup.config.js rename to rollup.config.style-spec.js index bffd3f1839..4c69b76b48 100644 --- a/src/style-spec/rollup.config.js +++ b/rollup.config.style-spec.js @@ -1,27 +1,18 @@ -import path from 'path'; -import replace from 'rollup-plugin-replace'; -import buble from 'rollup-plugin-buble'; -import resolve from 'rollup-plugin-node-resolve'; -import commonjs from 'rollup-plugin-commonjs'; +import path, {dirname} from 'path'; +import replace from '@rollup/plugin-replace'; +import resolve from '@rollup/plugin-node-resolve'; +import commonjs from '@rollup/plugin-commonjs'; import unassert from 'rollup-plugin-unassert'; -import json from 'rollup-plugin-json'; -import {flow} from '../../build/rollup_plugins'; +import json from '@rollup/plugin-json'; +import {fileURLToPath} from 'url'; -// Build es modules? const esm = 'esm' in process.env; -const transforms = { - dangerousForOf: true, - modules: esm ? false : undefined -}; - -const ROOT_DIR = __dirname; - const config = [{ - input: `${__dirname}/style-spec.js`, + input: 'rollup/build/tsc/style-spec/style-spec.js', output: { name: 'maplibreGlStyleSpecification', - file: `${__dirname}/dist/${esm ? 'index.es.js' : 'index.js'}`, + file: `dist/style-spec/${esm ? 'index.es.js' : 'index.js'}`, format: esm ? 'esm' : 'umd', sourcemap: true }, @@ -34,7 +25,7 @@ const config = [{ // This check will cause the build to fail on CI allowing these issues to be caught. if (importer && !importer.includes('node_modules')) { const resolvedPath = path.join(importer, source); - const fromRoot = path.relative(ROOT_DIR, resolvedPath); + const fromRoot = path.relative(dirname(fileURLToPath(import.meta.url)), resolvedPath); if (fromRoot.length > 2 && fromRoot.slice(0, 2) === '..') { throw new Error(`Module ${importer} imports ${source} from outside the style-spec package root directory.`); } @@ -51,9 +42,7 @@ const config = [{ '_token_stack:': '' } }), - flow(), json(), - buble({transforms, objectAssign: "Object.assign"}), unassert(), resolve({ browser: true, diff --git a/rollup/bundle_prelude.js b/rollup/bundle_prelude.js index 0f8ba4da7a..715ecb5339 100644 --- a/rollup/bundle_prelude.js +++ b/rollup/bundle_prelude.js @@ -4,18 +4,18 @@ var shared, worker, maplibregl; // define gets called three times: one for each chunk. we rely on the order // they're imported to know which is which function define(_, chunk) { -if (!shared) { - shared = chunk; -} else if (!worker) { - worker = chunk; -} else { - var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);' + if (!shared) { + shared = chunk; + } else if (!worker) { + worker = chunk; + } else { + var workerBundleString = 'var sharedChunk = {}; (' + shared + ')(sharedChunk); (' + worker + ')(sharedChunk);' - var sharedChunk = {}; - shared(sharedChunk); - maplibregl = chunk(sharedChunk); - if (typeof window !== 'undefined') { - maplibregl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' })); + var sharedChunk = {}; + shared(sharedChunk); + maplibregl = chunk(sharedChunk); + if (typeof window !== 'undefined') { + maplibregl.workerUrl = window.URL.createObjectURL(new Blob([workerBundleString], { type: 'text/javascript' })); + } } } -} diff --git a/rollup/copy-glsl-files.js b/rollup/copy-glsl-files.js new file mode 100644 index 0000000000..fb16494b1a --- /dev/null +++ b/rollup/copy-glsl-files.js @@ -0,0 +1,34 @@ +import fs from 'fs'; +import glob from 'glob'; + +let args = process.argv.slice(2); +let outputBaseDir = args[0]; +let minify = args[1]; + +console.log(`Copying glsl files to ${outputBaseDir}, minify: ${minify}`); + +/** + * This script is intended to copy the glsl file to the compilation output folder, + * change their extension to .js and export the shaders as strings in javascript. + * It will also minify them a bit if needed and change the extension to .js + */ + +glob("./src/**/*.glsl", null, (err, files) => { + for (let file of files) { + let code = fs.readFileSync(file, 'utf8'); + + if (minify) { + code = code.trim() // strip whitespace at the start/end + .replace(/\s*\/\/[^\n]*\n/g, '\n') // strip double-slash comments + .replace(/\n+/g, '\n') // collapse multi line breaks + .replace(/\n\s+/g, '\n') // strip identation + .replace(/\s?([+-\/*=,])\s?/g, '$1') // strip whitespace around operators + .replace(/([;\(\),\{\}])\n(?=[^#])/g, '$1'); // strip more line breaks + + } + let content = `export default ${JSON.stringify(code)};` + let fileName = outputBaseDir + '/' + file.split('/').splice(-1) + ".js"; + fs.writeFileSync(fileName, content); + } + console.log(`Finished converting ${files.length} glsl files`); +}); diff --git a/src/data/array_types.js b/src/data/array_types.ts similarity index 85% rename from src/data/array_types.js rename to src/data/array_types.ts index bc15e318b2..efd856392e 100644 --- a/src/data/array_types.js +++ b/src/data/array_types.ts @@ -1,10 +1,8 @@ -// This file is generated. Edit build/generate-struct-arrays.js, then run `yarn run codegen`. -// @flow - +// This file was generated. Edit build/generate-struct-arrays.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. import assert from 'assert'; import {Struct, StructArray} from '../util/struct_array'; import {register} from '../util/web_worker_transfer'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; /** * Implementation of the StructArray layout: @@ -21,13 +19,13 @@ class StructArrayLayout2i4 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number) { + public emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1); } - emplace(i: number, v0: number, v1: number) { + public emplace(i: number, v0: number, v1: number) { const o2 = i * 2; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -53,13 +51,13 @@ class StructArrayLayout4i8 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number) { const o2 = i * 4; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -88,13 +86,13 @@ class StructArrayLayout2i4i12 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const o2 = i * 6; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -125,13 +123,13 @@ class StructArrayLayout2i4ub8 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const o2 = i * 4; const o1 = i * 8; this.int16[o2 + 0] = v0; @@ -162,13 +160,13 @@ class StructArrayLayout2f8 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number) { + public emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1); } - emplace(i: number, v0: number, v1: number) { + public emplace(i: number, v0: number, v1: number) { const o4 = i * 2; this.float32[o4 + 0] = v0; this.float32[o4 + 1] = v1; @@ -194,13 +192,13 @@ class StructArrayLayout10ui20 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number) { const o2 = i * 10; this.uint16[o2 + 0] = v0; this.uint16[o2 + 1] = v1; @@ -238,13 +236,13 @@ class StructArrayLayout4i4ui4i24 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number) { const o2 = i * 12; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -280,13 +278,13 @@ class StructArrayLayout3f12 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number) { + public emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2); } - emplace(i: number, v0: number, v1: number, v2: number) { + public emplace(i: number, v0: number, v1: number, v2: number) { const o4 = i * 3; this.float32[o4 + 0] = v0; this.float32[o4 + 1] = v1; @@ -313,13 +311,13 @@ class StructArrayLayout1ul4 extends StructArray { this.uint32 = new Uint32Array(this.arrayBuffer); } - emplaceBack(v0: number) { + public emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0); } - emplace(i: number, v0: number) { + public emplace(i: number, v0: number) { const o4 = i * 1; this.uint32[o4 + 0] = v0; return i; @@ -350,13 +348,13 @@ class StructArrayLayout6i1ul2ui20 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number) { const o2 = i * 10; const o4 = i * 5; this.int16[o2 + 0] = v0; @@ -392,13 +390,13 @@ class StructArrayLayout2i2i2i12 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number) { const o2 = i * 6; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -432,13 +430,13 @@ class StructArrayLayout2f1f2i16 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number) { const o4 = i * 4; const o2 = i * 8; this.float32[o4 + 0] = v0; @@ -469,13 +467,13 @@ class StructArrayLayout2ub2f12 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number) { const o1 = i * 12; const o4 = i * 3; this.uint8[o1 + 0] = v0; @@ -504,13 +502,13 @@ class StructArrayLayout3ui6 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number) { + public emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2); } - emplace(i: number, v0: number, v1: number, v2: number) { + public emplace(i: number, v0: number, v1: number, v2: number) { const o2 = i * 3; this.uint16[o2 + 0] = v0; this.uint16[o2 + 1] = v1; @@ -550,13 +548,13 @@ class StructArrayLayout2i2ui3ul3ui2f3ub1ul1i48 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number) { const o2 = i * 24; const o4 = i * 12; const o1 = i * 48; @@ -608,13 +606,13 @@ class StructArrayLayout8i15ui1ul4f68 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number, v17: number, v18: number, v19: number, v20: number, v21: number, v22: number, v23: number, v24: number, v25: number, v26: number, v27: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number, v17: number, v18: number, v19: number, v20: number, v21: number, v22: number, v23: number, v24: number, v25: number, v26: number, v27: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3, v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number, v17: number, v18: number, v19: number, v20: number, v21: number, v22: number, v23: number, v24: number, v25: number, v26: number, v27: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number, v4: number, v5: number, v6: number, v7: number, v8: number, v9: number, v10: number, v11: number, v12: number, v13: number, v14: number, v15: number, v16: number, v17: number, v18: number, v19: number, v20: number, v21: number, v22: number, v23: number, v24: number, v25: number, v26: number, v27: number) { const o2 = i * 34; const o4 = i * 17; this.int16[o2 + 0] = v0; @@ -667,13 +665,13 @@ class StructArrayLayout1f4 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number) { + public emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0); } - emplace(i: number, v0: number) { + public emplace(i: number, v0: number) { const o4 = i * 1; this.float32[o4 + 0] = v0; return i; @@ -698,13 +696,13 @@ class StructArrayLayout3i6 extends StructArray { this.int16 = new Int16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number) { + public emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2); } - emplace(i: number, v0: number, v1: number, v2: number) { + public emplace(i: number, v0: number, v1: number, v2: number) { const o2 = i * 3; this.int16[o2 + 0] = v0; this.int16[o2 + 1] = v1; @@ -734,13 +732,13 @@ class StructArrayLayout1ul2ui8 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number) { + public emplaceBack(v0: number, v1: number, v2: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2); } - emplace(i: number, v0: number, v1: number, v2: number) { + public emplace(i: number, v0: number, v1: number, v2: number) { const o4 = i * 2; const o2 = i * 4; this.uint32[o4 + 0] = v0; @@ -768,13 +766,13 @@ class StructArrayLayout2ui4 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number) { + public emplaceBack(v0: number, v1: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1); } - emplace(i: number, v0: number, v1: number) { + public emplace(i: number, v0: number, v1: number) { const o2 = i * 2; this.uint16[o2 + 0] = v0; this.uint16[o2 + 1] = v1; @@ -800,13 +798,13 @@ class StructArrayLayout1ui2 extends StructArray { this.uint16 = new Uint16Array(this.arrayBuffer); } - emplaceBack(v0: number) { + public emplaceBack(v0: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0); } - emplace(i: number, v0: number) { + public emplace(i: number, v0: number) { const o2 = i * 1; this.uint16[o2 + 0] = v0; return i; @@ -831,13 +829,13 @@ class StructArrayLayout4f16 extends StructArray { this.float32 = new Float32Array(this.arrayBuffer); } - emplaceBack(v0: number, v1: number, v2: number, v3: number) { + public emplaceBack(v0: number, v1: number, v2: number, v3: number) { const i = this.length; this.resize(i + 1); return this.emplace(i, v0, v1, v2, v3); } - emplace(i: number, v0: number, v1: number, v2: number, v3: number) { + public emplace(i: number, v0: number, v1: number, v2: number, v3: number) { const o4 = i * 4; this.float32[o4 + 0] = v0; this.float32[o4 + 1] = v1; @@ -852,16 +850,6 @@ register('StructArrayLayout4f16', StructArrayLayout4f16); class CollisionBoxStruct extends Struct { _structArray: CollisionBoxArray; - anchorPointX: number; - anchorPointY: number; - x1: number; - y1: number; - x2: number; - y2: number; - featureIndex: number; - sourceLayerIndex: number; - bucketIndex: number; - anchorPoint: Point; get anchorPointX() { return this._structArray.int16[this._pos2 + 0]; } get anchorPointY() { return this._structArray.int16[this._pos2 + 1]; } get x1() { return this._structArray.int16[this._pos2 + 2]; } @@ -897,23 +885,6 @@ register('CollisionBoxArray', CollisionBoxArray); class PlacedSymbolStruct extends Struct { _structArray: PlacedSymbolArray; - anchorX: number; - anchorY: number; - glyphStartIndex: number; - numGlyphs: number; - vertexStartIndex: number; - lineStartIndex: number; - lineLength: number; - segment: number; - lowerSize: number; - upperSize: number; - lineOffsetX: number; - lineOffsetY: number; - writingMode: number; - placedOrientation: number; - hidden: number; - crossTileID: number; - associatedIconIndex: number; get anchorX() { return this._structArray.int16[this._pos2 + 0]; } get anchorY() { return this._structArray.int16[this._pos2 + 1]; } get glyphStartIndex() { return this._structArray.uint16[this._pos2 + 2]; } @@ -959,34 +930,6 @@ register('PlacedSymbolArray', PlacedSymbolArray); class SymbolInstanceStruct extends Struct { _structArray: SymbolInstanceArray; - anchorX: number; - anchorY: number; - rightJustifiedTextSymbolIndex: number; - centerJustifiedTextSymbolIndex: number; - leftJustifiedTextSymbolIndex: number; - verticalPlacedTextSymbolIndex: number; - placedIconSymbolIndex: number; - verticalPlacedIconSymbolIndex: number; - key: number; - textBoxStartIndex: number; - textBoxEndIndex: number; - verticalTextBoxStartIndex: number; - verticalTextBoxEndIndex: number; - iconBoxStartIndex: number; - iconBoxEndIndex: number; - verticalIconBoxStartIndex: number; - verticalIconBoxEndIndex: number; - featureIndex: number; - numHorizontalGlyphVertices: number; - numVerticalGlyphVertices: number; - numIconVertices: number; - numVerticalIconVertices: number; - useRuntimeCollisionCircles: number; - crossTileID: number; - textBoxScale: number; - textOffset0: number; - textOffset1: number; - collisionCircleDiameter: number; get anchorX() { return this._structArray.int16[this._pos2 + 0]; } get anchorY() { return this._structArray.int16[this._pos2 + 1]; } get rightJustifiedTextSymbolIndex() { return this._structArray.int16[this._pos2 + 2]; } @@ -1061,9 +1004,6 @@ register('SymbolLineVertexArray', SymbolLineVertexArray); class FeatureIndexStruct extends Struct { _structArray: FeatureIndexArray; - featureIndex: number; - sourceLayerIndex: number; - bucketIndex: number; get featureIndex() { return this._structArray.uint32[this._pos4 + 0]; } get sourceLayerIndex() { return this._structArray.uint16[this._pos2 + 2]; } get bucketIndex() { return this._structArray.uint16[this._pos2 + 3]; } diff --git a/src/data/bucket.js b/src/data/bucket.ts similarity index 63% rename from src/data/bucket.js rename to src/data/bucket.ts index 5bbe276d4b..42dd27a901 100644 --- a/src/data/bucket.js +++ b/src/data/bucket.ts @@ -1,5 +1,3 @@ -// @flow - import type {CollisionBoxArray} from './array_types'; import type Style from '../style/style'; import type {TypedStyleLayer} from '../style/style_layer/typed_style_layer'; @@ -8,43 +6,50 @@ import type Context from '../gl/context'; import type {FeatureStates} from '../source/source_state'; import type {ImagePosition} from '../render/image_atlas'; import type {CanonicalTileID} from '../source/tile_id'; +import Point from '../util/point'; -export type BucketParameters = { - index: number, - layers: Array, - zoom: number, - pixelRatio: number, - overscaling: number, - collisionBoxArray: CollisionBoxArray, - sourceLayerIndex: number, - sourceID: string -} +export type BucketParameters = { + index: number; + layers: Array; + zoom: number; + pixelRatio: number; + overscaling: number; + collisionBoxArray: CollisionBoxArray; + sourceLayerIndex: number; + sourceID: string; +}; export type PopulateParameters = { - featureIndex: FeatureIndex, - iconDependencies: {}, - patternDependencies: {}, - glyphDependencies: {}, - availableImages: Array -} + featureIndex: FeatureIndex; + iconDependencies: {}; + patternDependencies: {}; + glyphDependencies: {}; + availableImages: Array; +}; export type IndexedFeature = { - feature: VectorTileFeature, - id: number | string, - index: number, - sourceLayerIndex: number, -} + feature: VectorTileFeature; + id: number | string; + index: number; + sourceLayerIndex: number; +}; -export type BucketFeature = {| - index: number, - sourceLayerIndex: number, - geometry: Array>, - properties: Object, - type: 1 | 2 | 3, - id?: any, - +patterns: {[_: string]: {"min": string, "mid": string, "max": string}}, - sortKey?: number -|}; +export type BucketFeature = { + index: number; + sourceLayerIndex: number; + geometry: Array>; + properties: any; + type: 1 | 2 | 3; + id?: any; + readonly patterns: { + [_: string]: { + 'min': string; + 'mid': string; + 'max': string; + }; + }; + sortKey?: number; +}; /** * The `Bucket` interface is the single point of knowledge about turning vector @@ -70,26 +75,24 @@ export type BucketFeature = {| * @private */ export interface Bucket { - layerIds: Array; - hasPattern: boolean; - +layers: Array; - +stateDependentLayers: Array; - +stateDependentLayerIds: Array; - populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID): void; - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}): void; - isEmpty(): boolean; - - upload(context: Context): void; - uploadPending(): boolean; - - /** + layerIds: Array; + hasPattern: boolean; + readonly layers: Array; + readonly stateDependentLayers: Array; + readonly stateDependentLayerIds: Array; + populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID): void; + update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}): void; + isEmpty(): boolean; + upload(context: Context): void; + uploadPending(): boolean; + /** * Release the WebGL resources associated with the buffers. Note that because * buckets are shared between layers having the same layout properties, they * must be destroyed in groups (all buckets for a tile, or all symbol buckets). * * @private */ - destroy(): void; + destroy(): void; } export function deserialize(input: Array, style: Style): {[_: string]: Bucket} { @@ -110,9 +113,9 @@ export function deserialize(input: Array, style: Style): {[_: string]: B // look up StyleLayer objects from layer ids (since we don't // want to waste time serializing/copying them from the worker) - (bucket: any).layers = layers; - if ((bucket: any).stateDependentLayerIds) { - (bucket: any).stateDependentLayers = (bucket: any).stateDependentLayerIds.map((lId) => layers.filter((l) => l.id === lId)[0]); + (bucket as any).layers = layers; + if (bucket.stateDependentLayerIds) { + (bucket as any).stateDependentLayers = bucket.stateDependentLayerIds.map((lId) => layers.filter((l) => l.id === lId)[0]); } for (const layer of layers) { output[layer.id] = bucket; diff --git a/src/data/bucket/fill_attributes.js b/src/data/bucket/circle_attributes.ts similarity index 96% rename from src/data/bucket/fill_attributes.js rename to src/data/bucket/circle_attributes.ts index e2334a28e5..ed9ebcefa8 100644 --- a/src/data/bucket/fill_attributes.js +++ b/src/data/bucket/circle_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const layout = createLayout([ diff --git a/src/data/bucket/circle_bucket.js b/src/data/bucket/circle_bucket.ts similarity index 93% rename from src/data/bucket/circle_bucket.js rename to src/data/bucket/circle_bucket.ts index 235eeb09a8..5b0b717278 100644 --- a/src/data/bucket/circle_bucket.js +++ b/src/data/bucket/circle_bucket.ts @@ -1,5 +1,3 @@ -// @flow - import {CircleLayoutArray} from '../array_types'; import {members as layoutAttributes} from './circle_attributes'; @@ -25,7 +23,7 @@ import type HeatmapStyleLayer from '../../style/style_layer/heatmap_style_layer' import type Context from '../../gl/context'; import type IndexBuffer from '../../gl/index_buffer'; import type VertexBuffer from '../../gl/vertex_buffer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {FeatureStates} from '../../source/source_state'; import type {ImagePosition} from '../../render/image_atlas'; @@ -42,7 +40,7 @@ function addCircleVertex(layoutVertexArray, x, y, extrudeX, extrudeY) { * vector that is where it points. * @private */ -class CircleBucket implements Bucket { +class CircleBucket implements Bucket { index: number; zoom: number; overscaling: number; @@ -79,13 +77,13 @@ class CircleBucket implements Bucke populate(features: Array, options: PopulateParameters, canonical: CanonicalTileID) { const styleLayer = this.layers[0]; - const bucketFeatures = []; + const bucketFeatures: BucketFeature[] = []; let circleSortKey = null; let sortFeaturesByKey = false; // Heatmap layers are handled in this bucket and have no evaluated properties, so we check our access if (styleLayer.type === 'circle') { - circleSortKey = ((styleLayer: any): CircleStyleLayer).layout.get('circle-sort-key'); + circleSortKey = (styleLayer as CircleStyleLayer).layout.get('circle-sort-key'); sortFeaturesByKey = !circleSortKey.isConstant(); } @@ -96,7 +94,6 @@ class CircleBucket implements Bucke if (!this.layers[0]._featureFilter.filter(new EvaluationParameters(this.zoom), evaluationFeature, canonical)) continue; const sortKey = sortFeaturesByKey ? - // $FlowFixMe circleSortKey.evaluate(evaluationFeature, {}, canonical) : undefined; @@ -116,10 +113,7 @@ class CircleBucket implements Bucke } if (sortFeaturesByKey) { - bucketFeatures.sort((a, b) => { - // a.sortKey is always a number when in use - return ((a.sortKey: any): number) - ((b.sortKey: any): number); - }); + bucketFeatures.sort((a, b) => a.sortKey - b.sortKey); } for (const bucketFeature of bucketFeatures) { diff --git a/src/data/bucket/circle_attributes.js b/src/data/bucket/fill_attributes.ts similarity index 96% rename from src/data/bucket/circle_attributes.js rename to src/data/bucket/fill_attributes.ts index e2334a28e5..ed9ebcefa8 100644 --- a/src/data/bucket/circle_attributes.js +++ b/src/data/bucket/fill_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const layout = createLayout([ diff --git a/src/data/bucket/fill_bucket.js b/src/data/bucket/fill_bucket.ts similarity index 95% rename from src/data/bucket/fill_bucket.js rename to src/data/bucket/fill_bucket.ts index a793fea15b..136b02d8a6 100644 --- a/src/data/bucket/fill_bucket.js +++ b/src/data/bucket/fill_bucket.ts @@ -1,5 +1,3 @@ -// @flow - import {FillLayoutArray} from '../array_types'; import {members as layoutAttributes} from './fill_attributes'; @@ -28,7 +26,7 @@ import type FillStyleLayer from '../../style/style_layer/fill_style_layer'; import type Context from '../../gl/context'; import type IndexBuffer from '../../gl/index_buffer'; import type VertexBuffer from '../../gl/vertex_buffer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {FeatureStates} from '../../source/source_state'; import type {ImagePosition} from '../../render/image_atlas'; @@ -79,7 +77,7 @@ class FillBucket implements Bucket { this.hasPattern = hasPattern('fill', this.layers, options); const fillSortKey = this.layers[0].layout.get('fill-sort-key'); const sortFeaturesByKey = !fillSortKey.isConstant(); - const bucketFeatures = []; + const bucketFeatures: BucketFeature[] = []; for (const {feature, id, index, sourceLayerIndex} of features) { const needGeometry = this.layers[0]._featureFilter.needGeometry; @@ -106,10 +104,7 @@ class FillBucket implements Bucket { } if (sortFeaturesByKey) { - bucketFeatures.sort((a, b) => { - // a.sortKey is always a number when in use - return ((a.sortKey: any): number) - ((b.sortKey: any): number); - }); + bucketFeatures.sort((a, b) => a.sortKey - b.sortKey); } for (const bucketFeature of bucketFeatures) { @@ -129,12 +124,16 @@ class FillBucket implements Bucket { } } - update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: {[_: string]: ImagePosition}) { + update(states: FeatureStates, vtLayer: VectorTileLayer, imagePositions: { + [_: string]: ImagePosition; + }) { if (!this.stateDependentLayers.length) return; this.programConfigurations.updatePaintArrays(states, vtLayer, this.stateDependentLayers, imagePositions); } - addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeatures(options: PopulateParameters, canonical: CanonicalTileID, imagePositions: { + [_: string]: ImagePosition; + }) { for (const feature of this.patternFeatures) { this.addFeature(feature, feature.geometry, feature.index, canonical, imagePositions); } @@ -167,7 +166,9 @@ class FillBucket implements Bucket { this.segments2.destroy(); } - addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: {[_: string]: ImagePosition}) { + addFeature(feature: BucketFeature, geometry: Array>, index: number, canonical: CanonicalTileID, imagePositions: { + [_: string]: ImagePosition; + }) { for (const polygon of classifyRings(geometry, EARCUT_MAX_RINGS)) { let numVertices = 0; for (const ring of polygon) { diff --git a/src/data/bucket/fill_extrusion_attributes.js b/src/data/bucket/fill_extrusion_attributes.ts similarity index 96% rename from src/data/bucket/fill_extrusion_attributes.js rename to src/data/bucket/fill_extrusion_attributes.ts index f8c6d70afd..dcb728e73f 100644 --- a/src/data/bucket/fill_extrusion_attributes.js +++ b/src/data/bucket/fill_extrusion_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const layout = createLayout([ diff --git a/src/data/bucket/fill_extrusion_bucket.js b/src/data/bucket/fill_extrusion_bucket.ts similarity index 99% rename from src/data/bucket/fill_extrusion_bucket.js rename to src/data/bucket/fill_extrusion_bucket.ts index b45ba4b2ce..6ecf44400c 100644 --- a/src/data/bucket/fill_extrusion_bucket.js +++ b/src/data/bucket/fill_extrusion_bucket.ts @@ -1,5 +1,3 @@ -// @flow - import {FillExtrusionLayoutArray} from '../array_types'; import {members as layoutAttributes} from './fill_extrusion_attributes'; @@ -32,7 +30,7 @@ import type FillExtrusionStyleLayer from '../../style/style_layer/fill_extrusion import type Context from '../../gl/context'; import type IndexBuffer from '../../gl/index_buffer'; import type VertexBuffer from '../../gl/vertex_buffer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {FeatureStates} from '../../source/source_state'; import type {ImagePosition} from '../../render/image_atlas'; diff --git a/src/data/bucket/heatmap_bucket.js b/src/data/bucket/heatmap_bucket.ts similarity index 98% rename from src/data/bucket/heatmap_bucket.js rename to src/data/bucket/heatmap_bucket.ts index 2ac11756e7..e1b252352d 100644 --- a/src/data/bucket/heatmap_bucket.js +++ b/src/data/bucket/heatmap_bucket.ts @@ -1,5 +1,3 @@ -// @flow - import CircleBucket from './circle_bucket'; import {register} from '../../util/web_worker_transfer'; diff --git a/src/data/bucket/line_attributes.js b/src/data/bucket/line_attributes.ts similarity index 97% rename from src/data/bucket/line_attributes.js rename to src/data/bucket/line_attributes.ts index 51678b408e..9371f12564 100644 --- a/src/data/bucket/line_attributes.js +++ b/src/data/bucket/line_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const lineLayoutAttributes = createLayout([ diff --git a/src/data/bucket/line_attributes_ext.js b/src/data/bucket/line_attributes_ext.ts similarity index 97% rename from src/data/bucket/line_attributes_ext.js rename to src/data/bucket/line_attributes_ext.ts index d963b19957..b73b60d33b 100644 --- a/src/data/bucket/line_attributes_ext.js +++ b/src/data/bucket/line_attributes_ext.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const lineLayoutAttributesExt = createLayout([ diff --git a/src/data/bucket/line_bucket.js b/src/data/bucket/line_bucket.ts similarity index 96% rename from src/data/bucket/line_bucket.js rename to src/data/bucket/line_bucket.ts index c1339aff4e..4f5415bd0d 100644 --- a/src/data/bucket/line_bucket.js +++ b/src/data/bucket/line_bucket.ts @@ -1,5 +1,3 @@ -// @flow - import {LineLayoutArray, LineExtLayoutArray} from '../array_types'; import {members as layoutAttributes} from './line_attributes'; @@ -25,7 +23,7 @@ import type { PopulateParameters } from '../bucket'; import type LineStyleLayer from '../../style/style_layer/line_style_layer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {Segment} from '../segment'; import {RGBAImage} from '../../util/image'; import type Context from '../../gl/context'; @@ -72,15 +70,15 @@ const LINE_DISTANCE_SCALE = 1 / 2; const MAX_LINE_DISTANCE = Math.pow(2, LINE_DISTANCE_BUFFER_BITS - 1) / LINE_DISTANCE_SCALE; type LineClips = { - start: number; - end: number; -} + start: number; + end: number; +}; type GradientTexture = { - texture: Texture; - gradient: ?RGBAImage; - version: number; -} + texture?: Texture; + gradient?: RGBAImage; + version?: number; +}; /** * @private @@ -90,7 +88,7 @@ class LineBucket implements Bucket { totalDistance: number; maxLineLength: number; scaledDistance: number; - lineClips: ?LineClips; + lineClips?: LineClips; e1: number; e2: number; @@ -100,7 +98,7 @@ class LineBucket implements Bucket { overscaling: number; layers: Array; layerIds: Array; - gradients: {[string]: GradientTexture}; + gradients: {[x: string]: GradientTexture}; stateDependentLayers: Array; stateDependentLayerIds: Array; patternFeatures: Array; @@ -147,7 +145,7 @@ class LineBucket implements Bucket { this.hasPattern = hasPattern('line', this.layers, options); const lineSortKey = this.layers[0].layout.get('line-sort-key'); const sortFeaturesByKey = !lineSortKey.isConstant(); - const bucketFeatures = []; + const bucketFeatures: BucketFeature[] = []; for (const {feature, id, index, sourceLayerIndex} of features) { const needGeometry = this.layers[0]._featureFilter.needGeometry; @@ -175,8 +173,7 @@ class LineBucket implements Bucket { if (sortFeaturesByKey) { bucketFeatures.sort((a, b) => { - // a.sortKey is always a number when in use - return ((a.sortKey: any): number) - ((b.sortKey: any): number); + return (a.sortKey) - (b.sortKey); }); } @@ -236,8 +233,8 @@ class LineBucket implements Bucket { this.segments.destroy(); } - lineFeatureClips(feature: BucketFeature): ?LineClips { - if (!!feature.properties && feature.properties.hasOwnProperty('mapbox_clip_start') && feature.properties.hasOwnProperty('mapbox_clip_end')) { + lineFeatureClips(feature: BucketFeature): LineClips | undefined { + if (!!feature.properties && Object.prototype.hasOwnProperty.call(feature.properties, 'mapbox_clip_start') && Object.prototype.hasOwnProperty.call(feature.properties, 'mapbox_clip_end')) { const start = +feature.properties['mapbox_clip_start']; const end = +feature.properties['mapbox_clip_end']; return {start, end}; @@ -298,11 +295,11 @@ class LineBucket implements Bucket { // we could be more precise, but it would only save a negligible amount of space const segment = this.segments.prepareSegment(len * 10, this.layoutVertexArray, this.indexArray); - let currentVertex; - let prevVertex = ((undefined: any): Point); - let nextVertex = ((undefined: any): Point); - let prevNormal = ((undefined: any): Point); - let nextNormal = ((undefined: any): Point); + let currentVertex: Point; + let prevVertex: Point; + let nextVertex: Point; + let prevNormal: Point; + let nextNormal: Point; // the last two vertices added this.e1 = this.e2 = -1; @@ -315,7 +312,7 @@ class LineBucket implements Bucket { for (let i = first; i < len; i++) { nextVertex = i === len - 1 ? - (isPolygon ? vertices[first + 1] : (undefined: any)) : // if it's a polygon, treat the last vertex like the first + (isPolygon ? vertices[first + 1] : undefined) : // if it's a polygon, treat the last vertex like the first vertices[i + 1]; // just the next vertex // if two consecutive vertices exist, skip the current one diff --git a/src/data/bucket/pattern_attributes.js b/src/data/bucket/pattern_attributes.ts similarity index 97% rename from src/data/bucket/pattern_attributes.js rename to src/data/bucket/pattern_attributes.ts index c4da6049f4..ca8de1b514 100644 --- a/src/data/bucket/pattern_attributes.js +++ b/src/data/bucket/pattern_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../../util/struct_array'; const patternAttributes = createLayout([ diff --git a/src/data/bucket/pattern_bucket_features.js b/src/data/bucket/pattern_bucket_features.ts similarity index 82% rename from src/data/bucket/pattern_bucket_features.js rename to src/data/bucket/pattern_bucket_features.ts index b85970271f..22b26d937b 100644 --- a/src/data/bucket/pattern_bucket_features.js +++ b/src/data/bucket/pattern_bucket_features.ts @@ -1,4 +1,3 @@ -// @flow import type FillStyleLayer from '../../style/style_layer/fill_style_layer'; import type FillExtrusionStyleLayer from '../../style/style_layer/fill_extrusion_style_layer'; import type LineStyleLayer from '../../style/style_layer/line_style_layer'; @@ -7,18 +6,16 @@ import type { BucketFeature, PopulateParameters } from '../bucket'; +import {PossiblyEvaluated} from '../../style/properties'; -type PatternStyleLayers = - Array | - Array | - Array; +type PatternStyleLayers = Array | Array | Array; export function hasPattern(type: string, layers: PatternStyleLayers, options: PopulateParameters) { const patterns = options.patternDependencies; let hasPattern = false; for (const layer of layers) { - const patternProperty = layer.paint.get(`${type}-pattern`); + const patternProperty = (layer.paint as PossiblyEvaluated).get(`${type}-pattern`); if (!patternProperty.isConstant()) { hasPattern = true; } @@ -37,10 +34,10 @@ export function hasPattern(type: string, layers: PatternStyleLayers, options: Po export function addPatternDependencies(type: string, layers: PatternStyleLayers, patternFeature: BucketFeature, zoom: number, options: PopulateParameters) { const patterns = options.patternDependencies; for (const layer of layers) { - const patternProperty = layer.paint.get(`${type}-pattern`); + const patternProperty = (layer.paint as PossiblyEvaluated).get(`${type}-pattern`); const patternPropertyValue = patternProperty.value; - if (patternPropertyValue.kind !== "constant") { + if (patternPropertyValue.kind !== 'constant') { let min = patternPropertyValue.evaluate({zoom: zoom - 1}, patternFeature, {}, options.availableImages); let mid = patternPropertyValue.evaluate({zoom}, patternFeature, {}, options.availableImages); let max = patternPropertyValue.evaluate({zoom: zoom + 1}, patternFeature, {}, options.availableImages); diff --git a/src/data/bucket/symbol_attributes.js b/src/data/bucket/symbol_attributes.ts similarity index 99% rename from src/data/bucket/symbol_attributes.js rename to src/data/bucket/symbol_attributes.ts index 5d307d2ada..34d5ffaec5 100644 --- a/src/data/bucket/symbol_attributes.js +++ b/src/data/bucket/symbol_attributes.ts @@ -1,5 +1,3 @@ -// @flow - import {createLayout} from '../../util/struct_array'; export const symbolLayoutAttributes = createLayout([ diff --git a/src/data/bucket/symbol_bucket.js b/src/data/bucket/symbol_bucket.ts similarity index 92% rename from src/data/bucket/symbol_bucket.js rename to src/data/bucket/symbol_bucket.ts index 89d6723005..1e7cf3ac85 100644 --- a/src/data/bucket/symbol_bucket.js +++ b/src/data/bucket/symbol_bucket.ts @@ -1,9 +1,8 @@ -// @flow - -import {symbolLayoutAttributes, +import { + symbolLayoutAttributes, collisionVertexAttributes, collisionBoxLayout, - dynamicLayoutAttributes + dynamicLayoutAttributes, } from './symbol_attributes'; import {SymbolLayoutArray, @@ -17,14 +16,14 @@ import {SymbolLayoutArray, SymbolLineVertexArray } from '../array_types'; -import Point from '@mapbox/point-geometry'; +import Point from '../../util/point'; import SegmentVector from '../segment'; import {ProgramConfigurationSet} from '../program_configuration'; import {TriangleIndexArray, LineIndexArray} from '../index_array_type'; import transformText from '../../symbol/transform_text'; import mergeLines from '../../symbol/mergelines'; import {allowsVerticalWritingMode, stringContainsRTLText} from '../../util/script_detection'; -import {WritingMode} from '../../symbol/shaping'; +import {WriteModeMap, WritingMode} from '../../symbol/shaping'; import loadGeometry from '../load_geometry'; import toEvaluationFeature from '../evaluation_feature'; import mvt from '@mapbox/vector-tile'; @@ -48,7 +47,7 @@ import type { PopulateParameters } from '../bucket'; import type {CollisionBoxArray, CollisionBox, SymbolInstance} from '../array_types'; -import type {StructArray, StructArrayMember} from '../../util/struct_array'; +import type {StructArray, StructArrayMember, ViewType} from '../../util/struct_array'; import SymbolStyleLayer from '../../style/style_layer/symbol_style_layer'; import type Context from '../../gl/context'; import type IndexBuffer from '../../gl/index_buffer'; @@ -59,41 +58,41 @@ import type {FeatureStates} from '../../source/source_state'; import type {ImagePosition} from '../../render/image_atlas'; export type SingleCollisionBox = { - x1: number; - y1: number; - x2: number; - y2: number; - anchorPointX: number; - anchorPointY: number; + x1: number; + y1: number; + x2: number; + y2: number; + anchorPointX: number; + anchorPointY: number; }; export type CollisionArrays = { - textBox?: SingleCollisionBox; - verticalTextBox?: SingleCollisionBox; - iconBox?: SingleCollisionBox; - verticalIconBox?: SingleCollisionBox; - textFeatureIndex?: number; - verticalTextFeatureIndex?: number; - iconFeatureIndex?: number; - verticalIconFeatureIndex?: number; + textBox?: SingleCollisionBox; + verticalTextBox?: SingleCollisionBox; + iconBox?: SingleCollisionBox; + verticalIconBox?: SingleCollisionBox; + textFeatureIndex?: number; + verticalTextFeatureIndex?: number; + iconFeatureIndex?: number; + verticalIconFeatureIndex?: number; }; -export type SymbolFeature = {| - sortKey: number | void, - text: Formatted | void, - icon: ?ResolvedImage, - index: number, - sourceLayerIndex: number, - geometry: Array>, - properties: Object, - type: 'Point' | 'LineString' | 'Polygon', - id?: any -|}; +export type SymbolFeature = { + sortKey: number | void; + text: Formatted | void; + icon: ResolvedImage | undefined | null; + index: number; + sourceLayerIndex: number; + geometry: Array>; + properties: any; + type: 'Point' | 'LineString' | 'Polygon'; + id?: any; +}; export type SortKeyRange = { - sortKey: number, - symbolInstanceStart: number, - symbolInstanceEnd: number + sortKey: number; + symbolInstanceStart: number; + symbolInstanceEnd: number; }; // Opacity arrays are frequently updated but don't contain a lot of information, so we pack them @@ -105,10 +104,24 @@ export type SortKeyRange = { // { name: 'a_fade_opacity', components: 1, type: 'Uint32' } // ]; const shaderOpacityAttributes = [ - {name: 'a_fade_opacity', components: 1, type: 'Uint8', offset: 0} + {name: 'a_fade_opacity', components: 1, type: 'Uint8' as ViewType, offset: 0} ]; -function addVertex(array, anchorX, anchorY, ox, oy, tx, ty, sizeVertex, isSDF: boolean, pixelOffsetX, pixelOffsetY, minFontScaleX, minFontScaleY) { +function addVertex( + array: StructArray, + anchorX: number, + anchorY: number, + ox: number, + oy: number, + tx: number, + ty: number, + sizeVertex: number, + isSDF: boolean, + pixelOffsetX: number, + pixelOffsetY: number, + minFontScaleX: number, + minFontScaleY: number +) { const aSizeX = sizeVertex ? Math.min(MAX_PACKED_SIZE, Math.round(sizeVertex[0])) : 0; const aSizeY = sizeVertex ? Math.min(MAX_PACKED_SIZE, Math.round(sizeVertex[1])) : 0; array.emplaceBack( @@ -229,9 +242,13 @@ class CollisionBuffers { collisionVertexArray: CollisionVertexArray; collisionVertexBuffer: VertexBuffer; - constructor(LayoutArray: Class, + constructor(LayoutArray: { + new (...args: any): StructArray; + }, layoutAttributes: Array, - IndexArray: Class) { + IndexArray: { + new (...args: any): TriangleIndexArray | LineIndexArray; + }) { this.layoutVertexArray = new LayoutArray(); this.layoutAttributes = layoutAttributes; this.indexArray = new IndexArray(); @@ -357,8 +374,9 @@ class SymbolBucket implements Bucket { this.sortKeyRanges = []; this.collisionCircleArray = []; - this.placementInvProjMatrix = mat4.identity([]); - this.placementViewportMatrix = mat4.identity([]); + // NOTE mat4.create() creates a mat4.identity() + this.placementInvProjMatrix = mat4.create(); + this.placementViewportMatrix = mat4.create(); const layer = this.layers[0]; const unevaluatedLayoutValues = layer._unevaluatedLayout._values; @@ -379,7 +397,7 @@ class SymbolBucket implements Bucket { this.sortFeaturesByY = zOrderByViewportY && this.canOverlap; if (layout.get('symbol-placement') === 'point') { - this.writingModes = layout.get('text-writing-mode').map(wm => WritingMode[wm]); + this.writingModes = layout.get('text-writing-mode').map(wm => WriteModeMap[wm]); } this.stateDependentLayerIds = this.layers.filter((l) => l.isStateDependent()).map((l) => l.id); @@ -467,7 +485,7 @@ class SymbolBucket implements Bucket { } } - let icon: ?ResolvedImage; + let icon: ResolvedImage | undefined | null; if (hasIcon) { // Expression evaluation will automatically coerce to Image // but plain string token evaluation skips that pathway so do the @@ -531,7 +549,7 @@ class SymbolBucket implements Bucket { if (this.sortFeaturesByKey) { this.features.sort((a, b) => { // a.sortKey is always a number when sortFeaturesByKey is true - return ((a.sortKey: any): number) - ((b.sortKey: any): number); + return (a.sortKey as number) - (b.sortKey as number); }); } } @@ -611,7 +629,7 @@ class SymbolBucket implements Bucket { lineOffset: [number, number], alongLine: boolean, feature: SymbolFeature, - writingMode: any, + writingMode: WritingMode, labelAnchor: Anchor, lineStartIndex: number, lineLength: number, @@ -620,7 +638,7 @@ class SymbolBucket implements Bucket { const indexArray = arrays.indexArray; const layoutVertexArray = arrays.layoutVertexArray; - const segment = arrays.segments.prepareSegment(4 * quads.length, layoutVertexArray, indexArray, this.canOverlap ? feature.sortKey : undefined); + const segment = arrays.segments.prepareSegment(4 * quads.length, layoutVertexArray, indexArray, this.canOverlap ? feature.sortKey as number : undefined); const glyphOffsetArrayStart = this.glyphOffsetArray.length; const vertexStartIndex = segment.vertexLength; @@ -653,15 +671,21 @@ class SymbolBucket implements Bucket { } } - arrays.placedSymbolArray.emplaceBack(labelAnchor.x, labelAnchor.y, - glyphOffsetArrayStart, this.glyphOffsetArray.length - glyphOffsetArrayStart, vertexStartIndex, - lineStartIndex, lineLength, (labelAnchor.segment: any), - sizeVertex ? sizeVertex[0] : 0, sizeVertex ? sizeVertex[1] : 0, + arrays.placedSymbolArray.emplaceBack( + labelAnchor.x, labelAnchor.y, + glyphOffsetArrayStart, + this.glyphOffsetArray.length - glyphOffsetArrayStart, + vertexStartIndex, + lineStartIndex, + lineLength, + labelAnchor.segment, + sizeVertex ? sizeVertex[0] : 0, + sizeVertex ? sizeVertex[1] : 0, lineOffset[0], lineOffset[1], writingMode, // placedOrientation is null initially; will be updated to horizontal(1)/vertical(2) if placed 0, - (false: any), + false as unknown as number, // The crossTileID is only filled/used on the foreground for dynamic text anchors 0, associatedIconIndex @@ -699,7 +723,7 @@ class SymbolBucket implements Bucket { segment.vertexLength += 4; - const indexArray: LineIndexArray = (arrays.indexArray: any); + const indexArray = arrays.indexArray as LineIndexArray; indexArray.emplaceBack(index, index + 1); indexArray.emplaceBack(index + 1, index + 2); indexArray.emplaceBack(index + 2, index + 3); @@ -710,7 +734,7 @@ class SymbolBucket implements Bucket { addDebugCollisionBoxes(startIndex: number, endIndex: number, symbolInstance: SymbolInstance, isText: boolean) { for (let b = startIndex; b < endIndex; b++) { - const box: CollisionBox = (this.collisionBoxArray.get(b): any); + const box: CollisionBox = this.collisionBoxArray.get(b); const x1 = box.x1; const y1 = box.y1; const x2 = box.x2; @@ -741,35 +765,41 @@ class SymbolBucket implements Bucket { // These flat arrays are meant to be quicker to iterate over than the source // CollisionBoxArray - _deserializeCollisionBoxesForSymbol(collisionBoxArray: CollisionBoxArray, - textStartIndex: number, textEndIndex: number, - verticalTextStartIndex: number, verticalTextEndIndex: number, - iconStartIndex: number, iconEndIndex: number, - verticalIconStartIndex: number, verticalIconEndIndex: number): CollisionArrays { - - const collisionArrays = {}; + _deserializeCollisionBoxesForSymbol( + collisionBoxArray: CollisionBoxArray, + textStartIndex: number, + textEndIndex: number, + verticalTextStartIndex: number, + verticalTextEndIndex: number, + iconStartIndex: number, + iconEndIndex: number, + verticalIconStartIndex: number, + verticalIconEndIndex: number + ): CollisionArrays { + + const collisionArrays = {} as CollisionArrays; for (let k = textStartIndex; k < textEndIndex; k++) { - const box: CollisionBox = (collisionBoxArray.get(k): any); + const box: CollisionBox = collisionBoxArray.get(k); collisionArrays.textBox = {x1: box.x1, y1: box.y1, x2: box.x2, y2: box.y2, anchorPointX: box.anchorPointX, anchorPointY: box.anchorPointY}; collisionArrays.textFeatureIndex = box.featureIndex; break; // Only one box allowed per instance } for (let k = verticalTextStartIndex; k < verticalTextEndIndex; k++) { - const box: CollisionBox = (collisionBoxArray.get(k): any); + const box: CollisionBox = collisionBoxArray.get(k); collisionArrays.verticalTextBox = {x1: box.x1, y1: box.y1, x2: box.x2, y2: box.y2, anchorPointX: box.anchorPointX, anchorPointY: box.anchorPointY}; collisionArrays.verticalTextFeatureIndex = box.featureIndex; break; // Only one box allowed per instance } for (let k = iconStartIndex; k < iconEndIndex; k++) { // An icon can only have one box now, so this indexing is a bit vestigial... - const box: CollisionBox = (collisionBoxArray.get(k): any); + const box: CollisionBox = collisionBoxArray.get(k); collisionArrays.iconBox = {x1: box.x1, y1: box.y1, x2: box.x2, y2: box.y2, anchorPointX: box.anchorPointX, anchorPointY: box.anchorPointY}; collisionArrays.iconFeatureIndex = box.featureIndex; break; // Only one box allowed per instance } for (let k = verticalIconStartIndex; k < verticalIconEndIndex; k++) { // An icon can only have one box now, so this indexing is a bit vestigial... - const box: CollisionBox = (collisionBoxArray.get(k): any); + const box: CollisionBox = collisionBoxArray.get(k); collisionArrays.verticalIconBox = {x1: box.x1, y1: box.y1, x2: box.x2, y2: box.y2, anchorPointX: box.anchorPointX, anchorPointY: box.anchorPointY}; collisionArrays.verticalIconFeatureIndex = box.featureIndex; break; // Only one box allowed per instance diff --git a/src/data/dem_data.js b/src/data/dem_data.ts similarity index 91% rename from src/data/dem_data.js rename to src/data/dem_data.ts index fcbf98ad83..a14a601bea 100644 --- a/src/data/dem_data.js +++ b/src/data/dem_data.ts @@ -1,4 +1,3 @@ -// @flow import {RGBAImage} from '../util/image'; import {warnOnce} from '../util/util'; @@ -19,16 +18,17 @@ export default class DEMData { data: Uint32Array; stride: number; dim: number; - encoding: "mapbox" | "terrarium"; + encoding: 'mapbox' | 'terrarium'; // RGBAImage data has uniform 1px padding on all sides: square tile edge size defines stride // and dim is calculated as stride - 2. - constructor(uid: string, data: RGBAImage, encoding: "mapbox" | "terrarium") { + constructor(uid: string, data: RGBAImage, encoding: 'mapbox' | 'terrarium') { this.uid = uid; if (data.height !== data.width) throw new RangeError('DEM tiles must be square'); - if (encoding && encoding !== "mapbox" && encoding !== "terrarium") return warnOnce( - `"${encoding}" is not a valid encoding type. Valid types include "mapbox" and "terrarium".` - ); + if (encoding && encoding !== 'mapbox' && encoding !== 'terrarium') { + warnOnce(`"${encoding}" is not a valid encoding type. Valid types include "mapbox" and "terrarium".`); + return; + } this.stride = data.height; const dim = this.dim = data.height - 2; this.data = new Uint32Array(data.data.buffer); @@ -57,12 +57,12 @@ export default class DEMData { get(x: number, y: number) { const pixels = new Uint8Array(this.data.buffer); const index = this._idx(x, y) * 4; - const unpack = this.encoding === "terrarium" ? this._unpackTerrarium : this._unpackMapbox; + const unpack = this.encoding === 'terrarium' ? this._unpackTerrarium : this._unpackMapbox; return unpack(pixels[index], pixels[index + 1], pixels[index + 2]); } getUnpackVector() { - return this.encoding === "terrarium" ? [256.0, 1.0, 1.0 / 256.0, 32768.0] : [6553.6, 25.6, 0.1, 10000.0]; + return this.encoding === 'terrarium' ? [256.0, 1.0, 1.0 / 256.0, 32768.0] : [6553.6, 25.6, 0.1, 10000.0]; } _idx(x: number, y: number) { diff --git a/src/data/evaluation_feature.js b/src/data/evaluation_feature.ts similarity index 60% rename from src/data/evaluation_feature.js rename to src/data/evaluation_feature.ts index 2f7b08ea8c..1acfbceca7 100644 --- a/src/data/evaluation_feature.js +++ b/src/data/evaluation_feature.ts @@ -1,13 +1,18 @@ -// @flow - import loadGeometry from './load_geometry'; +import type Point from '../util/point'; type EvaluationFeature = { - +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon', - +id?: any, - +properties: {[_: string]: any}, - +patterns?: {[_: string]: {"min": string, "mid": string, "max": string}}, - geometry: Array> + readonly type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon'; + readonly id?: any; + readonly properties: {[_: string]: any}; + readonly patterns?: { + [_: string]: { + 'min': string; + 'mid': string; + 'max': string; + }; + }; + geometry: Array>; }; /** diff --git a/src/data/extent.js b/src/data/extent.ts similarity index 98% rename from src/data/extent.js rename to src/data/extent.ts index cff39b9981..7327e449dc 100644 --- a/src/data/extent.js +++ b/src/data/extent.ts @@ -1,5 +1,3 @@ -// @flow - /** * The maximum value of a coordinate in the internal tile coordinate system. Coordinates of * all source features normalized to this extent upon load. diff --git a/src/data/feature_index.js b/src/data/feature_index.ts similarity index 86% rename from src/data/feature_index.js rename to src/data/feature_index.ts index 739b3f966d..80bd4c8a5b 100644 --- a/src/data/feature_index.js +++ b/src/data/feature_index.ts @@ -1,7 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; - +import Point from '../util/point'; import loadGeometry from './load_geometry'; import toEvaluationFeature from './evaluation_feature'; import EXTENT from './extent'; @@ -18,28 +15,29 @@ import EvaluationParameters from '../style/evaluation_parameters'; import SourceFeatureState from '../source/source_state'; import {polygonIntersectsBox} from '../util/intersection_tests'; import {PossiblyEvaluated} from '../style/properties'; +import {FeatureIndexArray} from './array_types'; +import {mat4} from 'gl-matrix'; import type StyleLayer from '../style/style_layer'; import type {FeatureFilter} from '../style-spec/feature_filter'; import type Transform from '../geo/transform'; import type {FilterSpecification, PromoteIdSpecification} from '../style-spec/types'; - -import {FeatureIndexArray} from './array_types'; +import type {FeatureState} from '../style-spec/expression'; type QueryParameters = { - scale: number, - pixelPosMatrix: Float32Array, - transform: Transform, - tileSize: number, - queryGeometry: Array, - cameraQueryGeometry: Array, - queryPadding: number, - params: { - filter: FilterSpecification, - layers: Array, - availableImages: Array - } -} + scale: number; + pixelPosMatrix: mat4; + transform: Transform; + tileSize: number; + queryGeometry: Array; + cameraQueryGeometry: Array; + queryPadding: number; + params: { + filter: FilterSpecification; + layers: Array; + availableImages: Array; + }; +}; class FeatureIndex { tileID: OverscaledTileID; @@ -49,7 +47,7 @@ class FeatureIndex { grid: Grid; grid3D: Grid; featureIndexArray: FeatureIndexArray; - promoteId: ?PromoteIdSpecification; + promoteId?: PromoteIdSpecification; rawTileData: ArrayBuffer; bucketLayerIDs: Array>; @@ -57,7 +55,7 @@ class FeatureIndex { vtLayers: {[_: string]: VectorTileLayer}; sourceLayerCoder: DictionaryCoder; - constructor(tileID: OverscaledTileID, promoteId?: ?PromoteIdSpecification) { + constructor(tileID: OverscaledTileID, promoteId?: PromoteIdSpecification | null) { this.tileID = tileID; this.x = tileID.canonical.x; this.y = tileID.canonical.y; @@ -104,10 +102,15 @@ class FeatureIndex { } // Finds non-symbol features in this tile at a particular position. - query(args: QueryParameters, styleLayers: {[_: string]: StyleLayer}, serializedLayers: {[_: string]: Object}, sourceFeatureState: SourceFeatureState): {[_: string]: Array<{ featureIndex: number, feature: GeoJSONFeature }>} { + query( + args: QueryParameters, + styleLayers: {[_: string]: StyleLayer}, + serializedLayers: {[_: string]: any}, + sourceFeatureState: SourceFeatureState + ): {[_: string]: Array<{featureIndex: number; feature: GeoJSONFeature}>} { this.loadVTLayers(); - const params = args.params || {}, + const params = args.params || {} as { filter: any; layers: string[]; availableImages: string[] }, pixelsToTileUnits = EXTENT / args.tileSize / args.scale, filter = featureFilter(params.filter); @@ -152,7 +155,7 @@ class FeatureIndex { styleLayers, serializedLayers, sourceFeatureState, - (feature: VectorTileFeature, styleLayer: StyleLayer, featureState: Object) => { + (feature: VectorTileFeature, styleLayer: StyleLayer, featureState: FeatureState) => { // eslint-disable-line no-loop-func if (!featureGeometry) { featureGeometry = loadGeometry(feature); } @@ -166,7 +169,13 @@ class FeatureIndex { } loadMatchingFeature( - result: {[_: string]: Array<{ featureIndex: number, feature: GeoJSONFeature }>}, + result: { + [_: string]: Array<{ + featureIndex: number; + feature: GeoJSONFeature; + intersectionZ?: boolean | number; + }>; + }, bucketIndex: number, sourceLayerIndex: number, featureIndex: number, @@ -174,9 +183,14 @@ class FeatureIndex { filterLayerIDs: Array, availableImages: Array, styleLayers: {[_: string]: StyleLayer}, - serializedLayers: {[_: string]: Object}, + serializedLayers: {[_: string]: any}, sourceFeatureState?: SourceFeatureState, - intersectionTest?: (feature: VectorTileFeature, styleLayer: StyleLayer, featureState: Object, id: string | number | void) => boolean | number) { + intersectionTest?: ( + feature: VectorTileFeature, + styleLayer: StyleLayer, + featureState: any, + id: string | number | void + ) => boolean | number) { const layerIDs = this.bucketLayerIDs[bucketIndex]; if (filterLayerIDs && !arraysIntersect(filterLayerIDs, layerIDs)) @@ -209,7 +223,7 @@ class FeatureIndex { if (!styleLayer) continue; let featureState = {}; - if (id !== undefined && sourceFeatureState) { + if (id && sourceFeatureState) { // `feature-state` expression evaluation requires feature state to be available featureState = sourceFeatureState.getState(styleLayer.sourceLayer || '_geojsonTileLayer', id); } @@ -226,7 +240,7 @@ class FeatureIndex { } const geojsonFeature = new GeoJSONFeature(feature, this.z, this.x, this.y, id); - (geojsonFeature: any).layer = serializedLayer; + (geojsonFeature as any).layer = serializedLayer; let layerResult = result[layerID]; if (layerResult === undefined) { layerResult = result[layerID] = []; @@ -238,7 +252,7 @@ class FeatureIndex { // Given a set of symbol indexes that have already been looked up, // return a matching set of GeoJSONFeatures lookupSymbolFeatures(symbolFeatureIndexes: Array, - serializedLayers: {[string]: StyleLayer}, + serializedLayers: {[_: string]: StyleLayer}, bucketIndex: number, sourceLayerIndex: number, filterSpec: FilterSpecification, @@ -278,11 +292,11 @@ class FeatureIndex { } getId(feature: VectorTileFeature, sourceLayerId: string): string | number | void { - let id = feature.id; + let id: string | number | boolean = feature.id; if (this.promoteId) { const propName = typeof this.promoteId === 'string' ? this.promoteId : this.promoteId[sourceLayerId]; id = feature.properties[propName]; - if (typeof id === 'boolean') id = Number(id); + if (typeof id === 'boolean') id = Number(id); } return id; } diff --git a/src/data/feature_position_map.js b/src/data/feature_position_map.ts similarity index 87% rename from src/data/feature_position_map.js rename to src/data/feature_position_map.ts index 15137377a3..c21a9e01e0 100644 --- a/src/data/feature_position_map.js +++ b/src/data/feature_position_map.ts @@ -1,18 +1,16 @@ -// @flow - import murmur3 from 'murmurhash-js'; import {register} from '../util/web_worker_transfer'; import assert from 'assert'; type SerializedFeaturePositionMap = { - ids: Float64Array; - positions: Uint32Array; + ids: Float64Array; + positions: Uint32Array; }; type FeaturePosition = { - index: number; - start: number; - end: number; + index: number; + start: number; + end: number; }; // A transferable data structure that maps feature ids to their indices and buffer offsets @@ -27,12 +25,12 @@ export default class FeaturePositionMap { this.indexed = false; } - add(id: mixed, index: number, start: number, end: number) { + add(id: unknown, index: number, start: number, end: number) { this.ids.push(getNumericId(id)); this.positions.push(index, start, end); } - getPositions(id: mixed): Array { + getPositions(id: unknown): Array { assert(this.indexed); const intId = getNumericId(id); @@ -77,18 +75,16 @@ export default class FeaturePositionMap { const map = new FeaturePositionMap(); // after transferring, we only use these arrays statically (no pushes), // so TypedArray vs Array distinction that flow points out doesn't matter - map.ids = (obj.ids: any); - map.positions = (obj.positions: any); + map.ids = (obj.ids as any); + map.positions = (obj.positions as any); map.indexed = true; return map; } } -const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; - -function getNumericId(value: mixed) { +function getNumericId(value: unknown) { const numValue = +value; - if (!isNaN(numValue) && numValue <= MAX_SAFE_INTEGER) { + if (!isNaN(numValue) && numValue <= Number.MAX_SAFE_INTEGER) { return numValue; } return murmur3(String(value)); diff --git a/src/data/index_array_type.js b/src/data/index_array_type.ts similarity index 77% rename from src/data/index_array_type.js rename to src/data/index_array_type.ts index 98db8a86b1..544195c1d3 100644 --- a/src/data/index_array_type.js +++ b/src/data/index_array_type.ts @@ -1,10 +1,4 @@ -// @flow - -import { - LineIndexArray, - TriangleIndexArray, - LineStripIndexArray -} from './array_types'; +import {LineIndexArray, TriangleIndexArray, LineStripIndexArray} from './array_types'; /** * An index array stores Uint16 indices of vertexes in a corresponding vertex array. We use diff --git a/src/data/load_geometry.js b/src/data/load_geometry.ts similarity index 96% rename from src/data/load_geometry.js rename to src/data/load_geometry.ts index c8885c57bd..953472496a 100644 --- a/src/data/load_geometry.js +++ b/src/data/load_geometry.ts @@ -1,10 +1,8 @@ -// @flow - import {warnOnce, clamp} from '../util/util'; import EXTENT from './extent'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../util/point'; // These bounds define the minimum and maximum supported coordinate values. // While visible coordinates are within [0, EXTENT], tiles may theoretically diff --git a/src/data/pos_attributes.js b/src/data/pos_attributes.ts similarity index 93% rename from src/data/pos_attributes.js rename to src/data/pos_attributes.ts index 7306b3925d..37d3cbb514 100644 --- a/src/data/pos_attributes.js +++ b/src/data/pos_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../util/struct_array'; export default createLayout([ diff --git a/src/data/program_configuration.js b/src/data/program_configuration.ts similarity index 87% rename from src/data/program_configuration.js rename to src/data/program_configuration.ts index 0ea6ee9389..d7fc9c4a3b 100644 --- a/src/data/program_configuration.js +++ b/src/data/program_configuration.ts @@ -1,5 +1,3 @@ -// @flow - import {packUint8ToFloat} from '../shaders/encode_attribute'; import Color from '../style-spec/util/color'; import {supportsPropertyExpression} from '../style-spec/util/properties'; @@ -10,13 +8,9 @@ import {clamp} from '../util/util'; import patternAttributes from './bucket/pattern_attributes'; import EvaluationParameters from '../style/evaluation_parameters'; import FeaturePositionMap from './feature_position_map'; -import { - Uniform, - Uniform1f, - UniformColor, - Uniform4f, - type UniformLocations -} from '../render/uniform_binding'; +import {Uniform, Uniform1f, UniformColor, Uniform4f} from '../render/uniform_binding'; + +import type {UniformLocations} from '../render/uniform_binding'; import type {CanonicalTileID} from '../source/tile_id'; import type Context from '../gl/context'; @@ -32,14 +26,13 @@ import type { SourceExpression, CompositeExpression } from '../style-spec/expression'; -import type {PossiblyEvaluated} from '../style/properties'; import type {FeatureStates} from '../source/source_state'; import type {FormattedSection} from '../style-spec/expression/types/formatted'; export type BinderUniform = { - name: string, - property: string, - binding: Uniform + name: string; + property: string; + binding: Uniform; }; function packColor(color: Color): [number, number] { @@ -78,34 +71,55 @@ function packColor(color: Color): [number, number] { */ interface AttributeBinder { - populatePaintArray(length: number, feature: Feature, imagePositions: {[_: string]: ImagePosition}, canonical?: CanonicalTileID, formattedSection?: FormattedSection): void; - updatePaintArray(start: number, length: number, feature: Feature, featureState: FeatureState, imagePositions: {[_: string]: ImagePosition}): void; - upload(Context): void; - destroy(): void; + populatePaintArray( + length: number, + feature: Feature, + imagePositions: {[_: string]: ImagePosition}, + canonical?: CanonicalTileID, + formattedSection?: FormattedSection + ): void; + updatePaintArray( + start: number, + length: number, + feature: Feature, + featureState: FeatureState, + imagePositions: {[_: string]: ImagePosition} + ): void; + upload(a: Context): void; + destroy(): void; } interface UniformBinder { - uniformNames: Array; - setUniform(uniform: Uniform<*>, globals: GlobalProperties, currentValue: PossiblyEvaluatedPropertyValue<*>, uniformName: string): void; - getBinding(context: Context, location: WebGLUniformLocation, name: string): $Shape>; + uniformNames: Array; + setUniform( + uniform: Uniform, + globals: GlobalProperties, + currentValue: PossiblyEvaluatedPropertyValue, + uniformName: string + ): void; + getBinding(context: Context, location: WebGLUniformLocation, name: string): Partial>; } class ConstantBinder implements UniformBinder { - value: mixed; + value: unknown; type: string; uniformNames: Array; - constructor(value: mixed, names: Array, type: string) { + constructor(value: unknown, names: Array, type: string) { this.value = value; this.uniformNames = names.map(name => `u_${name}`); this.type = type; } - setUniform(uniform: Uniform<*>, globals: GlobalProperties, currentValue: PossiblyEvaluatedPropertyValue): void { + setUniform( + uniform: Uniform, + globals: GlobalProperties, + currentValue: PossiblyEvaluatedPropertyValue + ): void { uniform.set(currentValue.constantOr(this.value)); } - getBinding(context: Context, location: WebGLUniformLocation, _: string): $Shape> { + getBinding(context: Context, location: WebGLUniformLocation, _: string): Partial> { return (this.type === 'color') ? new UniformColor(context, location) : new Uniform1f(context, location); @@ -114,12 +128,12 @@ class ConstantBinder implements UniformBinder { class CrossFadedConstantBinder implements UniformBinder { uniformNames: Array; - patternFrom: ?Array; - patternTo: ?Array; + patternFrom: Array | undefined | null; + patternTo: Array | undefined | null; pixelRatioFrom: number; pixelRatioTo: number; - constructor(value: mixed, names: Array) { + constructor(value: unknown, names: Array) { this.uniformNames = names.map(name => `u_${name}`); this.patternFrom = null; this.patternTo = null; @@ -134,7 +148,7 @@ class CrossFadedConstantBinder implements UniformBinder { this.patternTo = posTo.tlbr; } - setUniform(uniform: Uniform<*>, globals: GlobalProperties, currentValue: PossiblyEvaluatedPropertyValue, uniformName: string) { + setUniform(uniform: Uniform, globals: GlobalProperties, currentValue: PossiblyEvaluatedPropertyValue, uniformName: string) { const pos = uniformName === 'u_pattern_to' ? this.patternTo : uniformName === 'u_pattern_from' ? this.patternFrom : @@ -143,7 +157,7 @@ class CrossFadedConstantBinder implements UniformBinder { if (pos) uniform.set(pos); } - getBinding(context: Context, location: WebGLUniformLocation, name: string): $Shape> { + getBinding(context: Context, location: WebGLUniformLocation, name: string): Partial> { return name.substr(0, 9) === 'u_pattern' ? new Uniform4f(context, location) : new Uniform1f(context, location); @@ -157,9 +171,11 @@ class SourceExpressionBinder implements AttributeBinder { paintVertexArray: StructArray; paintVertexAttributes: Array; - paintVertexBuffer: ?VertexBuffer; + paintVertexBuffer: VertexBuffer | undefined | null; - constructor(expression: SourceExpression, names: Array, type: string, PaintVertexArray: Class) { + constructor(expression: SourceExpression, names: Array, type: string, PaintVertexArray: { + new (...args: any): StructArray; + }) { this.expression = expression; this.type = type; this.maxValue = 0; @@ -225,9 +241,11 @@ class CompositeExpressionBinder implements AttributeBinder, UniformBinder { paintVertexArray: StructArray; paintVertexAttributes: Array; - paintVertexBuffer: ?VertexBuffer; + paintVertexBuffer: VertexBuffer | undefined | null; - constructor(expression: CompositeExpression, names: Array, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: Class) { + constructor(expression: CompositeExpression, names: Array, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: { + new (...args: any): StructArray; + }) { this.expression = expression; this.uniformNames = names.map(name => `u_${name}_t`); this.type = type; @@ -288,7 +306,7 @@ class CompositeExpressionBinder implements AttributeBinder, UniformBinder { } } - setUniform(uniform: Uniform<*>, globals: GlobalProperties): void { + setUniform(uniform: Uniform, globals: GlobalProperties): void { const currentZoom = this.useIntegerZoom ? Math.floor(globals.zoom) : globals.zoom; const factor = clamp(this.expression.interpolationFactor(currentZoom, this.zoom, this.zoom + 1), 0, 1); uniform.set(factor); @@ -308,11 +326,13 @@ class CrossFadedCompositeBinder implements AttributeBinder { zoomInPaintVertexArray: StructArray; zoomOutPaintVertexArray: StructArray; - zoomInPaintVertexBuffer: ?VertexBuffer; - zoomOutPaintVertexBuffer: ?VertexBuffer; + zoomInPaintVertexBuffer: VertexBuffer | undefined | null; + zoomOutPaintVertexBuffer: VertexBuffer | undefined | null; paintVertexAttributes: Array; - constructor(expression: CompositeExpression, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: Class, layerId: string) { + constructor(expression: CompositeExpression, type: string, useIntegerZoom: boolean, zoom: number, PaintVertexArray: { + new (...args: any): StructArray; + }, layerId: string) { this.expression = expression; this.type = type; this.useIntegerZoom = useIntegerZoom; @@ -396,7 +416,7 @@ class CrossFadedCompositeBinder implements AttributeBinder { * @private */ export default class ProgramConfiguration { - binders: {[_: string]: (AttributeBinder | UniformBinder) }; + binders: {[_: string]: AttributeBinder | UniformBinder}; cacheKey: string; _buffers: Array; @@ -409,14 +429,14 @@ export default class ProgramConfiguration { for (const property in layer.paint._values) { if (!filterProperties(property)) continue; - const value = layer.paint.get(property); + const value = (layer.paint as any).get(property); if (!(value instanceof PossiblyEvaluatedPropertyValue) || !supportsPropertyExpression(value.property.specification)) { continue; } const names = paintAttributeNames(property, layer.type); const expression = value.value; const type = value.property.specification.type; - const useIntegerZoom = value.property.useIntegerZoom; + const useIntegerZoom = (value.property as any).useIntegerZoom; const propType = value.property.specification['property-type']; const isCrossFaded = propType === 'cross-faded' || propType === 'cross-faded-data-driven'; @@ -429,8 +449,8 @@ export default class ProgramConfiguration { } else if (expression.kind === 'source' || isCrossFaded) { const StructArrayLayout = layoutType(property, type, 'source'); this.binders[property] = isCrossFaded ? - new CrossFadedCompositeBinder(expression, type, useIntegerZoom, zoom, StructArrayLayout, layer.id) : - new SourceExpressionBinder(expression, names, type, StructArrayLayout); + new CrossFadedCompositeBinder(expression as CompositeExpression, type, useIntegerZoom, zoom, StructArrayLayout, layer.id) : + new SourceExpressionBinder(expression as SourceExpression, names, type, StructArrayLayout); keys.push(`/a_${property}`); } else { @@ -452,7 +472,7 @@ export default class ProgramConfiguration { for (const property in this.binders) { const binder = this.binders[property]; if (binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder || binder instanceof CrossFadedCompositeBinder) - (binder: AttributeBinder).populatePaintArray(newLength, feature, imagePositions, canonical, formattedSection); + (binder as AttributeBinder).populatePaintArray(newLength, feature, imagePositions, canonical, formattedSection); } } setConstantPatternPositions(posTo: ImagePosition, posFrom: ImagePosition) { @@ -463,7 +483,13 @@ export default class ProgramConfiguration { } } - updatePaintArrays(featureStates: FeatureStates, featureMap: FeaturePositionMap, vtLayer: VectorTileLayer, layer: TypedStyleLayer, imagePositions: {[_: string]: ImagePosition}): boolean { + updatePaintArrays( + featureStates: FeatureStates, + featureMap: FeaturePositionMap, + vtLayer: VectorTileLayer, + layer: TypedStyleLayer, + imagePositions: {[_: string]: ImagePosition} + ): boolean { let dirty: boolean = false; for (const id in featureStates) { const positions = featureMap.getPositions(id); @@ -474,11 +500,11 @@ export default class ProgramConfiguration { for (const property in this.binders) { const binder = this.binders[property]; if ((binder instanceof SourceExpressionBinder || binder instanceof CompositeExpressionBinder || - binder instanceof CrossFadedCompositeBinder) && (binder: any).expression.isStateDependent === true) { + binder instanceof CrossFadedCompositeBinder) && (binder as any).expression.isStateDependent === true) { //AHM: Remove after https://github.com/mapbox/mapbox-gl-js/issues/6255 - const value = layer.paint.get(property); - (binder: any).expression = value.value; - (binder: AttributeBinder).updatePaintArray(pos.start, pos.end, feature, featureStates[id], imagePositions); + const value = (layer.paint as any).get(property); + (binder as any).expression = value.value; + (binder as AttributeBinder).updatePaintArray(pos.start, pos.end, feature, featureStates[id], imagePositions); dirty = true; } } @@ -548,11 +574,16 @@ export default class ProgramConfiguration { return uniforms; } - setUniforms(context: Context, binderUniforms: Array, properties: PossiblyEvaluated, globals: GlobalProperties) { + setUniforms( + context: Context, + binderUniforms: Array, + properties: any, + globals: GlobalProperties + ) { // Uniform state bindings are owned by the Program, but we set them // from within the ProgramConfiguraton's binder members. for (const {name, property, binding} of binderUniforms) { - (this.binders[property]: any).setUniform(binding, globals, properties.get(property), name); + (this.binders[property] as any).setUniform(binding, globals, properties.get(property), name); } } @@ -589,13 +620,13 @@ export default class ProgramConfiguration { } } -export class ProgramConfigurationSet { +export class ProgramConfigurationSet { programConfigurations: {[_: string]: ProgramConfiguration}; needsUpload: boolean; _featureMap: FeaturePositionMap; _bufferOffset: number; - constructor(layers: $ReadOnlyArray, zoom: number, filterProperties: (_: string) => boolean = () => true) { + constructor(layers: ReadonlyArray, zoom: number, filterProperties: (_: string) => boolean = () => true) { this.programConfigurations = {}; for (const layer of layers) { this.programConfigurations[layer.id] = new ProgramConfiguration(layer, zoom, filterProperties); @@ -618,7 +649,7 @@ export class ProgramConfigurationSet { this.needsUpload = true; } - updatePaintArrays(featureStates: FeatureStates, vtLayer: VectorTileLayer, layers: $ReadOnlyArray, imagePositions: {[_: string]: ImagePosition}) { + updatePaintArrays(featureStates: FeatureStates, vtLayer: VectorTileLayer, layers: ReadonlyArray, imagePositions: {[_: string]: ImagePosition}) { for (const layer of layers) { this.needsUpload = this.programConfigurations[layer.id].updatePaintArrays(featureStates, this._featureMap, vtLayer, layer, imagePositions) || this.needsUpload; } diff --git a/src/data/raster_bounds_attributes.js b/src/data/raster_bounds_attributes.ts similarity index 95% rename from src/data/raster_bounds_attributes.js rename to src/data/raster_bounds_attributes.ts index 6d13fe538b..6ff07123d3 100644 --- a/src/data/raster_bounds_attributes.js +++ b/src/data/raster_bounds_attributes.ts @@ -1,4 +1,3 @@ -// @flow import {createLayout} from '../util/struct_array'; export default createLayout([ diff --git a/src/data/segment.js b/src/data/segment.ts similarity index 76% rename from src/data/segment.js rename to src/data/segment.ts index 3e4a582c0c..301b894c3d 100644 --- a/src/data/segment.js +++ b/src/data/segment.ts @@ -1,5 +1,3 @@ -// @flow - import {warnOnce} from '../util/util'; import {register} from '../util/web_worker_transfer'; @@ -8,23 +6,28 @@ import type VertexArrayObject from '../render/vertex_array_object'; import type {StructArray} from '../util/struct_array'; export type Segment = { - sortKey: number | void, - vertexOffset: number, - primitiveOffset: number, - vertexLength: number, - primitiveLength: number, - vaos: {[_: string]: VertexArrayObject} -} + sortKey?: number; + vertexOffset: number; + primitiveOffset: number; + vertexLength: number; + primitiveLength: number; + vaos: {[_: string]: VertexArrayObject}; +}; class SegmentVector { static MAX_VERTEX_ARRAY_LENGTH: number; segments: Array; - constructor(segments?: Array = []) { + constructor(segments: Array = []) { this.segments = segments; } - prepareSegment(numVertices: number, layoutVertexArray: StructArray, indexArray: StructArray, sortKey?: number): Segment { + prepareSegment( + numVertices: number, + layoutVertexArray: StructArray, + indexArray: StructArray, + sortKey?: number + ): Segment { let segment: Segment = this.segments[this.segments.length - 1]; if (numVertices > SegmentVector.MAX_VERTEX_ARRAY_LENGTH) warnOnce(`Max vertices per segment is ${SegmentVector.MAX_VERTEX_ARRAY_LENGTH}: bucket requested ${numVertices}`); if (!segment || segment.vertexLength + numVertices > SegmentVector.MAX_VERTEX_ARRAY_LENGTH || segment.sortKey !== sortKey) { @@ -33,7 +36,7 @@ class SegmentVector { primitiveOffset: indexArray.length, vertexLength: 0, primitiveLength: 0 - }: any); + } as any); if (sortKey !== undefined) segment.sortKey = sortKey; this.segments.push(segment); } @@ -52,7 +55,12 @@ class SegmentVector { } } - static simpleSegment(vertexOffset: number, primitiveOffset: number, vertexLength: number, primitiveLength: number): SegmentVector { + static simpleSegment( + vertexOffset: number, + primitiveOffset: number, + vertexLength: number, + primitiveLength: number + ): SegmentVector { return new SegmentVector([{ vertexOffset, primitiveOffset, diff --git a/src/geo/edge_insets.js b/src/geo/edge_insets.ts similarity index 91% rename from src/geo/edge_insets.js rename to src/geo/edge_insets.ts index afb293678d..127416b84b 100644 --- a/src/geo/edge_insets.js +++ b/src/geo/edge_insets.ts @@ -1,7 +1,6 @@ -// @flow -import {number} from "../style-spec/util/interpolate"; -import Point from "@mapbox/point-geometry"; -import {clamp} from "../util/util"; +import {number} from '../style-spec/util/interpolate'; +import Point from '../util/point'; +import {clamp} from '../util/util'; /** * An `EdgeInset` object represents screen space padding applied to the edges of the viewport. @@ -97,6 +96,11 @@ class EdgeInsets { } } -export type PaddingOptions = {top: ?number, bottom: ?number, right: ?number, left: ?number}; +export type PaddingOptions = { + top: number | undefined | null; + bottom: number | undefined | null; + right: number | undefined | null; + left: number | undefined | null; +}; export default EdgeInsets; diff --git a/src/geo/lng_lat.js b/src/geo/lng_lat.ts similarity index 94% rename from src/geo/lng_lat.js rename to src/geo/lng_lat.ts index 961bf90ae2..9ad6de6cd5 100644 --- a/src/geo/lng_lat.js +++ b/src/geo/lng_lat.ts @@ -1,5 +1,3 @@ -// @flow - import {wrap} from '../util/util'; import LngLatBounds from './lng_lat_bounds'; @@ -112,7 +110,7 @@ class LngLat { * var ll = new maplibregl.LngLat(-73.9749, 40.7736); * ll.toBounds(100).toArray(); // = [[-73.97501862141328, 40.77351016847229], [-73.97478137858673, 40.77368983152771]] */ - toBounds(radius?: number = 0) { + toBounds(radius: number = 0) { const earthCircumferenceInMetersAtEquator = 40075017; const latAccuracy = 360 * radius / earthCircumferenceInMetersAtEquator, lngAccuracy = latAccuracy / Math.cos((Math.PI / 180) * this.lat); @@ -144,11 +142,11 @@ class LngLat { if (!Array.isArray(input) && typeof input === 'object' && input !== null) { return new LngLat( // flow can't refine this to have one of lng or lat, so we have to cast to any - Number('lng' in input ? (input: any).lng : (input: any).lon), + Number('lng' in input ? (input as any).lng : (input as any).lon), Number(input.lat) ); } - throw new Error("`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]"); + throw new Error('`LngLatLike` argument must be specified as a LngLat instance, an object {lng: , lat: }, an object {lon: , lat: }, or an array of [, ]'); } } @@ -162,6 +160,12 @@ class LngLat { * var v2 = [-122.420679, 37.772537]; * var v3 = {lon: -122.420679, lat: 37.772537}; */ -export type LngLatLike = LngLat | {lng: number, lat: number} | {lon: number, lat: number} | [number, number]; +export type LngLatLike = LngLat | { + lng: number; + lat: number; +} | { + lon: number; + lat: number; +} | [number, number]; export default LngLat; diff --git a/src/geo/lng_lat_bounds.js b/src/geo/lng_lat_bounds.ts similarity index 96% rename from src/geo/lng_lat_bounds.js rename to src/geo/lng_lat_bounds.ts index 9e167de374..22bd3d6323 100644 --- a/src/geo/lng_lat_bounds.js +++ b/src/geo/lng_lat_bounds.ts @@ -1,5 +1,3 @@ -// @flow - import LngLat from './lng_lat'; import type {LngLatLike} from './lng_lat'; @@ -26,7 +24,7 @@ class LngLatBounds { _sw: LngLat; // This constructor is too flexible to type. It should not be so flexible. - constructor(sw: any, ne: any) { + constructor(sw?: any, ne?: any) { if (!sw) { // noop } else if (ne) { @@ -83,11 +81,11 @@ class LngLatBounds { } else { if (Array.isArray(obj)) { - if (obj.length === 4 || obj.every(Array.isArray)) { - const lngLatBoundsObj = ((obj: any): LngLatBoundsLike); + if (obj.length === 4 || (obj as any[]).every(Array.isArray)) { + const lngLatBoundsObj = (obj as any as LngLatBoundsLike); return this.extend(LngLatBounds.convert(lngLatBoundsObj)); } else { - const lngLatObj = ((obj: any): LngLatLike); + const lngLatObj = (obj as any as LngLatLike); return this.extend(LngLat.convert(lngLatObj)); } } @@ -253,7 +251,8 @@ class LngLatBounds { * llb; // = LngLatBounds {_sw: LngLat {lng: -73.9876, lat: 40.7661}, _ne: LngLat {lng: -73.9397, lat: 40.8002}} */ static convert(input: LngLatBoundsLike): LngLatBounds { - if (!input || input instanceof LngLatBounds) return input; + if (input instanceof LngLatBounds) return input; + if (!input) return input as null; return new LngLatBounds(input); } } diff --git a/src/geo/mercator_coordinate.js b/src/geo/mercator_coordinate.ts similarity index 99% rename from src/geo/mercator_coordinate.js rename to src/geo/mercator_coordinate.ts index 49e6be6798..b3ff44612e 100644 --- a/src/geo/mercator_coordinate.js +++ b/src/geo/mercator_coordinate.ts @@ -1,5 +1,3 @@ -// @flow - import LngLat, {earthRadius} from '../geo/lng_lat'; import type {LngLatLike} from '../geo/lng_lat'; diff --git a/src/geo/transform.js b/src/geo/transform.ts similarity index 93% rename from src/geo/transform.js rename to src/geo/transform.ts index 35c0d8ef64..425de2c4e5 100644 --- a/src/geo/transform.js +++ b/src/geo/transform.ts @@ -1,14 +1,12 @@ -// @flow - import LngLat from './lng_lat'; import LngLatBounds from './lng_lat_bounds'; import MercatorCoordinate, {mercatorXfromLng, mercatorYfromLat, mercatorZfromAltitude} from './mercator_coordinate'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import {wrap, clamp} from '../util/util'; import {number as interpolate} from '../style-spec/util/interpolate'; import EXTENT from '../data/extent'; -import {vec4, mat4, mat2, vec2} from 'gl-matrix'; -import {Aabb, Frustum} from '../util/primitives.js'; +import {vec4, mat4, mat2, vec2, vec3} from 'gl-matrix'; +import {Aabb, Frustum} from '../util/primitives'; import EdgeInsets from './edge_insets'; import {UnwrappedTileID, OverscaledTileID, CanonicalTileID} from '../source/tile_id'; @@ -22,25 +20,25 @@ import type {PaddingOptions} from './edge_insets'; class Transform { tileSize: number; tileZoom: number; - lngRange: ?[number, number]; - latRange: ?[number, number]; + lngRange: [number, number] | undefined | null; + latRange: [number, number] | undefined | null; maxValidLatitude: number; scale: number; width: number; height: number; angle: number; - rotationMatrix: Float64Array; + rotationMatrix: mat2; zoomFraction: number; pixelsToGLUnits: [number, number]; cameraToCenterDistance: number; - mercatorMatrix: Array; - projMatrix: Float64Array; - invProjMatrix: Float64Array; - alignedProjMatrix: Float64Array; - pixelMatrix: Float64Array; - pixelMatrixInverse: Float64Array; - glCoordMatrix: Float32Array; - labelPlaneMatrix: Float32Array; + mercatorMatrix: mat4; + projMatrix: mat4; + invProjMatrix: mat4; + alignedProjMatrix: mat4; + pixelMatrix: mat4; + pixelMatrixInverse: mat4; + glCoordMatrix: mat4; + labelPlaneMatrix: mat4; _fov: number; _pitch: number; _zoom: number; @@ -53,14 +51,14 @@ class Transform { _center: LngLat; _edgeInsets: EdgeInsets; _constraining: boolean; - _posMatrixCache: {[_: string]: Float32Array}; - _alignedPosMatrixCache: {[_: string]: Float32Array}; + _posMatrixCache: {[_: string]: mat4}; + _alignedPosMatrixCache: {[_: string]: mat4}; - constructor(minZoom: ?number, maxZoom: ?number, minPitch: ?number, maxPitch: ?number, renderWorldCopies: boolean | void) { + constructor(minZoom: number | undefined | null, maxZoom: number | undefined | null, minPitch: number | undefined | null, maxPitch: number | undefined | null, renderWorldCopies: boolean) { this.tileSize = 512; // constant this.maxValidLatitude = 85.051129; // constant - this._renderWorldCopies = renderWorldCopies === undefined ? true : renderWorldCopies; + this._renderWorldCopies = renderWorldCopies === undefined ? true : !!renderWorldCopies; this._minZoom = minZoom || 0; this._maxZoom = maxZoom || 22; @@ -128,7 +126,7 @@ class Transform { } get renderWorldCopies(): boolean { return this._renderWorldCopies; } - set renderWorldCopies(renderWorldCopies?: ?boolean) { + set renderWorldCopies(renderWorldCopies: boolean | undefined | null) { if (renderWorldCopies === undefined) { renderWorldCopies = true; } else if (renderWorldCopies === null) { @@ -263,7 +261,10 @@ class Transform { * @param {boolean} options.roundZoom Target zoom level. If true, the value will be rounded to the closest integer. Otherwise the value will be floored. * @returns {number} zoom level An integer zoom level at which all tiles will be visible. */ - coveringZoomLevel(options: {roundZoom?: boolean, tileSize: number}) { + coveringZoomLevel(options: { + roundZoom?: boolean; + tileSize: number; + }) { const z = (options.roundZoom ? Math.round : Math.floor)( this.zoom + this.scaleZoom(this.tileSize / options.tileSize) ); @@ -314,14 +315,14 @@ class Transform { * @private */ coveringTiles( - options: { - tileSize: number, - minzoom?: number, - maxzoom?: number, - roundZoom?: boolean, - reparseOverscaled?: boolean, - renderWorldCopies?: boolean - } + options: { + tileSize: number; + minzoom?: number; + maxzoom?: number; + roundZoom?: boolean; + reparseOverscaled?: boolean; + renderWorldCopies?: boolean; + } ): Array { let z = this.coveringZoomLevel(options); const actualZ = z; @@ -505,8 +506,8 @@ class Transform { // unproject two points to get a line and then find the point on that // line with z=0 - const coord0 = [p.x, p.y, 0, 1]; - const coord1 = [p.x, p.y, 1, 1]; + const coord0 = [p.x, p.y, 0, 1] as any; + const coord1 = [p.x, p.y, 1, 1] as any; vec4.transformMat4(coord0, coord0, this.pixelMatrixInverse); vec4.transformMat4(coord1, coord1, this.pixelMatrixInverse); @@ -534,7 +535,7 @@ class Transform { * @private */ coordinatePoint(coord: MercatorCoordinate) { - const p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1]; + const p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1] as any; vec4.transformMat4(p, p, this.pixelMatrix); return new Point(p[0] / p[3], p[1] / p[3]); } @@ -583,7 +584,7 @@ class Transform { * @param {UnwrappedTileID} unwrappedTileID; * @private */ - calculatePosMatrix(unwrappedTileID: UnwrappedTileID, aligned: boolean = false): Float32Array { + calculatePosMatrix(unwrappedTileID: UnwrappedTileID, aligned: boolean = false): mat4 { const posMatrixKey = unwrappedTileID.key; const cache = aligned ? this._alignedPosMatrixCache : this._posMatrixCache; if (cache[posMatrixKey]) { @@ -594,17 +595,17 @@ class Transform { const scale = this.worldSize / this.zoomScale(canonical.z); const unwrappedX = canonical.x + Math.pow(2, canonical.z) * unwrappedTileID.wrap; - const posMatrix = mat4.identity(new Float64Array(16)); + const posMatrix = mat4.create(); mat4.translate(posMatrix, posMatrix, [unwrappedX * scale, canonical.y * scale, 0]); mat4.scale(posMatrix, posMatrix, [scale / EXTENT, scale / EXTENT, 1]); mat4.multiply(posMatrix, aligned ? this.alignedProjMatrix : this.projMatrix, posMatrix); - cache[posMatrixKey] = new Float32Array(posMatrix); + cache[posMatrixKey] = mat4.clone(posMatrix); return cache[posMatrixKey]; } - customLayerMatrix(): Array { - return this.mercatorMatrix.slice(); + customLayerMatrix(): mat4 { + return mat4.clone(this.mercatorMatrix); } _constrain() { @@ -708,7 +709,7 @@ class Transform { const nearZ = this.height / 50; // matrix for conversion from location to GL coordinates (-1 .. 1) - let m = new Float64Array(16); + let m = new Float64Array(16) as any; mat4.perspective(m, this._fov, this.width / this.height, nearZ, farZ); //Apply center of perspective offset @@ -723,13 +724,13 @@ class Transform { // The mercatorMatrix can be used to transform points from mercator coordinates // ([0, 0] nw, [1, 1] se) to GL coordinates. - this.mercatorMatrix = mat4.scale([], m, [this.worldSize, this.worldSize, this.worldSize]); + this.mercatorMatrix = mat4.scale(mat4.create(), m, vec3.fromValues(this.worldSize, this.worldSize, this.worldSize)); // scale vertically to meters per pixel (inverse of ground resolution): - mat4.scale(m, m, [1, 1, mercatorZfromAltitude(1, this.center.lat) * this.worldSize, 1]); + mat4.scale(m, m, vec3.fromValues(1, 1, mercatorZfromAltitude(1, this.center.lat) * this.worldSize)); this.projMatrix = m; - this.invProjMatrix = mat4.invert([], this.projMatrix); + this.invProjMatrix = mat4.invert(mat4.create(), this.projMatrix); // Make a second projection matrix that is aligned to a pixel grid for rendering raster tiles. // We're rounding the (floating point) x/y values to achieve to avoid rendering raster images to fractional @@ -741,7 +742,7 @@ class Transform { angleCos = Math.cos(this.angle), angleSin = Math.sin(this.angle), dx = x - Math.round(x) + angleCos * xShift + angleSin * yShift, dy = y - Math.round(y) + angleCos * yShift + angleSin * xShift; - const alignedM = new Float64Array(m); + const alignedM = mat4.clone(m); mat4.translate(alignedM, alignedM, [ dx > 0.5 ? dx - 1 : dx, dy > 0.5 ? dy - 1 : dy, 0 ]); this.alignedProjMatrix = alignedM; @@ -757,11 +758,11 @@ class Transform { this.glCoordMatrix = m; // matrix for conversion from location to screen coordinates - this.pixelMatrix = mat4.multiply(new Float64Array(16), this.labelPlaneMatrix, this.projMatrix); + this.pixelMatrix = mat4.multiply(new Float64Array(16) as any, this.labelPlaneMatrix, this.projMatrix); // inverse matrix for conversion from screen coordinaes to location - m = mat4.invert(new Float64Array(16), this.pixelMatrix); - if (!m) throw new Error("failed to invert matrix"); + m = mat4.invert(new Float64Array(16) as any, this.pixelMatrix); + if (!m) throw new Error('failed to invert matrix'); this.pixelMatrixInverse = m; this._posMatrixCache = {}; @@ -773,7 +774,7 @@ class Transform { if (!this.pixelMatrixInverse) return 1; const coord = this.pointCoordinate(new Point(0, 0)); - const p = [coord.x * this.worldSize, coord.y * this.worldSize, 0, 1]; + const p = vec4.fromValues(coord.x * this.worldSize, coord.y * this.worldSize, 0, 1); const topPoint = vec4.transformMat4(p, p, this.pixelMatrix); return topPoint[3] / this.cameraToCenterDistance; } diff --git a/src/gl/color_mode.js b/src/gl/color_mode.ts similarity index 86% rename from src/gl/color_mode.js rename to src/gl/color_mode.ts index 0037b0d0ae..30c1e52793 100644 --- a/src/gl/color_mode.js +++ b/src/gl/color_mode.ts @@ -1,4 +1,3 @@ -// @flow import Color from '../style-spec/util/color'; import type {BlendFuncType, ColorMaskType} from './types'; @@ -20,9 +19,9 @@ class ColorMode { static Replace: BlendFuncType; - static disabled: $ReadOnly; - static unblended: $ReadOnly; - static alphaBlended: $ReadOnly; + static disabled: Readonly; + static unblended: Readonly; + static alphaBlended: Readonly; } ColorMode.Replace = [ONE, ZERO]; diff --git a/src/gl/context.js b/src/gl/context.ts similarity index 95% rename from src/gl/context.js rename to src/gl/context.ts index 5950d58a59..89fd973a84 100644 --- a/src/gl/context.js +++ b/src/gl/context.ts @@ -1,4 +1,3 @@ -// @flow import IndexBuffer from './index_buffer'; import VertexBuffer from './vertex_buffer'; @@ -18,15 +17,15 @@ import type { import type Color from '../style-spec/util/color'; type ClearArgs = { - color?: Color, - depth?: number, - stencil?: number + color?: Color; + depth?: number; + stencil?: number; }; class Context { gl: WebGLRenderingContext; extVertexArrayObject: any; - currentNumAttributes: ?number; + currentNumAttributes: number | undefined | null; maxTextureSize: number; clearColor: ClearColor; @@ -192,7 +191,7 @@ class Context { return new IndexBuffer(this, array, dynamicDraw); } - createVertexBuffer(array: StructArray, attributes: $ReadOnlyArray, dynamicDraw?: boolean) { + createVertexBuffer(array: StructArray, attributes: ReadonlyArray, dynamicDraw?: boolean) { return new VertexBuffer(this, array, attributes, dynamicDraw); } @@ -211,7 +210,10 @@ class Context { return new Framebuffer(this, width, height, hasDepth); } - clear({color, depth}: ClearArgs) { + clear({ + color, + depth + }: ClearArgs) { const gl = this.gl; let mask = 0; @@ -242,7 +244,7 @@ class Context { gl.clear(mask); } - setCullFace(cullFaceMode: $ReadOnly) { + setCullFace(cullFaceMode: Readonly) { if (cullFaceMode.enable === false) { this.cullFace.set(false); } else { @@ -252,7 +254,7 @@ class Context { } } - setDepthMode(depthMode: $ReadOnly) { + setDepthMode(depthMode: Readonly) { if (depthMode.func === this.gl.ALWAYS && !depthMode.mask) { this.depthTest.set(false); } else { @@ -263,7 +265,7 @@ class Context { } } - setStencilMode(stencilMode: $ReadOnly) { + setStencilMode(stencilMode: Readonly) { if (stencilMode.test.func === this.gl.ALWAYS && !stencilMode.mask) { this.stencilTest.set(false); } else { @@ -278,7 +280,7 @@ class Context { } } - setColorMode(colorMode: $ReadOnly) { + setColorMode(colorMode: Readonly) { if (deepEqual(colorMode.blendFunction, ColorMode.Replace)) { this.blend.set(false); } else { diff --git a/src/gl/cull_face_mode.js b/src/gl/cull_face_mode.ts similarity index 84% rename from src/gl/cull_face_mode.js rename to src/gl/cull_face_mode.ts index c608820835..85d00cc648 100644 --- a/src/gl/cull_face_mode.js +++ b/src/gl/cull_face_mode.ts @@ -1,5 +1,3 @@ -// @flow - import type {CullFaceModeType, FrontFaceType} from './types'; const BACK = 0x0405; @@ -16,8 +14,8 @@ class CullFaceMode { this.frontFace = frontFace; } - static disabled: $ReadOnly; - static backCCW: $ReadOnly; + static disabled: Readonly; + static backCCW: Readonly; } CullFaceMode.disabled = new CullFaceMode(false, BACK, CCW); diff --git a/src/gl/depth_mode.js b/src/gl/depth_mode.ts similarity index 92% rename from src/gl/depth_mode.js rename to src/gl/depth_mode.ts index e2483faeac..8e4d80d130 100644 --- a/src/gl/depth_mode.js +++ b/src/gl/depth_mode.ts @@ -1,4 +1,3 @@ -// @flow import type {DepthFuncType, DepthMaskType, DepthRangeType} from './types'; const ALWAYS = 0x0207; @@ -18,7 +17,7 @@ class DepthMode { this.range = depthRange; } - static disabled: $ReadOnly; + static disabled: Readonly; } DepthMode.ReadOnly = false; diff --git a/src/gl/framebuffer.js b/src/gl/framebuffer.ts similarity index 99% rename from src/gl/framebuffer.js rename to src/gl/framebuffer.ts index 11cac48f75..6a5037cfea 100644 --- a/src/gl/framebuffer.js +++ b/src/gl/framebuffer.ts @@ -1,4 +1,3 @@ -// @flow import {ColorAttachment, DepthAttachment} from './value'; import assert from 'assert'; diff --git a/src/gl/index_buffer.js b/src/gl/index_buffer.ts similarity index 99% rename from src/gl/index_buffer.js rename to src/gl/index_buffer.ts index 5648a1b172..3ab628309c 100644 --- a/src/gl/index_buffer.js +++ b/src/gl/index_buffer.ts @@ -1,4 +1,3 @@ -// @flow import assert from 'assert'; import type {StructArray} from '../util/struct_array'; diff --git a/src/gl/stencil_mode.js b/src/gl/stencil_mode.ts similarity index 93% rename from src/gl/stencil_mode.js rename to src/gl/stencil_mode.ts index b878e1d81f..f67c12a183 100644 --- a/src/gl/stencil_mode.js +++ b/src/gl/stencil_mode.ts @@ -1,4 +1,3 @@ -// @flow import type {StencilOpConstant, StencilTest} from './types'; const ALWAYS = 0x0207; @@ -22,7 +21,7 @@ class StencilMode { this.pass = pass; } - static disabled: $ReadOnly; + static disabled: Readonly; } StencilMode.disabled = new StencilMode({func: ALWAYS, mask: 0}, 0, 0, KEEP, KEEP, KEEP); diff --git a/src/gl/types.js b/src/gl/types.js deleted file mode 100644 index 834be5cad8..0000000000 --- a/src/gl/types.js +++ /dev/null @@ -1,84 +0,0 @@ -// @flow - -type BlendFuncConstant = - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType; - -export type BlendFuncType = [BlendFuncConstant, BlendFuncConstant]; - -export type BlendEquationType = - | $PropertyType - | $PropertyType - | $PropertyType; - -export type ColorMaskType = [boolean, boolean, boolean, boolean]; - -export type CompareFuncType = - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType; - -export type DepthMaskType = boolean; - -export type DepthRangeType = [number, number]; - -export type DepthFuncType = CompareFuncType; - -export type StencilFuncType = { - func: CompareFuncType, - ref: number, - mask: number -}; - -export type StencilOpConstant = - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType - | $PropertyType; - -export type StencilOpType = [StencilOpConstant, StencilOpConstant, StencilOpConstant]; - -export type TextureUnitType = number; - -export type ViewportType = [number, number, number, number]; - -export type StencilTest = - | { func: $PropertyType, mask: 0 } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: number } - | { func: $PropertyType, mask: 0 }; - -export type CullFaceModeType = - | $PropertyType - | $PropertyType - | $PropertyType - -export type FrontFaceType = - | $PropertyType - | $PropertyType diff --git a/src/gl/types.ts b/src/gl/types.ts new file mode 100644 index 0000000000..895648aa4e --- /dev/null +++ b/src/gl/types.ts @@ -0,0 +1,59 @@ +type BlendFuncConstant = WebGLRenderingContext['ZERO'] | WebGLRenderingContext['ONE'] | WebGLRenderingContext['SRC_COLOR'] | WebGLRenderingContext['ONE_MINUS_SRC_COLOR'] | WebGLRenderingContext['DST_COLOR'] | WebGLRenderingContext['ONE_MINUS_DST_COLOR'] | WebGLRenderingContext['SRC_ALPHA'] | WebGLRenderingContext['ONE_MINUS_SRC_ALPHA'] | WebGLRenderingContext['DST_ALPHA'] | WebGLRenderingContext['ONE_MINUS_DST_ALPHA'] | WebGLRenderingContext['CONSTANT_COLOR'] | WebGLRenderingContext['ONE_MINUS_CONSTANT_COLOR'] | WebGLRenderingContext['CONSTANT_ALPHA'] | WebGLRenderingContext['ONE_MINUS_CONSTANT_ALPHA'] | WebGLRenderingContext['BLEND_COLOR']; + +export type BlendFuncType = [BlendFuncConstant, BlendFuncConstant]; + +export type BlendEquationType = WebGLRenderingContext['FUNC_ADD'] | WebGLRenderingContext['FUNC_SUBTRACT'] | WebGLRenderingContext['FUNC_REVERSE_SUBTRACT']; + +export type ColorMaskType = [boolean, boolean, boolean, boolean]; + +export type CompareFuncType = WebGLRenderingContext['NEVER'] | WebGLRenderingContext['LESS'] | WebGLRenderingContext['EQUAL'] | WebGLRenderingContext['LEQUAL'] | WebGLRenderingContext['GREATER'] | WebGLRenderingContext['NOTEQUAL'] | WebGLRenderingContext['GEQUAL'] | WebGLRenderingContext['ALWAYS']; + +export type DepthMaskType = boolean; + +export type DepthRangeType = [number, number]; + +export type DepthFuncType = CompareFuncType; + +export type StencilFuncType = { + func: CompareFuncType; + ref: number; + mask: number; +}; + +export type StencilOpConstant = WebGLRenderingContext['KEEP'] | WebGLRenderingContext['ZERO'] | WebGLRenderingContext['REPLACE'] | WebGLRenderingContext['INCR'] | WebGLRenderingContext['INCR_WRAP'] | WebGLRenderingContext['DECR'] | WebGLRenderingContext['DECR_WRAP'] | WebGLRenderingContext['INVERT']; + +export type StencilOpType = [StencilOpConstant, StencilOpConstant, StencilOpConstant]; + +export type TextureUnitType = number; + +export type ViewportType = [number, number, number, number]; + +export type StencilTest = { + func: WebGLRenderingContext['NEVER']; + mask: 0; +} | { + func: WebGLRenderingContext['LESS']; + mask: number; +} | { + func: WebGLRenderingContext['EQUAL']; + mask: number; +} | { + func: WebGLRenderingContext['LEQUAL']; + mask: number; +} | { + func: WebGLRenderingContext['GREATER']; + mask: number; +} | { + func: WebGLRenderingContext['NOTEQUAL']; + mask: number; +} | { + func: WebGLRenderingContext['GEQUAL']; + mask: number; +} | { + func: WebGLRenderingContext['ALWAYS']; + mask: 0; +}; + +export type CullFaceModeType = WebGLRenderingContext['FRONT'] | WebGLRenderingContext['BACK'] | WebGLRenderingContext['FRONT_AND_BACK']; + +export type FrontFaceType = WebGLRenderingContext['CW'] | WebGLRenderingContext['CCW']; diff --git a/src/gl/value.js b/src/gl/value.ts similarity index 91% rename from src/gl/value.js rename to src/gl/value.ts index 3faabc3c24..fe674c4a5a 100644 --- a/src/gl/value.js +++ b/src/gl/value.ts @@ -1,5 +1,3 @@ -// @flow - import Color from '../style-spec/util/color'; import type Context from './context'; @@ -19,12 +17,12 @@ import type { } from './types'; export interface Value { - current: T; - default: T; - dirty: boolean; - get(): T; - setDefault(): void; - set(value: T): void; + current: T; + default: T; + dirty: boolean; + get(): T; + setDefault(): void; + set(value: T): void; } class BaseValue implements Value { @@ -316,11 +314,11 @@ export class FrontFace extends BaseValue { } } -export class Program extends BaseValue { +export class Program extends BaseValue { getDefault(): WebGLProgram { return null; } - set(v: ?WebGLProgram) { + set(v?: WebGLProgram | null) { if (v === this.current && !this.dirty) return; this.gl.useProgram(v); this.current = v; @@ -354,11 +352,11 @@ export class Viewport extends BaseValue { } } -export class BindFramebuffer extends BaseValue { +export class BindFramebuffer extends BaseValue { getDefault(): WebGLFramebuffer { return null; } - set(v: ?WebGLFramebuffer) { + set(v?: WebGLFramebuffer | null) { if (v === this.current && !this.dirty) return; const gl = this.gl; gl.bindFramebuffer(gl.FRAMEBUFFER, v); @@ -367,11 +365,11 @@ export class BindFramebuffer extends BaseValue { } } -export class BindRenderbuffer extends BaseValue { +export class BindRenderbuffer extends BaseValue { getDefault(): WebGLRenderbuffer { return null; } - set(v: ?WebGLRenderbuffer) { + set(v?: WebGLRenderbuffer | null) { if (v === this.current && !this.dirty) return; const gl = this.gl; gl.bindRenderbuffer(gl.RENDERBUFFER, v); @@ -380,11 +378,11 @@ export class BindRenderbuffer extends BaseValue { } } -export class BindTexture extends BaseValue { +export class BindTexture extends BaseValue { getDefault(): WebGLTexture { return null; } - set(v: ?WebGLTexture) { + set(v?: WebGLTexture | null) { if (v === this.current && !this.dirty) return; const gl = this.gl; gl.bindTexture(gl.TEXTURE_2D, v); @@ -393,11 +391,11 @@ export class BindTexture extends BaseValue { } } -export class BindVertexBuffer extends BaseValue { +export class BindVertexBuffer extends BaseValue { getDefault(): WebGLBuffer { return null; } - set(v: ?WebGLBuffer) { + set(v?: WebGLBuffer | null) { if (v === this.current && !this.dirty) return; const gl = this.gl; gl.bindBuffer(gl.ARRAY_BUFFER, v); @@ -406,11 +404,11 @@ export class BindVertexBuffer extends BaseValue { } } -export class BindElementBuffer extends BaseValue { +export class BindElementBuffer extends BaseValue { getDefault(): WebGLBuffer { return null; } - set(v: ?WebGLBuffer) { + set(v?: WebGLBuffer | null) { // Always rebind const gl = this.gl; gl.bindBuffer(gl.ELEMENT_ARRAY_BUFFER, v); @@ -457,7 +455,7 @@ export class PixelStoreUnpackPremultiplyAlpha extends BaseValue { set(v: boolean): void { if (v === this.current && !this.dirty) return; const gl = this.gl; - gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, (v: any)); + gl.pixelStorei(gl.UNPACK_PREMULTIPLY_ALPHA_WEBGL, ((v as any))); this.current = v; this.dirty = false; } @@ -470,13 +468,13 @@ export class PixelStoreUnpackFlipY extends BaseValue { set(v: boolean): void { if (v === this.current && !this.dirty) return; const gl = this.gl; - gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, (v: any)); + gl.pixelStorei(gl.UNPACK_FLIP_Y_WEBGL, ((v as any))); this.current = v; this.dirty = false; } } -class FramebufferAttachment extends BaseValue { +class FramebufferAttachment extends BaseValue { parent: WebGLFramebuffer; context: Context; @@ -494,7 +492,7 @@ export class ColorAttachment extends FramebufferAttachment { setDirty() { this.dirty = true; } - set(v: ?WebGLTexture): void { + set(v?: WebGLTexture | null): void { if (v === this.current && !this.dirty) return; this.context.bindFramebuffer.set(this.parent); // note: it's possible to attach a renderbuffer to the color @@ -507,7 +505,7 @@ export class ColorAttachment extends FramebufferAttachment { } export class DepthAttachment extends FramebufferAttachment { - set(v: ?WebGLRenderbuffer): void { + set(v?: WebGLRenderbuffer | null): void { if (v === this.current && !this.dirty) return; this.context.bindFramebuffer.set(this.parent); // note: it's possible to attach a texture to the depth attachment diff --git a/src/gl/vertex_buffer.js b/src/gl/vertex_buffer.ts similarity index 92% rename from src/gl/vertex_buffer.js rename to src/gl/vertex_buffer.ts index 626ef22f08..4b99ed4d0c 100644 --- a/src/gl/vertex_buffer.js +++ b/src/gl/vertex_buffer.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import type { @@ -32,9 +30,9 @@ const AttributeType = { */ class VertexBuffer { length: number; - attributes: $ReadOnlyArray; + attributes: ReadonlyArray; itemSize: number; - dynamicDraw: ?boolean; + dynamicDraw: boolean | undefined | null; context: Context; buffer: WebGLBuffer; @@ -42,7 +40,7 @@ class VertexBuffer { * @param dynamicDraw Whether this buffer will be repeatedly updated. * @private */ - constructor(context: Context, array: StructArray, attributes: $ReadOnlyArray, dynamicDraw?: boolean) { + constructor(context: Context, array: StructArray, attributes: ReadonlyArray, dynamicDraw?: boolean) { this.length = array.length; this.attributes = attributes; this.itemSize = array.bytesPerElement; @@ -70,7 +68,7 @@ class VertexBuffer { gl.bufferSubData(gl.ARRAY_BUFFER, 0, array.arrayBuffer); } - enableAttributes(gl: WebGLRenderingContext, program: Program<*>) { + enableAttributes(gl: WebGLRenderingContext, program: Program) { for (let j = 0; j < this.attributes.length; j++) { const member = this.attributes[j]; const attribIndex: number | void = program.attributes[member.name]; @@ -86,7 +84,7 @@ class VertexBuffer { * @param program The active WebGL program * @param vertexOffset Index of the starting vertex of the segment */ - setVertexAttribPointers(gl: WebGLRenderingContext, program: Program<*>, vertexOffset: ?number) { + setVertexAttribPointers(gl: WebGLRenderingContext, program: Program, vertexOffset?: number | null) { for (let j = 0; j < this.attributes.length; j++) { const member = this.attributes[j]; const attribIndex: number | void = program.attributes[member.name]; @@ -95,7 +93,7 @@ class VertexBuffer { gl.vertexAttribPointer( attribIndex, member.components, - (gl: any)[AttributeType[member.type]], + (gl as any)[AttributeType[member.type]], false, this.itemSize, member.offset + (this.itemSize * (vertexOffset || 0)) diff --git a/src/index.d.ts b/src/index.d.ts deleted file mode 100644 index e6adda22f4..0000000000 --- a/src/index.d.ts +++ /dev/null @@ -1,2381 +0,0 @@ -// Type definitions for MapLibre GL JS 1.14.0 -// Project: https://github.com/maplibre/maplibre-gl-js -// Definitions by: Dominik Bruderer -// Patrick Reames -// Karl-Aksel Puulmann -// Dmytro Gokun -// Liam Clarke -// Vladimir Dashukevich -// Marko Klopets -// André Fonseca -// Folke Lemaitre -// Harel Mazor -// Definitions: https://github.com/DefinitelyTyped/DefinitelyTyped -// TypeScript Version: 3.0 - -/// - -export = maplibregl; -export as namespace maplibregl; - -declare namespace maplibregl { - let accessToken: string; - let version: string; - let baseApiUrl: string; - - /** - * Number of web workers instantiated on a page with GL JS maps. - * By default, it is set to half the number of CPU cores (capped at 6). - */ - let workerCount: number; - - /** - * Maximum number of images (raster tiles, sprites, icons) to load in parallel, which affects performance in raster-heavy maps. - * 16 by default. - */ - let maxParallelImageRequests: number; - - export function supported(options?: { failIfMajorPerformanceCaveat?: boolean }): boolean; - - /** - * Clears browser storage used by this library. Using this method flushes the Mapbox tile cache that is managed by this library. - * Tiles may still be cached by the browser in some cases. - */ - export function clearStorage(callback?: (err?: Error) => void): void; - /** - * Sets a custom load tile function that will be called when using a source that starts with a custom url schema. - * The example below will be triggered for custom:// urls defined in the sources list in the style definitions. - * The function passed will receive the request parameters and should call the callback with the resulting request, - * for example a pbf vector tile, non-compressed, represented as ArrayBuffer. - * @param {string} customProtocol - the protocol to hook, for example 'custom' - * @param {Function} loadFn - the function to use when trying to fetch a tile specified by the customProtocol - * @example - * // this will fetch a file using the fetch API (this is obviously a non iteresting example...) - * maplibre.addProtocol('custom', (params, callback) => { - fetch(`https://${params.url.split("://")[1]}`) - .then(t => { - if (t.status == 200) { - t.arrayBuffer().then(arr => { - callback(null, arr, null, null); - }); - } else { - callback(new Error(`Tile fetch error: ${t.statusText}`)); - } - }) - .catch(e => { - callback(new Error(e)); - }); - return { cancel: () => { } }; - }); - * // the following is an example of a way to return an error when trying to load a tile - * maplibre.addProtocol('custom2', (params, callback) => { - * callback(new Error('someErrorMessage')); - * return { cancel: () => { } }; - * }); - */ - export function addProtocol(customProtocol: string, loadFn: (requestParameters: RequestParameters, callback: ResponseCallback) => Cancelable): void; - /** - * Removes a previusly added protocol - * @param {string} customProtocol - the custom protocol to remove registration for - * @example - * maplibregl.removeProtocol('custom'); - */ - export function removeProtocol(customProtocol: string): void; - - export function setRTLTextPlugin(pluginURL: string, callback: (error: Error) => void, deferred?: boolean): void; - export function getRTLTextPluginStatus(): PluginStatus; - - /** - * Initializes resources like WebWorkers that can be shared across maps to lower load - * times in some situations. `maplibregl.workerUrl` and `maplibregl.workerCount`, if being - * used, must be set before `prewarm()` is called to have an effect. - * - * By default, the lifecycle of these resources is managed automatically, and they are - * lazily initialized when a Map is first created. By invoking `prewarm()`, these - * resources will be created ahead of time, and will not be cleared when the last Map - * is removed from the page. This allows them to be re-used by new Map instances that - * are created later. They can be manually cleared by calling - * `maplibregl.clearPrewarmedResources()`. This is only necessary if your web page remains - * active but stops using maps altogether. - * - * This is primarily useful when using GL-JS maps in a single page app, wherein a user - * would navigate between various views that can cause Map instances to constantly be - * created and destroyed. - */ - export function prewarm(): void; - - /** - * Clears up resources that have previously been created by `maplibregl.prewarm()`. - * Note that this is typically not necessary. You should only call this function - * if you expect the user of your app to not return to a Map view at any point - * in your application. - */ - export function clearPrewarmedResources(): void; - - type PluginStatus = 'unavailable' | 'loading' | 'loaded' | 'error'; - - type LngLatLike = - | [number, number] - | LngLat - | { lng: number; lat: number } - | { lon: number; lat: number } - | [number, number]; - - type LngLatBoundsLike = LngLatBounds | [LngLatLike, LngLatLike] | [number, number, number, number] | LngLatLike; - type PointLike = Point | [number, number]; - type Offset = number | PointLike | { [_: string]: PointLike }; - - type ExpressionName = - // Types - | 'array' - | 'boolean' - | 'collator' - | 'format' - | 'literal' - | 'number' - | 'object' - | 'string' - | 'image' - | 'to-boolean' - | 'to-color' - | 'to-number' - | 'to-string' - | 'typeof' - // Feature data - | 'feature-state' - | 'geometry-type' - | 'id' - | 'line-progress' - | 'properties' - // Lookup - | 'at' - | 'get' - | 'has' - | 'in' - | 'index-of' - | 'length' - | 'slice' - // Decision - | '!' - | '!=' - | '<' - | '<=' - | '==' - | '>' - | '>=' - | 'all' - | 'any' - | 'case' - | 'match' - | 'coalesce' - // Ramps, scales, curves - | 'interpolate' - | 'interpolate-hcl' - | 'interpolate-lab' - | 'step' - // Variable binding - | 'let' - | 'var' - // String - | 'concat' - | 'downcase' - | 'is-supported-script' - | 'resolved-locale' - | 'upcase' - // Color - | 'rgb' - | 'rgba' - // Math - | '-' - | '*' - | '/' - | '%' - | '^' - | '+' - | 'abs' - | 'acos' - | 'asin' - | 'atan' - | 'ceil' - | 'cos' - | 'e' - | 'floor' - | 'ln' - | 'ln2' - | 'log10' - | 'log2' - | 'max' - | 'min' - | 'pi' - | 'round' - | 'sin' - | 'sqrt' - | 'tan' - // Zoom, Heatmap - | 'zoom' - | 'heatmap-density'; - - type Expression = [ExpressionName, ...any[]]; - - type Anchor = - | 'center' - | 'left' - | 'right' - | 'top' - | 'bottom' - | 'top-left' - | 'top-right' - | 'bottom-left' - | 'bottom-right'; - - /** - * Map - */ - export class Map extends Evented { - constructor(options?: MapboxOptions); - - addControl( - control: Control | IControl, - position?: 'top-right' | 'top-left' | 'bottom-right' | 'bottom-left', - ): this; - - removeControl(control: Control | IControl): this; - - /** - * Checks if a control exists on the map. - * - * @param {IControl} control The {@link IControl} to check. - * @returns {boolean} True if map contains control. - * @example - */ - hasControl(control: IControl): boolean; - - resize(eventData?: EventData): this; - - getBounds(): LngLatBounds; - - getMaxBounds(): LngLatBounds | null; - - setMaxBounds(lnglatbounds?: LngLatBoundsLike): this; - - setMinZoom(minZoom?: number | null): this; - - getMinZoom(): number; - - setMaxZoom(maxZoom?: number | null): this; - - getMaxZoom(): number; - - setMinPitch(minPitch?: number | null): this; - - getMinPitch(): number; - - setMaxPitch(maxPitch?: number | null): this; - - getMaxPitch(): number; - - getRenderWorldCopies(): boolean; - - setRenderWorldCopies(renderWorldCopies?: boolean): this; - - project(lnglat: LngLatLike): maplibregl.Point; - - unproject(point: PointLike): maplibregl.LngLat; - - isMoving(): boolean; - - isZooming(): boolean; - - isRotating(): boolean; - - /** - * Returns an array of GeoJSON Feature objects representing visible features that satisfy the query parameters. - * - * The properties value of each returned feature object contains the properties of its source feature. For GeoJSON sources, only string and numeric property values are supported (i.e. null, Array, and Object values are not supported). - * - * Each feature includes top-level layer, source, and sourceLayer properties. The layer property is an object representing the style layer to which the feature belongs. Layout and paint properties in this object contain values which are fully evaluated for the given zoom level and feature. - * - * Only features that are currently rendered are included. Some features will not be included, like: - * - * - Features from layers whose visibility property is "none". - * - Features from layers whose zoom range excludes the current zoom level. - * - Symbol features that have been hidden due to text or icon collision. - * - * Features from all other layers are included, including features that may have no visible contribution to the rendered result; for example, because the layer's opacity or color alpha component is set to 0. - * - * The topmost rendered feature appears first in the returned array, and subsequent features are sorted by descending z-order. Features that are rendered multiple times (due to wrapping across the antimeridian at low zoom levels) are returned only once (though subject to the following caveat). - * - * Because features come from tiled vector data or GeoJSON data that is converted to tiles internally, feature geometries may be split or duplicated across tile boundaries and, as a result, features may appear multiple times in query results. For example, suppose there is a highway running through the bounding rectangle of a query. The results of the query will be those parts of the highway that lie within the map tiles covering the bounding rectangle, even if the highway extends into other tiles, and the portion of the highway within each map tile will be returned as a separate feature. Similarly, a point feature near a tile boundary may appear in multiple tiles due to tile buffering. - * - * @param pointOrBox The geometry of the query region: either a single point or southwest and northeast points describing a bounding box. Omitting this parameter (i.e. calling Map#queryRenderedFeatures with zero arguments, or with only a options argument) is equivalent to passing a bounding box encompassing the entire map viewport. - * @param options - */ - queryRenderedFeatures( - pointOrBox?: PointLike | [PointLike, PointLike], - options?: { layers?: string[]; filter?: any[] } & FilterOptions, - ): MapboxGeoJSONFeature[]; - - /** - * Returns an array of GeoJSON Feature objects representing features within the specified vector tile or GeoJSON source that satisfy the query parameters. - * - * In contrast to Map#queryRenderedFeatures, this function returns all features matching the query parameters, whether or not they are rendered by the current style (i.e. visible). The domain of the query includes all currently-loaded vector tiles and GeoJSON source tiles: this function does not check tiles outside the currently visible viewport. - * - * Because features come from tiled vector data or GeoJSON data that is converted to tiles internally, feature geometries may be split or duplicated across tile boundaries and, as a result, features may appear multiple times in query results. For example, suppose there is a highway running through the bounding rectangle of a query. The results of the query will be those parts of the highway that lie within the map tiles covering the bounding rectangle, even if the highway extends into other tiles, and the portion of the highway within each map tile will be returned as a separate feature. Similarly, a point feature near a tile boundary may appear in multiple tiles due to tile buffering. - * - * @param sourceID The ID of the vector tile or GeoJSON source to query. - * @param parameters - */ - querySourceFeatures( - sourceID: string, - parameters?: { - sourceLayer?: string; - filter?: any[]; - } & FilterOptions, - ): MapboxGeoJSONFeature[]; - - setStyle(style: maplibregl.Style | string, options?: { diff?: boolean; localIdeographFontFamily?: string }): this; - - setTransformRequest(transformRequest: TransformRequestFunction): void; - - getStyle(): maplibregl.Style; - - isStyleLoaded(): boolean; - - addSource(id: string, source: AnySourceData): this; - - isSourceLoaded(id: string): boolean; - - areTilesLoaded(): boolean; - - removeSource(id: string): this; - - getSource(id: string): AnySourceImpl; - - addImage( - name: string, - image: - | HTMLImageElement - | ArrayBufferView - | { width: number; height: number; data: Uint8Array | Uint8ClampedArray } - | ImageData - | ImageBitmap, - options?: { pixelRatio?: number; sdf?: boolean }, - ): this; - - hasImage(name: string): boolean; - - removeImage(name: string): this; - - loadImage(url: string, callback: Function): this; - - listImages(): string[]; - - addLayer(layer: maplibregl.AnyLayer, before?: string): this; - - moveLayer(id: string, beforeId?: string): this; - - removeLayer(id: string): this; - - getLayer(id: string): maplibregl.AnyLayer; - - setFilter(layer: string, filter?: any[] | boolean | null, options?: FilterOptions | null): this; - - setLayerZoomRange(layerId: string, minzoom: number, maxzoom: number): this; - - getFilter(layer: string): any[]; - - setPaintProperty(layer: string, name: string, value: any, klass?: string): this; - - getPaintProperty(layer: string, name: string): any; - - setLayoutProperty(layer: string, name: string, value: any): this; - - getLayoutProperty(layer: string, name: string): any; - - setLight(options: maplibregl.Light, lightOptions?: any): this; - - getLight(): maplibregl.Light; - - setFeatureState( - feature: FeatureIdentifier | maplibregl.MapboxGeoJSONFeature, - state: { [key: string]: any }, - ): void; - - getFeatureState(feature: FeatureIdentifier | maplibregl.MapboxGeoJSONFeature): { [key: string]: any }; - - removeFeatureState(target: FeatureIdentifier | maplibregl.MapboxGeoJSONFeature, key?: string): void; - - getContainer(): HTMLElement; - - getCanvasContainer(): HTMLElement; - - getCanvas(): HTMLCanvasElement; - - loaded(): boolean; - - remove(): void; - - triggerRepaint(): void; - - showTileBoundaries: boolean; - - showCollisionBoxes: boolean; - - /** - * Gets and sets a Boolean indicating whether the map will visualize - * the padding offsets. - * - * @name showPadding - * @type {boolean} - * @instance - * @memberof Map - */ - showPadding: boolean; - - repaint: boolean; - - getCenter(): maplibregl.LngLat; - - setCenter(center: LngLatLike, eventData?: maplibregl.EventData): this; - - panBy(offset: PointLike, options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - panTo(lnglat: LngLatLike, options?: maplibregl.AnimationOptions, eventdata?: maplibregl.EventData): this; - - getZoom(): number; - - setZoom(zoom: number, eventData?: maplibregl.EventData): this; - - zoomTo(zoom: number, options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - zoomIn(options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - zoomOut(options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - getBearing(): number; - - setBearing(bearing: number, eventData?: maplibregl.EventData): this; - - /** - * Returns the current padding applied around the map viewport. - * - * @memberof Map# - * @returns The current padding around the map viewport. - */ - getPadding(): PaddingOptions; - - /** - * Sets the padding in pixels around the viewport. - * - * Equivalent to `jumpTo({padding: padding})`. - * - * @memberof Map# - * @param padding The desired padding. Format: { left: number, right: number, top: number, bottom: number } - * @param eventData Additional properties to be added to event objects of events triggered by this method. - * @fires movestart - * @fires moveend - * @returns {Map} `this` - * @example - * // Sets a left padding of 300px, and a top padding of 50px - * map.setPadding({ left: 300, top: 50 }); - */ - setPadding(padding: RequireAtLeastOne, eventData?: EventData): this; - - rotateTo(bearing: number, options?: maplibregl.AnimationOptions, eventData?: EventData): this; - - resetNorth(options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - resetNorthPitch(options?: maplibregl.AnimationOptions | null, eventData?: maplibregl.EventData | null): this; - - snapToNorth(options?: maplibregl.AnimationOptions, eventData?: maplibregl.EventData): this; - - getPitch(): number; - - setPitch(pitch: number, eventData?: EventData): this; - - cameraForBounds(bounds: LngLatBoundsLike, options?: CameraForBoundsOptions): CameraForBoundsResult | undefined; - - fitBounds(bounds: LngLatBoundsLike, options?: maplibregl.FitBoundsOptions, eventData?: maplibregl.EventData): this; - - fitScreenCoordinates( - p0: PointLike, - p1: PointLike, - bearing: number, - options?: AnimationOptions & CameraOptions, - eventData?: EventData, - ): this; - - jumpTo(options: maplibregl.CameraOptions, eventData?: maplibregl.EventData): this; - - easeTo(options: maplibregl.EaseToOptions, eventData?: maplibregl.EventData): this; - - flyTo(options: maplibregl.FlyToOptions, eventData?: maplibregl.EventData): this; - - isEasing(): boolean; - - stop(): this; - - on( - type: T, - layer: string, - listener: (ev: MapLayerEventType[T] & EventData) => void, - ): this; - on(type: T, listener: (ev: MapEventType[T] & EventData) => void): this; - on(type: string, listener: (ev: any) => void): this; - - once( - type: T, - layer: string, - listener: (ev: MapLayerEventType[T] & EventData) => void, - ): this; - once(type: T, listener: (ev: MapEventType[T] & EventData) => void): this; - once(type: string, listener: (ev: any) => void): this; - - off( - type: T, - layer: string, - listener: (ev: MapLayerEventType[T] & EventData) => void, - ): this; - off(type: T, listener: (ev: MapEventType[T] & EventData) => void): this; - off(type: string, listener: (ev: any) => void): this; - - scrollZoom: ScrollZoomHandler; - - boxZoom: BoxZoomHandler; - - dragRotate: DragRotateHandler; - - dragPan: DragPanHandler; - - keyboard: KeyboardHandler; - - doubleClickZoom: DoubleClickZoomHandler; - - touchZoomRotate: TouchZoomRotateHandler; - - touchPitch: TouchPitchHandler; - } - - export interface MapboxOptions { - /** - * If true, the gl context will be created with MSA antialiasing, which can be useful for antialiasing custom layers. - * This is false by default as a performance optimization. - */ - antialias?: boolean; - - /** If true, an attribution control will be added to the map. */ - attributionControl?: boolean; - - bearing?: number; - - /** Snap to north threshold in degrees. */ - bearingSnap?: number; - - /** The initial bounds of the map. If bounds is specified, it overrides center and zoom constructor options. */ - bounds?: LngLatBoundsLike; - - /** If true, enable the "box zoom" interaction (see BoxZoomHandler) */ - boxZoom?: boolean; - - /** initial map center */ - center?: LngLatLike; - - /** - * The max number of pixels a user can shift the mouse pointer during a click for it to be - * considered a valid click (as opposed to a mouse drag). - * - * @default 3 - */ - clickTolerance?: number; - - /** - * If `true`, Resource Timing API information will be collected for requests made by GeoJSON - * and Vector Tile web workers (this information is normally inaccessible from the main - * Javascript thread). Information will be returned in a `resourceTiming` property of - * relevant `data` events. - * - * @default false - */ - collectResourceTiming?: boolean; - - /** - * If `true`, symbols from multiple sources can collide with each other during collision - * detection. If `false`, collision detection is run separately for the symbols in each source. - * - * @default true - */ - crossSourceCollisions?: boolean; - - /** ID of the container element */ - container: string | HTMLElement; - - /** String or strings to show in an AttributionControl. - * Only applicable if options.attributionControl is `true`. */ - customAttribution?: string | string[]; - - /** If true, enable the "drag to pan" interaction (see DragPanHandler). */ - dragPan?: boolean; - - /** If true, enable the "drag to rotate" interaction (see DragRotateHandler). */ - dragRotate?: boolean; - - /** If true, enable the "double click to zoom" interaction (see DoubleClickZoomHandler). */ - doubleClickZoom?: boolean; - - /** If `true`, the map's position (zoom, center latitude, center longitude, bearing, and pitch) will be synced with the hash fragment of the page's URL. - * For example, `http://path/to/my/page.html#2.59/39.26/53.07/-24.1/60`. - * An additional string may optionally be provided to indicate a parameter-styled hash, - * e.g. http://path/to/my/page.html#map=2.59/39.26/53.07/-24.1/60&foo=bar, where foo - * is a custom parameter and bar is an arbitrary hash distinct from the map hash. - * */ - hash?: boolean | string; - - /** - * Controls the duration of the fade-in/fade-out animation for label collisions, in milliseconds. - * This setting affects all symbol layers. This setting does not affect the duration of runtime - * styling transitions or raster tile cross-fading. - * - * @default 300 - */ - fadeDuration?: number; - - /** If true, map creation will fail if the implementation determines that the performance of the created WebGL context would be dramatically lower than expected. */ - failIfMajorPerformanceCaveat?: boolean; - - /** A fitBounds options object to use only when setting the bounds option. */ - fitBoundsOptions?: FitBoundsOptions; - - /** If false, no mouse, touch, or keyboard listeners are attached to the map, so it will not respond to input */ - interactive?: boolean; - - /** If true, enable keyboard shortcuts (see KeyboardHandler). */ - keyboard?: boolean; - - /** A patch to apply to the default localization table for UI strings, e.g. control tooltips. - * The `locale` object maps namespaced UI string IDs to translated strings in the target language; - * see `src/ui/default_locale.js` for an example with all supported string IDs. - * The object may specify all UI strings (thereby adding support for a new translation) or - * only a subset of strings (thereby patching the default translation table). - */ - locale?: { [key: string]: string }; - - /** - * If specified, defines a CSS font-family for locally overriding generation of glyphs in the - * 'CJK Unified Ideographs' and 'Hangul Syllables' ranges. In these ranges, font settings from - * the map's style will be ignored, except for font-weight keywords (light/regular/medium/bold). - * The purpose of this option is to avoid bandwidth-intensive glyph server requests. - * - * @default null - */ - localIdeographFontFamily?: string; - - /** - * A string representing the position of the Mapbox wordmark on the map. - * - * @default "bottom-left" - */ - logoPosition?: 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; - - /** If set, the map is constrained to the given bounds. */ - maxBounds?: LngLatBoundsLike; - - /** Maximum pitch of the map. */ - maxPitch?: number; - - /** Maximum zoom of the map. */ - maxZoom?: number; - - /** Minimum pitch of the map. */ - minPitch?: number; - - /** Minimum zoom of the map. */ - minZoom?: number; - - /** If true, The maps canvas can be exported to a PNG using map.getCanvas().toDataURL();. This is false by default as a performance optimization. */ - preserveDrawingBuffer?: boolean; - - /** - * The initial pitch (tilt) of the map, measured in degrees away from the plane of the - * screen (0-60). - * - * @default 0 - */ - pitch?: number; - - /** - * If `false`, the map's pitch (tilt) control with "drag to rotate" interaction will be disabled. - * - * @default true - */ - pitchWithRotate?: boolean; - - /** - * If `false`, the map won't attempt to re-request tiles once they expire per their HTTP - * `cacheControl`/`expires` headers. - * - * @default true - */ - refreshExpiredTiles?: boolean; - - /** - * If `true`, multiple copies of the world will be rendered, when zoomed out. - * - * @default true - */ - renderWorldCopies?: boolean; - - /** If true, enable the "scroll to zoom" interaction */ - scrollZoom?: boolean; - - /** stylesheet location */ - style?: maplibregl.Style | string; - - /** If true, the map will automatically resize when the browser window resizes */ - trackResize?: boolean; - - /** - * A callback run before the Map makes a request for an external URL. The callback can be - * used to modify the url, set headers, or set the credentials property for cross-origin requests. - * - * @default null - */ - transformRequest?: TransformRequestFunction; - - /** If true, enable the "pinch to rotate and zoom" interaction (see TouchZoomRotateHandler). */ - touchZoomRotate?: boolean; - - /** If true, the "drag to pitch" interaction is enabled */ - touchPitch?: boolean; - - /** Initial zoom level */ - zoom?: number; - - /** - * The maximum number of tiles stored in the tile cache for a given source. If omitted, the - * cache will be dynamically sized based on the current viewport. - * - * @default null - */ - maxTileCacheSize?: number; - - /** - * If specified, map will use this token instead of the one defined in maplibregl.accessToken. - * - * @default null - */ - accessToken?: string; - } - - export type RequireAtLeastOne = { [K in keyof T]-?: Required> & Partial>>; }[keyof T]; - - export type ResourceType = - | 'Unknown' - | 'Style' - | 'Source' - | 'Tile' - | 'Glyphs' - | 'SpriteImage' - | 'SpriteJSON' - | 'Image'; - - export interface RequestParameters { - /** - * The URL to be requested. - */ - url: string; - - /** - * Use `'include'` to send cookies with cross-origin requests. - */ - credentials?: 'same-origin' | 'include'; - - /** - * The headers to be sent with the request. - */ - headers?: { [header: string]: any }; - - method?: 'GET' | 'POST' | 'PUT'; - - collectResourceTiming?: boolean; - } - - export type TransformRequestFunction = (url: string, resourceType: ResourceType) => RequestParameters; - - export type ResponseCallback = (error?: Error, data?: T, cacheControl?: string, expires?: string) => void; - - export type Cancelable = { cancel: () => void }; - - export interface PaddingOptions { - top: number; - bottom: number; - left: number; - right: number; - } - - export interface FeatureIdentifier { - id?: string | number; - source: string; - sourceLayer?: string; - } - - /** - * BoxZoomHandler - */ - export class BoxZoomHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - isActive(): boolean; - - enable(): void; - - disable(): void; - } - - /** - * ScrollZoomHandler - */ - export class ScrollZoomHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - enable(): void; - - disable(): void; - - setZoomRate(zoomRate: number): void; - - setWheelZoomRate(wheelZoomRate: number): void; - } - - /** - * DragPenHandler - */ - export class DragPanHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - isActive(): boolean; - - enable(): void; - - disable(): void; - } - - /** - * DragRotateHandler - */ - export class DragRotateHandler { - constructor(map: maplibregl.Map, options?: { bearingSnap?: number; pitchWithRotate?: boolean }); - - isEnabled(): boolean; - - isActive(): boolean; - - enable(): void; - - disable(): void; - } - - /** - * KeyboardHandler - */ - export class KeyboardHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - enable(): void; - - disable(): void; - - /** - * Returns true if the handler is enabled and has detected the start of a - * zoom/rotate gesture. - * - * @returns {boolean} `true` if the handler is enabled and has detected the - * start of a zoom/rotate gesture. - */ - isActive(): boolean; - - /** - * Disables the "keyboard pan/rotate" interaction, leaving the - * "keyboard zoom" interaction enabled. - * - * @example - * map.keyboard.disableRotation(); - */ - disableRotation(): void; - - /** - * Enables the "keyboard pan/rotate" interaction. - * - * @example - * map.keyboard.enable(); - * map.keyboard.enableRotation(); - */ - enableRotation(): void; - } - - /** - * DoubleClickZoomHandler - */ - export class DoubleClickZoomHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - enable(): void; - - disable(): void; - } - - /** - * TouchZoomRotateHandler - */ - export class TouchZoomRotateHandler { - constructor(map: maplibregl.Map); - - isEnabled(): boolean; - - enable(): void; - - disable(): void; - - disableRotation(): void; - - enableRotation(): void; - } - - export class TouchPitchHandler { - constructor(map: maplibregl.Map); - - enable(): void; - - isActive(): boolean; - - isEnabled(): boolean; - - disable(): void; - } - - export interface IControl { - onAdd(map: Map): HTMLElement; - - onRemove(map: Map): void; - - getDefaultPosition?: () => string; - } - - /** - * Control - */ - export class Control extends Evented implements IControl { - onAdd(map: Map): HTMLElement; - onRemove(map: Map): void; - getDefaultPosition?: () => string; - } - - /** - * Navigation - */ - export class NavigationControl extends Control { - constructor(options?: { showCompass?: boolean; showZoom?: boolean; visualizePitch?: boolean }); - } - - export class PositionOptions { - enableHighAccuracy?: boolean; - timeout?: number; - maximumAge?: number; - } - - /** - * Geolocate - */ - export class GeolocateControl extends Control { - constructor(options?: { - positionOptions?: PositionOptions; - fitBoundsOptions?: FitBoundsOptions; - trackUserLocation?: boolean; - showAccuracyCircle?: boolean; - showUserLocation?: boolean; - }); - trigger(): boolean; - } - - /** - * Attribution - */ - export class AttributionControl extends Control { - constructor(options?: { compact?: boolean; customAttribution?: string | string[] }); - } - - /** - * Scale - */ - export class ScaleControl extends Control { - constructor(options?: { maxWidth?: number; unit?: string }); - - setUnit(unit: 'imperial' | 'metric' | 'nautical'): void; - } - - /** - * FullscreenControl - */ - export class FullscreenControl extends Control { - constructor(options?: FullscreenControlOptions | null); - } - - export interface FullscreenControlOptions { - /** - * A compatible DOM element which should be made full screen. - * By default, the map container element will be made full screen. - */ - container?: HTMLElement | null; - } - - /** - * Popup - */ - export class Popup extends Evented { - constructor(options?: maplibregl.PopupOptions); - - addTo(map: maplibregl.Map): this; - - isOpen(): boolean; - - remove(): this; - - getLngLat(): maplibregl.LngLat; - - /** - * Sets the geographical location of the popup's anchor, and moves the popup to it. Replaces trackPointer() behavior. - * - * @param lnglat The geographical location to set as the popup's anchor. - */ - setLngLat(lnglat: LngLatLike): this; - - /** - * Tracks the popup anchor to the cursor position, on screens with a pointer device (will be hidden on touchscreens). Replaces the setLngLat behavior. - * For most use cases, `closeOnClick` and `closeButton` should also be set to `false` here. - */ - trackPointer(): this; - - /** Returns the `Popup`'s HTML element. */ - getElement(): HTMLElement; - - setText(text: string): this; - - setHTML(html: string): this; - - setDOMContent(htmlNode: Node): this; - - getMaxWidth(): string; - - setMaxWidth(maxWidth: string): this; - - /** - * Adds a CSS class to the popup container element. - * - * @param {string} className Non-empty string with CSS class name to add to popup container - * - * @example - * let popup = new maplibregl.Popup() - * popup.addClassName('some-class') - */ - addClassName(className: string): void; - - /** - * Removes a CSS class from the popup container element. - * - * @param {string} className Non-empty string with CSS class name to remove from popup container - * - * @example - * let popup = new maplibregl.Popup() - * popup.removeClassName('some-class') - */ - removeClassName(className: string): void; - - /** - * Sets the popup's offset. - * - * @param offset Sets the popup's offset. - * @returns {Popup} `this` - */ - setOffset(offset?: Offset | null): this; - - /** - * Add or remove the given CSS class on the popup container, depending on whether the container currently has that class. - * - * @param {string} className Non-empty string with CSS class name to add/remove - * - * @returns {boolean} if the class was removed return false, if class was added, then return true - * - * @example - * let popup = new maplibregl.Popup() - * popup.toggleClassName('toggleClass') - */ - toggleClassName(className: string): boolean; - } - - export interface PopupOptions { - closeButton?: boolean; - - closeOnClick?: boolean; - - /** - * @param {boolean} [options.closeOnMove=false] If `true`, the popup will closed when the map moves. - */ - closeOnMove?: boolean; - - /** - * @param {boolean} [options.focusAfterOpen=true] If `true`, the popup will try to focus the - * first focusable element inside the popup. - */ - focusAfterOpen?: boolean | null; - - anchor?: Anchor; - - offset?: Offset | null; - - className?: string; - - maxWidth?: string; - } - - export interface Style { - bearing?: number; - center?: number[]; - glyphs?: string; - layers?: AnyLayer[]; - metadata?: any; - name?: string; - pitch?: number; - light?: Light; - sources?: Sources; - sprite?: string; - transition?: Transition; - version: number; - zoom?: number; - } - - export interface Transition { - delay?: number; - duration?: number; - } - - export interface Light { - anchor?: 'map' | 'viewport'; - position?: number[]; - 'position-transition'?: Transition; - color?: string; - 'color-transition'?: Transition; - intensity?: number; - 'intensity-transition'?: Transition; - } - - export interface Sources { - [sourceName: string]: AnySourceData; - } - - export type PromoteIdSpecification = { [key: string]: string } | string; - - export type AnySourceData = - | GeoJSONSourceRaw - | VideoSourceRaw - | ImageSourceRaw - | CanvasSourceRaw - | VectorSource - | RasterSource - | RasterDemSource; - - interface VectorSourceImpl extends VectorSource { - /** - * Sets the source `tiles` property and re-renders the map. - * - * @param {string[]} tiles An array of one or more tile source URLs, as in the TileJSON spec. - * @returns {VectorTileSource} this - */ - setTiles(tiles: ReadonlyArray): VectorSourceImpl; - - /** - * Sets the source `url` property and re-renders the map. - * - * @param {string} url A URL to a TileJSON resource. Supported protocols are `http:`, `https:`, and `mapbox://`. - * @returns {VectorTileSource} this - */ - setUrl(url: string): VectorSourceImpl; - } - - export type AnySourceImpl = - | GeoJSONSource - | VideoSource - | ImageSource - | CanvasSource - | VectorSourceImpl - | RasterSource - | RasterDemSource; - - export interface Source { - type: 'vector' | 'raster' | 'raster-dem' | 'geojson' | 'image' | 'video' | 'canvas'; - } - - /** - * GeoJSONSource - */ - - export interface GeoJSONSourceRaw extends Source, GeoJSONSourceOptions { - type: 'geojson'; - } - - export interface GeoJSONSource extends GeoJSONSourceRaw { - type: 'geojson'; - - setData(data: GeoJSON.Feature | GeoJSON.FeatureCollection | String): this; - - getClusterExpansionZoom(clusterId: number, callback: (error: any, zoom: number) => void): this; - - getClusterChildren( - clusterId: number, - callback: (error: any, features: GeoJSON.Feature[]) => void, - ): this; - - getClusterLeaves( - cluserId: number, - limit: number, - offset: number, - callback: (error: any, features: GeoJSON.Feature[]) => void, - ): this; - } - - export interface GeoJSONSourceOptions { - data?: GeoJSON.Feature | GeoJSON.FeatureCollection | string; - - maxzoom?: number; - - attribution?: string; - - buffer?: number; - - tolerance?: number; - - cluster?: number | boolean; - - clusterRadius?: number; - - clusterMaxZoom?: number; - - /** - * Minimum number of points necessary to form a cluster if clustering is enabled. Defaults to `2`. - */ - clusterMinPoints?: number; - - clusterProperties?: object; - - lineMetrics?: boolean; - - generateId?: boolean; - - promoteId?: PromoteIdSpecification; - - filter?: any; - } - - /** - * VideoSource - */ - export interface VideoSourceRaw extends Source, VideoSourceOptions { - type: 'video'; - } - - export class VideoSource implements VideoSourceRaw { - type: 'video'; - - constructor(options?: maplibregl.VideoSourceOptions); - - getVideo(): HTMLVideoElement; - - setCoordinates(coordinates: number[][]): this; - } - - export interface VideoSourceOptions { - urls?: string[]; - - coordinates?: number[][]; - } - - /** - * ImageSource - */ - export interface ImageSourceRaw extends Source, ImageSourceOptions { - type: 'image'; - } - - export class ImageSource implements ImageSourceRaw { - type: 'image'; - - constructor(options?: maplibregl.ImageSourceOptions); - - updateImage(options: ImageSourceOptions): this; - - setCoordinates(coordinates: number[][]): this; - } - - export interface ImageSourceOptions { - url?: string; - - coordinates?: number[][]; - } - - /** - * CanvasSource - */ - export interface CanvasSourceRaw extends Source, CanvasSourceOptions { - type: 'canvas'; - } - - export class CanvasSource implements CanvasSourceRaw { - type: 'canvas'; - - coordinates: number[][]; - - canvas: string | HTMLCanvasElement; - - play(): void; - - pause(): void; - - getCanvas(): HTMLCanvasElement; - - setCoordinates(coordinates: number[][]): this; - } - - export interface CanvasSourceOptions { - coordinates: number[][]; - - animate?: boolean; - - canvas: string | HTMLCanvasElement; - } - - interface VectorSource extends Source { - type: 'vector'; - url?: string; - tiles?: string[]; - bounds?: number[]; - scheme?: 'xyz' | 'tms'; - minzoom?: number; - maxzoom?: number; - attribution?: string; - promoteId?: PromoteIdSpecification; - } - - interface RasterSource extends Source { - type: 'raster'; - url?: string; - tiles?: string[]; - bounds?: number[]; - minzoom?: number; - maxzoom?: number; - tileSize?: number; - scheme?: 'xyz' | 'tms'; - attribution?: string; - } - - interface RasterDemSource extends Source { - type: 'raster-dem'; - url?: string; - tiles?: string[]; - bounds?: number[]; - minzoom?: number; - maxzoom?: number; - tileSize?: number; - attribution?: string; - encoding?: 'terrarium' | 'mapbox'; - } - - /** - * LngLat - */ - export class LngLat { - lng: number; - lat: number; - - constructor(lng: number, lat: number); - - /** Return a new LngLat object whose longitude is wrapped to the range (-180, 180). */ - wrap(): maplibregl.LngLat; - - /** Return a LngLat as an array */ - toArray(): number[]; - - /** Return a LngLat as a string */ - toString(): string; - - /** Returns the approximate distance between a pair of coordinates in meters - * Uses the Haversine Formula (from R.W. Sinnott, "Virtues of the Haversine", Sky and Telescope, vol. 68, no. 2, 1984, p. 159) */ - distanceTo(lngLat: LngLat): number; - - toBounds(radius: number): LngLatBounds; - - static convert(input: LngLatLike): maplibregl.LngLat; - } - - /** - * LngLatBounds - */ - export class LngLatBounds { - sw: LngLatLike; - ne: LngLatLike; - - constructor(boundsLike?: [LngLatLike, LngLatLike] | [number, number, number, number]); - constructor(sw: LngLatLike, ne: LngLatLike); - - setNorthEast(ne: LngLatLike): this; - - setSouthWest(sw: LngLatLike): this; - - /** Check if the point is within the bounding box. */ - contains(lnglat: LngLatLike): boolean; - - /** Extend the bounds to include a given LngLat or LngLatBounds. */ - extend(obj: maplibregl.LngLatLike | maplibregl.LngLatBoundsLike): this; - - /** Get the point equidistant from this box's corners */ - getCenter(): maplibregl.LngLat; - - /** Get southwest corner */ - getSouthWest(): maplibregl.LngLat; - - /** Get northeast corner */ - getNorthEast(): maplibregl.LngLat; - - /** Get northwest corner */ - getNorthWest(): maplibregl.LngLat; - - /** Get southeast corner */ - getSouthEast(): maplibregl.LngLat; - - /** Get west edge longitude */ - getWest(): number; - - /** Get south edge latitude */ - getSouth(): number; - - /** Get east edge longitude */ - getEast(): number; - - /** Get north edge latitude */ - getNorth(): number; - - /** Returns a LngLatBounds as an array */ - toArray(): number[][]; - - /** Return a LngLatBounds as a string */ - toString(): string; - - /** Returns a boolean */ - isEmpty(): boolean; - - /** Convert an array to a LngLatBounds object, or return an existing LngLatBounds object unchanged. */ - static convert(input: LngLatBoundsLike): maplibregl.LngLatBounds; - } - - /** - * Point - */ - // Todo: Pull out class to seperate definition for Module "point-geometry" - export class Point { - x: number; - y: number; - - constructor(x: number, y: number); - - clone(): Point; - - add(p: Point): Point; - - sub(p: Point): Point; - - mult(k: number): Point; - - div(k: number): Point; - - rotate(a: number): Point; - - matMult(m: number): Point; - - unit(): Point; - - perp(): Point; - - round(): Point; - - mag(): number; - - equals(p: Point): boolean; - - dist(p: Point): number; - - distSqr(p: Point): number; - - angle(): number; - - angleTo(p: Point): number; - - angleWidth(p: Point): number; - - angleWithSep(x: number, y: number): number; - - static convert(a: PointLike): Point; - } - - /** - * MercatorCoordinate - */ - export class MercatorCoordinate { - /** The x component of the position. */ - x: number; - - /** The y component of the position. */ - y: number; - - /** - * The z component of the position. - * - * @default 0 - */ - z?: number; - - constructor(x: number, y: number, z?: number); - - /** Returns the altitude in meters of the coordinate. */ - toAltitude(): number; - - /** Returns the LngLat for the coordinate. */ - toLngLat(): LngLat; - - /** - * Returns the distance of 1 meter in MercatorCoordinate units at this latitude. - * - * For coordinates in real world units using meters, this naturally provides the - * scale to transform into MercatorCoordinates. - */ - meterInMercatorCoordinateUnits(): number; - - /** Project a LngLat to a MercatorCoordinate. */ - static fromLngLat(lngLatLike: LngLatLike, altitude?: number): MercatorCoordinate; - } - - /** - * Marker - */ - export class Marker extends Evented { - constructor(options?: maplibregl.MarkerOptions); - - constructor(element?: HTMLElement, options?: maplibregl.MarkerOptions); - - addTo(map: Map): this; - - remove(): this; - - getLngLat(): LngLat; - - setLngLat(lngLat: LngLatLike): this; - - getElement(): HTMLElement; - - setPopup(popup?: Popup): this; - - getPopup(): Popup; - - togglePopup(): this; - - getOffset(): PointLike; - - setOffset(offset: PointLike): this; - - setDraggable(shouldBeDraggable: boolean): this; - - isDraggable(): boolean; - - getRotationAlignment(): Alignment; - - setRotationAlignment(alignment: Alignment): this; - - getPitchAlignment(): Alignment; - - setPitchAlignment(alignment: Alignment): this; - } - - type Alignment = 'map' | 'viewport' | 'auto'; - - export interface MarkerOptions { - /** DOM element to use as a marker. The default is a light blue, droplet-shaped SVG marker */ - element?: HTMLElement; - - /** The offset in pixels as a PointLike object to apply relative to the element's center. Negatives indicate left and up. */ - offset?: PointLike; - - /** A string indicating the part of the Marker that should be positioned closest to the coordinate set via Marker.setLngLat. - * Options are `'center'`, `'top'`, `'bottom'`, `'left'`, `'right'`, `'top-left'`, `'top-right'`, `'bottom-left'`, and `'bottom-right'`. - * The default value os `'center'` - */ - anchor?: Anchor; - - /** The color to use for the default marker if options.element is not provided. The default is light blue (#3FB1CE). */ - color?: string; - - /** A boolean indicating whether or not a marker is able to be dragged to a new position on the map. The default value is false */ - draggable?: boolean; - - /** - * The max number of pixels a user can shift the mouse pointer during a click on the marker for it to be considered a valid click - * (as opposed to a marker drag). The default (0) is to inherit map's clickTolerance. - */ - clickTolerance?: number | null; - - /** The rotation angle of the marker in degrees, relative to its `rotationAlignment` setting. A positive value will rotate the marker clockwise. - * The default value is 0. - */ - rotation?: number; - - /** `map` aligns the `Marker`'s rotation relative to the map, maintaining a bearing as the map rotates. - * `viewport` aligns the `Marker`'s rotation relative to the viewport, agnostic to map rotations. - * `auto` is equivalent to `viewport`. - * The default value is `auto` - */ - rotationAlignment?: Alignment; - - /** `map` aligns the `Marker` to the plane of the map. - * `viewport` aligns the `Marker` to the plane of the viewport. - * `auto` automatically matches the value of `rotationAlignment`. - * The default value is `auto`. - */ - pitchAlignment?: Alignment; - - /** The scale to use for the default marker if options.element is not provided. - * The default scale (1) corresponds to a height of `41px` and a width of `27px`. - */ - scale?: number; - } - - /** - * Evented - */ - export class Evented { - on(type: string, listener: Function): this; - - off(type?: string | any, listener?: Function): this; - - once(type: string, listener: Function): this; - - // https://github.com/mapbox/mapbox-gl-js/issues/6522 - fire(type: string, properties?: { [key: string]: any }): this; - } - - /** - * StyleOptions - */ - export interface StyleOptions { - transition?: boolean; - } - - export type MapboxGeoJSONFeature = GeoJSON.Feature & { - layer: Layer; - source: string; - sourceLayer: string; - state: { [key: string]: any }; - }; - - export type EventData = { [key: string]: any }; - - export class MapboxEvent { - type: string; - target: Map; - originalEvent: TOrig; - } - - export class MapMouseEvent extends MapboxEvent { - type: - | 'mousedown' - | 'mouseup' - | 'click' - | 'dblclick' - | 'mousemove' - | 'mouseover' - | 'mouseenter' - | 'mouseleave' - | 'mouseout' - | 'contextmenu'; - - point: Point; - lngLat: LngLat; - - preventDefault(): void; - defaultPrevented: boolean; - } - - export type MapLayerMouseEvent = MapMouseEvent & { features?: MapboxGeoJSONFeature[] }; - - export class MapTouchEvent extends MapboxEvent { - type: 'touchstart' | 'touchend' | 'touchcancel'; - - point: Point; - lngLat: LngLat; - points: Point[]; - lngLats: LngLat[]; - - preventDefault(): void; - defaultPrevented: boolean; - } - - export type MapLayerTouchEvent = MapTouchEvent & { features?: MapboxGeoJSONFeature[] }; - - export class MapWheelEvent extends MapboxEvent { - type: 'wheel'; - - preventDefault(): void; - defaultPrevented: boolean; - } - - export interface MapBoxZoomEvent extends MapboxEvent { - type: 'boxzoomstart' | 'boxzoomend' | 'boxzoomcancel'; - - boxZoomBounds: LngLatBounds; - } - - export type MapDataEvent = MapSourceDataEvent | MapStyleDataEvent; - - export interface MapStyleDataEvent extends MapboxEvent { - dataType: 'style'; - } - - export interface MapSourceDataEvent extends MapboxEvent { - dataType: 'source'; - isSourceLoaded: boolean; - source: Source; - sourceId: string; - sourceDataType: 'metadata' | 'content'; - tile: any; - coord: Coordinate; - } - - export interface Coordinate { - canonical: CanonicalCoordinate; - wrap: number; - key: number; - } - - export interface CanonicalCoordinate { - x: number; - y: number; - z: number; - key: number; - equals(coord: CanonicalCoordinate): boolean; - } - - export interface MapContextEvent extends MapboxEvent { - type: 'webglcontextlost' | 'webglcontextrestored'; - } - - export class ErrorEvent extends MapboxEvent { - type: 'error'; - error: Error; - } - - /** - * FilterOptions - */ - export interface FilterOptions { - /** - * Whether to check if the filter conforms to the Mapbox GL Style Specification. - * Disabling validation is a performance optimization that should only be used - * if you have previously validated the values you will be passing to this function. - */ - validate?: boolean | null; - } - - /** - * AnimationOptions - */ - export interface AnimationOptions { - /** Number in milliseconds */ - duration?: number; - /** - * A function taking a time in the range 0..1 and returning a number where 0 is the initial - * state and 1 is the final state. - */ - easing?: (time: number) => number; - /** point, origin of movement relative to map center */ - offset?: PointLike; - /** When set to false, no animation happens */ - animate?: boolean; - - /** If `true`, then the animation is considered essential and will not be affected by `prefers-reduced-motion`. - * Otherwise, the transition will happen instantly if the user has enabled the `reduced motion` accesibility feature in their operating system. - */ - essential?: boolean; - } - - /** - * CameraOptions - */ - export interface CameraOptions { - /** Map center */ - center?: LngLatLike; - /** Map zoom level */ - zoom?: number; - /** Map rotation bearing in degrees counter-clockwise from north */ - bearing?: number; - /** Map angle in degrees at which the camera is looking at the ground */ - pitch?: number; - /** If zooming, the zoom center (defaults to map center) */ - around?: LngLatLike; - } - - export interface CameraForBoundsOptions extends CameraOptions { - padding?: number | RequireAtLeastOne; - offset?: PointLike; - maxZoom?: number; - } - - // The Mapbox docs say that if the result is defined, it will have zoom, center and bearing set. - // In practice center is always a {lat, lng} object. - export type CameraForBoundsResult = Required> & { - /** Map center */ - center: { lng: number; lat: number }; - }; - - /** - * FlyToOptions - */ - export interface FlyToOptions extends AnimationOptions, CameraOptions { - curve?: number; - minZoom?: number; - speed?: number; - screenSpeed?: number; - maxDuration?: number; - } - - /** - * EaseToOptions - */ - export interface EaseToOptions extends AnimationOptions, CameraOptions { - delayEndEvents?: number; - padding?: number | RequireAtLeastOne; - } - - export interface FitBoundsOptions extends maplibregl.FlyToOptions { - linear?: boolean; - padding?: number | RequireAtLeastOne; - offset?: maplibregl.PointLike; - maxZoom?: number; - maxDuration?: number; - } - - /** - * MapEvent - */ - export type MapEventType = { - error: ErrorEvent; - - load: MapboxEvent; - idle: MapboxEvent; - remove: MapboxEvent; - render: MapboxEvent; - resize: MapboxEvent; - - webglcontextlost: MapContextEvent; - webglcontextrestored: MapContextEvent; - - dataloading: MapDataEvent; - data: MapDataEvent; - tiledataloading: MapDataEvent; - sourcedataloading: MapSourceDataEvent; - styledataloading: MapStyleDataEvent; - sourcedata: MapSourceDataEvent; - styledata: MapStyleDataEvent; - - boxzoomcancel: MapBoxZoomEvent; - boxzoomstart: MapBoxZoomEvent; - boxzoomend: MapBoxZoomEvent; - - touchcancel: MapTouchEvent; - touchmove: MapTouchEvent; - touchend: MapTouchEvent; - touchstart: MapTouchEvent; - - click: MapMouseEvent; - contextmenu: MapMouseEvent; - dblclick: MapMouseEvent; - mousemove: MapMouseEvent; - mouseup: MapMouseEvent; - mousedown: MapMouseEvent; - mouseout: MapMouseEvent; - mouseover: MapMouseEvent; - - movestart: MapboxEvent; - move: MapboxEvent; - moveend: MapboxEvent; - - zoomstart: MapboxEvent; - zoom: MapboxEvent; - zoomend: MapboxEvent; - - rotatestart: MapboxEvent; - rotate: MapboxEvent; - rotateend: MapboxEvent; - - dragstart: MapboxEvent; - drag: MapboxEvent; - dragend: MapboxEvent; - - pitchstart: MapboxEvent; - pitch: MapboxEvent; - pitchend: MapboxEvent; - - wheel: MapWheelEvent; - }; - - export type MapLayerEventType = { - click: MapLayerMouseEvent; - dblclick: MapLayerMouseEvent; - mousedown: MapLayerMouseEvent; - mouseup: MapLayerMouseEvent; - mousemove: MapLayerMouseEvent; - mouseenter: MapLayerMouseEvent; - mouseleave: MapLayerMouseEvent; - mouseover: MapLayerMouseEvent; - mouseout: MapLayerMouseEvent; - contextmenu: MapLayerMouseEvent; - - touchstart: MapLayerTouchEvent; - touchend: MapLayerTouchEvent; - touchcancel: MapLayerTouchEvent; - }; - - export type AnyLayout = - | BackgroundLayout - | FillLayout - | FillExtrusionLayout - | LineLayout - | SymbolLayout - | RasterLayout - | CircleLayout - | HeatmapLayout - | HillshadeLayout; - - export type AnyPaint = - | BackgroundPaint - | FillPaint - | FillExtrusionPaint - | LinePaint - | SymbolPaint - | RasterPaint - | CirclePaint - | HeatmapPaint - | HillshadePaint; - - interface Layer { - id: string; - type: string; - - metadata?: any; - ref?: string; - - source?: string | AnySourceData; - - 'source-layer'?: string; - - minzoom?: number; - maxzoom?: number; - - interactive?: boolean; - - filter?: any[]; - layout?: Layout; - paint?: object; - } - - interface BackgroundLayer extends Layer { - type: 'background'; - layout?: BackgroundLayout; - paint?: BackgroundPaint; - } - - interface CircleLayer extends Layer { - type: 'circle'; - layout?: CircleLayout; - paint?: CirclePaint; - } - - interface FillExtrusionLayer extends Layer { - type: 'fill-extrusion'; - layout?: FillExtrusionLayout; - paint?: FillExtrusionPaint; - } - - interface FillLayer extends Layer { - type: 'fill'; - layout?: FillLayout; - paint?: FillPaint; - } - - interface HeatmapLayer extends Layer { - type: 'heatmap'; - layout?: HeatmapLayout; - paint?: HeatmapPaint; - } - - interface HillshadeLayer extends Layer { - type: 'hillshade'; - layout?: HillshadeLayout; - paint?: HillshadePaint; - } - - interface LineLayer extends Layer { - type: 'line'; - layout?: LineLayout; - paint?: LinePaint; - } - - interface RasterLayer extends Layer { - type: 'raster'; - layout?: RasterLayout; - paint?: RasterPaint; - } - - interface SymbolLayer extends Layer { - type: 'symbol'; - layout?: SymbolLayout; - paint?: SymbolPaint; - } - - export type AnyLayer = - | BackgroundLayer - | CircleLayer - | FillExtrusionLayer - | FillLayer - | HeatmapLayer - | HillshadeLayer - | LineLayer - | RasterLayer - | SymbolLayer - | CustomLayerInterface; - - // See https://docs.mapbox.com/mapbox-gl-js/api/#customlayerinterface - export interface CustomLayerInterface { - /** A unique layer id. */ - id: string; - - /* The layer's type. Must be "custom". */ - type: 'custom'; - - /* Either "2d" or "3d". Defaults to "2d". */ - renderingMode?: '2d' | '3d'; - - /** - * Optional method called when the layer has been removed from the Map with Map#removeLayer. - * This gives the layer a chance to clean up gl resources and event listeners. - * @param map The Map this custom layer was just added to. - * @param gl The gl context for the map. - */ - onRemove?(map: maplibregl.Map, gl: WebGLRenderingContext): void; - - /** - * Optional method called when the layer has been added to the Map with Map#addLayer. - * This gives the layer a chance to initialize gl resources and register event listeners. - * @param map The Map this custom layer was just added to. - * @param gl The gl context for the map. - */ - onAdd?(map: maplibregl.Map, gl: WebGLRenderingContext): void; - - /** - * Optional method called during a render frame to allow a layer to prepare resources - * or render into a texture. - * - * The layer cannot make any assumptions about the current GL state and must bind a framebuffer - * before rendering. - * @param gl The map's gl context. - * @param matrix The map's camera matrix. It projects spherical mercator coordinates to gl - * coordinates. The mercator coordinate [0, 0] represents the top left corner of - * the mercator world and [1, 1] represents the bottom right corner. When the - * renderingMode is "3d" , the z coordinate is conformal. A box with identical - * x, y, and z lengths in mercator units would be rendered as a cube. - * MercatorCoordinate .fromLatLng can be used to project a LngLat to a mercator - * coordinate. - */ - prerender?(gl: WebGLRenderingContext, matrix: number[]): void; - - /** - * Called during a render frame allowing the layer to draw into the GL context. - * - * The layer can assume blending and depth state is set to allow the layer to properly blend - * and clip other layers. The layer cannot make any other assumptions about the current GL state. - * - * If the layer needs to render to a texture, it should implement the prerender method to do this - * and only use the render method for drawing directly into the main framebuffer. - * - * The blend function is set to gl.blendFunc(gl.ONE, gl.ONE_MINUS_SRC_ALPHA). This expects - * colors to be provided in premultiplied alpha form where the r, g and b values are already - * multiplied by the a value. If you are unable to provide colors in premultiplied form you may - * want to change the blend function to - * gl.blendFuncSeparate(gl.SRC_ALPHA, gl.ONE_MINUS_SRC_ALPHA, gl.ONE, gl.ONE_MINUS_SRC_ALPHA). - * - * @param gl The map's gl context. - * @param matrix The map's camera matrix. It projects spherical mercator coordinates to gl - * coordinates. The mercator coordinate [0, 0] represents the top left corner of - * the mercator world and [1, 1] represents the bottom right corner. When the - * renderingMode is "3d" , the z coordinate is conformal. A box with identical - * x, y, and z lengths in mercator units would be rendered as a cube. - * MercatorCoordinate .fromLatLng can be used to project a LngLat to a mercator - * coordinate. - */ - render(gl: WebGLRenderingContext, matrix: number[]): void; - } - - export interface StyleFunction { - stops?: any[][]; - property?: string; - base?: number; - type?: 'identity' | 'exponential' | 'interval' | 'categorical'; - default?: any; - colorSpace?: 'rgb' | 'lab' | 'hcl'; - } - - type Visibility = 'visible' | 'none'; - - export interface Layout { - visibility?: Visibility; - } - - export interface BackgroundLayout extends Layout {} - - export interface BackgroundPaint { - 'background-color'?: string | Expression; - 'background-color-transition'?: Transition; - 'background-pattern'?: string; - 'background-pattern-transition'?: Transition; - 'background-opacity'?: number | Expression; - 'background-opacity-transition'?: Transition; - } - - export interface FillLayout extends Layout { - 'fill-sort-key'?: number | Expression; - } - - export interface FillPaint { - 'fill-antialias'?: boolean | Expression; - 'fill-opacity'?: number | StyleFunction | Expression; - 'fill-opacity-transition'?: Transition; - 'fill-color'?: string | StyleFunction | Expression; - 'fill-color-transition'?: Transition; - 'fill-outline-color'?: string | StyleFunction | Expression; - 'fill-outline-color-transition'?: Transition; - 'fill-translate'?: number[]; - 'fill-translate-transition'?: Transition; - 'fill-translate-anchor'?: 'map' | 'viewport'; - 'fill-pattern'?: string | Expression; - 'fill-pattern-transition'?: Transition; - } - - export interface FillExtrusionLayout extends Layout {} - - export interface FillExtrusionPaint { - 'fill-extrusion-opacity'?: number | Expression; - 'fill-extrusion-opacity-transition'?: Transition; - 'fill-extrusion-color'?: string | StyleFunction | Expression; - 'fill-extrusion-color-transition'?: Transition; - 'fill-extrusion-translate'?: number[] | Expression; - 'fill-extrusion-translate-transition'?: Transition; - 'fill-extrusion-translate-anchor'?: 'map' | 'viewport'; - 'fill-extrusion-pattern'?: string | Expression; - 'fill-extrusion-pattern-transition'?: Transition; - 'fill-extrusion-height'?: number | StyleFunction | Expression; - 'fill-extrusion-height-transition'?: Transition; - 'fill-extrusion-base'?: number | StyleFunction | Expression; - 'fill-extrusion-base-transition'?: Transition; - 'fill-extrusion-vertical-gradient'?: boolean; - } - - export interface LineLayout extends Layout { - 'line-cap'?: 'butt' | 'round' | 'square'; - 'line-join'?: 'bevel' | 'round' | 'miter' | Expression; - 'line-miter-limit'?: number | Expression; - 'line-round-limit'?: number | Expression; - 'line-sort-key'?: number | Expression; - } - - export interface LinePaint { - 'line-opacity'?: number | StyleFunction | Expression; - 'line-opacity-transition'?: Transition; - 'line-color'?: string | StyleFunction | Expression; - 'line-color-transition'?: Transition; - 'line-translate'?: number[] | Expression; - 'line-translate-transition'?: Transition; - 'line-translate-anchor'?: 'map' | 'viewport'; - 'line-width'?: number | StyleFunction | Expression; - 'line-width-transition'?: Transition; - 'line-gap-width'?: number | StyleFunction | Expression; - 'line-gap-width-transition'?: Transition; - 'line-offset'?: number | StyleFunction | Expression; - 'line-offset-transition'?: Transition; - 'line-blur'?: number | StyleFunction | Expression; - 'line-blur-transition'?: Transition; - 'line-dasharray'?: number[] | Expression; - 'line-dasharray-transition'?: Transition; - 'line-pattern'?: string | Expression; - 'line-pattern-transition'?: Transition; - 'line-gradient'?: Expression; - } - - export interface SymbolLayout extends Layout { - 'symbol-placement'?: 'point' | 'line' | 'line-center'; - 'symbol-spacing'?: number | Expression; - 'symbol-avoid-edges'?: boolean; - 'symbol-z-order'?: 'viewport-y' | 'source'; - 'icon-allow-overlap'?: boolean | StyleFunction | Expression; - 'icon-ignore-placement'?: boolean; - 'icon-optional'?: boolean; - 'icon-rotation-alignment'?: 'map' | 'viewport' | 'auto'; - 'icon-size'?: number | StyleFunction | Expression; - 'icon-text-fit'?: 'none' | 'both' | 'width' | 'height'; - 'icon-text-fit-padding'?: number[] | Expression; - 'icon-image'?: string | StyleFunction | Expression; - 'icon-rotate'?: number | StyleFunction | Expression; - 'icon-padding'?: number | Expression; - 'icon-keep-upright'?: boolean; - 'icon-offset'?: number[] | StyleFunction | Expression; - 'icon-anchor'?: Anchor | StyleFunction | Expression; - 'icon-pitch-alignment'?: 'map' | 'viewport' | 'auto'; - 'text-pitch-alignment'?: 'map' | 'viewport' | 'auto'; - 'text-rotation-alignment'?: 'map' | 'viewport' | 'auto'; - 'text-field'?: string | StyleFunction | Expression; - 'text-font'?: string | string[] | Expression; - 'text-size'?: number | StyleFunction | Expression; - 'text-max-width'?: number | StyleFunction | Expression; - 'text-line-height'?: number | Expression; - 'text-letter-spacing'?: number | Expression; - 'text-justify'?: 'left' | 'center' | 'right' | Expression; - 'text-anchor'?: Anchor | StyleFunction | Expression; - 'text-max-angle'?: number | Expression; - 'text-rotate'?: number | StyleFunction | Expression; - 'text-padding'?: number | Expression; - 'text-keep-upright'?: boolean; - 'text-transform'?: 'none' | 'uppercase' | 'lowercase' | StyleFunction | Expression; - 'text-offset'?: number[] | Expression; - 'text-allow-overlap'?: boolean; - 'text-ignore-placement'?: boolean; - 'text-optional'?: boolean; - 'text-radial-offset'?: number | Expression; - 'text-variable-anchor'?: Anchor[]; - 'text-writing-mode'?: ('horizontal' | 'vertical')[]; - 'symbol-sort-key'?: number | Expression; - } - - export interface SymbolPaint { - 'icon-opacity'?: number | StyleFunction | Expression; - 'icon-opacity-transition'?: Transition; - 'icon-color'?: string | StyleFunction | Expression; - 'icon-color-transition'?: Transition; - 'icon-halo-color'?: string | StyleFunction | Expression; - 'icon-halo-color-transition'?: Transition; - 'icon-halo-width'?: number | StyleFunction | Expression; - 'icon-halo-width-transition'?: Transition; - 'icon-halo-blur'?: number | StyleFunction | Expression; - 'icon-halo-blur-transition'?: Transition; - 'icon-translate'?: number[] | Expression; - 'icon-translate-transition'?: Transition; - 'icon-translate-anchor'?: 'map' | 'viewport'; - 'text-opacity'?: number | StyleFunction | Expression; - 'text-opacity-transition'?: Transition; - 'text-color'?: string | StyleFunction | Expression; - 'text-color-transition'?: Transition; - 'text-halo-color'?: string | StyleFunction | Expression; - 'text-halo-color-transition'?: Transition; - 'text-halo-width'?: number | StyleFunction | Expression; - 'text-halo-width-transition'?: Transition; - 'text-halo-blur'?: number | StyleFunction | Expression; - 'text-halo-blur-transition'?: Transition; - 'text-translate'?: number[] | Expression; - 'text-translate-transition'?: Transition; - 'text-translate-anchor'?: 'map' | 'viewport'; - } - - export interface RasterLayout extends Layout {} - - export interface RasterPaint { - 'raster-opacity'?: number | Expression; - 'raster-opacity-transition'?: Transition; - 'raster-hue-rotate'?: number | Expression; - 'raster-hue-rotate-transition'?: Transition; - 'raster-brightness-min'?: number | Expression; - 'raster-brightness-min-transition'?: Transition; - 'raster-brightness-max'?: number | Expression; - 'raster-brightness-max-transition'?: Transition; - 'raster-saturation'?: number | Expression; - 'raster-saturation-transition'?: Transition; - 'raster-contrast'?: number | Expression; - 'raster-contrast-transition'?: Transition; - 'raster-fade-duration'?: number | Expression; - 'raster-resampling'?: 'linear' | 'nearest'; - } - - export interface CircleLayout extends Layout { - 'circle-sort-key'?: number | Expression; - } - - export interface CirclePaint { - 'circle-radius'?: number | StyleFunction | Expression; - 'circle-radius-transition'?: Transition; - 'circle-color'?: string | StyleFunction | Expression; - 'circle-color-transition'?: Transition; - 'circle-blur'?: number | StyleFunction | Expression; - 'circle-blur-transition'?: Transition; - 'circle-opacity'?: number | StyleFunction | Expression; - 'circle-opacity-transition'?: Transition; - 'circle-translate'?: number[] | Expression; - 'circle-translate-transition'?: Transition; - 'circle-translate-anchor'?: 'map' | 'viewport'; - 'circle-pitch-scale'?: 'map' | 'viewport'; - 'circle-pitch-alignment'?: 'map' | 'viewport'; - 'circle-stroke-width'?: number | StyleFunction | Expression; - 'circle-stroke-width-transition'?: Transition; - 'circle-stroke-color'?: string | StyleFunction | Expression; - 'circle-stroke-color-transition'?: Transition; - 'circle-stroke-opacity'?: number | StyleFunction | Expression; - 'circle-stroke-opacity-transition'?: Transition; - } - - export interface HeatmapLayout extends Layout {} - - export interface HeatmapPaint { - 'heatmap-radius'?: number | StyleFunction | Expression; - 'heatmap-radius-transition'?: Transition; - 'heatmap-weight'?: number | StyleFunction | Expression; - 'heatmap-intensity'?: number | StyleFunction | Expression; - 'heatmap-intensity-transition'?: Transition; - 'heatmap-color'?: string | StyleFunction | Expression; - 'heatmap-opacity'?: number | StyleFunction | Expression; - 'heatmap-opacity-transition'?: Transition; - } - - export interface HillshadeLayout extends Layout {} - - export interface HillshadePaint { - 'hillshade-illumination-direction'?: number | Expression; - 'hillshade-illumination-anchor'?: 'map' | 'viewport'; - 'hillshade-exaggeration'?: number | Expression; - 'hillshade-exaggeration-transition'?: Transition; - 'hillshade-shadow-color'?: string | Expression; - 'hillshade-shadow-color-transition'?: Transition; - 'hillshade-highlight-color'?: string | Expression; - 'hillshade-highlight-color-transition'?: Transition; - 'hillshade-accent-color'?: string | Expression; - 'hillshade-accent-color-transition'?: Transition; - } -} diff --git a/src/index.js b/src/index.ts similarity index 97% rename from src/index.js rename to src/index.ts index e559b7defb..aa80303643 100644 --- a/src/index.js +++ b/src/index.ts @@ -1,9 +1,6 @@ -// @flow - import assert from 'assert'; import supported from '@mapbox/mapbox-gl-supported'; -import {version} from '../package.json'; import Map from './ui/map'; import NavigationControl from './ui/control/navigation_control'; import GeolocateControl from './ui/control/geolocate_control'; @@ -15,7 +12,7 @@ import Marker from './ui/marker'; import Style from './style/style'; import LngLat from './geo/lng_lat'; import LngLatBounds from './geo/lng_lat_bounds'; -import Point from '@mapbox/point-geometry'; +import Point from './util/point'; import MercatorCoordinate from './geo/mercator_coordinate'; import {Evented} from './util/evented'; import config from './util/config'; @@ -30,7 +27,6 @@ import type {RequestParameters, ResponseCallback} from './util/ajax'; import type {Cancelable} from './types/cancelable'; const exported = { - version, supported, setRTLTextPlugin, getRTLTextPluginStatus, @@ -92,7 +88,7 @@ const exported = { * maplibregl.accessToken = myAccessToken; * @see [Display a map](https://maplibre.org/maplibre-gl-js-docs/examples/) */ - get accessToken(): ?string { + get accessToken(): string | undefined | null { return config.ACCESS_TOKEN; }, @@ -108,7 +104,7 @@ const exported = { * @example * maplibregl.baseApiUrl = 'https://api.mapbox.com'; */ - get baseApiUrl(): ?string { + get baseApiUrl(): string | undefined | null { return config.API_URL; }, @@ -168,7 +164,7 @@ const exported = { * @example * maplibregl.clearStorage(); */ - clearStorage(callback?: (err: ?Error) => void) { + clearStorage(callback?: (err?: Error | null) => void) { clearTileCache(callback); }, diff --git a/src/render/draw_background.js b/src/render/draw_background.ts similarity index 99% rename from src/render/draw_background.js rename to src/render/draw_background.ts index 3855b519da..e54905b287 100644 --- a/src/render/draw_background.js +++ b/src/render/draw_background.ts @@ -1,5 +1,3 @@ -// @flow - import StencilMode from '../gl/stencil_mode'; import DepthMode from '../gl/depth_mode'; import CullFaceMode from '../gl/cull_face_mode'; diff --git a/src/render/draw_circle.js b/src/render/draw_circle.ts similarity index 90% rename from src/render/draw_circle.js rename to src/render/draw_circle.ts index d0d152bcac..3e13a27db5 100644 --- a/src/render/draw_circle.js +++ b/src/render/draw_circle.ts @@ -1,5 +1,3 @@ -// @flow - import StencilMode from '../gl/stencil_mode'; import DepthMode from '../gl/depth_mode'; import CullFaceMode from '../gl/cull_face_mode'; @@ -21,17 +19,17 @@ import type {CircleUniformsType} from './program/circle_program'; export default drawCircles; type TileRenderState = { - programConfiguration: ProgramConfiguration, - program: Program<*>, - layoutVertexBuffer: VertexBuffer, - indexBuffer: IndexBuffer, - uniformValues: UniformValues + programConfiguration: ProgramConfiguration; + program: Program; + layoutVertexBuffer: VertexBuffer; + indexBuffer: IndexBuffer; + uniformValues: UniformValues; }; type SegmentsTileRenderState = { - segments: SegmentVector, - sortKey: number, - state: TileRenderState + segments: SegmentVector; + sortKey: number; + state: TileRenderState; }; function drawCircles(painter: Painter, sourceCache: SourceCache, layer: CircleStyleLayer, coords: Array) { @@ -61,7 +59,7 @@ function drawCircles(painter: Painter, sourceCache: SourceCache, layer: CircleSt const coord = coords[i]; const tile = sourceCache.getTile(coord); - const bucket: ?CircleBucket<*> = (tile.getBucket(layer): any); + const bucket: CircleBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; const programConfiguration = bucket.programConfigurations.get(layer.id); @@ -83,7 +81,7 @@ function drawCircles(painter: Painter, sourceCache: SourceCache, layer: CircleSt for (const segment of oldSegments) { segmentsRenderStates.push({ segments: new SegmentVector([segment]), - sortKey: ((segment.sortKey: any): number), + sortKey: (segment.sortKey as any as number), state }); } diff --git a/src/render/draw_collision_debug.js b/src/render/draw_collision_debug.ts similarity index 96% rename from src/render/draw_collision_debug.js rename to src/render/draw_collision_debug.ts index 473238be02..c836af42ff 100644 --- a/src/render/draw_collision_debug.js +++ b/src/render/draw_collision_debug.ts @@ -1,5 +1,3 @@ -// @flow - import type Painter from './painter'; import type SourceCache from '../source/source_cache'; import type StyleLayer from '../style/style_layer'; @@ -20,13 +18,13 @@ import IndexBuffer from '../gl/index_buffer'; export default drawCollisionDebug; type TileBatch = { - circleArray: Array, - circleOffset: number, - transform: mat4, - invTransform: mat4 + circleArray: Array; + circleOffset: number; + transform: mat4; + invTransform: mat4; }; -let quadTriangles: ?QuadTriangleArray; +let quadTriangles: QuadTriangleArray | undefined | null; function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: StyleLayer, coords: Array, translate: [number, number], translateAnchor: 'map' | 'viewport', isText: boolean) { const context = painter.context; @@ -39,7 +37,7 @@ function drawCollisionDebug(painter: Painter, sourceCache: SourceCache, layer: S for (let i = 0; i < coords.length; i++) { const coord = coords[i]; const tile = sourceCache.getTile(coord); - const bucket: ?SymbolBucket = (tile.getBucket(layer): any); + const bucket: SymbolBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; let posMatrix = coord.posMatrix; if (translate[0] !== 0 || translate[1] !== 0) { diff --git a/src/render/draw_custom.js b/src/render/draw_custom.ts similarity index 99% rename from src/render/draw_custom.js rename to src/render/draw_custom.ts index a4a90bae2e..3758a99d6f 100644 --- a/src/render/draw_custom.js +++ b/src/render/draw_custom.ts @@ -1,5 +1,3 @@ -// @flow - export default drawCustom; import DepthMode from '../gl/depth_mode'; diff --git a/src/render/draw_debug.js b/src/render/draw_debug.ts similarity index 96% rename from src/render/draw_debug.js rename to src/render/draw_debug.ts index bedb06a573..1a76fcacda 100644 --- a/src/render/draw_debug.js +++ b/src/render/draw_debug.ts @@ -1,12 +1,9 @@ -// @flow - import DepthMode from '../gl/depth_mode'; import StencilMode from '../gl/stencil_mode'; import CullFaceMode from '../gl/cull_face_mode'; import {debugUniformValues} from './program/debug_program'; import Color from '../style-spec/util/color'; import ColorMode from '../gl/color_mode'; -import browser from '../util/browser'; import type Painter from './painter'; import type SourceCache from '../source/source_cache'; @@ -58,7 +55,7 @@ function drawDebugSSRect(painter: Painter, x: number, y: number, width: number, const gl = context.gl; gl.enable(gl.SCISSOR_TEST); - gl.scissor(x * browser.devicePixelRatio, y * browser.devicePixelRatio, width * browser.devicePixelRatio, height * browser.devicePixelRatio); + gl.scissor(x * devicePixelRatio, y * devicePixelRatio, width * devicePixelRatio, height * devicePixelRatio); context.clear({color}); gl.disable(gl.SCISSOR_TEST); } diff --git a/src/render/draw_fill.js b/src/render/draw_fill.ts similarity index 96% rename from src/render/draw_fill.js rename to src/render/draw_fill.ts index 7f673f944d..0574d52f2a 100644 --- a/src/render/draw_fill.js +++ b/src/render/draw_fill.ts @@ -1,5 +1,3 @@ -// @flow - import Color from '../style-spec/util/color'; import DepthMode from '../gl/depth_mode'; import CullFaceMode from '../gl/cull_face_mode'; @@ -30,7 +28,7 @@ function drawFill(painter: Painter, sourceCache: SourceCache, layer: FillStyleLa const pattern = layer.paint.get('fill-pattern'); const pass = painter.opaquePassEnabledForLayer() && - (!pattern.constantOr((1: any)) && + (!pattern.constantOr(1 as any) && color.constantOr(Color.transparent).a === 1 && opacity.constantOr(0) === 1) ? 'opaque' : 'translucent'; @@ -62,7 +60,7 @@ function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode const gl = painter.context.gl; const patternProperty = layer.paint.get('fill-pattern'); - const image = patternProperty && patternProperty.constantOr((1: any)); + const image = patternProperty && patternProperty.constantOr(1 as any); const crossfade = layer.getCrossfadeParameters(); let drawMode, programName, uniformValues, indexBuffer, segments; @@ -78,7 +76,7 @@ function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode const tile = sourceCache.getTile(coord); if (image && !tile.patternsLoaded()) continue; - const bucket: ?FillBucket = (tile.getBucket(layer): any); + const bucket: FillBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; const programConfiguration = bucket.programConfigurations.get(layer.id); @@ -110,7 +108,7 @@ function drawFillTiles(painter, sourceCache, layer, coords, depthMode, colorMode } else { indexBuffer = bucket.indexBuffer2; segments = bucket.segments2; - const drawingBufferSize = [gl.drawingBufferWidth, gl.drawingBufferHeight]; + const drawingBufferSize = [gl.drawingBufferWidth, gl.drawingBufferHeight] as [number, number]; uniformValues = (programName === 'fillOutlinePattern' && image) ? fillOutlinePatternUniformValues(tileMatrix, painter, crossfade, tile, drawingBufferSize) : fillOutlineUniformValues(tileMatrix, drawingBufferSize); diff --git a/src/render/draw_fill_extrusion.js b/src/render/draw_fill_extrusion.ts similarity index 95% rename from src/render/draw_fill_extrusion.js rename to src/render/draw_fill_extrusion.ts index b9a0dde384..8fcab02979 100644 --- a/src/render/draw_fill_extrusion.js +++ b/src/render/draw_fill_extrusion.ts @@ -1,5 +1,3 @@ -// @flow - import DepthMode from '../gl/depth_mode'; import StencilMode from '../gl/stencil_mode'; import ColorMode from '../gl/color_mode'; @@ -26,7 +24,7 @@ function draw(painter: Painter, source: SourceCache, layer: FillExtrusionStyleLa if (painter.renderPass === 'translucent') { const depthMode = new DepthMode(painter.context.gl.LEQUAL, DepthMode.ReadWrite, painter.depthRangeFor3D); - if (opacity === 1 && !layer.paint.get('fill-extrusion-pattern').constantOr((1: any))) { + if (opacity === 1 && !layer.paint.get('fill-extrusion-pattern').constantOr(1 as any)) { const colorMode = painter.colorModeForRenderPass(); drawExtrusionTiles(painter, source, layer, coords, depthMode, StencilMode.disabled, colorMode); @@ -51,13 +49,13 @@ function drawExtrusionTiles(painter, source, layer, coords, depthMode, stencilMo const context = painter.context; const gl = context.gl; const patternProperty = layer.paint.get('fill-extrusion-pattern'); - const image = patternProperty.constantOr((1: any)); + const image = patternProperty.constantOr(1 as any); const crossfade = layer.getCrossfadeParameters(); const opacity = layer.paint.get('fill-extrusion-opacity'); for (const coord of coords) { const tile = source.getTile(coord); - const bucket: ?FillExtrusionBucket = (tile.getBucket(layer): any); + const bucket: FillExtrusionBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; const programConfiguration = bucket.programConfigurations.get(layer.id); diff --git a/src/render/draw_heatmap.js b/src/render/draw_heatmap.ts similarity index 98% rename from src/render/draw_heatmap.js rename to src/render/draw_heatmap.ts index 4b60a48e83..d7d06f4027 100644 --- a/src/render/draw_heatmap.js +++ b/src/render/draw_heatmap.ts @@ -1,5 +1,3 @@ -// @flow - import Texture from './texture'; import Color from '../style-spec/util/color'; import DepthMode from '../gl/depth_mode'; @@ -47,7 +45,7 @@ function drawHeatmap(painter: Painter, sourceCache: SourceCache, layer: HeatmapS if (sourceCache.hasRenderableParent(coord)) continue; const tile = sourceCache.getTile(coord); - const bucket: ?HeatmapBucket = (tile.getBucket(layer): any); + const bucket: HeatmapBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; const programConfiguration = bucket.programConfigurations.get(layer.id); diff --git a/src/render/draw_hillshade.js b/src/render/draw_hillshade.ts similarity index 99% rename from src/render/draw_hillshade.js rename to src/render/draw_hillshade.ts index 25519fce4b..32443c1766 100644 --- a/src/render/draw_hillshade.js +++ b/src/render/draw_hillshade.ts @@ -1,5 +1,3 @@ -// @flow - import Texture from './texture'; import StencilMode from '../gl/stencil_mode'; import DepthMode from '../gl/depth_mode'; diff --git a/src/render/draw_line.js b/src/render/draw_line.ts similarity index 97% rename from src/render/draw_line.js rename to src/render/draw_line.ts index 48c2813b01..ff581e0092 100644 --- a/src/render/draw_line.js +++ b/src/render/draw_line.ts @@ -1,5 +1,3 @@ -// @flow - import DepthMode from '../gl/depth_mode'; import CullFaceMode from '../gl/cull_face_mode'; import Texture from './texture'; @@ -31,7 +29,7 @@ export default function drawLine(painter: Painter, sourceCache: SourceCache, lay const dasharray = layer.paint.get('line-dasharray'); const patternProperty = layer.paint.get('line-pattern'); - const image = patternProperty.constantOr((1: any)); + const image = patternProperty.constantOr(1 as any); const gradient = layer.paint.get('line-gradient'); const crossfade = layer.getCrossfadeParameters(); @@ -51,7 +49,7 @@ export default function drawLine(painter: Painter, sourceCache: SourceCache, lay if (image && !tile.patternsLoaded()) continue; - const bucket: ?LineBucket = (tile.getBucket(layer): any); + const bucket: LineBucket | undefined | null = (tile.getBucket(layer) as any); if (!bucket) continue; const programConfiguration = bucket.programConfigurations.get(layer.id); diff --git a/src/render/draw_raster.js b/src/render/draw_raster.ts similarity index 99% rename from src/render/draw_raster.js rename to src/render/draw_raster.ts index d65cffaa90..47e6689b8f 100644 --- a/src/render/draw_raster.js +++ b/src/render/draw_raster.ts @@ -1,5 +1,3 @@ -// @flow - import {clamp} from '../util/util'; import ImageSource from '../source/image_source'; diff --git a/src/render/draw_symbol.js b/src/render/draw_symbol.ts similarity index 94% rename from src/render/draw_symbol.js rename to src/render/draw_symbol.ts index 9160cd8c82..122e9ae35d 100644 --- a/src/render/draw_symbol.js +++ b/src/render/draw_symbol.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import drawCollisionDebug from './draw_collision_debug'; import SegmentVector from '../data/segment'; @@ -8,11 +6,10 @@ import pixelsToTileUnits from '../source/pixels_to_tile_units'; import * as symbolProjection from '../symbol/projection'; import * as symbolSize from '../symbol/symbol_size'; import {mat4} from 'gl-matrix'; -const identityMat4 = mat4.identity(new Float32Array(16)); import StencilMode from '../gl/stencil_mode'; import DepthMode from '../gl/depth_mode'; import CullFaceMode from '../gl/cull_face_mode'; -import {addDynamicAttributes} from '../data/bucket/symbol_bucket'; +import SymbolBucket, {addDynamicAttributes, SymbolBuffers} from '../data/bucket/symbol_bucket'; import {getAnchorAlignment, WritingMode} from '../symbol/shaping'; import ONE_EM from '../symbol/one_em'; @@ -27,7 +24,7 @@ import { import type Painter from './painter'; import type SourceCache from '../source/source_cache'; import type SymbolStyleLayer from '../style/style_layer/symbol_style_layer'; -import type SymbolBucket, {SymbolBuffers} from '../data/bucket/symbol_bucket'; + import type Texture from '../render/texture'; import type {OverscaledTileID} from '../source/tile_id'; import type {UniformValues} from './uniform_binding'; @@ -37,22 +34,27 @@ import type {CrossTileID, VariableOffset} from '../symbol/placement'; export default drawSymbols; type SymbolTileRenderState = { - segments: SegmentVector, - sortKey: number, - state: { - program: any, - buffers: SymbolBuffers, - uniformValues: any, - atlasTexture: Texture, - atlasTextureIcon: Texture | null, - atlasInterpolation: any, - atlasInterpolationIcon: any, - isSDF: boolean, - hasHalo: boolean - } + segments: SegmentVector; + sortKey: number; + state: { + program: any; + buffers: SymbolBuffers; + uniformValues: any; + atlasTexture: Texture; + atlasTextureIcon: Texture | null; + atlasInterpolation: any; + atlasInterpolationIcon: any; + isSDF: boolean; + hasHalo: boolean; + }; }; -function drawSymbols(painter: Painter, sourceCache: SourceCache, layer: SymbolStyleLayer, coords: Array, variableOffsets: {[_: CrossTileID]: VariableOffset}) { +// create() creates an identity matrix https://github.com/toji/gl-matrix/blob/master/src/mat4.js#L13 +const identityMat4 = mat4.create(); + +function drawSymbols(painter: Painter, sourceCache: SourceCache, layer: SymbolStyleLayer, coords: Array, variableOffsets: { + [_ in CrossTileID]: VariableOffset; +}) { if (painter.renderPass !== 'translucent') return; // Disable the stencil test so that labels aren't clipped to tile boundaries. @@ -118,7 +120,7 @@ function updateVariableAnchors(coords, painter, layer, sourceCache, rotationAlig for (const coord of coords) { const tile = sourceCache.getTile(coord); - const bucket: SymbolBucket = (tile.getBucket(layer): any); + const bucket: SymbolBucket = (tile.getBucket(layer) as any); if (!bucket || !bucket.text || !bucket.text.segments.get().length) continue; const sizeData = bucket.textSizeData; @@ -247,7 +249,7 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate for (const coord of coords) { const tile = sourceCache.getTile(coord); - const bucket: SymbolBucket = (tile.getBucket(layer): any); + const bucket: SymbolBucket = (tile.getBucket(layer) as any); if (!bucket) continue; const buffers = isText ? bucket.text : bucket.icon; if (!buffers || !buffers.segments.get().length) continue; @@ -340,7 +342,7 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate for (const segment of oldSegments) { tileRenderState.push({ segments: new SegmentVector([segment]), - sortKey: ((segment.sortKey: any): number), + sortKey: (segment.sortKey as any as number), state }); } @@ -370,7 +372,7 @@ function drawLayerSymbols(painter, sourceCache, layer, coords, isText, translate } if (state.isSDF) { - const uniformValues = ((state.uniformValues: any): UniformValues); + const uniformValues = (state.uniformValues as any as UniformValues); if (state.hasHalo) { uniformValues['u_is_halo'] = 1; drawSymbolElements(state.buffers, segmentState.segments, layer, painter, state.program, depthMode, stencilMode, colorMode, uniformValues); diff --git a/src/render/glyph_atlas.js b/src/render/glyph_atlas.ts similarity index 85% rename from src/render/glyph_atlas.js rename to src/render/glyph_atlas.ts index 6f68bd00c6..51a9309cf9 100644 --- a/src/render/glyph_atlas.js +++ b/src/render/glyph_atlas.ts @@ -1,5 +1,3 @@ -// @flow - import {AlphaImage} from '../util/image'; import {register} from '../util/web_worker_transfer'; import potpack from 'potpack'; @@ -9,24 +7,32 @@ import type {GlyphMetrics, StyleGlyph} from '../style/style_glyph'; const padding = 1; export type Rect = { - x: number, - y: number, - w: number, - h: number + x: number; + y: number; + w: number; + h: number; }; export type GlyphPosition = { - rect: Rect, - metrics: GlyphMetrics + rect: Rect; + metrics: GlyphMetrics; }; -export type GlyphPositions = {[_: string]: {[_: number]: GlyphPosition } } +export type GlyphPositions = { + [_: string]: { + [_: number]: GlyphPosition; + }; +}; export default class GlyphAtlas { image: AlphaImage; positions: GlyphPositions; - constructor(stacks: {[_: string]: {[_: number]: ?StyleGlyph } }) { + constructor(stacks: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }) { const positions = {}; const bins = []; diff --git a/src/render/glyph_manager.js b/src/render/glyph_manager.ts similarity index 76% rename from src/render/glyph_manager.js rename to src/render/glyph_manager.ts index 66b8dcd74f..0c4e47d0fb 100644 --- a/src/render/glyph_manager.js +++ b/src/render/glyph_manager.ts @@ -1,5 +1,3 @@ -// @flow - import loadGlyphRange from '../style/load_glyph_range'; import TinySDF from '@mapbox/tiny-sdf'; @@ -12,34 +10,52 @@ import type {RequestManager} from '../util/mapbox'; import type {Callback} from '../types/callback'; type Entry = { - // null means we've requested the range, but the glyph wasn't included in the result. - glyphs: {[id: number]: StyleGlyph | null}, - requests: {[range: number]: Array>}, - ranges: {[range: number]: boolean | null}, - tinySDF?: TinySDF + // null means we've requested the range, but the glyph wasn't included in the result. + glyphs: { + [id: number]: StyleGlyph | null; + }; + requests: { + [range: number]: Array>; + }; + ranges: { + [range: number]: boolean | null; + }; + tinySDF?: TinySDF; }; class GlyphManager { requestManager: RequestManager; - localIdeographFontFamily: ?string; - entries: {[_: string]: Entry}; - url: ?string; + localIdeographFontFamily: string | undefined | null; + entries: { + [_: string]: Entry; + }; + url: string | undefined | null; // exposed as statics to enable stubbing in unit tests static loadGlyphRange: typeof loadGlyphRange; - static TinySDF: Class; + static TinySDF: { + new (...args: any): TinySDF; + }; - constructor(requestManager: RequestManager, localIdeographFontFamily: ?string) { + constructor(requestManager: RequestManager, localIdeographFontFamily?: string | null) { this.requestManager = requestManager; this.localIdeographFontFamily = localIdeographFontFamily; this.entries = {}; } - setURL(url: ?string) { + setURL(url?: string | null) { this.url = url; } - getGlyphs(glyphs: {[stack: string]: Array}, callback: Callback<{[stack: string]: {[id: number]: ?StyleGlyph}}>) { + getGlyphs(glyphs: { + [stack: string]: Array; + }, callback: Callback<{ + [stack: string]: { + [id: number]: StyleGlyph | undefined | null; + }; + }>) { const all = []; for (const stack in glyphs) { @@ -48,7 +64,11 @@ class GlyphManager { } } - asyncAll(all, ({stack, id}, callback: Callback<{stack: string, id: number, glyph: ?StyleGlyph}>) => { + asyncAll(all, ({stack, id}, callback: Callback<{ + stack: string; + id: number; + glyph: StyleGlyph | undefined | null; + }>) => { let entry = this.entries[stack]; if (!entry) { entry = this.entries[stack] = { @@ -85,8 +105,10 @@ class GlyphManager { let requests = entry.requests[range]; if (!requests) { requests = entry.requests[range] = []; - GlyphManager.loadGlyphRange(stack, range, (this.url: any), this.requestManager, - (err, response: ?{[_: number]: StyleGlyph | null}) => { + GlyphManager.loadGlyphRange(stack, range, ((this.url as any)), this.requestManager, + (err, response?: { + [_: number]: StyleGlyph | null; + } | null) => { if (response) { for (const id in response) { if (!this._doesCharSupportLocalGlyph(+id)) { @@ -102,14 +124,20 @@ class GlyphManager { }); } - requests.push((err, result: ?{[_: number]: StyleGlyph | null}) => { + requests.push((err, result?: { + [_: number]: StyleGlyph | null; + } | null) => { if (err) { callback(err); } else if (result) { callback(null, {stack, id, glyph: result[id] || null}); } }); - }, (err, glyphs: ?Array<{stack: string, id: number, glyph: ?StyleGlyph}>) => { + }, (err, glyphs?: Array<{ + stack: string; + id: number; + glyph: StyleGlyph | undefined | null; + }> | null) => { if (err) { callback(err); } else if (glyphs) { @@ -139,7 +167,7 @@ class GlyphManager { /* eslint-enable new-cap */ } - _tinySDF(entry: Entry, stack: string, id: number): ?StyleGlyph { + _tinySDF(entry: Entry, stack: string, id: number): StyleGlyph | undefined | null { const family = this.localIdeographFontFamily; if (!family) { return; diff --git a/src/render/image_atlas.js b/src/render/image_atlas.ts similarity index 89% rename from src/render/image_atlas.js rename to src/render/image_atlas.ts index aeab7b91a7..6b834bf3a8 100644 --- a/src/render/image_atlas.js +++ b/src/render/image_atlas.ts @@ -1,5 +1,3 @@ -// @flow - import {RGBAImage} from '../util/image'; import {register} from '../util/web_worker_transfer'; import potpack from 'potpack'; @@ -12,21 +10,27 @@ const IMAGE_PADDING: number = 1; export {IMAGE_PADDING}; type Rect = { - x: number, - y: number, - w: number, - h: number + x: number; + y: number; + w: number; + h: number; }; export class ImagePosition { paddedRect: Rect; pixelRatio: number; version: number; - stretchY: ?Array<[number, number]>; - stretchX: ?Array<[number, number]>; - content: ?[number, number, number, number]; - - constructor(paddedRect: Rect, {pixelRatio, version, stretchX, stretchY, content}: StyleImage) { + stretchY: Array<[number, number]> | undefined | null; + stretchX: Array<[number, number]> | undefined | null; + content: [number, number, number, number] | undefined | null; + + constructor(paddedRect: Rect, { + pixelRatio, + version, + stretchX, + stretchY, + content + }: StyleImage) { this.paddedRect = paddedRect; this.pixelRatio = pixelRatio; this.stretchX = stretchX; @@ -66,7 +70,7 @@ export default class ImageAtlas { iconPositions: {[_: string]: ImagePosition}; patternPositions: {[_: string]: ImagePosition}; haveRenderCallbacks: Array; - uploaded: ?boolean; + uploaded: boolean | undefined | null; constructor(icons: {[_: string]: StyleImage}, patterns: {[_: string]: StyleImage}) { const iconPositions = {}, patternPositions = {}; @@ -133,7 +137,7 @@ export default class ImageAtlas { } } - patchUpdatedImage(position: ?ImagePosition, image: ?StyleImage, texture: Texture) { + patchUpdatedImage(position: ImagePosition | undefined | null, image: StyleImage | undefined | null, texture: Texture) { if (!position || !image) return; if (position.version === image.version) return; diff --git a/src/render/image_manager.js b/src/render/image_manager.ts similarity index 94% rename from src/render/image_manager.js rename to src/render/image_manager.ts index 8bf32f5f07..3ec8357d4d 100644 --- a/src/render/image_manager.js +++ b/src/render/image_manager.ts @@ -1,5 +1,3 @@ -// @flow - import potpack from 'potpack'; import {Event, ErrorEvent, Evented} from '../util/evented'; @@ -16,8 +14,8 @@ import type {Bin} from 'potpack'; import type {Callback} from '../types/callback'; type Pattern = { - bin: Bin, - position: ImagePosition + bin: Bin; + position: ImagePosition; }; // When copied into the atlas texture, image data is padded by one pixel on each side. Icon @@ -42,11 +40,14 @@ class ImageManager extends Evented { updatedImages: {[_: string]: boolean}; callbackDispatchedThisFrame: {[_: string]: boolean}; loaded: boolean; - requestors: Array<{ids: Array, callback: Callback<{[_: string]: StyleImage}>}>; + requestors: Array<{ + ids: Array; + callback: Callback<{[_: string]: StyleImage}>; + }>; patterns: {[_: string]: Pattern}; atlasImage: RGBAImage; - atlasTexture: ?Texture; + atlasTexture: Texture | undefined | null; dirty: boolean; constructor() { @@ -81,7 +82,7 @@ class ImageManager extends Evented { } } - getImage(id: string): ?StyleImage { + getImage(id: string): StyleImage | undefined | null { return this.images[id]; } @@ -109,7 +110,7 @@ class ImageManager extends Evented { return valid; } - _validateStretch(stretch: ?Array<[number, number]> | void, size: number) { + _validateStretch(stretch: Array<[number, number]> | undefined | null | void, size: number) { if (!stretch) return true; let last = 0; for (const part of stretch) { @@ -119,7 +120,7 @@ class ImageManager extends Evented { return true; } - _validateContent(content: ?[number, number, number, number] | void, image: StyleImage) { + _validateContent(content: [number, number, number, number] | undefined | null | void, image: StyleImage) { if (!content) return true; if (content.length !== 4) return false; if (content[0] < 0 || image.data.width < content[0]) return false; @@ -211,7 +212,7 @@ class ImageManager extends Evented { return {width, height}; } - getPattern(id: string): ?ImagePosition { + getPattern(id: string): ImagePosition | undefined | null { const pattern = this.patterns[id]; const image = this.getImage(id); diff --git a/src/render/line_atlas.js b/src/render/line_atlas.ts similarity index 97% rename from src/render/line_atlas.js rename to src/render/line_atlas.ts index c755ea8990..6df412c5dd 100644 --- a/src/render/line_atlas.js +++ b/src/render/line_atlas.ts @@ -1,5 +1,3 @@ -// @flow - import {warnOnce} from '../util/util'; import type Context from '../gl/context'; @@ -42,7 +40,7 @@ class LineAtlas { * @private */ getDash(dasharray: Array, round: boolean) { - const key = dasharray.join(",") + String(round); + const key = dasharray.join(',') + String(round); if (!this.dashEntry[key]) { this.dashEntry[key] = this.addDash(dasharray, round); @@ -78,7 +76,7 @@ class LineAtlas { return ranges; } - addRoundDash(ranges: Object, stretch: number, n: number) { + addRoundDash(ranges: any, stretch: number, n: number) { const halfStretch = stretch / 2; for (let y = -n; y <= n; y++) { @@ -108,7 +106,7 @@ class LineAtlas { } } - addRegularDash(ranges: Object) { + addRegularDash(ranges: any) { // Collapse any zero-length range // Collapse neighbouring same-type parts into a single part diff --git a/src/render/painter.js b/src/render/painter.ts similarity index 94% rename from src/render/painter.js rename to src/render/painter.ts index 5650743480..b5ff8e102b 100644 --- a/src/render/painter.js +++ b/src/render/painter.ts @@ -1,20 +1,16 @@ -// @flow - import browser from '../util/browser'; -import window from '../util/window'; -import {mat4} from 'gl-matrix'; +import {mat4, vec3} from 'gl-matrix'; import SourceCache from '../source/source_cache'; import EXTENT from '../data/extent'; import pixelsToTileUnits from '../source/pixels_to_tile_units'; import SegmentVector from '../data/segment'; import {RasterBoundsArray, PosArray, TriangleIndexArray, LineStripIndexArray} from '../data/array_types'; -import {values} from '../util/util'; import rasterBoundsAttributes from '../data/raster_bounds_attributes'; import posAttributes from '../data/pos_attributes'; import ProgramConfiguration from '../data/program_configuration'; import CrossTileSymbolIndex from '../symbol/cross_tile_symbol_index'; -import * as shaders from '../shaders'; +import shaders from '../shaders/shaders'; import Program from './program'; import {programUniforms} from './program/program_uniforms'; import Context from '../gl/context'; @@ -64,19 +60,20 @@ import type VertexBuffer from '../gl/vertex_buffer'; import type IndexBuffer from '../gl/index_buffer'; import type {DepthRangeType, DepthMaskType, DepthFuncType} from '../gl/types'; import type ResolvedImage from '../style-spec/expression/types/resolved_image'; +import type {RGBAImage} from '../util/image'; export type RenderPass = 'offscreen' | 'opaque' | 'translucent'; type PainterOptions = { - showOverdrawInspector: boolean, - showTileBoundaries: boolean, - showPadding: boolean, - rotating: boolean, - zooming: boolean, - moving: boolean, - gpuTiming: boolean, - fadeDuration: number -} + showOverdrawInspector: boolean; + showTileBoundaries: boolean; + showPadding: boolean; + rotating: boolean; + zooming: boolean; + moving: boolean; + gpuTiming: boolean; + fadeDuration: number; +}; /** * Initialize a new painter object. @@ -87,7 +84,9 @@ type PainterOptions = { class Painter { context: Context; transform: Transform; - _tileTextures: {[_: number]: Array }; + _tileTextures: { + [_: number]: Array; + }; numSublayers: number; depthEpsilon: number; emptyProgramConfiguration: ProgramConfiguration; @@ -103,7 +102,7 @@ class Painter { viewportSegments: SegmentVector; quadTriangleIndexBuffer: IndexBuffer; tileBorderIndexBuffer: IndexBuffer; - _tileClippingMaskIDs: {[_: string]: number }; + _tileClippingMaskIDs: {[_: string]: number}; stencilClearMode: StencilMode; style: Style; options: PainterOptions; @@ -114,14 +113,14 @@ class Painter { opaquePassCutoff: number; renderPass: RenderPass; currentLayer: number; - currentStencilSource: ?string; + currentStencilSource: string | undefined | null; nextStencilID: number; id: string; _showOverdrawInspector: boolean; - cache: {[_: string]: Program<*> }; + cache: {[_: string]: Program}; crossTileSymbolIndex: CrossTileSymbolIndex; symbolFadeChange: number; - gpuTimers: {[_: string]: any }; + gpuTimers: {[_: string]: any}; emptyTexture: Texture; debugOverlayTexture: Texture; debugOverlayCanvas: HTMLCanvasElement; @@ -148,8 +147,8 @@ class Painter { * for a new width and height value. */ resize(width: number, height: number) { - this.width = width * browser.devicePixelRatio; - this.height = height * browser.devicePixelRatio; + this.width = width * devicePixelRatio; + this.height = height * devicePixelRatio; this.context.viewport.set([0, 0, this.width, this.height]); if (this.style) { @@ -211,7 +210,7 @@ class Painter { width: 1, height: 1, data: new Uint8Array([0, 0, 0, 0]) - }, context.gl.RGBA); + } as RGBAImage, context.gl.RGBA); const gl = this.context.gl; this.stencilClearMode = new StencilMode({func: gl.ALWAYS, mask: 0}, 0x0, 0xFF, gl.ZERO, gl.ZERO, gl.ZERO); @@ -303,7 +302,9 @@ class Painter { * * Returns [StencilMode for tile overscaleZ map, sortedCoords]. */ - stencilConfigForOverlap(tileIDs: Array): [{[_: number]: $ReadOnly}, Array] { + stencilConfigForOverlap(tileIDs: Array): [{ + [_: number]: Readonly; + }, Array] { const gl = this.context.gl; const coords = tileIDs.sort((a, b) => b.overscaledZ - a.overscaledZ); const minTileZ = coords[coords.length - 1].overscaledZ; @@ -323,7 +324,7 @@ class Painter { return [{[minTileZ]: StencilMode.disabled}, coords]; } - colorModeForRenderPass(): $ReadOnly { + colorModeForRenderPass(): Readonly { const gl = this.context.gl; if (this._showOverdrawInspector) { const numOverdrawSteps = 8; @@ -337,7 +338,7 @@ class Painter { } } - depthModeForSublayer(n: number, mask: DepthMaskType, func: ?DepthFuncType): $ReadOnly { + depthModeForSublayer(n: number, mask: DepthMaskType, func?: DepthFuncType | null): Readonly { if (!this.opaquePassEnabledForLayer()) return DepthMode.disabled; const depth = 1 - ((1 + this.currentLayer) * this.numSublayers + n) * this.depthEpsilon; return new DepthMode(func || this.context.gl.LEQUAL, mask, [depth, depth]); @@ -456,7 +457,7 @@ class Painter { //Use source with highest maxzoom let selectedSource; let sourceCache; - const layers = values(this.style._layers); + const layers = Object.values(this.style._layers); layers.forEach((layer) => { if (layer.source && !layer.isHidden(this.transform.zoom)) { if (layer.source !== (sourceCache && sourceCache.id)) { @@ -537,10 +538,10 @@ class Painter { /** * Transform a matrix to incorporate the *-translate and *-translate-anchor properties into it. * @param inViewportPixelUnitsUnits True when the units accepted by the matrix are in viewport pixels instead of tile units. - * @returns {Float32Array} matrix + * @returns {mat4} matrix * @private */ - translatePosMatrix(matrix: Float32Array, tile: Tile, translate: [number, number], translateAnchor: 'map' | 'viewport', inViewportPixelUnitsUnits?: boolean) { + translatePosMatrix(matrix: mat4, tile: Tile, translate: [number, number], translateAnchor: 'map' | 'viewport', inViewportPixelUnitsUnits?: boolean) { if (!translate[0] && !translate[1]) return matrix; const angle = inViewportPixelUnitsUnits ? @@ -556,13 +557,13 @@ class Painter { ]; } - const translation = [ + const translation = vec3.fromValues( inViewportPixelUnitsUnits ? translate[0] : pixelsToTileUnits(tile, translate[0], this.transform.zoom), inViewportPixelUnitsUnits ? translate[1] : pixelsToTileUnits(tile, translate[1], this.transform.zoom), 0 - ]; + ); - const translatedMatrix = new Float32Array(16); + const translatedMatrix = mat4.create(); mat4.translate(translatedMatrix, matrix, translation); return translatedMatrix; } @@ -587,7 +588,7 @@ class Painter { * @returns true if a needed image is missing and rendering needs to be skipped. * @private */ - isPatternMissing(image: ?CrossFaded): boolean { + isPatternMissing(image?: CrossFaded | null): boolean { if (!image) return false; if (!image.from || !image.to) return true; const imagePosA = this.imageManager.getPattern(image.from.toString()); @@ -595,7 +596,7 @@ class Painter { return !imagePosA || !imagePosB; } - useProgram(name: string, programConfiguration: ?ProgramConfiguration): Program { + useProgram(name: string, programConfiguration?: ProgramConfiguration | null): Program { this.cache = this.cache || {}; const key = `${name}${programConfiguration ? programConfiguration.cacheKey : ''}${this._showOverdrawInspector ? '/overdraw' : ''}`; if (!this.cache[key]) { @@ -635,7 +636,7 @@ class Painter { initDebugOverlayCanvas() { if (this.debugOverlayCanvas == null) { - this.debugOverlayCanvas = window.document.createElement('canvas'); + this.debugOverlayCanvas = document.createElement('canvas'); this.debugOverlayCanvas.width = 512; this.debugOverlayCanvas.height = 512; const gl = this.context.gl; diff --git a/src/render/program.js b/src/render/program.ts similarity index 79% rename from src/render/program.js rename to src/render/program.ts index 7e273c0a33..138c51fa90 100644 --- a/src/render/program.js +++ b/src/render/program.ts @@ -1,6 +1,4 @@ -// @flow - -import {prelude} from '../shaders'; +import shaders from '../shaders/shaders'; import assert from 'assert'; import ProgramConfiguration from '../data/program_configuration'; import VertexArrayObject from './vertex_array_object'; @@ -16,12 +14,9 @@ import type CullFaceMode from '../gl/cull_face_mode'; import type {UniformBindings, UniformValues, UniformLocations} from './uniform_binding'; import type {BinderUniform} from '../data/program_configuration'; -export type DrawMode = - | $PropertyType - | $PropertyType - | $PropertyType; +export type DrawMode = WebGLRenderingContext['LINES'] | WebGLRenderingContext['TRIANGLES'] | WebGLRenderingContext['LINE_STRIP']; -function getTokenizedAttributesAndUniforms (array: Array): Array { +function getTokenizedAttributesAndUniforms(array: Array): Array { const result = []; for (let i = 0; i < array.length; i++) { @@ -31,7 +26,7 @@ function getTokenizedAttributesAndUniforms (array: Array): Array } return result; } -class Program { +class Program { program: WebGLProgram; attributes: {[_: string]: number}; numAttributes: number; @@ -41,9 +36,14 @@ class Program { constructor(context: Context, name: string, - source: {fragmentSource: string, vertexSource: string, staticAttributes: Array, staticUniforms: Array}, - configuration: ?ProgramConfiguration, - fixedUniforms: (Context, UniformLocations) => Us, + source: { + fragmentSource: string; + vertexSource: string; + staticAttributes: Array; + staticUniforms: Array; + }, + configuration: ProgramConfiguration | undefined | null, + fixedUniforms: (b: Context, a: UniformLocations) => Us, showOverdrawInspector: boolean) { const gl = context.gl; this.program = gl.createProgram(); @@ -66,8 +66,8 @@ class Program { defines.push('#define OVERDRAW_INSPECTOR;'); } - const fragmentSource = defines.concat(prelude.fragmentSource, source.fragmentSource).join('\n'); - const vertexSource = defines.concat(prelude.vertexSource, source.vertexSource).join('\n'); + const fragmentSource = defines.concat(shaders.prelude.fragmentSource, source.fragmentSource).join('\n'); + const vertexSource = defines.concat(shaders.prelude.vertexSource, source.vertexSource).join('\n'); const fragmentShader = gl.createShader(gl.FRAGMENT_SHADER); if (gl.isContextLost()) { this.failedToCreate = true; @@ -75,7 +75,7 @@ class Program { } gl.shaderSource(fragmentShader, fragmentSource); gl.compileShader(fragmentShader); - assert(gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS), (gl.getShaderInfoLog(fragmentShader): any)); + assert(gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS), (gl.getShaderInfoLog(fragmentShader) as any)); gl.attachShader(this.program, fragmentShader); const vertexShader = gl.createShader(gl.VERTEX_SHADER); @@ -85,7 +85,7 @@ class Program { } gl.shaderSource(vertexShader, vertexSource); gl.compileShader(vertexShader); - assert(gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS), (gl.getShaderInfoLog(vertexShader): any)); + assert(gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS), (gl.getShaderInfoLog(vertexShader) as any)); gl.attachShader(this.program, vertexShader); this.attributes = {}; @@ -101,7 +101,7 @@ class Program { } gl.linkProgram(this.program); - assert(gl.getProgramParameter(this.program, gl.LINK_STATUS), (gl.getProgramInfoLog(this.program): any)); + assert(gl.getProgramParameter(this.program, gl.LINK_STATUS), (gl.getProgramInfoLog(this.program) as any)); gl.deleteShader(vertexShader); gl.deleteShader(fragmentShader); @@ -122,20 +122,20 @@ class Program { draw(context: Context, drawMode: DrawMode, - depthMode: $ReadOnly, - stencilMode: $ReadOnly, - colorMode: $ReadOnly, - cullFaceMode: $ReadOnly, + depthMode: Readonly, + stencilMode: Readonly, + colorMode: Readonly, + cullFaceMode: Readonly, uniformValues: UniformValues, layerID: string, layoutVertexBuffer: VertexBuffer, indexBuffer: IndexBuffer, segments: SegmentVector, - currentProperties: any, - zoom: ?number, - configuration: ?ProgramConfiguration, - dynamicLayoutBuffer: ?VertexBuffer, - dynamicLayoutBuffer2: ?VertexBuffer) { + currentProperties?: any, + zoom?: number | null, + configuration?: ProgramConfiguration | null, + dynamicLayoutBuffer?: VertexBuffer | null, + dynamicLayoutBuffer2?: VertexBuffer | null) { const gl = context.gl; @@ -152,7 +152,7 @@ class Program { } if (configuration) { - configuration.setUniforms(context, this.binderUniforms, currentProperties, {zoom: (zoom: any)}); + configuration.setUniforms(context, this.binderUniforms, currentProperties, {zoom: (zoom as any)}); } const primitiveSize = { diff --git a/src/render/program/background_program.js b/src/render/program/background_program.ts similarity index 71% rename from src/render/program/background_program.js rename to src/render/program/background_program.ts index 1ae1cf9943..b292e1d7ec 100644 --- a/src/render/program/background_program.js +++ b/src/render/program/background_program.ts @@ -1,5 +1,3 @@ -// @flow - import {bgPatternUniformValues} from './pattern'; import { Uniform1i, @@ -18,32 +16,33 @@ import type {CrossFaded} from '../../style/properties'; import type {CrossfadeParameters} from '../../style/evaluation_parameters'; import type {OverscaledTileID} from '../../source/tile_id'; import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import {mat4} from 'gl-matrix'; -export type BackgroundUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_opacity': Uniform1f, - 'u_color': UniformColor -|}; +export type BackgroundUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_opacity': Uniform1f; + 'u_color': UniformColor; +}; -export type BackgroundPatternUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_opacity': Uniform1f, - // pattern uniforms: - 'u_image': Uniform1i, - 'u_pattern_tl_a': Uniform2f, - 'u_pattern_br_a': Uniform2f, - 'u_pattern_tl_b': Uniform2f, - 'u_pattern_br_b': Uniform2f, - 'u_texsize': Uniform2f, - 'u_mix': Uniform1f, - 'u_pattern_size_a': Uniform2f, - 'u_pattern_size_b': Uniform2f, - 'u_scale_a': Uniform1f, - 'u_scale_b': Uniform1f, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f, - 'u_tile_units_to_pixels': Uniform1f -|}; +export type BackgroundPatternUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_opacity': Uniform1f; + // pattern uniforms: + 'u_image': Uniform1i; + 'u_pattern_tl_a': Uniform2f; + 'u_pattern_br_a': Uniform2f; + 'u_pattern_tl_b': Uniform2f; + 'u_pattern_br_b': Uniform2f; + 'u_texsize': Uniform2f; + 'u_mix': Uniform1f; + 'u_pattern_size_a': Uniform2f; + 'u_pattern_size_b': Uniform2f; + 'u_scale_a': Uniform1f; + 'u_scale_b': Uniform1f; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; + 'u_tile_units_to_pixels': Uniform1f; +}; const backgroundUniforms = (context: Context, locations: UniformLocations): BackgroundUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -70,23 +69,22 @@ const backgroundPatternUniforms = (context: Context, locations: UniformLocations 'u_tile_units_to_pixels': new Uniform1f(context, locations.u_tile_units_to_pixels) }); -const backgroundUniformValues = ( - matrix: Float32Array, - opacity: number, - color: Color -): UniformValues => ({ +const backgroundUniformValues = (matrix: mat4, opacity: number, color: Color): UniformValues => ({ 'u_matrix': matrix, 'u_opacity': opacity, 'u_color': color }); const backgroundPatternUniformValues = ( - matrix: Float32Array, - opacity: number, - painter: Painter, - image: CrossFaded, - tile: {tileID: OverscaledTileID, tileSize: number}, - crossfade: CrossfadeParameters + matrix: mat4, + opacity: number, + painter: Painter, + image: CrossFaded, + tile: { + tileID: OverscaledTileID; + tileSize: number; + }, + crossfade: CrossfadeParameters ): UniformValues => extend( bgPatternUniformValues(image, crossfade, painter, tile), { diff --git a/src/render/program/circle_program.js b/src/render/program/circle_program.ts similarity index 77% rename from src/render/program/circle_program.js rename to src/render/program/circle_program.ts index afde54051e..8d208fa3c4 100644 --- a/src/render/program/circle_program.js +++ b/src/render/program/circle_program.ts @@ -1,11 +1,4 @@ -// @flow - -import { - Uniform1i, - Uniform1f, - Uniform2f, - UniformMatrix4f -} from '../uniform_binding'; +import {Uniform1i, Uniform1f, Uniform2f, UniformMatrix4f} from '../uniform_binding'; import pixelsToTileUnits from '../../source/pixels_to_tile_units'; import type Context from '../../gl/context'; @@ -14,16 +7,15 @@ import type {OverscaledTileID} from '../../source/tile_id'; import type Tile from '../../source/tile'; import type CircleStyleLayer from '../../style/style_layer/circle_style_layer'; import type Painter from '../painter'; -import browser from '../../util/browser'; -export type CircleUniformsType = {| - 'u_camera_to_center_distance': Uniform1f, - 'u_scale_with_map': Uniform1i, - 'u_pitch_with_map': Uniform1i, - 'u_extrude_scale': Uniform2f, - 'u_device_pixel_ratio': Uniform1f, - 'u_matrix': UniformMatrix4f -|}; +export type CircleUniformsType = { + 'u_camera_to_center_distance': Uniform1f; + 'u_scale_with_map': Uniform1i; + 'u_pitch_with_map': Uniform1i; + 'u_extrude_scale': Uniform2f; + 'u_device_pixel_ratio': Uniform1f; + 'u_matrix': UniformMatrix4f; +}; const circleUniforms = (context: Context, locations: UniformLocations): CircleUniformsType => ({ 'u_camera_to_center_distance': new Uniform1f(context, locations.u_camera_to_center_distance), @@ -35,10 +27,10 @@ const circleUniforms = (context: Context, locations: UniformLocations): CircleUn }); const circleUniformValues = ( - painter: Painter, - coord: OverscaledTileID, - tile: Tile, - layer: CircleStyleLayer + painter: Painter, + coord: OverscaledTileID, + tile: Tile, + layer: CircleStyleLayer ): UniformValues => { const transform = painter.transform; @@ -61,7 +53,7 @@ const circleUniformValues = ( layer.paint.get('circle-translate'), layer.paint.get('circle-translate-anchor')), 'u_pitch_with_map': +(pitchWithMap), - 'u_device_pixel_ratio': browser.devicePixelRatio, + 'u_device_pixel_ratio': devicePixelRatio, 'u_extrude_scale': extrudeScale }; }; diff --git a/src/render/program/clipping_mask_program.js b/src/render/program/clipping_mask_program.ts similarity index 68% rename from src/render/program/clipping_mask_program.js rename to src/render/program/clipping_mask_program.ts index 71f4a67cd4..9ee8ff1f3d 100644 --- a/src/render/program/clipping_mask_program.js +++ b/src/render/program/clipping_mask_program.ts @@ -1,19 +1,18 @@ -// @flow - import {UniformMatrix4f} from '../uniform_binding'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; +import {mat4} from 'gl-matrix'; -export type ClippingMaskUniformsType = {| - 'u_matrix': UniformMatrix4f -|}; +export type ClippingMaskUniformsType = { + 'u_matrix': UniformMatrix4f; +}; const clippingMaskUniforms = (context: Context, locations: UniformLocations): ClippingMaskUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix) }); -const clippingMaskUniformValues = (matrix: Float32Array): UniformValues => ({ +const clippingMaskUniformValues = (matrix: mat4): UniformValues => ({ 'u_matrix': matrix }); diff --git a/src/render/program/collision_program.js b/src/render/program/collision_program.ts similarity index 71% rename from src/render/program/collision_program.js rename to src/render/program/collision_program.ts index 82a5372b84..98309d74c9 100644 --- a/src/render/program/collision_program.js +++ b/src/render/program/collision_program.ts @@ -1,31 +1,26 @@ -// @flow - -import { - Uniform1f, - Uniform2f, - UniformMatrix4f -} from '../uniform_binding'; +import {Uniform1f, Uniform2f, UniformMatrix4f} from '../uniform_binding'; import pixelsToTileUnits from '../../source/pixels_to_tile_units'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; import type Transform from '../../geo/transform'; import type Tile from '../../source/tile'; +import {mat4} from 'gl-matrix'; + +export type CollisionUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_camera_to_center_distance': Uniform1f; + 'u_pixels_to_tile_units': Uniform1f; + 'u_extrude_scale': Uniform2f; + 'u_overscale_factor': Uniform1f; +}; -export type CollisionUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_camera_to_center_distance': Uniform1f, - 'u_pixels_to_tile_units': Uniform1f, - 'u_extrude_scale': Uniform2f, - 'u_overscale_factor': Uniform1f -|}; - -export type CollisionCircleUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_inv_matrix': UniformMatrix4f, - 'u_camera_to_center_distance': Uniform1f, - 'u_viewport_size': Uniform2f -|}; +export type CollisionCircleUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_inv_matrix': UniformMatrix4f; + 'u_camera_to_center_distance': Uniform1f; + 'u_viewport_size': Uniform2f; +}; const collisionUniforms = (context: Context, locations: UniformLocations): CollisionUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -42,11 +37,7 @@ const collisionCircleUniforms = (context: Context, locations: UniformLocations): 'u_viewport_size': new Uniform2f(context, locations.u_viewport_size) }); -const collisionUniformValues = ( - matrix: Float32Array, - transform: Transform, - tile: Tile -): UniformValues => { +const collisionUniformValues = (matrix: mat4, transform: Transform, tile: Tile): UniformValues => { const pixelRatio = pixelsToTileUnits(tile, 1, transform.zoom); const scale = Math.pow(2, transform.zoom - tile.tileID.overscaledZ); const overscaleFactor = tile.tileID.overscaleFactor(); @@ -60,11 +51,7 @@ const collisionUniformValues = ( }; }; -const collisionCircleUniformValues = ( - matrix: Float32Array, - invMatrix: Float32Array, - transform: Transform -): UniformValues => { +const collisionCircleUniformValues = (matrix: mat4, invMatrix: mat4, transform: Transform): UniformValues => { return { 'u_matrix': matrix, 'u_inv_matrix': invMatrix, diff --git a/src/render/program/debug_program.js b/src/render/program/debug_program.ts similarity index 61% rename from src/render/program/debug_program.js rename to src/render/program/debug_program.ts index a97ad08d21..b66ac0e241 100644 --- a/src/render/program/debug_program.js +++ b/src/render/program/debug_program.ts @@ -1,31 +1,25 @@ -// @flow - -import { - UniformColor, - UniformMatrix4f, - Uniform1i, - Uniform1f -} from '../uniform_binding'; +import {UniformColor, UniformMatrix4f, Uniform1i, Uniform1f} from '../uniform_binding'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; import type Color from '../../style-spec/util/color'; +import {mat4} from 'gl-matrix'; -export type DebugUniformsType = {| - 'u_color': UniformColor, - 'u_matrix': UniformMatrix4f, - 'u_overlay': Uniform1i, - 'u_overlay_scale': Uniform1f -|}; +export type DebugUniformsType = { + 'u_color': UniformColor; + 'u_matrix': UniformMatrix4f; + 'u_overlay': Uniform1i; + 'u_overlay_scale': Uniform1f; +}; const debugUniforms = (context: Context, locations: UniformLocations): DebugUniformsType => ({ 'u_color': new UniformColor(context, locations.u_color), 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), 'u_overlay': new Uniform1i(context, locations.u_overlay), - 'u_overlay_scale': new Uniform1f(context, locations.u_overlay_scale), + 'u_overlay_scale': new Uniform1f(context, locations.u_overlay_scale) }); -const debugUniformValues = (matrix: Float32Array, color: Color, scaleRatio: number = 1): UniformValues => ({ +const debugUniformValues = (matrix: mat4, color: Color, scaleRatio: number = 1): UniformValues => ({ 'u_matrix': matrix, 'u_color': color, 'u_overlay': 0, diff --git a/src/render/program/fill_extrusion_program.js b/src/render/program/fill_extrusion_program.ts similarity index 75% rename from src/render/program/fill_extrusion_program.js rename to src/render/program/fill_extrusion_program.ts index 39dec5cf05..0983128494 100644 --- a/src/render/program/fill_extrusion_program.js +++ b/src/render/program/fill_extrusion_program.ts @@ -1,5 +1,3 @@ -// @flow - import {patternUniformValues} from './pattern'; import { Uniform1i, @@ -9,7 +7,7 @@ import { UniformMatrix4f } from '../uniform_binding'; -import {mat3, vec3} from 'gl-matrix'; +import {mat3, mat4, vec3} from 'gl-matrix'; import {extend} from '../../util/util'; import type Context from '../../gl/context'; @@ -19,31 +17,31 @@ import type {UniformValues, UniformLocations} from '../uniform_binding'; import type {CrossfadeParameters} from '../../style/evaluation_parameters'; import type Tile from '../../source/tile'; -export type FillExtrusionUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_lightpos': Uniform3f, - 'u_lightintensity': Uniform1f, - 'u_lightcolor': Uniform3f, - 'u_vertical_gradient': Uniform1f, - 'u_opacity': Uniform1f -|}; +export type FillExtrusionUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_lightpos': Uniform3f; + 'u_lightintensity': Uniform1f; + 'u_lightcolor': Uniform3f; + 'u_vertical_gradient': Uniform1f; + 'u_opacity': Uniform1f; +}; -export type FillExtrusionPatternUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_lightpos': Uniform3f, - 'u_lightintensity': Uniform1f, - 'u_lightcolor': Uniform3f, - 'u_height_factor': Uniform1f, - 'u_vertical_gradient': Uniform1f, - // pattern uniforms: - 'u_texsize': Uniform2f, - 'u_image': Uniform1i, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f, - 'u_scale': Uniform3f, - 'u_fade': Uniform1f, - 'u_opacity': Uniform1f -|}; +export type FillExtrusionPatternUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_lightpos': Uniform3f; + 'u_lightintensity': Uniform1f; + 'u_lightcolor': Uniform3f; + 'u_height_factor': Uniform1f; + 'u_vertical_gradient': Uniform1f; + // pattern uniforms: + 'u_texsize': Uniform2f; + 'u_image': Uniform1i; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; + 'u_scale': Uniform3f; + 'u_fade': Uniform1f; + 'u_opacity': Uniform1f; +}; const fillExtrusionUniforms = (context: Context, locations: UniformLocations): FillExtrusionUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -72,14 +70,14 @@ const fillExtrusionPatternUniforms = (context: Context, locations: UniformLocati }); const fillExtrusionUniformValues = ( - matrix: Float32Array, - painter: Painter, - shouldUseVerticalGradient: boolean, - opacity: number + matrix: mat4, + painter: Painter, + shouldUseVerticalGradient: boolean, + opacity: number ): UniformValues => { const light = painter.style.light; const _lp = light.properties.get('position'); - const lightPos = [_lp.x, _lp.y, _lp.z]; + const lightPos = vec3.fromValues(_lp.x, _lp.y, _lp.z); const lightMat = mat3.create(); if (light.properties.get('anchor') === 'viewport') { mat3.fromRotation(lightMat, -painter.transform.angle); @@ -99,13 +97,13 @@ const fillExtrusionUniformValues = ( }; const fillExtrusionPatternUniformValues = ( - matrix: Float32Array, - painter: Painter, - shouldUseVerticalGradient: boolean, - opacity: number, - coord: OverscaledTileID, - crossfade: CrossfadeParameters, - tile: Tile + matrix: mat4, + painter: Painter, + shouldUseVerticalGradient: boolean, + opacity: number, + coord: OverscaledTileID, + crossfade: CrossfadeParameters, + tile: Tile ): UniformValues => { return extend(fillExtrusionUniformValues(matrix, painter, shouldUseVerticalGradient, opacity), patternUniformValues(crossfade, painter, tile), diff --git a/src/render/program/fill_program.js b/src/render/program/fill_program.ts similarity index 69% rename from src/render/program/fill_program.js rename to src/render/program/fill_program.ts index 8bc83d141f..5ea08c96c9 100644 --- a/src/render/program/fill_program.js +++ b/src/render/program/fill_program.ts @@ -1,5 +1,3 @@ -// @flow - import {patternUniformValues} from './pattern'; import { Uniform1i, @@ -15,38 +13,39 @@ import type {UniformValues, UniformLocations} from '../uniform_binding'; import type Context from '../../gl/context'; import type {CrossfadeParameters} from '../../style/evaluation_parameters'; import type Tile from '../../source/tile'; +import {mat4} from 'gl-matrix'; -export type FillUniformsType = {| - 'u_matrix': UniformMatrix4f -|}; +export type FillUniformsType = { + 'u_matrix': UniformMatrix4f; +}; -export type FillOutlineUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_world': Uniform2f -|}; +export type FillOutlineUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_world': Uniform2f; +}; -export type FillPatternUniformsType = {| - 'u_matrix': UniformMatrix4f, - // pattern uniforms: - 'u_texsize': Uniform2f, - 'u_image': Uniform1i, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f, - 'u_scale': Uniform3f, - 'u_fade': Uniform1f -|}; +export type FillPatternUniformsType = { + 'u_matrix': UniformMatrix4f; + // pattern uniforms: + 'u_texsize': Uniform2f; + 'u_image': Uniform1i; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; + 'u_scale': Uniform3f; + 'u_fade': Uniform1f; +}; -export type FillOutlinePatternUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_world': Uniform2f, - // pattern uniforms: - 'u_texsize': Uniform2f, - 'u_image': Uniform1i, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f, - 'u_scale': Uniform3f, - 'u_fade': Uniform1f -|}; +export type FillOutlinePatternUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_world': Uniform2f; + // pattern uniforms: + 'u_texsize': Uniform2f; + 'u_image': Uniform1i; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; + 'u_scale': Uniform3f; + 'u_fade': Uniform1f; +}; const fillUniforms = (context: Context, locations: UniformLocations): FillUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix) @@ -60,7 +59,6 @@ const fillPatternUniforms = (context: Context, locations: UniformLocations): Fil 'u_pixel_coord_lower': new Uniform2f(context, locations.u_pixel_coord_lower), 'u_scale': new Uniform3f(context, locations.u_scale), 'u_fade': new Uniform1f(context, locations.u_fade) - }); const fillOutlineUniforms = (context: Context, locations: UniformLocations): FillOutlineUniformsType => ({ @@ -79,34 +77,31 @@ const fillOutlinePatternUniforms = (context: Context, locations: UniformLocation 'u_fade': new Uniform1f(context, locations.u_fade) }); -const fillUniformValues = (matrix: Float32Array): UniformValues => ({ +const fillUniformValues = (matrix: mat4): UniformValues => ({ 'u_matrix': matrix }); const fillPatternUniformValues = ( - matrix: Float32Array, - painter: Painter, - crossfade: CrossfadeParameters, - tile: Tile + matrix: mat4, + painter: Painter, + crossfade: CrossfadeParameters, + tile: Tile ): UniformValues => extend( fillUniformValues(matrix), patternUniformValues(crossfade, painter, tile) ); -const fillOutlineUniformValues = ( - matrix: Float32Array, - drawingBufferSize: [number, number] -): UniformValues => ({ +const fillOutlineUniformValues = (matrix: mat4, drawingBufferSize: [number, number]): UniformValues => ({ 'u_matrix': matrix, 'u_world': drawingBufferSize }); const fillOutlinePatternUniformValues = ( - matrix: Float32Array, - painter: Painter, - crossfade: CrossfadeParameters, - tile: Tile, - drawingBufferSize: [number, number] + matrix: mat4, + painter: Painter, + crossfade: CrossfadeParameters, + tile: Tile, + drawingBufferSize: [number, number] ): UniformValues => extend( fillPatternUniformValues(matrix, painter, crossfade, tile), { diff --git a/src/render/program/heatmap_program.js b/src/render/program/heatmap_program.ts similarity index 76% rename from src/render/program/heatmap_program.js rename to src/render/program/heatmap_program.ts index 8822d1932f..767c7916cc 100644 --- a/src/render/program/heatmap_program.js +++ b/src/render/program/heatmap_program.ts @@ -1,5 +1,3 @@ -// @flow - import {mat4} from 'gl-matrix'; import { @@ -16,19 +14,19 @@ import type {UniformValues, UniformLocations} from '../uniform_binding'; import type Painter from '../painter'; import type HeatmapStyleLayer from '../../style/style_layer/heatmap_style_layer'; -export type HeatmapUniformsType = {| - 'u_extrude_scale': Uniform1f, - 'u_intensity': Uniform1f, - 'u_matrix': UniformMatrix4f -|}; +export type HeatmapUniformsType = { + 'u_extrude_scale': Uniform1f; + 'u_intensity': Uniform1f; + 'u_matrix': UniformMatrix4f; +}; -export type HeatmapTextureUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_world': Uniform2f, - 'u_image': Uniform1i, - 'u_color_ramp': Uniform1i, - 'u_opacity': Uniform1f -|}; +export type HeatmapTextureUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_world': Uniform2f; + 'u_image': Uniform1i; + 'u_color_ramp': Uniform1i; + 'u_opacity': Uniform1f; +}; const heatmapUniforms = (context: Context, locations: UniformLocations): HeatmapUniformsType => ({ 'u_extrude_scale': new Uniform1f(context, locations.u_extrude_scale), @@ -44,22 +42,17 @@ const heatmapTextureUniforms = (context: Context, locations: UniformLocations): 'u_opacity': new Uniform1f(context, locations.u_opacity) }); -const heatmapUniformValues = ( - matrix: Float32Array, - tile: Tile, - zoom: number, - intensity: number -): UniformValues => ({ +const heatmapUniformValues = (matrix: mat4, tile: Tile, zoom: number, intensity: number): UniformValues => ({ 'u_matrix': matrix, 'u_extrude_scale': pixelsToTileUnits(tile, 1, zoom), 'u_intensity': intensity }); const heatmapTextureUniformValues = ( - painter: Painter, - layer: HeatmapStyleLayer, - textureUnit: number, - colorRampUnit: number + painter: Painter, + layer: HeatmapStyleLayer, + textureUnit: number, + colorRampUnit: number ): UniformValues => { const matrix = mat4.create(); mat4.ortho(matrix, 0, painter.width, painter.height, 0, 0, 1); diff --git a/src/render/program/hillshade_program.js b/src/render/program/hillshade_program.ts similarity index 78% rename from src/render/program/hillshade_program.js rename to src/render/program/hillshade_program.ts index b843970ff1..b40a16346a 100644 --- a/src/render/program/hillshade_program.js +++ b/src/render/program/hillshade_program.ts @@ -1,5 +1,3 @@ -// @flow - import {mat4} from 'gl-matrix'; import { @@ -21,23 +19,23 @@ import type HillshadeStyleLayer from '../../style/style_layer/hillshade_style_la import type DEMData from '../../data/dem_data'; import type {OverscaledTileID} from '../../source/tile_id'; -export type HillshadeUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_image': Uniform1i, - 'u_latrange': Uniform2f, - 'u_light': Uniform2f, - 'u_shadow': UniformColor, - 'u_highlight': UniformColor, - 'u_accent': UniformColor -|}; +export type HillshadeUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_image': Uniform1i; + 'u_latrange': Uniform2f; + 'u_light': Uniform2f; + 'u_shadow': UniformColor; + 'u_highlight': UniformColor; + 'u_accent': UniformColor; +}; -export type HillshadePrepareUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_image': Uniform1i, - 'u_dimension': Uniform2f, - 'u_zoom': Uniform1f, - 'u_unpack': Uniform4f -|}; +export type HillshadePrepareUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_image': Uniform1i; + 'u_dimension': Uniform2f; + 'u_zoom': Uniform1f; + 'u_unpack': Uniform4f; +}; const hillshadeUniforms = (context: Context, locations: UniformLocations): HillshadeUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -57,14 +55,10 @@ const hillshadePrepareUniforms = (context: Context, locations: UniformLocations) 'u_unpack': new Uniform4f(context, locations.u_unpack) }); -const hillshadeUniformValues = ( - painter: Painter, - tile: Tile, - layer: HillshadeStyleLayer -): UniformValues => { - const shadow = layer.paint.get("hillshade-shadow-color"); - const highlight = layer.paint.get("hillshade-highlight-color"); - const accent = layer.paint.get("hillshade-accent-color"); +const hillshadeUniformValues = (painter: Painter, tile: Tile, layer: HillshadeStyleLayer): UniformValues => { + const shadow = layer.paint.get('hillshade-shadow-color'); + const highlight = layer.paint.get('hillshade-highlight-color'); + const accent = layer.paint.get('hillshade-accent-color'); let azimuthal = layer.paint.get('hillshade-illumination-direction') * (Math.PI / 180); // modify azimuthal angle by map rotation if light is anchored at the viewport @@ -83,9 +77,7 @@ const hillshadeUniformValues = ( }; }; -const hillshadeUniformPrepareValues = ( - tileID: OverscaledTileID, dem: DEMData -): UniformValues => { +const hillshadeUniformPrepareValues = (tileID: OverscaledTileID, dem: DEMData): UniformValues => { const stride = dem.stride; const matrix = mat4.create(); diff --git a/src/render/program/line_program.js b/src/render/program/line_program.ts similarity index 73% rename from src/render/program/line_program.js rename to src/render/program/line_program.ts index 79fa83c234..3cecd7f49d 100644 --- a/src/render/program/line_program.js +++ b/src/render/program/line_program.ts @@ -1,15 +1,6 @@ -// @flow - -import { - Uniform1i, - Uniform1f, - Uniform2f, - Uniform3f, - UniformMatrix4f -} from '../uniform_binding'; +import {Uniform1i, Uniform1f, Uniform2f, Uniform3f, UniformMatrix4f} from '../uniform_binding'; import pixelsToTileUnits from '../../source/pixels_to_tile_units'; import {extend} from '../../util/util'; -import browser from '../../util/browser'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; @@ -20,46 +11,46 @@ import type LineStyleLayer from '../../style/style_layer/line_style_layer'; import type Painter from '../painter'; import type {CrossfadeParameters} from '../../style/evaluation_parameters'; -export type LineUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_ratio': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_units_to_pixels': Uniform2f -|}; - -export type LineGradientUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_ratio': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_units_to_pixels': Uniform2f, - 'u_image': Uniform1i, - 'u_image_height': Uniform1f, -|}; - -export type LinePatternUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_texsize': Uniform2f, - 'u_ratio': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_units_to_pixels': Uniform2f, - 'u_image': Uniform1i, - 'u_scale': Uniform3f, - 'u_fade': Uniform1f -|}; - -export type LineSDFUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_ratio': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_units_to_pixels': Uniform2f, - 'u_patternscale_a': Uniform2f, - 'u_patternscale_b': Uniform2f, - 'u_sdfgamma': Uniform1f, - 'u_image': Uniform1i, - 'u_tex_y_a': Uniform1f, - 'u_tex_y_b': Uniform1f, - 'u_mix': Uniform1f -|}; +export type LineUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_ratio': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_units_to_pixels': Uniform2f; +}; + +export type LineGradientUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_ratio': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_units_to_pixels': Uniform2f; + 'u_image': Uniform1i; + 'u_image_height': Uniform1f; +}; + +export type LinePatternUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_texsize': Uniform2f; + 'u_ratio': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_units_to_pixels': Uniform2f; + 'u_image': Uniform1i; + 'u_scale': Uniform3f; + 'u_fade': Uniform1f; +}; + +export type LineSDFUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_ratio': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_units_to_pixels': Uniform2f; + 'u_patternscale_a': Uniform2f; + 'u_patternscale_b': Uniform2f; + 'u_sdfgamma': Uniform1f; + 'u_image': Uniform1i; + 'u_tex_y_a': Uniform1f; + 'u_tex_y_b': Uniform1f; + 'u_mix': Uniform1f; +}; const lineUniforms = (context: Context, locations: UniformLocations): LineUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -74,7 +65,7 @@ const lineGradientUniforms = (context: Context, locations: UniformLocations): Li 'u_device_pixel_ratio': new Uniform1f(context, locations.u_device_pixel_ratio), 'u_units_to_pixels': new Uniform2f(context, locations.u_units_to_pixels), 'u_image': new Uniform1i(context, locations.u_image), - 'u_image_height': new Uniform1f(context, locations.u_image_height), + 'u_image_height': new Uniform1f(context, locations.u_image_height) }); const linePatternUniforms = (context: Context, locations: UniformLocations): LinePatternUniformsType => ({ @@ -102,17 +93,13 @@ const lineSDFUniforms = (context: Context, locations: UniformLocations): LineSDF 'u_mix': new Uniform1f(context, locations.u_mix) }); -const lineUniformValues = ( - painter: Painter, - tile: Tile, - layer: LineStyleLayer -): UniformValues => { +const lineUniformValues = (painter: Painter, tile: Tile, layer: LineStyleLayer): UniformValues => { const transform = painter.transform; return { 'u_matrix': calculateMatrix(painter, tile, layer), 'u_ratio': 1 / pixelsToTileUnits(tile, 1, transform.zoom), - 'u_device_pixel_ratio': browser.devicePixelRatio, + 'u_device_pixel_ratio': devicePixelRatio, 'u_units_to_pixels': [ 1 / transform.pixelsToGLUnits[0], 1 / transform.pixelsToGLUnits[1] @@ -120,12 +107,7 @@ const lineUniformValues = ( }; }; -const lineGradientUniformValues = ( - painter: Painter, - tile: Tile, - layer: LineStyleLayer, - imageHeight: number -): UniformValues => { +const lineGradientUniformValues = (painter: Painter, tile: Tile, layer: LineStyleLayer, imageHeight: number): UniformValues => { return extend(lineUniformValues(painter, tile, layer), { 'u_image': 0, 'u_image_height': imageHeight, @@ -133,10 +115,10 @@ const lineGradientUniformValues = ( }; const linePatternUniformValues = ( - painter: Painter, - tile: Tile, - layer: LineStyleLayer, - crossfade: CrossfadeParameters + painter: Painter, + tile: Tile, + layer: LineStyleLayer, + crossfade: CrossfadeParameters ): UniformValues => { const transform = painter.transform; const tileZoomRatio = calculateTileRatio(tile, transform); @@ -145,7 +127,7 @@ const linePatternUniformValues = ( 'u_texsize': tile.imageAtlasTexture.size, // camera zoom ratio 'u_ratio': 1 / pixelsToTileUnits(tile, 1, transform.zoom), - 'u_device_pixel_ratio': browser.devicePixelRatio, + 'u_device_pixel_ratio': devicePixelRatio, 'u_image': 0, 'u_scale': [tileZoomRatio, crossfade.fromScale, crossfade.toScale], 'u_fade': crossfade.t, @@ -157,11 +139,11 @@ const linePatternUniformValues = ( }; const lineSDFUniformValues = ( - painter: Painter, - tile: Tile, - layer: LineStyleLayer, - dasharray: CrossFaded>, - crossfade: CrossfadeParameters + painter: Painter, + tile: Tile, + layer: LineStyleLayer, + dasharray: CrossFaded>, + crossfade: CrossfadeParameters ): UniformValues => { const transform = painter.transform; const lineAtlas = painter.lineAtlas; @@ -178,7 +160,7 @@ const lineSDFUniformValues = ( return extend(lineUniformValues(painter, tile, layer), { 'u_patternscale_a': [tileRatio / widthA, -posA.height / 2], 'u_patternscale_b': [tileRatio / widthB, -posB.height / 2], - 'u_sdfgamma': lineAtlas.width / (Math.min(widthA, widthB) * 256 * browser.devicePixelRatio) / 2, + 'u_sdfgamma': lineAtlas.width / (Math.min(widthA, widthB) * 256 * devicePixelRatio) / 2, 'u_image': 0, 'u_tex_y_a': posA.y, 'u_tex_y_b': posB.y, diff --git a/src/render/program/pattern.js b/src/render/program/pattern.ts similarity index 67% rename from src/render/program/pattern.js rename to src/render/program/pattern.ts index 283fca5d9e..808b639f0f 100644 --- a/src/render/program/pattern.js +++ b/src/render/program/pattern.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import { Uniform1i, @@ -17,36 +15,34 @@ import type {UniformValues} from '../uniform_binding'; import type Tile from '../../source/tile'; import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; -type BackgroundPatternUniformsType = {| - 'u_image': Uniform1i, - 'u_pattern_tl_a': Uniform2f, - 'u_pattern_br_a': Uniform2f, - 'u_pattern_tl_b': Uniform2f, - 'u_pattern_br_b': Uniform2f, - 'u_texsize': Uniform2f, - 'u_mix': Uniform1f, - 'u_pattern_size_a': Uniform2f, - 'u_pattern_size_b': Uniform2f, - 'u_scale_a': Uniform1f, - 'u_scale_b': Uniform1f, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f, - 'u_tile_units_to_pixels': Uniform1f -|}; +type BackgroundPatternUniformsType = { + 'u_image': Uniform1i; + 'u_pattern_tl_a': Uniform2f; + 'u_pattern_br_a': Uniform2f; + 'u_pattern_tl_b': Uniform2f; + 'u_pattern_br_b': Uniform2f; + 'u_texsize': Uniform2f; + 'u_mix': Uniform1f; + 'u_pattern_size_a': Uniform2f; + 'u_pattern_size_b': Uniform2f; + 'u_scale_a': Uniform1f; + 'u_scale_b': Uniform1f; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; + 'u_tile_units_to_pixels': Uniform1f; +}; -export type PatternUniformsType = {| - // pattern uniforms: - 'u_image': Uniform1i, - 'u_texsize': Uniform2f, - 'u_scale': Uniform3f, - 'u_fade': Uniform1f, - 'u_pixel_coord_upper': Uniform2f, - 'u_pixel_coord_lower': Uniform2f -|}; +export type PatternUniformsType = { + // pattern uniforms: + 'u_image': Uniform1i; + 'u_texsize': Uniform2f; + 'u_scale': Uniform3f; + 'u_fade': Uniform1f; + 'u_pixel_coord_upper': Uniform2f; + 'u_pixel_coord_lower': Uniform2f; +}; -function patternUniformValues(crossfade: CrossfadeParameters, painter: Painter, - tile: Tile -): UniformValues { +function patternUniformValues(crossfade: CrossfadeParameters, painter: Painter, tile: Tile): UniformValues { const tileRatio = 1 / pixelsToTileUnits(tile, 1, painter.transform.tileZoom); @@ -67,8 +63,14 @@ function patternUniformValues(crossfade: CrossfadeParameters, painter: Painter, }; } -function bgPatternUniformValues(image: CrossFaded, crossfade: CrossfadeParameters, painter: Painter, - tile: {tileID: OverscaledTileID, tileSize: number} +function bgPatternUniformValues( + image: CrossFaded, + crossfade: CrossfadeParameters, + painter: Painter, + tile: { + tileID: OverscaledTileID; + tileSize: number; + } ): UniformValues { const imagePosA = painter.imageManager.getPattern(image.from.toString()); const imagePosB = painter.imageManager.getPattern(image.to.toString()); @@ -83,14 +85,14 @@ function bgPatternUniformValues(image: CrossFaded, crossfade: Cro return { 'u_image': 0, - 'u_pattern_tl_a': (imagePosA: any).tl, - 'u_pattern_br_a': (imagePosA: any).br, - 'u_pattern_tl_b': (imagePosB: any).tl, - 'u_pattern_br_b': (imagePosB: any).br, + 'u_pattern_tl_a': (imagePosA as any).tl, + 'u_pattern_br_a': (imagePosA as any).br, + 'u_pattern_tl_b': (imagePosB as any).tl, + 'u_pattern_br_b': (imagePosB as any).br, 'u_texsize': [width, height], 'u_mix': crossfade.t, - 'u_pattern_size_a': (imagePosA: any).displaySize, - 'u_pattern_size_b': (imagePosB: any).displaySize, + 'u_pattern_size_a': (imagePosA as any).displaySize, + 'u_pattern_size_b': (imagePosB as any).displaySize, 'u_scale_a': crossfade.fromScale, 'u_scale_b': crossfade.toScale, 'u_tile_units_to_pixels': 1 / pixelsToTileUnits(tile, 1, painter.transform.tileZoom), diff --git a/src/render/program/program_uniforms.js b/src/render/program/program_uniforms.ts similarity index 99% rename from src/render/program/program_uniforms.js rename to src/render/program/program_uniforms.ts index e36ec6f6e8..25f2271d9f 100644 --- a/src/render/program/program_uniforms.js +++ b/src/render/program/program_uniforms.ts @@ -1,5 +1,3 @@ -// @flow - import {fillExtrusionUniforms, fillExtrusionPatternUniforms} from './fill_extrusion_program'; import {fillUniforms, fillPatternUniforms, fillOutlineUniforms, fillOutlinePatternUniforms} from './fill_program'; import {circleUniforms} from './circle_program'; diff --git a/src/render/program/raster_program.js b/src/render/program/raster_program.ts similarity index 76% rename from src/render/program/raster_program.js rename to src/render/program/raster_program.ts index caa477a199..3f603747da 100644 --- a/src/render/program/raster_program.js +++ b/src/render/program/raster_program.ts @@ -1,32 +1,25 @@ -// @flow - -import { - Uniform1i, - Uniform1f, - Uniform2f, - Uniform3f, - UniformMatrix4f -} from '../uniform_binding'; +import {Uniform1i, Uniform1f, Uniform2f, Uniform3f, UniformMatrix4f} from '../uniform_binding'; import type Context from '../../gl/context'; import type {UniformValues, UniformLocations} from '../uniform_binding'; import type RasterStyleLayer from '../../style/style_layer/raster_style_layer'; +import {mat4} from 'gl-matrix'; -export type RasterUniformsType = {| - 'u_matrix': UniformMatrix4f, - 'u_tl_parent': Uniform2f, - 'u_scale_parent': Uniform1f, - 'u_buffer_scale': Uniform1f, - 'u_fade_t': Uniform1f, - 'u_opacity': Uniform1f, - 'u_image0': Uniform1i, - 'u_image1': Uniform1i, - 'u_brightness_low': Uniform1f, - 'u_brightness_high': Uniform1f, - 'u_saturation_factor': Uniform1f, - 'u_contrast_factor': Uniform1f, - 'u_spin_weights': Uniform3f -|}; +export type RasterUniformsType = { + 'u_matrix': UniformMatrix4f; + 'u_tl_parent': Uniform2f; + 'u_scale_parent': Uniform1f; + 'u_buffer_scale': Uniform1f; + 'u_fade_t': Uniform1f; + 'u_opacity': Uniform1f; + 'u_image0': Uniform1i; + 'u_image1': Uniform1i; + 'u_brightness_low': Uniform1f; + 'u_brightness_high': Uniform1f; + 'u_saturation_factor': Uniform1f; + 'u_contrast_factor': Uniform1f; + 'u_spin_weights': Uniform3f; +}; const rasterUniforms = (context: Context, locations: UniformLocations): RasterUniformsType => ({ 'u_matrix': new UniformMatrix4f(context, locations.u_matrix), @@ -45,11 +38,14 @@ const rasterUniforms = (context: Context, locations: UniformLocations): RasterUn }); const rasterUniformValues = ( - matrix: Float32Array, - parentTL: [number, number], - parentScaleBy: number, - fade: {mix: number, opacity: number}, - layer: RasterStyleLayer + matrix: mat4, + parentTL: [number, number], + parentScaleBy: number, + fade: { + mix: number; + opacity: number; + }, + layer: RasterStyleLayer ): UniformValues => ({ 'u_matrix': matrix, 'u_tl_parent': parentTL, diff --git a/src/render/program/symbol_program.js b/src/render/program/symbol_program.ts similarity index 67% rename from src/render/program/symbol_program.js rename to src/render/program/symbol_program.ts index 6b08211920..1d6d0ee8c4 100644 --- a/src/render/program/symbol_program.js +++ b/src/render/program/symbol_program.ts @@ -1,82 +1,75 @@ -// @flow - -import { - Uniform1i, - Uniform1f, - Uniform2f, - UniformMatrix4f -} from '../uniform_binding'; +import {Uniform1i, Uniform1f, Uniform2f, UniformMatrix4f} from '../uniform_binding'; import {extend} from '../../util/util'; -import browser from '../../util/browser'; import type Context from '../../gl/context'; import type Painter from '../painter'; import type {UniformValues, UniformLocations} from '../uniform_binding'; +import {mat4} from 'gl-matrix'; -export type SymbolIconUniformsType = {| - 'u_is_size_zoom_constant': Uniform1i, - 'u_is_size_feature_constant': Uniform1i, - 'u_size_t': Uniform1f, - 'u_size': Uniform1f, - 'u_camera_to_center_distance': Uniform1f, - 'u_pitch': Uniform1f, - 'u_rotate_symbol': Uniform1i, - 'u_aspect_ratio': Uniform1f, - 'u_fade_change': Uniform1f, - 'u_matrix': UniformMatrix4f, - 'u_label_plane_matrix': UniformMatrix4f, - 'u_coord_matrix': UniformMatrix4f, - 'u_is_text': Uniform1i, - 'u_pitch_with_map': Uniform1i, - 'u_texsize': Uniform2f, - 'u_texture': Uniform1i -|}; +export type SymbolIconUniformsType = { + 'u_is_size_zoom_constant': Uniform1i; + 'u_is_size_feature_constant': Uniform1i; + 'u_size_t': Uniform1f; + 'u_size': Uniform1f; + 'u_camera_to_center_distance': Uniform1f; + 'u_pitch': Uniform1f; + 'u_rotate_symbol': Uniform1i; + 'u_aspect_ratio': Uniform1f; + 'u_fade_change': Uniform1f; + 'u_matrix': UniformMatrix4f; + 'u_label_plane_matrix': UniformMatrix4f; + 'u_coord_matrix': UniformMatrix4f; + 'u_is_text': Uniform1i; + 'u_pitch_with_map': Uniform1i; + 'u_texsize': Uniform2f; + 'u_texture': Uniform1i; +}; -export type SymbolSDFUniformsType = {| - 'u_is_size_zoom_constant': Uniform1i, - 'u_is_size_feature_constant': Uniform1i, - 'u_size_t': Uniform1f, - 'u_size': Uniform1f, - 'u_camera_to_center_distance': Uniform1f, - 'u_pitch': Uniform1f, - 'u_rotate_symbol': Uniform1i, - 'u_aspect_ratio': Uniform1f, - 'u_fade_change': Uniform1f, - 'u_matrix': UniformMatrix4f, - 'u_label_plane_matrix': UniformMatrix4f, - 'u_coord_matrix': UniformMatrix4f, - 'u_is_text': Uniform1i, - 'u_pitch_with_map': Uniform1i, - 'u_texsize': Uniform2f, - 'u_texture': Uniform1i, - 'u_gamma_scale': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_is_halo': Uniform1i -|}; +export type SymbolSDFUniformsType = { + 'u_is_size_zoom_constant': Uniform1i; + 'u_is_size_feature_constant': Uniform1i; + 'u_size_t': Uniform1f; + 'u_size': Uniform1f; + 'u_camera_to_center_distance': Uniform1f; + 'u_pitch': Uniform1f; + 'u_rotate_symbol': Uniform1i; + 'u_aspect_ratio': Uniform1f; + 'u_fade_change': Uniform1f; + 'u_matrix': UniformMatrix4f; + 'u_label_plane_matrix': UniformMatrix4f; + 'u_coord_matrix': UniformMatrix4f; + 'u_is_text': Uniform1i; + 'u_pitch_with_map': Uniform1i; + 'u_texsize': Uniform2f; + 'u_texture': Uniform1i; + 'u_gamma_scale': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_is_halo': Uniform1i; +}; -export type symbolTextAndIconUniformsType = {| - 'u_is_size_zoom_constant': Uniform1i, - 'u_is_size_feature_constant': Uniform1i, - 'u_size_t': Uniform1f, - 'u_size': Uniform1f, - 'u_camera_to_center_distance': Uniform1f, - 'u_pitch': Uniform1f, - 'u_rotate_symbol': Uniform1i, - 'u_aspect_ratio': Uniform1f, - 'u_fade_change': Uniform1f, - 'u_matrix': UniformMatrix4f, - 'u_label_plane_matrix': UniformMatrix4f, - 'u_coord_matrix': UniformMatrix4f, - 'u_is_text': Uniform1i, - 'u_pitch_with_map': Uniform1i, - 'u_texsize': Uniform2f, - 'u_texsize_icon': Uniform2f, - 'u_texture': Uniform1i, - 'u_texture_icon': Uniform1i, - 'u_gamma_scale': Uniform1f, - 'u_device_pixel_ratio': Uniform1f, - 'u_is_halo': Uniform1i -|}; +export type symbolTextAndIconUniformsType = { + 'u_is_size_zoom_constant': Uniform1i; + 'u_is_size_feature_constant': Uniform1i; + 'u_size_t': Uniform1f; + 'u_size': Uniform1f; + 'u_camera_to_center_distance': Uniform1f; + 'u_pitch': Uniform1f; + 'u_rotate_symbol': Uniform1i; + 'u_aspect_ratio': Uniform1f; + 'u_fade_change': Uniform1f; + 'u_matrix': UniformMatrix4f; + 'u_label_plane_matrix': UniformMatrix4f; + 'u_coord_matrix': UniformMatrix4f; + 'u_is_text': Uniform1i; + 'u_pitch_with_map': Uniform1i; + 'u_texsize': Uniform2f; + 'u_texsize_icon': Uniform2f; + 'u_texture': Uniform1i; + 'u_texture_icon': Uniform1i; + 'u_gamma_scale': Uniform1f; + 'u_device_pixel_ratio': Uniform1f; + 'u_is_halo': Uniform1i; +}; const symbolIconUniforms = (context: Context, locations: UniformLocations): SymbolIconUniformsType => ({ 'u_is_size_zoom_constant': new Uniform1i(context, locations.u_is_size_zoom_constant), @@ -144,16 +137,19 @@ const symbolTextAndIconUniforms = (context: Context, locations: UniformLocations }); const symbolIconUniformValues = ( - functionType: string, - size: ?{uSizeT: number, uSize: number}, - rotateInShader: boolean, - pitchWithMap: boolean, - painter: Painter, - matrix: Float32Array, - labelPlaneMatrix: Float32Array, - glCoordMatrix: Float32Array, - isText: boolean, - texSize: [number, number] + functionType: string, + size: { + uSizeT: number; + uSize: number; + } | undefined | null, + rotateInShader: boolean, + pitchWithMap: boolean, + painter: Painter, + matrix: mat4, + labelPlaneMatrix: mat4, + glCoordMatrix: mat4, + isText: boolean, + texSize: [number, number] ): UniformValues => { const transform = painter.transform; @@ -178,17 +174,20 @@ const symbolIconUniformValues = ( }; const symbolSDFUniformValues = ( - functionType: string, - size: ?{uSizeT: number, uSize: number}, - rotateInShader: boolean, - pitchWithMap: boolean, - painter: Painter, - matrix: Float32Array, - labelPlaneMatrix: Float32Array, - glCoordMatrix: Float32Array, - isText: boolean, - texSize: [number, number], - isHalo: boolean + functionType: string, + size: { + uSizeT: number; + uSize: number; + } | undefined | null, + rotateInShader: boolean, + pitchWithMap: boolean, + painter: Painter, + matrix: mat4, + labelPlaneMatrix: mat4, + glCoordMatrix: mat4, + isText: boolean, + texSize: [number, number], + isHalo: boolean ): UniformValues => { const transform = painter.transform; @@ -196,22 +195,25 @@ const symbolSDFUniformValues = ( rotateInShader, pitchWithMap, painter, matrix, labelPlaneMatrix, glCoordMatrix, isText, texSize), { 'u_gamma_scale': (pitchWithMap ? Math.cos(transform._pitch) * transform.cameraToCenterDistance : 1), - 'u_device_pixel_ratio': browser.devicePixelRatio, + 'u_device_pixel_ratio': devicePixelRatio, 'u_is_halo': +isHalo }); }; const symbolTextAndIconUniformValues = ( - functionType: string, - size: ?{uSizeT: number, uSize: number}, - rotateInShader: boolean, - pitchWithMap: boolean, - painter: Painter, - matrix: Float32Array, - labelPlaneMatrix: Float32Array, - glCoordMatrix: Float32Array, - texSizeSDF: [number, number], - texSizeIcon: [number, number] + functionType: string, + size: { + uSizeT: number; + uSize: number; + } | undefined | null, + rotateInShader: boolean, + pitchWithMap: boolean, + painter: Painter, + matrix: mat4, + labelPlaneMatrix: mat4, + glCoordMatrix: mat4, + texSizeSDF: [number, number], + texSizeIcon: [number, number] ): UniformValues => { return extend(symbolSDFUniformValues(functionType, size, rotateInShader, pitchWithMap, painter, matrix, labelPlaneMatrix, diff --git a/src/render/texture.js b/src/render/texture.ts similarity index 68% rename from src/render/texture.js rename to src/render/texture.ts index 39e5369a7f..42861a190a 100644 --- a/src/render/texture.js +++ b/src/render/texture.ts @@ -1,56 +1,45 @@ -// @flow - -import window from '../util/window'; -const {HTMLImageElement, HTMLCanvasElement, HTMLVideoElement, ImageData, ImageBitmap} = window; - import type Context from '../gl/context'; import type {RGBAImage, AlphaImage} from '../util/image'; -export type TextureFormat = - | $PropertyType - | $PropertyType; -export type TextureFilter = - | $PropertyType - | $PropertyType - | $PropertyType; -export type TextureWrap = - | $PropertyType - | $PropertyType - | $PropertyType; +export type TextureFormat = WebGLRenderingContext['RGBA'] | WebGLRenderingContext['ALPHA']; +export type TextureFilter = WebGLRenderingContext['LINEAR'] | WebGLRenderingContext['LINEAR_MIPMAP_NEAREST'] | WebGLRenderingContext['NEAREST']; +export type TextureWrap = WebGLRenderingContext['REPEAT'] | WebGLRenderingContext['CLAMP_TO_EDGE'] | WebGLRenderingContext['MIRRORED_REPEAT']; type EmptyImage = { - width: number, - height: number, - data: null -} + width: number; + height: number; + data: null; +}; -export type TextureImage = - | RGBAImage - | AlphaImage - | HTMLImageElement - | HTMLCanvasElement - | HTMLVideoElement - | ImageData - | EmptyImage - | ImageBitmap; +type DataTextureImage = RGBAImage | AlphaImage | EmptyImage; +export type TextureImage = HTMLImageElement | HTMLCanvasElement | HTMLVideoElement | ImageData | ImageBitmap | DataTextureImage; class Texture { context: Context; size: [number, number]; texture: WebGLTexture; format: TextureFormat; - filter: ?TextureFilter; - wrap: ?TextureWrap; + filter: TextureFilter | undefined | null; + wrap: TextureWrap | undefined | null; useMipmap: boolean; - constructor(context: Context, image: TextureImage, format: TextureFormat, options: ?{ premultiply?: boolean, useMipmap?: boolean }) { + constructor(context: Context, image: TextureImage, format: TextureFormat, options?: { + premultiply?: boolean; + useMipmap?: boolean; + } | null) { this.context = context; this.format = format; this.texture = context.gl.createTexture(); this.update(image, options); } - update(image: TextureImage, options: ?{premultiply?: boolean, useMipmap?: boolean}, position?: { x: number, y: number }) { + update(image: TextureImage, options?: { + premultiply?: boolean; + useMipmap?: boolean; + } | null, position?: { + x: number; + y: number; + }) { const {width, height} = image; const resize = (!this.size || this.size[0] !== width || this.size[1] !== height) && !position; const {context} = this; @@ -69,7 +58,7 @@ class Texture { if (image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof HTMLVideoElement || image instanceof ImageData || (ImageBitmap && image instanceof ImageBitmap)) { gl.texImage2D(gl.TEXTURE_2D, 0, this.format, this.format, gl.UNSIGNED_BYTE, image); } else { - gl.texImage2D(gl.TEXTURE_2D, 0, this.format, width, height, 0, this.format, gl.UNSIGNED_BYTE, image.data); + gl.texImage2D(gl.TEXTURE_2D, 0, this.format, width, height, 0, this.format, gl.UNSIGNED_BYTE, (image as DataTextureImage).data); } } else { @@ -77,7 +66,7 @@ class Texture { if (image instanceof HTMLImageElement || image instanceof HTMLCanvasElement || image instanceof HTMLVideoElement || image instanceof ImageData || (ImageBitmap && image instanceof ImageBitmap)) { gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, gl.RGBA, gl.UNSIGNED_BYTE, image); } else { - gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, image.data); + gl.texSubImage2D(gl.TEXTURE_2D, 0, x, y, width, height, gl.RGBA, gl.UNSIGNED_BYTE, (image as DataTextureImage).data); } } @@ -86,7 +75,7 @@ class Texture { } } - bind(filter: TextureFilter, wrap: TextureWrap, minFilter: ?TextureFilter) { + bind(filter: TextureFilter, wrap: TextureWrap, minFilter?: TextureFilter | null) { const {context} = this; const {gl} = context; gl.bindTexture(gl.TEXTURE_2D, this.texture); @@ -115,7 +104,7 @@ class Texture { destroy() { const {gl} = this.context; gl.deleteTexture(this.texture); - this.texture = (null: any); + this.texture = null; } } diff --git a/src/render/uniform_binding.js b/src/render/uniform_binding.ts similarity index 84% rename from src/render/uniform_binding.js rename to src/render/uniform_binding.ts index 4cb0c5f32e..918be23bac 100644 --- a/src/render/uniform_binding.js +++ b/src/render/uniform_binding.ts @@ -1,16 +1,18 @@ -// @flow - import Color from '../style-spec/util/color'; import type Context from '../gl/context'; +import {mat4, vec2, vec3, vec4} from 'gl-matrix'; + +type $ObjMap any> = { + [K in keyof T]: F extends (v: T[K]) => infer R ? R : never; +}; -export type UniformValues - = $Exact<$ObjMap(u: Uniform) => V>>; +export type UniformValues = $ObjMap(u: Uniform) => V>; export type UniformLocations = {[_: string]: WebGLUniformLocation}; -class Uniform { +abstract class Uniform { gl: WebGLRenderingContext; - location: ?WebGLUniformLocation; + location: WebGLUniformLocation | undefined | null; current: T; constructor(context: Context, location: WebGLUniformLocation) { @@ -18,7 +20,7 @@ class Uniform { this.location = location; } - +set: (v: T) => void; + abstract set(v: T): void; } class Uniform1i extends Uniform { @@ -49,13 +51,13 @@ class Uniform1f extends Uniform { } } -class Uniform2f extends Uniform<[number, number]> { +class Uniform2f extends Uniform { constructor(context: Context, location: WebGLUniformLocation) { super(context, location); this.current = [0, 0]; } - set(v: [number, number]): void { + set(v: vec2): void { if (v[0] !== this.current[0] || v[1] !== this.current[1]) { this.current = v; this.gl.uniform2f(this.location, v[0], v[1]); @@ -63,13 +65,13 @@ class Uniform2f extends Uniform<[number, number]> { } } -class Uniform3f extends Uniform<[number, number, number]> { +class Uniform3f extends Uniform { constructor(context: Context, location: WebGLUniformLocation) { super(context, location); this.current = [0, 0, 0]; } - set(v: [number, number, number]): void { + set(v: vec3): void { if (v[0] !== this.current[0] || v[1] !== this.current[1] || v[2] !== this.current[2]) { this.current = v; this.gl.uniform3f(this.location, v[0], v[1], v[2]); @@ -77,13 +79,13 @@ class Uniform3f extends Uniform<[number, number, number]> { } } -class Uniform4f extends Uniform<[number, number, number, number]> { +class Uniform4f extends Uniform { constructor(context: Context, location: WebGLUniformLocation) { super(context, location); this.current = [0, 0, 0, 0]; } - set(v: [number, number, number, number]): void { + set(v: vec4): void { if (v[0] !== this.current[0] || v[1] !== this.current[1] || v[2] !== this.current[2] || v[3] !== this.current[3]) { this.current = v; @@ -107,14 +109,14 @@ class UniformColor extends Uniform { } } -const emptyMat4 = new Float32Array(16); -class UniformMatrix4f extends Uniform { +const emptyMat4 = mat4.create(); +class UniformMatrix4f extends Uniform { constructor(context: Context, location: WebGLUniformLocation) { super(context, location); this.current = emptyMat4; } - set(v: Float32Array): void { + set(v: mat4): void { // The vast majority of matrix comparisons that will trip this set // happen at i=12 or i=0, so we check those first to avoid lots of // unnecessary iteration: diff --git a/src/render/vertex_array_object.js b/src/render/vertex_array_object.ts similarity index 86% rename from src/render/vertex_array_object.js rename to src/render/vertex_array_object.ts index fab9aee0a1..53f9cd6f82 100644 --- a/src/render/vertex_array_object.js +++ b/src/render/vertex_array_object.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import type Program from './program'; @@ -9,13 +7,13 @@ import type Context from '../gl/context'; class VertexArrayObject { context: Context; - boundProgram: ?Program<*>; - boundLayoutVertexBuffer: ?VertexBuffer; + boundProgram: Program | undefined | null; + boundLayoutVertexBuffer: VertexBuffer | undefined | null; boundPaintVertexBuffers: Array; - boundIndexBuffer: ?IndexBuffer; - boundVertexOffset: ?number; - boundDynamicVertexBuffer: ?VertexBuffer; - boundDynamicVertexBuffer2: ?VertexBuffer; + boundIndexBuffer: IndexBuffer | undefined | null; + boundVertexOffset: number | undefined | null; + boundDynamicVertexBuffer: VertexBuffer | undefined | null; + boundDynamicVertexBuffer2: VertexBuffer | undefined | null; vao: any; constructor() { @@ -29,13 +27,13 @@ class VertexArrayObject { } bind(context: Context, - program: Program<*>, + program: Program, layoutVertexBuffer: VertexBuffer, paintVertexBuffers: Array, - indexBuffer: ?IndexBuffer, - vertexOffset: ?number, - dynamicVertexBuffer: ?VertexBuffer, - dynamicVertexBuffer2: ?VertexBuffer) { + indexBuffer?: IndexBuffer | null, + vertexOffset?: number | null, + dynamicVertexBuffer?: VertexBuffer | null, + dynamicVertexBuffer2?: VertexBuffer | null) { this.context = context; @@ -77,13 +75,13 @@ class VertexArrayObject { } } - freshBind(program: Program<*>, + freshBind(program: Program, layoutVertexBuffer: VertexBuffer, paintVertexBuffers: Array, - indexBuffer: ?IndexBuffer, - vertexOffset: ?number, - dynamicVertexBuffer: ?VertexBuffer, - dynamicVertexBuffer2: ?VertexBuffer) { + indexBuffer?: IndexBuffer | null, + vertexOffset?: number | null, + dynamicVertexBuffer?: VertexBuffer | null, + dynamicVertexBuffer2?: VertexBuffer | null) { let numPrevAttributes; const numNextAttributes = program.numAttributes; diff --git a/src/shaders/encode_attribute.js b/src/shaders/encode_attribute.ts similarity index 97% rename from src/shaders/encode_attribute.js rename to src/shaders/encode_attribute.ts index 7e09dd696d..519f4657a4 100644 --- a/src/shaders/encode_attribute.js +++ b/src/shaders/encode_attribute.ts @@ -1,5 +1,3 @@ -// @flow - import {clamp} from '../util/util'; /** diff --git a/src/shaders/index.js b/src/shaders/index.js deleted file mode 100644 index e20894e2c7..0000000000 --- a/src/shaders/index.js +++ /dev/null @@ -1,20 +0,0 @@ -// This file is intended for use in the GL-JS test suite -// It provides the shaders entry point for Node (tests and GL Native) -// In a browser environment, this file is replaced with ./src/shaders/shaders.js -// when Rollup builds the main bundle. -// See package.json#browser - -/* eslint-disable import/unambiguous, import/no-commonjs, flowtype/require-valid-file-annotation, no-global-assign */ - -const fs = require('fs'); - -// enable ES Modules in Node -require = require("esm")(module); - -// enable requiring GLSL in Node -require.extensions['.glsl'] = function (module, filename) { - const content = fs.readFileSync(filename, 'utf8'); - module._compile(`module.exports = \`${content}\``, filename); -}; - -module.exports = require("./shaders.js"); diff --git a/src/shaders/shaders.js b/src/shaders/shaders.ts similarity index 76% rename from src/shaders/shaders.js rename to src/shaders/shaders.ts index 25f1fabdbc..ccd1598e9e 100644 --- a/src/shaders/shaders.js +++ b/src/shaders/shaders.ts @@ -1,6 +1,5 @@ // Disable Flow annotations here because Flow doesn't support importing GLSL files -/* eslint-disable flowtype/require-valid-file-annotation */ import preludeFrag from './_prelude.fragment.glsl'; import preludeVert from './_prelude.vertex.glsl'; @@ -55,32 +54,34 @@ import symbolSDFVert from './symbol_sdf.vertex.glsl'; import symbolTextAndIconFrag from './symbol_text_and_icon.fragment.glsl'; import symbolTextAndIconVert from './symbol_text_and_icon.vertex.glsl'; -export const prelude = compile(preludeFrag, preludeVert); -export const background = compile(backgroundFrag, backgroundVert); -export const backgroundPattern = compile(backgroundPatternFrag, backgroundPatternVert); -export const circle = compile(circleFrag, circleVert); -export const clippingMask = compile(clippingMaskFrag, clippingMaskVert); -export const heatmap = compile(heatmapFrag, heatmapVert); -export const heatmapTexture = compile(heatmapTextureFrag, heatmapTextureVert); -export const collisionBox = compile(collisionBoxFrag, collisionBoxVert); -export const collisionCircle = compile(collisionCircleFrag, collisionCircleVert); -export const debug = compile(debugFrag, debugVert); -export const fill = compile(fillFrag, fillVert); -export const fillOutline = compile(fillOutlineFrag, fillOutlineVert); -export const fillOutlinePattern = compile(fillOutlinePatternFrag, fillOutlinePatternVert); -export const fillPattern = compile(fillPatternFrag, fillPatternVert); -export const fillExtrusion = compile(fillExtrusionFrag, fillExtrusionVert); -export const fillExtrusionPattern = compile(fillExtrusionPatternFrag, fillExtrusionPatternVert); -export const hillshadePrepare = compile(hillshadePrepareFrag, hillshadePrepareVert); -export const hillshade = compile(hillshadeFrag, hillshadeVert); -export const line = compile(lineFrag, lineVert); -export const lineGradient = compile(lineGradientFrag, lineGradientVert); -export const linePattern = compile(linePatternFrag, linePatternVert); -export const lineSDF = compile(lineSDFFrag, lineSDFVert); -export const raster = compile(rasterFrag, rasterVert); -export const symbolIcon = compile(symbolIconFrag, symbolIconVert); -export const symbolSDF = compile(symbolSDFFrag, symbolSDFVert); -export const symbolTextAndIcon = compile(symbolTextAndIconFrag, symbolTextAndIconVert); +export default { + prelude: compile(preludeFrag, preludeVert), + background: compile(backgroundFrag, backgroundVert), + backgroundPattern: compile(backgroundPatternFrag, backgroundPatternVert), + circle: compile(circleFrag, circleVert), + clippingMask: compile(clippingMaskFrag, clippingMaskVert), + heatmap: compile(heatmapFrag, heatmapVert), + heatmapTexture: compile(heatmapTextureFrag, heatmapTextureVert), + collisionBox: compile(collisionBoxFrag, collisionBoxVert), + collisionCircle: compile(collisionCircleFrag, collisionCircleVert), + debug: compile(debugFrag, debugVert), + fill: compile(fillFrag, fillVert), + fillOutline: compile(fillOutlineFrag, fillOutlineVert), + fillOutlinePattern: compile(fillOutlinePatternFrag, fillOutlinePatternVert), + fillPattern: compile(fillPatternFrag, fillPatternVert), + fillExtrusion: compile(fillExtrusionFrag, fillExtrusionVert), + fillExtrusionPattern: compile(fillExtrusionPatternFrag, fillExtrusionPatternVert), + hillshadePrepare: compile(hillshadePrepareFrag, hillshadePrepareVert), + hillshade: compile(hillshadeFrag, hillshadeVert), + line: compile(lineFrag, lineVert), + lineGradient: compile(lineGradientFrag, lineGradientVert), + linePattern: compile(linePatternFrag, linePatternVert), + lineSDF: compile(lineSDFFrag, lineSDFVert), + raster: compile(rasterFrag, rasterVert), + symbolIcon: compile(symbolIconFrag, symbolIconVert), + symbolSDF: compile(symbolSDFFrag, symbolSDFVert), + symbolTextAndIcon: compile(symbolTextAndIconFrag, symbolTextAndIconVert) +}; // Expand #pragmas to #ifdefs. @@ -168,7 +169,7 @@ uniform ${precision} ${type} u_${name}; ${precision} ${type} ${name} = u_${name}; #endif `; - } else /* */{ + } else /* */ { return ` #ifndef HAS_UNIFORM_u_${name} ${precision} ${type} ${name} = unpack_mix_${unpackType}(a_${name}, u_${name}_t); diff --git a/src/source/canvas_source.js b/src/source/canvas_source.ts similarity index 92% rename from src/source/canvas_source.js rename to src/source/canvas_source.ts index 3fada4c6c1..50715d5c30 100644 --- a/src/source/canvas_source.js +++ b/src/source/canvas_source.ts @@ -1,8 +1,5 @@ -// @flow - import ImageSource from './image_source'; -import window from '../util/window'; import rasterBoundsAttributes from '../data/raster_bounds_attributes'; import SegmentVector from '../data/segment'; import Texture from '../render/texture'; @@ -13,12 +10,12 @@ import type Map from '../ui/map'; import type Dispatcher from '../util/dispatcher'; import type {Evented} from '../util/evented'; -export type CanvasSourceSpecification = {| - "type": "canvas", - "coordinates": [[number, number], [number, number], [number, number], [number, number]], - "animate"?: boolean, - "canvas": string | HTMLCanvasElement -|}; +export type CanvasSourceSpecification = { + 'type': 'canvas'; + 'coordinates': [[number, number], [number, number], [number, number], [number, number]]; + 'animate'?: boolean; + 'canvas': string | HTMLCanvasElement; +}; /** * Options to add a canvas source type to the map. @@ -88,7 +85,7 @@ class CanvasSource extends ImageSource { if (!options.canvas) { this.fire(new ErrorEvent(new ValidationError(`sources.${id}`, null, 'missing required property "canvas"'))); - } else if (typeof options.canvas !== 'string' && !(options.canvas instanceof window.HTMLCanvasElement)) { + } else if (typeof options.canvas !== 'string' && !(options.canvas instanceof HTMLCanvasElement)) { this.fire(new ErrorEvent(new ValidationError(`sources.${id}`, null, '"canvas" must be either a string representing the ID of the canvas element from which to read, or an HTMLCanvasElement instance'))); } @@ -113,9 +110,11 @@ class CanvasSource extends ImageSource { load() { this._loaded = true; if (!this.canvas) { - this.canvas = (this.options.canvas instanceof window.HTMLCanvasElement) ? + this.canvas = (this.options.canvas instanceof HTMLCanvasElement) ? this.options.canvas : - window.document.getElementById(this.options.canvas); + document.getElementById(this.options.canvas) as HTMLCanvasElement; + // cast to HTMLCanvasElement in else of ternary + // should we do a safety check and throw if it's not actually HTMLCanvasElement? } this.width = this.canvas.width; this.height = this.canvas.height; @@ -216,7 +215,7 @@ class CanvasSource extends ImageSource { } } - serialize(): Object { + serialize(): any { return { type: 'canvas', coordinates: this.coordinates diff --git a/src/source/geojson_source.js b/src/source/geojson_source.ts similarity index 95% rename from src/source/geojson_source.js rename to src/source/geojson_source.ts index 2e8ec1c73b..cccabcb7f1 100644 --- a/src/source/geojson_source.js +++ b/src/source/geojson_source.ts @@ -1,5 +1,3 @@ -// @flow - import {Event, ErrorEvent, Evented} from '../util/evented'; import {extend} from '../util/util'; @@ -13,7 +11,6 @@ import type Dispatcher from '../util/dispatcher'; import type Tile from './tile'; import type Actor from '../util/actor'; import type {Callback} from '../types/callback'; -import type {GeoJSON, GeoJSONFeature} from '@mapbox/geojson-types'; import type {GeoJSONSourceSpecification, PromoteIdSpecification} from '../style-spec/types'; /** @@ -69,11 +66,11 @@ class GeoJSONSource extends Evented implements Source { maxzoom: number; tileSize: number; attribution: string; - promoteId: ?PromoteIdSpecification; + promoteId: PromoteIdSpecification | undefined | null; isTileClipped: boolean; reparseOverscaled: boolean; - _data: GeoJSON | string; + _data: GeoJSON.GeoJSON | string; _options: any; workerOptions: any; map: Map; @@ -86,7 +83,10 @@ class GeoJSONSource extends Evented implements Source { /** * @private */ - constructor(id: string, options: GeoJSONSourceSpecification & {workerOptions?: any, collectResourceTiming: boolean}, dispatcher: Dispatcher, eventedParent: Evented) { + constructor(id: string, options: GeoJSONSourceSpecification & { + workerOptions?: any; + collectResourceTiming: boolean; + }, dispatcher: Dispatcher, eventedParent: Evented) { super(); this.id = id; @@ -106,7 +106,7 @@ class GeoJSONSource extends Evented implements Source { this.actor = dispatcher.getActor(); this.setEventedParent(eventedParent); - this._data = (options.data: any); + this._data = (options.data as any); this._options = extend({}, options); this._collectResourceTiming = options.collectResourceTiming; @@ -157,7 +157,7 @@ class GeoJSONSource extends Evented implements Source { return; } - const data: Object = {dataType: 'source', sourceDataType: 'metadata'}; + const data: any = {dataType: 'source', sourceDataType: 'metadata'}; if (this._collectResourceTiming && this._resourceTiming && (this._resourceTiming.length > 0)) { data.resourceTiming = this._resourceTiming; this._resourceTiming = []; @@ -180,7 +180,7 @@ class GeoJSONSource extends Evented implements Source { * @param {Object|string} data A GeoJSON data object or a URL to one. The latter is preferable in the case of large GeoJSON files. * @returns {GeoJSONSource} this */ - setData(data: GeoJSON | string) { + setData(data: GeoJSON.GeoJSON | string) { this._data = data; this.fire(new Event('dataloading', {dataType: 'source'})); this._updateWorkerData((err) => { @@ -189,7 +189,7 @@ class GeoJSONSource extends Evented implements Source { return; } - const data: Object = {dataType: 'source', sourceDataType: 'content'}; + const data: any = {dataType: 'source', sourceDataType: 'content'}; if (this._collectResourceTiming && this._resourceTiming && (this._resourceTiming.length > 0)) { data.resourceTiming = this._resourceTiming; this._resourceTiming = []; @@ -219,7 +219,7 @@ class GeoJSONSource extends Evented implements Source { * @param callback A callback to be called when the features are retrieved (`(error, features) => { ... }`). * @returns {GeoJSONSource} this */ - getClusterChildren(clusterId: number, callback: Callback>) { + getClusterChildren(clusterId: number, callback: Callback>) { this.actor.send('geojson.getClusterChildren', {clusterId, source: this.id}, callback); return this; } @@ -249,7 +249,7 @@ class GeoJSONSource extends Evented implements Source { * }) * }); */ - getClusterLeaves(clusterId: number, limit: number, offset: number, callback: Callback>) { + getClusterLeaves(clusterId: number, limit: number, offset: number, callback: Callback>) { this.actor.send('geojson.getClusterLeaves', { source: this.id, clusterId, @@ -314,7 +314,7 @@ class GeoJSONSource extends Evented implements Source { maxZoom: this.maxzoom, tileSize: this.tileSize, source: this.id, - pixelRatio: browser.devicePixelRatio, + pixelRatio: devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId }; diff --git a/src/source/geojson_worker_source.js b/src/source/geojson_worker_source.ts similarity index 86% rename from src/source/geojson_worker_source.js rename to src/source/geojson_worker_source.ts index a395a6fbbe..e0b880d548 100644 --- a/src/source/geojson_worker_source.js +++ b/src/source/geojson_worker_source.ts @@ -1,5 +1,3 @@ -// @flow - import {getJSON} from '../util/ajax'; import {RequestPerformance} from '../util/performance'; @@ -23,31 +21,29 @@ import type StyleLayerIndex from '../style/style_layer_index'; import type {LoadVectorDataCallback} from './vector_tile_worker_source'; import type {RequestParameters, ResponseCallback} from '../util/ajax'; import type {Callback} from '../types/callback'; -import type {GeoJSONFeature} from '@mapbox/geojson-types'; export type LoadGeoJSONParameters = { - request?: RequestParameters, - data?: string, - source: string, - cluster: boolean, - superclusterOptions?: Object, - geojsonVtOptions?: Object, - clusterProperties?: Object, - filter?: Array + request?: RequestParameters; + data?: string; + source: string; + cluster: boolean; + superclusterOptions?: any; + geojsonVtOptions?: any; + clusterProperties?: any; + filter?: Array; }; -export type LoadGeoJSON = (params: LoadGeoJSONParameters, callback: ResponseCallback) => void; +export type LoadGeoJSON = (params: LoadGeoJSONParameters, callback: ResponseCallback) => void; export interface GeoJSONIndex { - getTile(z: number, x: number, y: number): Object; - - // supercluster methods - getClusterExpansionZoom(clusterId: number): number; - getChildren(clusterId: number): Array; - getLeaves(clusterId: number, limit: number, offset: number): Array; + getTile(z: number, x: number, y: number): any; + // supercluster methods + getClusterExpansionZoom(clusterId: number): number; + getChildren(clusterId: number): Array; + getLeaves(clusterId: number, limit: number, offset: number): Array; } -function loadGeoJSONTile(params: WorkerTileParameters, callback: LoadVectorDataCallback) { +function loadGeoJSONTile(params: WorkerTileParameters, callback: LoadVectorDataCallback): (() => void) | void | undefined | null { const canonical = params.tileID.canonical; if (!this._geoJSONIndex) { @@ -76,10 +72,9 @@ function loadGeoJSONTile(params: WorkerTileParameters, callback: LoadVectorDataC }); } -export type SourceState = - | 'Idle' // Source empty or data loaded - | 'Coalescing' // Data finished loading, but discard 'loadData' messages until receiving 'coalesced' - | 'NeedsLoadData'; // 'loadData' received while coalescing, trigger one more 'loadData' on receiving 'coalesced' +export type SourceState = // Source empty or data loaded +'Idle' | // Data finished loading, but discard 'loadData' messages until receiving 'coalesced' +'Coalescing' | 'NeedsLoadData'; // 'loadData' received while coalescing, trigger one more 'loadData' on receiving 'coalesced' /** * The {@link WorkerSource} implementation that supports {@link GeoJSONSource}. @@ -92,13 +87,13 @@ export type SourceState = * @private */ class GeoJSONWorkerSource extends VectorTileWorkerSource { - loadGeoJSON: LoadGeoJSON; _state: SourceState; _pendingCallback: Callback<{ - resourceTiming?: {[_: string]: Array}, - abandoned?: boolean }>; + resourceTiming?: {[_: string]: Array}; + abandoned?: boolean; + }>; _pendingLoadDataParams: LoadGeoJSONParameters; - _geoJSONIndex: GeoJSONIndex + _geoJSONIndex: GeoJSONIndex; /** * @param [loadGeoJSON] Optional method for custom loading/parsing of @@ -106,7 +101,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { * See {@link GeoJSONWorkerSource#loadGeoJSON}. * @private */ - constructor(actor: Actor, layerIndex: StyleLayerIndex, availableImages: Array, loadGeoJSON: ?LoadGeoJSON) { + constructor(actor: Actor, layerIndex: StyleLayerIndex, availableImages: Array, loadGeoJSON?: LoadGeoJSON | null) { super(actor, layerIndex, availableImages, loadGeoJSONTile); if (loadGeoJSON) { this.loadGeoJSON = loadGeoJSON; @@ -131,8 +126,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { * @private */ loadData(params: LoadGeoJSONParameters, callback: Callback<{ - resourceTiming?: {[_: string]: Array}, - abandoned?: boolean }>) { + resourceTiming?: {[_: string]: Array}; + abandoned?: boolean; + }>) { if (this._pendingCallback) { // Tell the foreground the previous call has been abandoned this._pendingCallback(null, {abandoned: true}); @@ -166,7 +162,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { const perf = (params && params.request && params.request.collectResourceTiming) ? new RequestPerformance(params.request) : false; - this.loadGeoJSON(params, (err: ?Error, data: ?Object) => { + this.loadGeoJSON(params, (err?: Error | null, data?: any | null) => { if (err || !data) { return callback(err); } else if (typeof data !== 'object') { @@ -176,7 +172,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { try { if (params.filter) { - const compiled = createExpression(params.filter, {type: 'boolean', 'property-type': 'data-driven', overridable: false, transition: false}); + const compiled = createExpression(params.filter, {type: 'boolean', 'property-type': 'data-driven', overridable: false, transition: false} as any); if (compiled.result === 'error') throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', ')); @@ -193,7 +189,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { this.loaded = {}; - const result = {}; + const result = {} as { resourceTiming: any }; if (perf) { const resourceTimingData = perf.finish(); // it's necessary to eval the result of getEntriesByName() here via parse/stringify @@ -270,7 +266,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { * @param [params.data] Literal GeoJSON data. Must be provided if `params.url` is not. * @private */ - loadGeoJSON(params: LoadGeoJSONParameters, callback: ResponseCallback) { + loadGeoJSON(params: LoadGeoJSONParameters, callback: ResponseCallback) { // Because of same origin issues, urls must either include an explicit // origin or absolute path. // ie: /foo/bar.json or http://example.com/bar.json @@ -288,7 +284,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { } } - removeSource(params: {source: string}, callback: Callback) { + removeSource(params: { + source: string; + }, callback: WorkerTileCallback) { if (this._pendingCallback) { // Don't leak callbacks this._pendingCallback(null, {abandoned: true}); @@ -296,7 +294,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { callback(); } - getClusterExpansionZoom(params: {clusterId: number}, callback: Callback) { + getClusterExpansionZoom(params: { + clusterId: number; + }, callback: Callback) { try { callback(null, this._geoJSONIndex.getClusterExpansionZoom(params.clusterId)); } catch (e) { @@ -304,7 +304,9 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { } } - getClusterChildren(params: {clusterId: number}, callback: Callback>) { + getClusterChildren(params: { + clusterId: number; + }, callback: Callback>) { try { callback(null, this._geoJSONIndex.getChildren(params.clusterId)); } catch (e) { @@ -312,7 +314,11 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { } } - getClusterLeaves(params: {clusterId: number, limit: number, offset: number}, callback: Callback>) { + getClusterLeaves(params: { + clusterId: number; + limit: number; + offset: number; + }, callback: Callback>) { try { callback(null, this._geoJSONIndex.getLeaves(params.clusterId, params.limit, params.offset)); } catch (e) { @@ -321,7 +327,7 @@ class GeoJSONWorkerSource extends VectorTileWorkerSource { } } -function getSuperclusterOptions({superclusterOptions, clusterProperties}) { +function getSuperclusterOptions({superclusterOptions, clusterProperties}: { superclusterOptions?: any; clusterProperties?: any}) { if (!clusterProperties || !superclusterOptions) return superclusterOptions; const mapExpressions = {}; diff --git a/src/source/geojson_wrapper.js b/src/source/geojson_wrapper.ts similarity index 89% rename from src/source/geojson_wrapper.js rename to src/source/geojson_wrapper.ts index 35a23afd2c..c943502dd1 100644 --- a/src/source/geojson_wrapper.js +++ b/src/source/geojson_wrapper.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import mvt from '@mapbox/vector-tile'; const toGeoJSON = mvt.VectorTileFeature.prototype.toGeoJSON; @@ -9,16 +7,16 @@ import EXTENT from '../data/extent'; // The feature type used by geojson-vt and supercluster. Should be extracted to // global type and used in module definitions for those two modules. type Feature = { - type: 1, - id: mixed, - tags: {[_: string]: string | number | boolean}, - geometry: Array<[number, number]>, + type: 1; + id: any; + tags: {[_: string]: string | number | boolean}; + geometry: Array<[number, number]>; } | { - type: 2 | 3, - id: mixed, - tags: {[_: string]: string | number | boolean}, - geometry: Array>, -} + type: 2 | 3; + id: any; + tags: {[_: string]: string | number | boolean}; + geometry: Array>; +}; class FeatureWrapper implements VectorTileFeature { _feature: Feature; diff --git a/src/source/image_source.js b/src/source/image_source.ts similarity index 98% rename from src/source/image_source.js rename to src/source/image_source.ts index 9360ab95f5..e4fc2c2b2b 100644 --- a/src/source/image_source.js +++ b/src/source/image_source.ts @@ -1,5 +1,3 @@ -// @flow - import {CanonicalTileID} from './tile_id'; import {Event, ErrorEvent, Evented} from '../util/evented'; import {getImage, ResourceType} from '../util/ajax'; @@ -144,7 +142,10 @@ class ImageSource extends Evented implements Source { * They do not have to represent a rectangle. * @returns {ImageSource} this */ - updateImage(options: {url: string, coordinates?: Coordinates}) { + updateImage(options: { + url: string; + coordinates?: Coordinates; + }) { if (!this.image || !options.url) { return this; } @@ -259,7 +260,7 @@ class ImageSource extends Evented implements Source { } } - serialize(): Object { + serialize(): any { return { type: 'image', url: this.options.url, diff --git a/src/source/load_tilejson.js b/src/source/load_tilejson.ts similarity index 90% rename from src/source/load_tilejson.js rename to src/source/load_tilejson.ts index 2f96df7f79..5774050d7a 100644 --- a/src/source/load_tilejson.js +++ b/src/source/load_tilejson.ts @@ -1,5 +1,3 @@ -// @flow - import {pick, extend} from '../util/util'; import {getJSON, ResourceType} from '../util/ajax'; @@ -11,14 +9,14 @@ import type {TileJSON} from '../types/tilejson'; import type {Cancelable} from '../types/cancelable'; export default function(options: any, requestManager: RequestManager, callback: Callback): Cancelable { - const loaded = function(err: ?Error, tileJSON: ?Object) { + const loaded = function(err: Error | undefined | null, tileJSON: any) { if (err) { return callback(err); } else if (tileJSON) { const result: any = pick( // explicit source options take precedence over TileJSON extend(tileJSON, options), - ['tiles', 'minzoom', 'maxzoom', 'attribution', 'mapbox_logo', 'bounds', 'scheme', 'tileSize', 'encoding'] + ['tiles', 'minzoom', 'maxzoom', 'attribution', 'maplibreLogo', 'bounds', 'scheme', 'tileSize', 'encoding'] ); if (tileJSON.vector_layers) { diff --git a/src/source/pixels_to_tile_units.js b/src/source/pixels_to_tile_units.ts similarity index 80% rename from src/source/pixels_to_tile_units.js rename to src/source/pixels_to_tile_units.ts index 7874396f30..695a0725f5 100644 --- a/src/source/pixels_to_tile_units.js +++ b/src/source/pixels_to_tile_units.ts @@ -1,5 +1,3 @@ -// @flow - import EXTENT from '../data/extent'; import type {OverscaledTileID} from './tile_id'; @@ -16,6 +14,13 @@ import type {OverscaledTileID} from './tile_id'; * @returns value in tile units * @private */ -export default function(tile: {tileID: OverscaledTileID, tileSize: number}, pixelValue: number, z: number): number { +export default function( + tile: { + tileID: OverscaledTileID; + tileSize: number; + }, + pixelValue: number, + z: number +): number { return pixelValue * (EXTENT / (tile.tileSize * Math.pow(2, z - tile.tileID.overscaledZ))); } diff --git a/src/source/query_features.js b/src/source/query_features.ts similarity index 89% rename from src/source/query_features.js rename to src/source/query_features.ts index c7017b577b..1b025bf77c 100644 --- a/src/source/query_features.js +++ b/src/source/query_features.ts @@ -1,11 +1,10 @@ -// @flow - import type SourceCache from './source_cache'; import type StyleLayer from '../style/style_layer'; import type CollisionIndex from '../symbol/collision_index'; import type Transform from '../geo/transform'; import type {RetainedQueryData} from '../symbol/placement'; import type {FilterSpecification} from '../style-spec/types'; +import type Point from '../util/point'; import assert from 'assert'; import {mat4} from 'gl-matrix'; @@ -13,13 +12,13 @@ import {mat4} from 'gl-matrix'; * Returns a matrix that can be used to convert from tile coordinates to viewport pixel coordinates. */ function getPixelPosMatrix(transform, tileID) { - const t = mat4.identity([]); + const t = mat4.create(); mat4.translate(t, t, [1, 1, 0]); mat4.scale(t, t, [transform.width * 0.5, transform.height * 0.5, 1]); return mat4.multiply(t, t, transform.calculatePosMatrix(tileID.toUnwrapped())); } -function queryIncludes3DLayer(layers?: Array, styleLayers: {[_: string]: StyleLayer}, sourceID: string) { +function queryIncludes3DLayer(layers: Array | undefined | null, styleLayers: {[_: string]: StyleLayer}, sourceID: string) { if (layers) { for (const layerID of layers) { const layer = styleLayers[layerID]; @@ -38,12 +37,18 @@ function queryIncludes3DLayer(layers?: Array, styleLayers: {[_: string]: return false; } -export function queryRenderedFeatures(sourceCache: SourceCache, - styleLayers: {[_: string]: StyleLayer}, - serializedLayers: {[_: string]: Object}, - queryGeometry: Array, - params: { filter: FilterSpecification, layers: Array, availableImages: Array }, - transform: Transform) { +export function queryRenderedFeatures( + sourceCache: SourceCache, + styleLayers: {[_: string]: StyleLayer}, + serializedLayers: {[_: string]: any}, + queryGeometry: Array, + params: { + filter: FilterSpecification; + layers: Array; + availableImages: Array; + }, + transform: Transform +) { const has3DLayer = queryIncludes3DLayer(params && params.layers, styleLayers, sourceCache.id); const maxPitchScaleFactor = transform.maxPitchScaleFactor(); @@ -89,9 +94,15 @@ export function queryRenderedSymbols(styleLayers: {[_: string]: StyleLayer}, serializedLayers: {[_: string]: StyleLayer}, sourceCaches: {[_: string]: SourceCache}, queryGeometry: Array, - params: { filter: FilterSpecification, layers: Array, availableImages: Array }, + params: { + filter: FilterSpecification; + layers: Array; + availableImages: Array; + }, collisionIndex: CollisionIndex, - retainedQueryData: {[_: number]: RetainedQueryData}) { + retainedQueryData: { + [_: number]: RetainedQueryData; + }) { const result = {}; const renderedSymbols = collisionIndex.queryRenderedSymbols(queryGeometry); const bucketQueryData = []; diff --git a/src/source/raster_dem_tile_source.js b/src/source/raster_dem_tile_source.ts similarity index 93% rename from src/source/raster_dem_tile_source.js rename to src/source/raster_dem_tile_source.ts index bd36edfdda..bcb4c149ed 100644 --- a/src/source/raster_dem_tile_source.js +++ b/src/source/raster_dem_tile_source.ts @@ -1,10 +1,7 @@ -// @flow - import {getImage, ResourceType} from '../util/ajax'; import {extend} from '../util/util'; import {Evented} from '../util/evented'; import browser from '../util/browser'; -import window from '../util/window'; import offscreenCanvasSupported from '../util/offscreen_canvas_supported'; import {OverscaledTileID} from './tile_id'; import RasterTileSource from './raster_tile_source'; @@ -18,14 +15,14 @@ import type {Callback} from '../types/callback'; import type {RasterDEMSourceSpecification} from '../style-spec/types'; class RasterDEMTileSource extends RasterTileSource implements Source { - encoding: "mapbox" | "terrarium"; + encoding: 'mapbox' | 'terrarium'; constructor(id: string, options: RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) { super(id, options, dispatcher, eventedParent); this.type = 'raster-dem'; this.maxzoom = 22; this._options = extend({type: 'raster-dem'}, options); - this.encoding = options.encoding || "mapbox"; + this.encoding = options.encoding || 'mapbox'; } serialize() { @@ -54,9 +51,9 @@ class RasterDEMTileSource extends RasterTileSource implements Source { callback(err); } else if (img) { if (this.map._refreshExpiredTiles) tile.setExpiryData(img); - delete (img: any).cacheControl; - delete (img: any).expires; - const transfer = window.ImageBitmap && img instanceof window.ImageBitmap && offscreenCanvasSupported(); + delete (img as any).cacheControl; + delete (img as any).expires; + const transfer = ImageBitmap && img instanceof ImageBitmap && offscreenCanvasSupported(); const rawImageData = transfer ? img : browser.getImageData(img, 1); const params = { uid: tile.uid, diff --git a/src/source/raster_dem_tile_worker_source.js b/src/source/raster_dem_tile_worker_source.ts similarity index 94% rename from src/source/raster_dem_tile_worker_source.js rename to src/source/raster_dem_tile_worker_source.ts index 416462ea16..553bd73305 100644 --- a/src/source/raster_dem_tile_worker_source.js +++ b/src/source/raster_dem_tile_worker_source.ts @@ -1,8 +1,5 @@ -// @flow - import DEMData from '../data/dem_data'; import {RGBAImage} from '../util/image'; -import window from '../util/window'; import type Actor from '../util/actor'; import type { @@ -10,13 +7,12 @@ import type { WorkerDEMTileCallback, TileParameters } from './worker_source'; -const {ImageBitmap} = window; class RasterDEMTileWorkerSource { actor: Actor; loaded: {[_: string]: DEMData}; offscreenCanvas: OffscreenCanvas; - offscreenCanvasContext: CanvasRenderingContext2D; + offscreenCanvasContext: OffscreenCanvasRenderingContext2D; constructor() { this.loaded = {}; @@ -25,7 +21,7 @@ class RasterDEMTileWorkerSource { loadTile(params: WorkerDEMTileParameters, callback: WorkerDEMTileCallback) { const {uid, encoding, rawImageData} = params; // Main thread will transfer ImageBitmap if offscreen decode with OffscreenCanvas is supported, else it will transfer an already decoded image. - const imagePixels = (ImageBitmap && rawImageData instanceof ImageBitmap) ? this.getImageData(rawImageData) : rawImageData; + const imagePixels = (ImageBitmap && rawImageData instanceof ImageBitmap) ? this.getImageData(rawImageData) : rawImageData as RGBAImage; const dem = new DEMData(uid, imagePixels, encoding); this.loaded = this.loaded || {}; this.loaded[uid] = dem; diff --git a/src/source/raster_tile_source.js b/src/source/raster_tile_source.ts similarity index 96% rename from src/source/raster_tile_source.js rename to src/source/raster_tile_source.ts index 4aa5b71045..9612dbd014 100644 --- a/src/source/raster_tile_source.js +++ b/src/source/raster_tile_source.ts @@ -1,5 +1,3 @@ -// @flow - import {extend, pick} from '../util/util'; import {getImage, ResourceType} from '../util/ajax'; @@ -32,7 +30,7 @@ class RasterTileSource extends Evented implements Source { scheme: string; tileSize: number; - bounds: ?[number, number, number, number]; + bounds: [number, number, number, number] | undefined | null; tileBounds: TileBounds; roundZoom: boolean; dispatcher: Dispatcher; @@ -41,7 +39,7 @@ class RasterTileSource extends Evented implements Source { _loaded: boolean; _options: RasterSourceSpecification | RasterDEMSourceSpecification; - _tileJSONRequest: ?Cancelable; + _tileJSONRequest: Cancelable | undefined | null; constructor(id: string, options: RasterSourceSpecification | RasterDEMSourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) { super(); @@ -122,8 +120,8 @@ class RasterTileSource extends Evented implements Source { callback(err); } else if (img) { if (this.map._refreshExpiredTiles) tile.setExpiryData(img); - delete (img: any).cacheControl; - delete (img: any).expires; + delete (img as any).cacheControl; + delete (img as any).expires; const context = this.map.painter.context; const gl = context.gl; diff --git a/src/source/rtl_text_plugin.js b/src/source/rtl_text_plugin.ts similarity index 84% rename from src/source/rtl_text_plugin.js rename to src/source/rtl_text_plugin.ts index 1d1e6888b0..5906d4dc21 100644 --- a/src/source/rtl_text_plugin.js +++ b/src/source/rtl_text_plugin.ts @@ -1,5 +1,3 @@ -// @flow - import {Event, Evented} from '../util/evented'; import {getArrayBuffer} from '../util/ajax'; import browser from '../util/browser'; @@ -15,11 +13,11 @@ const status = { }; export type PluginState = { - pluginStatus: $Values; - pluginURL: ?string + pluginStatus: typeof status[keyof typeof status]; + pluginURL: string | undefined | null; }; -type ErrorCallback = (error: ?Error) => void; +type ErrorCallback = (error?: Error | null) => void; type PluginStateSyncCallback = (state: PluginState) => void; let _completionCallback = null; @@ -27,7 +25,7 @@ let _completionCallback = null; let pluginStatus = status.unavailable; let pluginURL = null; -export const triggerPluginCompletionEvent = function(error: ?Error) { +export const triggerPluginCompletionEvent = function(error: Error | string | undefined | null) { // NetworkError's are not correctly reflected by the plugin status which prevents reloading plugin if (error && typeof error === 'string' && error.indexOf('NetworkError') > -1) { pluginStatus = status.error; @@ -61,7 +59,7 @@ export const clearRTLTextPlugin = function() { pluginURL = null; }; -export const setRTLTextPlugin = function(url: string, callback: ?ErrorCallback, deferred: boolean = false) { +export const setRTLTextPlugin = function(url: string, callback: ErrorCallback | undefined | null, deferred: boolean = false) { if (pluginStatus === status.deferred || pluginStatus === status.loading || pluginStatus === status.loaded) { throw new Error('setRTLTextPlugin cannot be called multiple times.'); } @@ -95,14 +93,14 @@ export const downloadRTLTextPlugin = function() { }; export const plugin: { - applyArabicShaping: ?Function, - processBidirectionalText: ?(string, Array) => Array, - processStyledBidirectionalText: ?(string, Array, Array) => Array<[string, Array]>, - isLoaded: () => boolean, - isLoading: () => boolean, - setState: (state: PluginState) => void, - isParsed: () => boolean, - getPluginURL: () => ?string + applyArabicShaping: Function | undefined | null; + processBidirectionalText: ((b: string, a: Array) => Array) | undefined | null; + processStyledBidirectionalText: ((c: string, b: Array, a: Array) => Array<[string, Array]>) | undefined | null; + isLoaded: () => boolean; + isLoading: () => boolean; + setState: (state: PluginState) => void; + isParsed: () => boolean; + getPluginURL: () => string | undefined | null; } = { applyArabicShaping: null, processBidirectionalText: null, @@ -127,7 +125,7 @@ export const plugin: { plugin.processBidirectionalText != null && plugin.processStyledBidirectionalText != null; }, - getPluginURL(): ?string { + getPluginURL(): string | undefined | null { assert(isWorker(), 'rtl-text-plugin url can only be queried from the worker threads'); return pluginURL; } diff --git a/src/source/source.js b/src/source/source.ts similarity index 78% rename from src/source/source.js rename to src/source/source.ts index 92f2279ee4..40744320b5 100644 --- a/src/source/source.js +++ b/src/source/source.ts @@ -1,5 +1,3 @@ -// @flow - import {bindAll} from '../util/util'; import type Dispatcher from '../util/dispatcher'; @@ -35,53 +33,48 @@ import {CanonicalTileID} from './tile_id'; * if they are floor-ed to the nearest integer. */ export interface Source { - +type: string; - id: string; - minzoom: number, - maxzoom: number, - tileSize: number, - attribution?: string, - - roundZoom?: boolean, - isTileClipped?: boolean, - mapbox_logo?: boolean, - tileID?: CanonicalTileID; - reparseOverscaled?: boolean, - vectorLayerIds?: Array, - - hasTransition(): boolean; - loaded(): boolean; - - fire(event: Event): mixed; - - +onAdd?: (map: Map) => void; - +onRemove?: (map: Map) => void; - - loadTile(tile: Tile, callback: Callback): void; - +hasTile?: (tileID: OverscaledTileID) => boolean; - +abortTile?: (tile: Tile, callback: Callback) => void; - +unloadTile?: (tile: Tile, callback: Callback) => void; - - /** + readonly type: string; + id: string; + minzoom: number; + maxzoom: number; + tileSize: number; + attribution?: string; + roundZoom?: boolean; + isTileClipped?: boolean; + maplibreLogo?: boolean; + tileID?: CanonicalTileID; + reparseOverscaled?: boolean; + vectorLayerIds?: Array; + hasTransition(): boolean; + loaded(): boolean; + fire(event: Event): unknown; + readonly onAdd?: (map: Map) => void; + readonly onRemove?: (map: Map) => void; + loadTile(tile: Tile, callback: Callback): void; + readonly hasTile?: (tileID: OverscaledTileID) => boolean; + readonly abortTile?: (tile: Tile, callback: Callback) => void; + readonly unloadTile?: (tile: Tile, callback: Callback) => void; + /** * @returns A plain (stringifiable) JS object representing the current state of the source. * Creating a source using the returned object as the `options` should result in a Source that is * equivalent to this one. * @private */ - serialize(): Object; - - +prepare?: () => void; + serialize(): any; + readonly prepare?: () => void; } type SourceStatics = { - /* + /* * An optional URL to a script which, when run by a Worker, registers a {@link WorkerSource} * implementation for this Source type by calling `self.registerWorkerSource(workerSource: WorkerSource)`. */ - workerSourceURL?: URL; + workerSourceURL?: URL; }; -export type SourceClass = Class & SourceStatics; +export type SourceClass = { + new (...args: any): Source; +} & SourceStatics; import vector from '../source/vector_tile_source'; import raster from '../source/raster_tile_source'; @@ -114,7 +107,7 @@ const sourceTypes = { * @returns {Source} */ export const create = function(id: string, specification: SourceSpecification, dispatcher: Dispatcher, eventedParent: Evented) { - const source = new sourceTypes[specification.type](id, (specification: any), dispatcher, eventedParent); + const source = new sourceTypes[specification.type](id, (specification as any), dispatcher, eventedParent); if (source.id !== id) { throw new Error(`Expected Source id to be ${id} instead of ${source.id}`); @@ -128,10 +121,12 @@ export const getType = function (name: string) { return sourceTypes[name]; }; -export const setType = function (name: string, type: Class) { +export const setType = function (name: string, type: { + new (...args: any): Source; +}) { sourceTypes[name] = type; }; export interface Actor { - send(type: string, data: Object, callback: Callback): void; + send(type: string, data: any, callback: Callback): void; } diff --git a/src/source/source_cache.js b/src/source/source_cache.ts similarity index 95% rename from src/source/source_cache.js rename to src/source/source_cache.ts index 525df8ad00..d1c7cf2419 100644 --- a/src/source/source_cache.js +++ b/src/source/source_cache.ts @@ -1,15 +1,13 @@ -// @flow - import {create as createSource} from './source'; import Tile from './tile'; import {Event, ErrorEvent, Evented} from '../util/evented'; import TileCache from './tile_cache'; import MercatorCoordinate from '../geo/mercator_coordinate'; -import {keysDifference, values} from '../util/util'; +import {keysDifference} from '../util/util'; import EXTENT from '../data/extent'; import Context from '../gl/context'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import browser from '../util/browser'; import {OverscaledTileID} from './tile_id'; import assert from 'assert'; @@ -45,19 +43,22 @@ class SourceCache extends Evented { _sourceLoaded: boolean; _sourceErrored: boolean; _tiles: {[_: string]: Tile}; - _prevLng: number | void; + _prevLng: number; _cache: TileCache; - _timers: {[_: any]: TimeoutID}; - _cacheTimers: {[_: any]: TimeoutID}; - _maxTileCacheSize: ?number; + _timers: { + [_ in any]: ReturnType; + }; + _cacheTimers: { + [_ in any]: ReturnType; + }; + _maxTileCacheSize: number | undefined | null; _paused: boolean; _shouldReloadOnResume: boolean; _coveredTiles: {[_: string]: boolean}; transform: Transform; - _isIdRenderable: (id: string, symbolLayer?: boolean) => boolean; used: boolean; _state: SourceFeatureState; - _loadedParentTiles: {[_: string]: ?Tile}; + _loadedParentTiles: {[_: string]: Tile | undefined | null}; static maxUnderzooming: number; static maxOverzooming: number; @@ -75,7 +76,7 @@ class SourceCache extends Evented { // for sources with mutable data, this event fires when the underlying data // to a source is changed. (i.e. GeoJSONSource#setData and ImageSource#serCoordinates) - if (this._sourceLoaded && !this._paused && e.dataType === "source" && e.sourceDataType === 'content') { + if (this._sourceLoaded && !this._paused && e.dataType === 'source' && e.sourceDataType === 'content') { this.reload(); if (this.transform) { this.update(this.transform); @@ -184,7 +185,7 @@ class SourceCache extends Evented { * @private */ getIds(): Array { - return (values(this._tiles): any).map((tile: Tile) => tile.tileID).sort(compareTileId).map(id => id.key); + return (Object.values(this._tiles) as any).map((tile: Tile) => tile.tileID).sort(compareTileId).map(id => id.key); } getRenderableIds(symbolLayer?: boolean): Array { @@ -226,7 +227,7 @@ class SourceCache extends Evented { this._cache.reset(); for (const i in this._tiles) { - if (this._tiles[i].state !== "errored") this._reloadTile(i, 'reloading'); + if (this._tiles[i].state !== 'errored') this._reloadTile(i, 'reloading'); } } @@ -249,10 +250,10 @@ class SourceCache extends Evented { this._loadTile(tile, this._tileLoaded.bind(this, tile, id, state)); } - _tileLoaded(tile: Tile, id: string, previousState: TileState, err: ?Error) { + _tileLoaded(tile: Tile, id: string, previousState: TileState, err?: Error | null) { if (err) { tile.state = 'errored'; - if ((err: any).status !== 404) this._source.fire(new ErrorEvent(err, {tile})); + if ((err as any).status !== 404) this._source.fire(new ErrorEvent(err, {tile})); // continue to try loading parent/children tiles if a tile doesn't exist (404) else this.update(this.transform); return; @@ -329,10 +330,14 @@ class SourceCache extends Evented { * @private */ _retainLoadedChildren( - idealTiles: {[_: any]: OverscaledTileID}, + idealTiles: { + [_ in any]: OverscaledTileID; + }, zoom: number, maxCoveringZoom: number, - retain: {[_: any]: OverscaledTileID} + retain: { + [_ in any]: OverscaledTileID; + } ) { for (const id in this._tiles) { let tile = this._tiles[id]; @@ -374,7 +379,7 @@ class SourceCache extends Evented { * Find a loaded parent of the given tile (up to minCoveringZoom) * @private */ - findLoadedParent(tileID: OverscaledTileID, minCoveringZoom: number): ?Tile { + findLoadedParent(tileID: OverscaledTileID, minCoveringZoom: number): Tile | undefined | null { if (tileID.key in this._loadedParentTiles) { const parent = this._loadedParentTiles[tileID.key]; if (parent && parent.tileID.overscaledZ >= minCoveringZoom) { @@ -392,7 +397,7 @@ class SourceCache extends Evented { } } - _getLoadedTile(tileID: OverscaledTileID): ?Tile { + _getLoadedTile(tileID: OverscaledTileID): Tile | undefined | null { const tile = this._tiles[tileID.key]; if (tile && tile.hasData()) { return tile; @@ -498,7 +503,7 @@ class SourceCache extends Evented { }); if (this._source.hasTile) { - idealTileIDs = idealTileIDs.filter((coord) => (this._source.hasTile: any)(coord)); + idealTileIDs = idealTileIDs.filter((coord) => (this._source.hasTile as any)(coord)); } } @@ -576,7 +581,7 @@ class SourceCache extends Evented { _updateRetainedTiles(idealTileIDs: Array, zoom: number): {[_: string]: OverscaledTileID} { const retain: {[_: string]: OverscaledTileID} = {}; - const checked: {[_: string]: boolean } = {}; + const checked: {[_: string]: boolean} = {}; const minCoveringZoom = Math.max(zoom - SourceCache.maxOverzooming, this._source.minzoom); const maxCoveringZoom = Math.max(zoom + SourceCache.maxUnderzooming, this._source.minzoom); @@ -660,7 +665,7 @@ class SourceCache extends Evented { for (const tileKey in this._tiles) { const path = []; - let parentTile: ?Tile; + let parentTile: Tile | undefined | null; let currentId = this._tiles[tileKey].tileID; // Find the closest loaded ancestor by traversing the tile tree towards the root and @@ -714,18 +719,18 @@ class SourceCache extends Evented { } } - const cached = Boolean(tile); - if (!cached) { + const cached = tile; + + if (!tile) { tile = new Tile(tileID, this._source.tileSize * tileID.overscaleFactor()); this._loadTile(tile, this._tileLoaded.bind(this, tile, tileID.key, tile.state)); } - // Impossible, but silence flow. - if (!tile) return (null: any); - tile.uses++; this._tiles[tileID.key] = tile; - if (!cached) this._source.fire(new Event('dataloading', {tile, coord: tile.tileID, dataType: 'source'})); + if (!cached) { + this._source.fire(new Event('dataloading', {tile, coord: tile.tileID, dataType: 'source'})); + } return tile; } @@ -884,7 +889,7 @@ class SourceCache extends Evented { * Set the value of a particular state for a feature * @private */ - setFeatureState(sourceLayer?: string, featureId: number | string, state: Object) { + setFeatureState(sourceLayer: string | undefined | null, featureId: number | string, state: any) { sourceLayer = sourceLayer || '_geojsonTileLayer'; this._state.updateState(sourceLayer, featureId, state); } @@ -902,7 +907,7 @@ class SourceCache extends Evented { * Get the entire state object for a feature * @private */ - getFeatureState(sourceLayer?: string, featureId: number | string) { + getFeatureState(sourceLayer: string | undefined | null, featureId: number | string) { sourceLayer = sourceLayer || '_geojsonTileLayer'; return this._state.getState(sourceLayer, featureId); } diff --git a/src/source/source_state.js b/src/source/source_state.ts similarity index 97% rename from src/source/source_state.js rename to src/source/source_state.ts index 1cc4d03d99..38df4b0bbb 100644 --- a/src/source/source_state.js +++ b/src/source/source_state.ts @@ -1,10 +1,8 @@ -// @flow - import {extend} from '../util/util'; import Tile from './tile'; import type {FeatureState} from '../style-spec/expression'; -export type FeatureStates = {[feature_id: string]: FeatureState}; +export type FeatureStates = {[featureId: string]: FeatureState}; export type LayerFeatureStates = {[layer: string]: FeatureStates}; /** @@ -27,7 +25,7 @@ class SourceFeatureState { this.deletedStates = {}; } - updateState(sourceLayer: string, featureId: number | string, newState: Object) { + updateState(sourceLayer: string, featureId: number | string, newState: any) { const feature = String(featureId); this.stateChanges[sourceLayer] = this.stateChanges[sourceLayer] || {}; this.stateChanges[sourceLayer][feature] = this.stateChanges[sourceLayer][feature] || {}; @@ -103,7 +101,9 @@ class SourceFeatureState { tile.setFeatureState(this.state, painter); } - coalesceChanges(tiles: {[_: any]: Tile}, painter: any) { + coalesceChanges(tiles: { + [_ in any]: Tile; + }, painter: any) { //track changes with full state objects, but only for features that got modified const featuresChanged: LayerFeatureStates = {}; diff --git a/src/source/tile.js b/src/source/tile.ts similarity index 88% rename from src/source/tile.js rename to src/source/tile.ts index 419059b7ac..ac3e0ae86d 100644 --- a/src/source/tile.js +++ b/src/source/tile.ts @@ -1,8 +1,7 @@ -// @flow - import {uniqueId, parseCacheControl} from '../util/util'; import {deserialize as deserializeBucket} from '../data/bucket'; -import FeatureIndex from '../data/feature_index'; +import '../data/feature_index'; +import type FeatureIndex from '../data/feature_index'; import GeoJSONFeature from '../util/vectortile_to_geojson'; import featureFilter from '../style-spec/feature_filter'; import SymbolBucket from '../data/bucket/symbol_bucket'; @@ -31,14 +30,15 @@ import type Transform from '../geo/transform'; import type {LayerFeatureStates} from './source_state'; import type {Cancelable} from '../types/cancelable'; import type {FilterSpecification} from '../style-spec/types'; - -export type TileState = - | 'loading' // Tile data is in the process of loading. - | 'loaded' // Tile data has been loaded. Tile can be rendered. - | 'reloading' // Tile data has been loaded and is being updated. Tile can be rendered. - | 'unloaded' // Tile data has been deleted. - | 'errored' // Tile data was not loaded because of an error. - | 'expired'; /* Tile data was previously loaded, but has expired per its +import type Point from '../util/point'; +import {mat4} from 'gl-matrix'; + +export type TileState = // Tile data is in the process of loading. +'loading' | // Tile data has been loaded. Tile can be rendered. +'loaded' | // Tile data has been loaded and is being updated. Tile can be rendered. +'reloading' | // Tile data has been deleted. +'unloaded' | // Tile data was not loaded because of an error. +'errored' | 'expired'; /* Tile data was previously loaded, but has expired per its * HTTP headers and is in the process of refreshing. */ /** @@ -53,41 +53,41 @@ class Tile { uses: number; tileSize: number; buckets: {[_: string]: Bucket}; - latestFeatureIndex: ?FeatureIndex; - latestRawTileData: ?ArrayBuffer; - imageAtlas: ?ImageAtlas; + latestFeatureIndex: FeatureIndex; + latestRawTileData: ArrayBuffer | undefined | null; + imageAtlas: ImageAtlas | undefined | null; imageAtlasTexture: Texture; - glyphAtlasImage: ?AlphaImage; + glyphAtlasImage: AlphaImage | undefined | null; glyphAtlasTexture: Texture; expirationTime: any; expiredRequestCount: number; state: TileState; timeAdded: any; fadeEndTime: any; - collisionBoxArray: ?CollisionBoxArray; + collisionBoxArray: CollisionBoxArray | undefined | null; redoWhenDone: boolean; showCollisionBoxes: boolean; placementSource: any; - actor: ?Actor; + actor: Actor | undefined | null; vtLayers: {[_: string]: VectorTileLayer}; - neighboringTiles: ?Object; - dem: ?DEMData; - aborted: ?boolean; - needsHillshadePrepare: ?boolean; - request: ?Cancelable; + neighboringTiles: any; + dem: DEMData | undefined | null; + aborted: boolean | undefined | null; + needsHillshadePrepare: boolean | undefined | null; + request: Cancelable | undefined | null; texture: any; - fbo: ?Framebuffer; - demTexture: ?Texture; + fbo: Framebuffer | undefined | null; + demTexture: Texture | undefined | null; refreshedUponExpiration: boolean; reloadCallback: any; - resourceTiming: ?Array; + resourceTiming: Array | undefined | null; queryPadding: number; - symbolFadeHoldUntil: ?number; + symbolFadeHoldUntil: number | undefined | null; hasSymbolBuckets: boolean; hasRTLText: boolean; - dependencies: Object; + dependencies: any; /** * @param {OverscaledTileID} tileID @@ -137,7 +137,7 @@ class Tile { * @returns {undefined} * @private */ - loadVectorData(data: WorkerTileResult, painter: any, justReloaded: ?boolean) { + loadVectorData(data: WorkerTileResult, painter: any, justReloaded?: boolean | null) { if (this.hasData()) { this.unloadVectorData(); } @@ -266,16 +266,22 @@ class Tile { // Queries non-symbol features rendered for this tile. // Symbol features are queried globally - queryRenderedFeatures(layers: {[_: string]: StyleLayer}, - serializedLayers: {[string]: Object}, - sourceFeatureState: SourceFeatureState, - queryGeometry: Array, - cameraQueryGeometry: Array, - scale: number, - params: { filter: FilterSpecification, layers: Array, availableImages: Array }, - transform: Transform, - maxPitchScaleFactor: number, - pixelPosMatrix: Float32Array): {[_: string]: Array<{ featureIndex: number, feature: GeoJSONFeature }>} { + queryRenderedFeatures( + layers: {[_: string]: StyleLayer}, + serializedLayers: {[_: string]: any}, + sourceFeatureState: SourceFeatureState, + queryGeometry: Array, + cameraQueryGeometry: Array, + scale: number, + params: { + filter: FilterSpecification; + layers: Array; + availableImages: Array; + }, + transform: Transform, + maxPitchScaleFactor: number, + pixelPosMatrix: mat4 + ): {[_: string]: Array<{featureIndex: number; feature: GeoJSONFeature}>} { if (!this.latestFeatureIndex || !this.latestFeatureIndex.rawTileData) return {}; @@ -316,7 +322,7 @@ class Tile { } const id = featureIndex.getId(feature, sourceLayer); const geojsonFeature = new GeoJSONFeature(feature, z, x, y, id); - (geojsonFeature: any).tile = coord; + (geojsonFeature as any).tile = coord; result.push(geojsonFeature); } } diff --git a/src/source/tile_bounds.js b/src/source/tile_bounds.ts similarity index 87% rename from src/source/tile_bounds.js rename to src/source/tile_bounds.ts index de9de3a47b..471a172d21 100644 --- a/src/source/tile_bounds.js +++ b/src/source/tile_bounds.ts @@ -1,6 +1,4 @@ -// @flow - -import LngLatBounds from '../geo/lng_lat_bounds'; +import LngLatBounds, {LngLatBoundsLike} from '../geo/lng_lat_bounds'; import {mercatorXfromLng, mercatorYfromLat} from '../geo/mercator_coordinate'; import type {CanonicalTileID} from './tile_id'; @@ -10,13 +8,13 @@ class TileBounds { minzoom: number; maxzoom: number; - constructor(bounds: [number, number, number, number], minzoom: ?number, maxzoom: ?number) { + constructor(bounds: [number, number, number, number], minzoom?: number | null, maxzoom?: number | null) { this.bounds = LngLatBounds.convert(this.validateBounds(bounds)); this.minzoom = minzoom || 0; this.maxzoom = maxzoom || 24; } - validateBounds(bounds: [number, number, number, number]) { + validateBounds(bounds: [number, number, number, number]): LngLatBoundsLike { // make sure the bounds property contains valid longitude and latitudes if (!Array.isArray(bounds) || bounds.length !== 4) return [-180, -90, 180, 90]; return [Math.max(-180, bounds[0]), Math.max(-90, bounds[1]), Math.min(180, bounds[2]), Math.min(90, bounds[3])]; diff --git a/src/source/tile_cache.js b/src/source/tile_cache.ts similarity index 90% rename from src/source/tile_cache.js rename to src/source/tile_cache.ts index 581d8548c6..1100db9ab0 100644 --- a/src/source/tile_cache.js +++ b/src/source/tile_cache.ts @@ -1,5 +1,3 @@ -// @flow - import {OverscaledTileID} from './tile_id'; import type Tile from './tile'; @@ -12,7 +10,12 @@ import type Tile from './tile'; */ class TileCache { max: number; - data: {[key: string]: Array<{ value: Tile, timeout: ?TimeoutID}>}; + data: { + [key: string]: Array<{ + value: Tile; + timeout: ReturnType | undefined | null; + }>; + }; order: Array; onRemove: (element: Tile) => void; /** @@ -69,7 +72,7 @@ class TileCache { if (expiryTimeout !== undefined) { dataWrapper.timeout = setTimeout(() => { this.remove(tileID, dataWrapper); - }, expiryTimeout); + }, expiryTimeout as number); } this.data[key].push(dataWrapper); @@ -102,7 +105,7 @@ class TileCache { * @returns {*} the data, or null if it isn't found * @private */ - getAndRemove(tileID: OverscaledTileID): ?Tile { + getAndRemove(tileID: OverscaledTileID): Tile | undefined | null { if (!this.has(tileID)) { return null; } return this._getAndRemoveByKey(tileID.wrapped().key); } @@ -110,7 +113,7 @@ class TileCache { /* * Get and remove the value with the specified key. */ - _getAndRemoveByKey(key: string): ?Tile { + _getAndRemoveByKey(key: string): Tile | undefined | null { const data = this.data[key].shift(); if (data.timeout) clearTimeout(data.timeout); @@ -125,7 +128,7 @@ class TileCache { /* * Get the value with the specified (wrapped tile) key. */ - getByKey(key: string): ?Tile { + getByKey(key: string): Tile | undefined | null { const data = this.data[key]; return data ? data[0].value : null; } @@ -138,7 +141,7 @@ class TileCache { * @returns {*} the data, or null if it isn't found * @private */ - get(tileID: OverscaledTileID): ?Tile { + get(tileID: OverscaledTileID): Tile | undefined | null { if (!this.has(tileID)) { return null; } const data = this.data[tileID.wrapped().key][0]; @@ -153,7 +156,10 @@ class TileCache { * @returns {TileCache} this cache * @private */ - remove(tileID: OverscaledTileID, value: ?{ value: Tile, timeout: ?TimeoutID}) { + remove(tileID: OverscaledTileID, value?: { + value: Tile; + timeout: ReturnType | undefined | null; + } | null) { if (!this.has(tileID)) { return this; } const key = tileID.wrapped().key; diff --git a/src/source/tile_id.js b/src/source/tile_id.ts similarity index 97% rename from src/source/tile_id.js rename to src/source/tile_id.ts index 244209cee0..e3ec2c60f9 100644 --- a/src/source/tile_id.js +++ b/src/source/tile_id.ts @@ -1,12 +1,11 @@ -// @flow - import {getTileBBox} from '@mapbox/whoots-js'; import EXTENT from '../data/extent'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import MercatorCoordinate from '../geo/mercator_coordinate'; import assert from 'assert'; import {register} from '../util/web_worker_transfer'; +import {mat4} from 'gl-matrix'; export class CanonicalTileID { z: number; @@ -29,7 +28,7 @@ export class CanonicalTileID { } // given a list of urls, choose a url template and return a tile URL - url(urls: Array, scheme: ?string) { + url(urls: Array, scheme?: string | null) { const bbox = getTileBBox(this.x, this.y, this.z); const quadkey = getQuadkey(this.z, this.x, this.y); @@ -71,7 +70,7 @@ export class OverscaledTileID { wrap: number; canonical: CanonicalTileID; key: string; - posMatrix: Float32Array; + posMatrix: mat4; constructor(overscaledZ: number, wrap: number, z: number, x: number, y: number) { assert(overscaledZ >= z); diff --git a/src/source/vector_tile_source.js b/src/source/vector_tile_source.ts similarity index 96% rename from src/source/vector_tile_source.js rename to src/source/vector_tile_source.ts index b8f19b4ba2..acf0e5e9d8 100644 --- a/src/source/vector_tile_source.js +++ b/src/source/vector_tile_source.ts @@ -1,5 +1,3 @@ -// @flow - import {Event, ErrorEvent, Evented} from '../util/evented'; import {extend, pick} from '../util/util'; @@ -7,7 +5,6 @@ import loadTileJSON from './load_tilejson'; import {postTurnstileEvent, postMapLoadEvent} from '../util/mapbox'; import TileBounds from './tile_bounds'; import {ResourceType} from '../util/ajax'; -import browser from '../util/browser'; import {cacheEntryPossiblyAdded} from '../util/tile_request_cache'; import type {Source} from './source'; @@ -53,21 +50,23 @@ class VectorTileSource extends Evented implements Source { url: string; scheme: string; tileSize: number; - promoteId: ?PromoteIdSpecification; + promoteId: PromoteIdSpecification | undefined | null; _options: VectorSourceSpecification; _collectResourceTiming: boolean; dispatcher: Dispatcher; map: Map; - bounds: ?[number, number, number, number]; + bounds: [number, number, number, number] | undefined | null; tiles: Array; tileBounds: TileBounds; reparseOverscaled: boolean; isTileClipped: boolean; - _tileJSONRequest: ?Cancelable; + _tileJSONRequest: Cancelable | undefined | null; _loaded: boolean; - constructor(id: string, options: VectorSourceSpecification & {collectResourceTiming: boolean}, dispatcher: Dispatcher, eventedParent: Evented) { + constructor(id: string, options: VectorSourceSpecification & { + collectResourceTiming: boolean; + }, dispatcher: Dispatcher, eventedParent: Evented) { super(); this.id = id; this.dispatcher = dispatcher; @@ -191,7 +190,7 @@ class VectorTileSource extends Evented implements Source { tileSize: this.tileSize * tile.tileID.overscaleFactor(), type: this.type, source: this.id, - pixelRatio: browser.devicePixelRatio, + pixelRatio: devicePixelRatio, showCollisionBoxes: this.map.showCollisionBoxes, promoteId: this.promoteId }; diff --git a/src/source/vector_tile_worker_source.js b/src/source/vector_tile_worker_source.ts similarity index 88% rename from src/source/vector_tile_worker_source.js rename to src/source/vector_tile_worker_source.ts index 1effce4be1..4e68e20deb 100644 --- a/src/source/vector_tile_worker_source.js +++ b/src/source/vector_tile_worker_source.ts @@ -1,5 +1,3 @@ -// @flow - import {getArrayBuffer} from '../util/ajax'; import vt from '@mapbox/vector-tile'; @@ -20,11 +18,11 @@ import type StyleLayerIndex from '../style/style_layer_index'; import type {Callback} from '../types/callback'; export type LoadVectorTileResult = { - vectorTile: VectorTile; - rawData: ArrayBuffer; - expires?: any; - cacheControl?: any; - resourceTiming?: Array; + vectorTile: VectorTile; + rawData: ArrayBuffer; + expires?: any; + cacheControl?: any; + resourceTiming?: Array; }; /** @@ -33,16 +31,16 @@ export type LoadVectorTileResult = { * @param vectorTile * @private */ -export type LoadVectorDataCallback = Callback; +export type LoadVectorDataCallback = Callback; export type AbortVectorData = () => void; -export type LoadVectorData = (params: WorkerTileParameters, callback: LoadVectorDataCallback) => ?AbortVectorData; +export type LoadVectorData = (params: WorkerTileParameters, callback: LoadVectorDataCallback) => AbortVectorData | void | undefined | null; /** * @private */ function loadVectorTile(params: WorkerTileParameters, callback: LoadVectorDataCallback) { - const request = getArrayBuffer(params.request, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { + const request = getArrayBuffer(params.request, (err?: Error | null, data?: ArrayBuffer | null, cacheControl?: string | null, expires?: string | null) => { if (err) { callback(err); } else if (data) { @@ -74,8 +72,8 @@ class VectorTileWorkerSource implements WorkerSource { layerIndex: StyleLayerIndex; availableImages: Array; loadVectorData: LoadVectorData; - loading: {[_: string]: WorkerTile }; - loaded: {[_: string]: WorkerTile }; + loading: {[_: string]: WorkerTile}; + loaded: {[_: string]: WorkerTile}; /** * @param [loadVectorData] Optional method for custom loading of a VectorTile @@ -84,7 +82,7 @@ class VectorTileWorkerSource implements WorkerSource { * loads the pbf at `params.url`. * @private */ - constructor(actor: Actor, layerIndex: StyleLayerIndex, availableImages: Array, loadVectorData: ?LoadVectorData) { + constructor(actor: Actor, layerIndex: StyleLayerIndex, availableImages: Array, loadVectorData?: LoadVectorData | null) { this.actor = actor; this.layerIndex = layerIndex; this.availableImages = availableImages; @@ -119,11 +117,11 @@ class VectorTileWorkerSource implements WorkerSource { } const rawTileData = response.rawData; - const cacheControl = {}; + const cacheControl = {} as {expires: any; cacheControl: any}; if (response.expires) cacheControl.expires = response.expires; if (response.cacheControl) cacheControl.cacheControl = response.cacheControl; - const resourceTiming = {}; + const resourceTiming = {} as {resourceTiming: any}; if (perf) { const resourceTimingData = perf.finish(); // it's necessary to eval the result of getEntriesByName() here via parse/stringify @@ -142,7 +140,7 @@ class VectorTileWorkerSource implements WorkerSource { this.loaded = this.loaded || {}; this.loaded[uid] = workerTile; - }); + }) as AbortVectorData; } /** @@ -157,7 +155,7 @@ class VectorTileWorkerSource implements WorkerSource { const workerTile = loaded[uid]; workerTile.showCollisionBoxes = params.showCollisionBoxes; - const done = (err, data) => { + const done = (err?: Error, data?: any) => { const reloadCallback = workerTile.reloadCallback; if (reloadCallback) { delete workerTile.reloadCallback; diff --git a/src/source/video_source.js b/src/source/video_source.ts similarity index 99% rename from src/source/video_source.js rename to src/source/video_source.ts index cdaa9af3cd..9c7f2d752f 100644 --- a/src/source/video_source.js +++ b/src/source/video_source.ts @@ -1,5 +1,3 @@ -// @flow - import {getVideo, ResourceType} from '../util/ajax'; import ImageSource from './image_source'; diff --git a/src/source/worker.js b/src/source/worker.ts similarity index 79% rename from src/source/worker.js rename to src/source/worker.ts index 27a10fa3a5..39d23a8d60 100644 --- a/src/source/worker.js +++ b/src/source/worker.ts @@ -1,5 +1,3 @@ -// @flow - import Actor from '../util/actor'; import StyleLayerIndex from '../style/style_layer_index'; @@ -30,12 +28,26 @@ import type {PluginState} from './rtl_text_plugin'; export default class Worker { self: WorkerGlobalScopeInterface; actor: Actor; - layerIndexes: {[_: string]: StyleLayerIndex }; - availableImages: {[_: string]: Array }; - workerSourceTypes: {[_: string]: Class }; - workerSources: {[_: string]: {[_: string]: {[_: string]: WorkerSource } } }; - demWorkerSources: {[_: string]: {[_: string]: RasterDEMTileWorkerSource } }; - referrer: ?string; + layerIndexes: {[_: string]: StyleLayerIndex}; + availableImages: {[_: string]: Array}; + workerSourceTypes: { + [_: string]: { + new (...args: any): WorkerSource; + }; + }; + workerSources: { + [_: string]: { + [_: string]: { + [_: string]: WorkerSource; + }; + }; + }; + demWorkerSources: { + [_: string]: { + [_: string]: RasterDEMTileWorkerSource; + }; + }; + referrer: string | undefined | null; constructor(self: WorkerGlobalScopeInterface) { this.self = self; @@ -53,7 +65,9 @@ export default class Worker { this.workerSources = {}; this.demWorkerSources = {}; - this.self.registerWorkerSource = (name: string, WorkerSource: Class) => { + this.self.registerWorkerSource = (name: string, WorkerSource: { + new (...args: any): WorkerSource; + }) => { if (this.workerSourceTypes[name]) { throw new Error(`Worker source with name "${name}" already registered.`); } @@ -61,7 +75,11 @@ export default class Worker { }; // This is invoked by the RTL text plugin when the download via the `importScripts` call has finished, and the code has been parsed. - this.self.registerRTLTextPlugin = (rtlTextPlugin: {applyArabicShaping: Function, processBidirectionalText: Function, processStyledBidirectionalText?: Function}) => { + this.self.registerRTLTextPlugin = (rtlTextPlugin: { + applyArabicShaping: Function; + processBidirectionalText: ((b: string, a: Array) => Array) | undefined | null; + processStyledBidirectionalText?: ((c: string, b: Array, a: Array) => Array<[string, Array]>) | undefined | null; + }) => { if (globalRTLTextPlugin.isParsed()) { throw new Error('RTL text plugin already registered.'); } @@ -91,12 +109,17 @@ export default class Worker { callback(); } - updateLayers(mapId: string, params: {layers: Array, removedIds: Array}, callback: WorkerTileCallback) { + updateLayers(mapId: string, params: { + layers: Array; + removedIds: Array; + }, callback: WorkerTileCallback) { this.getLayerIndex(mapId).update(params.layers, params.removedIds); callback(); } - loadTile(mapId: string, params: WorkerTileParameters & {type: string}, callback: WorkerTileCallback) { + loadTile(mapId: string, params: WorkerTileParameters & { + type: string; + }, callback: WorkerTileCallback) { assert(params.type); this.getWorkerSource(mapId, params.type, params.source).loadTile(params, callback); } @@ -105,17 +128,23 @@ export default class Worker { this.getDEMWorkerSource(mapId, params.source).loadTile(params, callback); } - reloadTile(mapId: string, params: WorkerTileParameters & {type: string}, callback: WorkerTileCallback) { + reloadTile(mapId: string, params: WorkerTileParameters & { + type: string; + }, callback: WorkerTileCallback) { assert(params.type); this.getWorkerSource(mapId, params.type, params.source).reloadTile(params, callback); } - abortTile(mapId: string, params: TileParameters & {type: string}, callback: WorkerTileCallback) { + abortTile(mapId: string, params: TileParameters & { + type: string; + }, callback: WorkerTileCallback) { assert(params.type); this.getWorkerSource(mapId, params.type, params.source).abortTile(params, callback); } - removeTile(mapId: string, params: TileParameters & {type: string}, callback: WorkerTileCallback) { + removeTile(mapId: string, params: TileParameters & { + type: string; + }, callback: WorkerTileCallback) { assert(params.type); this.getWorkerSource(mapId, params.type, params.source).removeTile(params, callback); } @@ -124,7 +153,11 @@ export default class Worker { this.getDEMWorkerSource(mapId, params.source).removeTile(params); } - removeSource(mapId: string, params: {source: string} & {type: string}, callback: WorkerTileCallback) { + removeSource(mapId: string, params: { + source: string; + } & { + type: string; + }, callback: WorkerTileCallback) { assert(params.type); assert(params.source); @@ -150,7 +183,9 @@ export default class Worker { * function taking `(name, workerSourceObject)`. * @private */ - loadWorkerSource(map: string, params: { url: string }, callback: Callback) { + loadWorkerSource(map: string, params: { + url: string; + }, callback: Callback) { try { this.self.importScripts(params.url); callback(); @@ -210,7 +245,7 @@ export default class Worker { this.actor.send(type, data, callback, mapId); } }; - this.workerSources[mapId][type][source] = new (this.workerSourceTypes[type]: any)((actor: any), this.getLayerIndex(mapId), this.getAvailableImages(mapId)); + this.workerSources[mapId][type][source] = new (this.workerSourceTypes[type] as any)((actor as any), this.getLayerIndex(mapId), this.getAvailableImages(mapId)); } return this.workerSources[mapId][type][source]; @@ -236,5 +271,5 @@ export default class Worker { if (typeof WorkerGlobalScope !== 'undefined' && typeof self !== 'undefined' && self instanceof WorkerGlobalScope) { - self.worker = new Worker(self); + (self as any).worker = new Worker(self as any); } diff --git a/src/source/worker_source.js b/src/source/worker_source.ts similarity index 54% rename from src/source/worker_source.js rename to src/source/worker_source.ts index c800049e3b..46e76a1f26 100644 --- a/src/source/worker_source.js +++ b/src/source/worker_source.ts @@ -1,5 +1,3 @@ -// @flow - import type {RequestParameters} from '../util/ajax'; import type {RGBAImage, AlphaImage} from '../util/image'; import type {GlyphPositions} from '../render/glyph_atlas'; @@ -12,49 +10,58 @@ import type DEMData from '../data/dem_data'; import type {StyleGlyph} from '../style/style_glyph'; import type {StyleImage} from '../style/style_image'; import type {PromoteIdSpecification} from '../style-spec/types'; -import window from '../util/window'; -const {ImageBitmap} = window; export type TileParameters = { - source: string, - uid: string, + source: string; + uid: string; }; export type WorkerTileParameters = TileParameters & { - tileID: OverscaledTileID, - request: RequestParameters, - zoom: number, - maxZoom: number, - tileSize: number, - promoteId: ?PromoteIdSpecification, - pixelRatio: number, - showCollisionBoxes: boolean, - collectResourceTiming?: boolean, - returnDependencies?: boolean + tileID: OverscaledTileID; + request: RequestParameters; + zoom: number; + maxZoom: number; + tileSize: number; + promoteId: PromoteIdSpecification | undefined | null; + pixelRatio: number; + showCollisionBoxes: boolean; + collectResourceTiming?: boolean; + returnDependencies?: boolean; }; export type WorkerDEMTileParameters = TileParameters & { - coord: { z: number, x: number, y: number, w: number }, - rawImageData: RGBAImage | ImageBitmap, - encoding: "mapbox" | "terrarium" + coord: { + z: number; + x: number; + y: number; + w: number; + }; + rawImageData: RGBAImage | ImageBitmap; + encoding: 'mapbox' | 'terrarium'; }; export type WorkerTileResult = { - buckets: Array, - imageAtlas: ImageAtlas, - glyphAtlasImage: AlphaImage, - featureIndex: FeatureIndex, - collisionBoxArray: CollisionBoxArray, - rawTileData?: ArrayBuffer, - resourceTiming?: Array, - // Only used for benchmarking: - glyphMap?: {[_: string]: {[_: number]: ?StyleGlyph}} | null, - iconMap?: {[_: string]: StyleImage} | null, - glyphPositions?: GlyphPositions | null + buckets: Array; + imageAtlas: ImageAtlas; + glyphAtlasImage: AlphaImage; + featureIndex: FeatureIndex; + collisionBoxArray: CollisionBoxArray; + rawTileData?: ArrayBuffer; + resourceTiming?: Array; + // Only used for benchmarking: + glyphMap?: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + } | null; + iconMap?: { + [_: string]: StyleImage; + } | null; + glyphPositions?: GlyphPositions | null; }; -export type WorkerTileCallback = (error: ?Error, result: ?WorkerTileResult) => void; -export type WorkerDEMTileCallback = (err: ?Error, result: ?DEMData) => void; +export type WorkerTileCallback = (error?: Error | null, result?: WorkerTileResult | null) => void; +export type WorkerDEMTileCallback = (err?: Error | null, result?: DEMData | null) => void; /** * May be implemented by custom source types to provide code that can be run on @@ -71,37 +78,38 @@ export type WorkerDEMTileCallback = (err: ?Error, result: ?DEMData) => void; * @param layerIndex */ export interface WorkerSource { - availableImages: Array, - // Disabled due to https://github.com/facebook/flow/issues/5208 - // constructor(actor: Actor, layerIndex: StyleLayerIndex): WorkerSource; + availableImages: Array; + // Disabled due to https://github.com/facebook/flow/issues/5208 + // constructor(actor: Actor, layerIndex: StyleLayerIndex): WorkerSource; - /** + /** * Loads a tile from the given params and parse it into buckets ready to send * back to the main thread for rendering. Should call the callback with: * `{ buckets, featureIndex, collisionIndex, rawTileData}`. */ - loadTile(params: WorkerTileParameters, callback: WorkerTileCallback): void; - - /** + loadTile(params: WorkerTileParameters, callback: WorkerTileCallback): void; + /** * Re-parses a tile that has already been loaded. Yields the same data as * {@link WorkerSource#loadTile}. */ - reloadTile(params: WorkerTileParameters, callback: WorkerTileCallback): void; - - /** + reloadTile(params: WorkerTileParameters, callback: WorkerTileCallback): void; + /** * Aborts loading a tile that is in progress. */ - abortTile(params: TileParameters, callback: WorkerTileCallback): void; - - /** + abortTile(params: TileParameters, callback: WorkerTileCallback): void; + /** * Removes this tile from any local caches. */ - removeTile(params: TileParameters, callback: WorkerTileCallback): void; - - /** + removeTile(params: TileParameters, callback: WorkerTileCallback): void; + /** * Tells the WorkerSource to abort in-progress tasks and release resources. * The foreground Source is responsible for ensuring that 'removeSource' is * the last message sent to the WorkerSource. */ - removeSource?: (params: {source: string}, callback: WorkerTileCallback) => void; + removeSource?: ( + params: { + source: string; + }, + callback: WorkerTileCallback + ) => void; } diff --git a/src/source/worker_tile.js b/src/source/worker_tile.ts similarity index 91% rename from src/source/worker_tile.js rename to src/source/worker_tile.ts index fd5e8d5d50..1e33992535 100644 --- a/src/source/worker_tile.js +++ b/src/source/worker_tile.ts @@ -1,5 +1,3 @@ -// @flow - import FeatureIndex from '../data/feature_index'; import {performSymbolLayout} from '../symbol/symbol_layout'; @@ -9,7 +7,7 @@ import SymbolBucket from '../data/bucket/symbol_bucket'; import LineBucket from '../data/bucket/line_bucket'; import FillBucket from '../data/bucket/fill_bucket'; import FillExtrusionBucket from '../data/bucket/fill_extrusion_bucket'; -import {warnOnce, mapObject, values} from '../util/util'; +import {warnOnce, mapObject} from '../util/util'; import assert from 'assert'; import ImageAtlas from '../render/image_atlas'; import GlyphAtlas from '../render/glyph_atlas'; @@ -35,7 +33,7 @@ class WorkerTile { pixelRatio: number; tileSize: number; source: string; - promoteId: ?PromoteIdSpecification; + promoteId: PromoteIdSpecification | undefined | null; overscaling: number; showCollisionBoxes: boolean; collectResourceTiming: boolean; @@ -45,7 +43,7 @@ class WorkerTile { data: VectorTile; collisionBoxArray: CollisionBoxArray; - abort: ?() => void; + abort: (() => void) | undefined | null; reloadCallback: WorkerTileCallback; vectorTile: VectorTile; @@ -92,7 +90,7 @@ class WorkerTile { if (sourceLayer.version === 1) { warnOnce(`Vector tile source "${this.source}" layer "${sourceLayerId}" ` + - `does not use vector tile spec v2 and therefore may have some rendering errors.`); + 'does not use vector tile spec v2 and therefore may have some rendering errors.'); } const sourceLayerIndex = sourceLayerCoder.encode(sourceLayerId); @@ -129,10 +127,14 @@ class WorkerTile { } } - let error: ?Error; - let glyphMap: ?{[_: string]: {[_: number]: ?StyleGlyph}}; - let iconMap: ?{[_: string]: StyleImage}; - let patternMap: ?{[_: string]: StyleImage}; + let error: Error | undefined | null; + let glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + } | undefined | null; + let iconMap: {[_: string]: StyleImage} | undefined | null; + let patternMap: {[_: string]: StyleImage} | undefined | null; const stacks = mapObject(options.glyphDependencies, (glyphs) => Object.keys(glyphs).map(Number)); if (Object.keys(stacks).length) { @@ -198,7 +200,7 @@ class WorkerTile { this.status = 'done'; callback(null, { - buckets: values(buckets).filter(b => !b.isEmpty()), + buckets: Object.values(buckets).filter(b => !b.isEmpty()), featureIndex, collisionBoxArray: this.collisionBoxArray, glyphAtlasImage: glyphAtlas.image, @@ -213,7 +215,7 @@ class WorkerTile { } } -function recalculateLayers(layers: $ReadOnlyArray, zoom: number, availableImages: Array) { +function recalculateLayers(layers: ReadonlyArray, zoom: number, availableImages: Array) { // Layers are shared and may have been used by a WorkerTile with a different zoom. const parameters = new EvaluationParameters(zoom); for (const layer of layers) { diff --git a/src/style-spec/composite.js b/src/style-spec/composite.ts similarity index 87% rename from src/style-spec/composite.js rename to src/style-spec/composite.ts index b9858126a1..1c3f480c45 100644 --- a/src/style-spec/composite.js +++ b/src/style-spec/composite.ts @@ -7,7 +7,7 @@ export default function (style) { for (const id in style.sources) { const source = style.sources[id]; - if (source.type !== "vector") + if (source.type !== 'vector') continue; const match = /^mapbox:\/\/(.*)/.exec(source.url); @@ -25,11 +25,11 @@ export default function (style) { delete style.sources[id]; }); - const compositeID = sourceIDs.join(","); + const compositeID = sourceIDs.join(','); style.sources[compositeID] = { - "type": "vector", - "url": `mapbox://${compositeID}` + 'type': 'vector', + 'url': `mapbox://${compositeID}` }; style.layers.forEach((layer) => { diff --git a/src/style-spec/declass.js b/src/style-spec/declass.ts similarity index 100% rename from src/style-spec/declass.js rename to src/style-spec/declass.ts diff --git a/src/style-spec/deref.js b/src/style-spec/deref.ts similarity index 100% rename from src/style-spec/deref.js rename to src/style-spec/deref.ts diff --git a/src/style-spec/diff.js b/src/style-spec/diff.ts similarity index 92% rename from src/style-spec/diff.js rename to src/style-spec/diff.ts index 264a857ca8..989c9bc4a2 100644 --- a/src/style-spec/diff.js +++ b/src/style-spec/diff.ts @@ -117,13 +117,13 @@ function updateSource(sourceId, after, commands, sourcesRemoved) { function canUpdateGeoJSON(before, after, sourceId) { let prop; for (prop in before[sourceId]) { - if (!before[sourceId].hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(before[sourceId], prop)) continue; if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) { return false; } } for (prop in after[sourceId]) { - if (!after[sourceId].hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(after[sourceId], prop)) continue; if (prop !== 'data' && !isEqual(before[sourceId][prop], after[sourceId][prop])) { return false; } @@ -139,16 +139,16 @@ function diffSources(before, after, commands, sourcesRemoved) { // look for sources to remove for (sourceId in before) { - if (!before.hasOwnProperty(sourceId)) continue; - if (!after.hasOwnProperty(sourceId)) { + if (!Object.prototype.hasOwnProperty.call(before, sourceId)) continue; + if (!Object.prototype.hasOwnProperty.call(after, sourceId)) { removeSource(sourceId, commands, sourcesRemoved); } } // look for sources to add/update for (sourceId in after) { - if (!after.hasOwnProperty(sourceId)) continue; - if (!before.hasOwnProperty(sourceId)) { + if (!Object.prototype.hasOwnProperty.call(after, sourceId)) continue; + if (!Object.prototype.hasOwnProperty.call(before, sourceId)) { addSource(sourceId, after, commands); } else if (!isEqual(before[sourceId], after[sourceId])) { if (before[sourceId].type === 'geojson' && after[sourceId].type === 'geojson' && canUpdateGeoJSON(before, after, sourceId)) { @@ -168,13 +168,13 @@ function diffLayerPropertyChanges(before, after, commands, layerId, klass, comma let prop; for (prop in before) { - if (!before.hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(before, prop)) continue; if (!isEqual(before[prop], after[prop])) { commands.push({command, args: [layerId, prop, after[prop], klass]}); } } for (prop in after) { - if (!after.hasOwnProperty(prop) || before.hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(after, prop) || Object.prototype.hasOwnProperty.call(before, prop)) continue; if (!isEqual(before[prop], after[prop])) { commands.push({command, args: [layerId, prop, after[prop], klass]}); } @@ -212,7 +212,7 @@ function diffLayers(before, after, commands) { // remove layers for (i = 0, d = 0; i < beforeOrder.length; i++) { layerId = beforeOrder[i]; - if (!afterIndex.hasOwnProperty(layerId)) { + if (!Object.prototype.hasOwnProperty.call(afterIndex, layerId)) { commands.push({command: operations.removeLayer, args: [layerId]}); tracker.splice(tracker.indexOf(layerId, d), 1); } else { @@ -228,7 +228,7 @@ function diffLayers(before, after, commands) { if (tracker[tracker.length - 1 - i] === layerId) continue; - if (beforeIndex.hasOwnProperty(layerId)) { + if (Object.prototype.hasOwnProperty.call(beforeIndex, layerId)) { // remove the layer before we insert at the correct position commands.push({command: operations.removeLayer, args: [layerId]}); tracker.splice(tracker.lastIndexOf(layerId, tracker.length - d), 1); @@ -276,7 +276,7 @@ function diffLayers(before, after, commands) { // handle all other layer props, including paint.* for (prop in beforeLayer) { - if (!beforeLayer.hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(beforeLayer, prop)) continue; if (prop === 'layout' || prop === 'paint' || prop === 'filter' || prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue; if (prop.indexOf('paint.') === 0) { @@ -286,7 +286,7 @@ function diffLayers(before, after, commands) { } } for (prop in afterLayer) { - if (!afterLayer.hasOwnProperty(prop) || beforeLayer.hasOwnProperty(prop)) continue; + if (!Object.prototype.hasOwnProperty.call(afterLayer, prop) || Object.prototype.hasOwnProperty.call(beforeLayer, prop)) continue; if (prop === 'layout' || prop === 'paint' || prop === 'filter' || prop === 'metadata' || prop === 'minzoom' || prop === 'maxzoom') continue; if (prop.indexOf('paint.') === 0) { diff --git a/src/style-spec/empty.js b/src/style-spec/empty.ts similarity index 100% rename from src/style-spec/empty.js rename to src/style-spec/empty.ts diff --git a/src/style-spec/error/parsing_error.js b/src/style-spec/error/parsing_error.ts similarity index 97% rename from src/style-spec/error/parsing_error.js rename to src/style-spec/error/parsing_error.ts index 8ddb923e2b..1e08c64b57 100644 --- a/src/style-spec/error/parsing_error.js +++ b/src/style-spec/error/parsing_error.ts @@ -1,5 +1,3 @@ -// @flow - // Note: Do not inherit from Error. It breaks when transpiling to ES5. export default class ParsingError { diff --git a/src/style-spec/error/validation_error.js b/src/style-spec/error/validation_error.ts similarity index 61% rename from src/style-spec/error/validation_error.js rename to src/style-spec/error/validation_error.ts index 9b90c2f980..70152c70b9 100644 --- a/src/style-spec/error/validation_error.js +++ b/src/style-spec/error/validation_error.ts @@ -1,13 +1,13 @@ -// @flow - // Note: Do not inherit from Error. It breaks when transpiling to ES5. export default class ValidationError { message: string; - identifier: ?string; - line: ?number; + identifier: string | undefined | null; + line: number | undefined | null; - constructor(key: ?string, value: ?{ __line__: number }, message: string, identifier: ?string) { + constructor(key: string | undefined | null, value: { + __line__: number; + } | undefined | null, message: string, identifier?: string | null) { this.message = (key ? `${key}: ` : '') + message; if (identifier) this.identifier = identifier; diff --git a/src/style-spec/expression/compound_expression.js b/src/style-spec/expression/compound_expression.ts similarity index 84% rename from src/style-spec/expression/compound_expression.js rename to src/style-spec/expression/compound_expression.ts index e948b0b768..2248888aad 100644 --- a/src/style-spec/expression/compound_expression.js +++ b/src/style-spec/expression/compound_expression.ts @@ -1,5 +1,3 @@ -// @flow - import {toString} from './types'; import ParsingContext from './parsing_context'; @@ -10,11 +8,16 @@ import type {Expression, ExpressionRegistry} from './expression'; import type {Type} from './types'; import type {Value} from './values'; -export type Varargs = {| type: Type |}; +export type Varargs = { + type: Type; +}; type Signature = Array | Varargs; -type Evaluate = (EvaluationContext, Array) => Value; -type Definition = [Type, Signature, Evaluate] | - {|type: Type, overloads: Array<[Signature, Evaluate]>|}; +type Evaluate = (b: EvaluationContext, a: Array) => Value; + +type Definition = [Type, Signature, Evaluate] | { + type: Type; + overloads: Array<[Signature, Evaluate]>; +}; class CompoundExpression implements Expression { name: string; @@ -22,7 +25,7 @@ class CompoundExpression implements Expression { _evaluate: Evaluate; args: Array; - static definitions: {[_: string]: Definition }; + static definitions: {[_: string]: Definition}; constructor(name: string, type: Type, evaluate: Evaluate, args: Array) { this.name = name; @@ -43,15 +46,15 @@ class CompoundExpression implements Expression { return false; } - serialize(): Array { - return [this.name].concat(this.args.map(arg => arg.serialize())); + serialize(): Array { + return [this.name as unknown].concat(this.args.map(arg => arg.serialize())); } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { - const op: string = (args[0]: any); + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { + const op: string = (args[0] as any); const definition = CompoundExpression.definitions[op]; if (!definition) { - return context.error(`Unknown expression "${op}". If you wanted a literal array, use ["literal", [...]].`, 0); + return context.error(`Unknown expression "${op}". If you wanted a literal array, use ["literal", [...]].`, 0) as null; } // Now check argument types against each signature @@ -67,7 +70,7 @@ class CompoundExpression implements Expression { signature.length === args.length - 1 // correct param count )); - let signatureContext: ParsingContext = (null: any); + let signatureContext: ParsingContext = null; for (const [params, evaluate] of overloads) { // Use a fresh context for each attempted signature so that, if @@ -82,7 +85,7 @@ class CompoundExpression implements Expression { const arg = args[i]; const expectedType = Array.isArray(params) ? params[i - 1] : - params.type; + (params as Varargs).type; const parsed = signatureContext.parse(arg, 1 + parsedArgs.length, expectedType); if (!parsed) { @@ -105,13 +108,13 @@ class CompoundExpression implements Expression { } for (let i = 0; i < parsedArgs.length; i++) { - const expected = Array.isArray(params) ? params[i] : params.type; + const expected = Array.isArray(params) ? params[i] : (params as Varargs).type; const arg = parsedArgs[i]; signatureContext.concat(i + 1).checkSubtype(expected, arg.type); } if (signatureContext.errors.length === 0) { - return new CompoundExpression(op, type, evaluate, parsedArgs); + return new CompoundExpression(op, type, evaluate as Evaluate, parsedArgs); } } @@ -122,7 +125,7 @@ class CompoundExpression implements Expression { } else { const expected = overloads.length ? overloads : availableOverloads; const signatures = expected - .map(([params]) => stringifySignature(params)) + .map(([params]) => stringifySignature(params as Signature)) .join(' | '); const actualTypes = []; @@ -141,7 +144,7 @@ class CompoundExpression implements Expression { static register( registry: ExpressionRegistry, - definitions: {[_: string]: Definition } + definitions: {[_: string]: Definition} ) { assert(!CompoundExpression.definitions); CompoundExpression.definitions = definitions; diff --git a/src/style-spec/expression/definitions/assertion.js b/src/style-spec/expression/definitions/assertion.ts similarity index 88% rename from src/style-spec/expression/definitions/assertion.js rename to src/style-spec/expression/definitions/assertion.ts index cfadac6d5d..9a8d8aa892 100644 --- a/src/style-spec/expression/definitions/assertion.js +++ b/src/style-spec/expression/definitions/assertion.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import { @@ -36,20 +34,20 @@ class Assertion implements Expression { this.args = args; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 2) - return context.error(`Expected at least one argument.`); + return context.error('Expected at least one argument.') as null; let i = 1; let type; - const name: string = (args[0]: any); + const name: string = (args[0] as any); if (name === 'array') { let itemType; if (args.length > 2) { const type = args[1]; if (typeof type !== 'string' || !(type in types) || type === 'object') - return context.error('The item type argument of "array" must be one of string, number, boolean', 1); + return context.error('The item type argument of "array" must be one of string, number, boolean', 1) as null; itemType = types[type]; i++; } else { @@ -63,7 +61,7 @@ class Assertion implements Expression { args[2] < 0 || args[2] !== Math.floor(args[2])) ) { - return context.error('The length argument to "array" must be a positive integer literal', 2); + return context.error('The length argument to "array" must be a positive integer literal', 2) as null; } N = args[2]; i++; @@ -108,9 +106,9 @@ class Assertion implements Expression { return this.args.every(arg => arg.outputDefined()); } - serialize(): Array { + serialize(): Array { const type = this.type; - const serialized = [type.kind]; + const serialized = [type.kind as unknown]; if (type.kind === 'array') { const itemType = type.itemType; if (itemType.kind === 'string' || diff --git a/src/style-spec/expression/definitions/at.js b/src/style-spec/expression/definitions/at.ts similarity index 80% rename from src/style-spec/expression/definitions/at.js rename to src/style-spec/expression/definitions/at.ts index e777f43355..d7d574ba80 100644 --- a/src/style-spec/expression/definitions/at.js +++ b/src/style-spec/expression/definitions/at.ts @@ -1,5 +1,3 @@ -// @flow - import {array, ValueType, NumberType} from '../types'; import RuntimeError from '../runtime_error'; @@ -21,22 +19,22 @@ class At implements Expression { this.input = input; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 3) - return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`); + return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`) as null; const index = context.parse(args[1], 1, NumberType); const input = context.parse(args[2], 2, array(context.expectedType || ValueType)); if (!index || !input) return null; - const t: ArrayType = (input.type: any); + const t: ArrayType = (input.type as any); return new At(t.itemType, index, input); } evaluate(ctx: EvaluationContext) { - const index = ((this.index.evaluate(ctx): any): number); - const array = ((this.input.evaluate(ctx): any): Array); + const index = (this.index.evaluate(ctx) as any as number); + const array = (this.input.evaluate(ctx) as any as Array); if (index < 0) { throw new RuntimeError(`Array index out of bounds: ${index} < 0.`); @@ -63,7 +61,7 @@ class At implements Expression { } serialize() { - return ["at", this.index.serialize(), this.input.serialize()]; + return ['at', this.index.serialize(), this.input.serialize()]; } } diff --git a/src/style-spec/expression/definitions/case.js b/src/style-spec/expression/definitions/case.ts similarity index 84% rename from src/style-spec/expression/definitions/case.js rename to src/style-spec/expression/definitions/case.ts index c750aed5ed..3756b0f6b5 100644 --- a/src/style-spec/expression/definitions/case.js +++ b/src/style-spec/expression/definitions/case.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import {BooleanType} from '../types'; @@ -23,13 +21,13 @@ class Case implements Expression { this.otherwise = otherwise; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 4) - return context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`); + return context.error(`Expected at least 3 arguments, but found only ${args.length - 1}.`) as null; if (args.length % 2 !== 0) - return context.error(`Expected an odd number of arguments.`); + return context.error('Expected an odd number of arguments.') as null; - let outputType: ?Type; + let outputType: Type | undefined | null; if (context.expectedType && context.expectedType.kind !== 'value') { outputType = context.expectedType; } @@ -51,7 +49,7 @@ class Case implements Expression { if (!otherwise) return null; assert(outputType); - return new Case((outputType: any), branches, otherwise); + return new Case((outputType as any), branches, otherwise); } evaluate(ctx: EvaluationContext) { @@ -76,7 +74,7 @@ class Case implements Expression { } serialize() { - const serialized = ["case"]; + const serialized = ['case' as unknown]; this.eachChild(child => { serialized.push(child.serialize()); }); return serialized; } diff --git a/src/style-spec/expression/definitions/coalesce.js b/src/style-spec/expression/definitions/coalesce.ts similarity index 89% rename from src/style-spec/expression/definitions/coalesce.js rename to src/style-spec/expression/definitions/coalesce.ts index 9cfce9e987..3c6c3c885a 100644 --- a/src/style-spec/expression/definitions/coalesce.js +++ b/src/style-spec/expression/definitions/coalesce.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import {checkSubtype, ValueType} from '../types'; @@ -19,11 +17,11 @@ class Coalesce implements Expression { this.args = args; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 2) { - return context.error("Expectected at least one argument."); + return context.error('Expectected at least one argument.') as null; } - let outputType: Type = (null: any); + let outputType: Type = null; const expectedType = context.expectedType; if (expectedType && expectedType.kind !== 'value') { outputType = expectedType; @@ -48,7 +46,7 @@ class Coalesce implements Expression { return needsAnnotation ? new Coalesce(ValueType, parsedArgs) : - new Coalesce((outputType: any), parsedArgs); + new Coalesce((outputType as any), parsedArgs); } evaluate(ctx: EvaluationContext) { @@ -84,7 +82,7 @@ class Coalesce implements Expression { } serialize() { - const serialized = ["coalesce"]; + const serialized = ['coalesce' as unknown]; this.eachChild(child => { serialized.push(child.serialize()); }); return serialized; } diff --git a/src/style-spec/expression/definitions/coercion.js b/src/style-spec/expression/definitions/coercion.ts similarity index 90% rename from src/style-spec/expression/definitions/coercion.js rename to src/style-spec/expression/definitions/coercion.ts index 3eb46f7766..b4f93fc703 100644 --- a/src/style-spec/expression/definitions/coercion.js +++ b/src/style-spec/expression/definitions/coercion.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import {BooleanType, ColorType, NumberType, StringType, ValueType} from '../types'; @@ -38,15 +36,15 @@ class Coercion implements Expression { this.args = args; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 2) - return context.error(`Expected at least one argument.`); + return context.error('Expected at least one argument.') as null; - const name: string = (args[0]: any); + const name: string = (args[0] as any); assert(types[name], name); if ((name === 'to-boolean' || name === 'to-string') && args.length !== 2) - return context.error(`Expected one argument.`); + return context.error('Expected one argument.') as null; const type = types[name]; @@ -81,7 +79,7 @@ class Coercion implements Expression { error = validateRGBA(input[0], input[1], input[2], input[3]); } if (!error) { - return new Color((input[0]: any) / 255, (input[1]: any) / 255, (input[2]: any) / 255, (input[3]: any)); + return new Color((input[0] as any) / 255, (input[1] as any) / 255, (input[2] as any) / 255, (input[3] as any)); } } } @@ -124,7 +122,7 @@ class Coercion implements Expression { return new ImageExpression(this.args[0]).serialize(); } - const serialized = [`to-${this.type.kind}`]; + const serialized = [`to-${this.type.kind}` as unknown]; this.eachChild(child => { serialized.push(child.serialize()); }); return serialized; } diff --git a/src/style-spec/expression/definitions/collator.js b/src/style-spec/expression/definitions/collator.ts similarity index 86% rename from src/style-spec/expression/definitions/collator.js rename to src/style-spec/expression/definitions/collator.ts index 379d5d6047..537c5bdbdf 100644 --- a/src/style-spec/expression/definitions/collator.js +++ b/src/style-spec/expression/definitions/collator.ts @@ -1,5 +1,3 @@ -// @flow - import {StringType, BooleanType, CollatorType} from '../types'; import Collator from '../types/collator'; @@ -21,13 +19,13 @@ export default class CollatorExpression implements Expression { this.diacriticSensitive = diacriticSensitive; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2) - return context.error(`Expected one argument.`); + return context.error('Expected one argument.') as null; - const options = (args[1]: any); - if (typeof options !== "object" || Array.isArray(options)) - return context.error(`Collator options argument must be an object.`); + const options = (args[1] as any); + if (typeof options !== 'object' || Array.isArray(options)) + return context.error('Collator options argument must be an object.') as null; const caseSensitive = context.parse( options['case-sensitive'] === undefined ? false : options['case-sensitive'], 1, BooleanType); @@ -73,6 +71,6 @@ export default class CollatorExpression implements Expression { if (this.locale) { options['locale'] = this.locale.serialize(); } - return ["collator", options]; + return ['collator', options]; } } diff --git a/src/style-spec/expression/definitions/comparison.js b/src/style-spec/expression/definitions/comparison.ts similarity index 88% rename from src/style-spec/expression/definitions/comparison.js rename to src/style-spec/expression/definitions/comparison.ts index 210df55ac7..5be29eec04 100644 --- a/src/style-spec/expression/definitions/comparison.js +++ b/src/style-spec/expression/definitions/comparison.ts @@ -1,5 +1,3 @@ -// @flow - import {toString, ValueType, BooleanType, CollatorType} from '../types'; import Assertion from './assertion'; import {typeOf} from '../values'; @@ -10,7 +8,7 @@ import type EvaluationContext from '../evaluation_context'; import type ParsingContext from '../parsing_context'; import type {Type} from '../types'; -type ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>=' ; +type ComparisonOperator = '==' | '!=' | '<' | '>' | '<=' | '>='; function isComparableType(op: ComparisonOperator, type: Type) { if (op === '==' || op === '!=') { @@ -66,10 +64,10 @@ function makeComparison(op: ComparisonOperator, compareBasic, compareWithCollato type: Type; lhs: Expression; rhs: Expression; - collator: ?Expression; + collator: Expression | undefined | null; hasUntypedArgument: boolean; - constructor(lhs: Expression, rhs: Expression, collator: ?Expression) { + constructor(lhs: Expression, rhs: Expression, collator?: Expression | null) { this.type = BooleanType; this.lhs = lhs; this.rhs = rhs; @@ -77,21 +75,21 @@ function makeComparison(op: ComparisonOperator, compareBasic, compareWithCollato this.hasUntypedArgument = lhs.type.kind === 'value' || rhs.type.kind === 'value'; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 3 && args.length !== 4) - return context.error(`Expected two or three arguments.`); + return context.error('Expected two or three arguments.') as null; - const op: ComparisonOperator = (args[0]: any); + const op: ComparisonOperator = (args[0] as any); let lhs = context.parse(args[1], 1, ValueType); if (!lhs) return null; if (!isComparableType(op, lhs.type)) { - return context.concat(1).error(`"${op}" comparisons are not supported for type '${toString(lhs.type)}'.`); + return context.concat(1).error(`"${op}" comparisons are not supported for type '${toString(lhs.type)}'.`) as null; } let rhs = context.parse(args[2], 2, ValueType); if (!rhs) return null; if (!isComparableType(op, rhs.type)) { - return context.concat(2).error(`"${op}" comparisons are not supported for type '${toString(rhs.type)}'.`); + return context.concat(2).error(`"${op}" comparisons are not supported for type '${toString(rhs.type)}'.`) as null; } if ( @@ -99,7 +97,7 @@ function makeComparison(op: ComparisonOperator, compareBasic, compareWithCollato lhs.type.kind !== 'value' && rhs.type.kind !== 'value' ) { - return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`); + return context.error(`Cannot compare types '${toString(lhs.type)}' and '${toString(rhs.type)}'.`) as null; } if (isOrderComparison) { @@ -121,7 +119,7 @@ function makeComparison(op: ComparisonOperator, compareBasic, compareWithCollato lhs.type.kind !== 'value' && rhs.type.kind !== 'value' ) { - return context.error(`Cannot use collator to compare non-string types.`); + return context.error('Cannot use collator to compare non-string types.') as null; } collator = context.parse(args[3], 3, CollatorType); if (!collator) return null; @@ -169,7 +167,7 @@ function makeComparison(op: ComparisonOperator, compareBasic, compareWithCollato } serialize() { - const serialized = [op]; + const serialized = [op as unknown]; this.eachChild(child => { serialized.push(child.serialize()); }); return serialized; } diff --git a/src/style-spec/expression/definitions/format.js b/src/style-spec/expression/definitions/format.ts similarity index 82% rename from src/style-spec/expression/definitions/format.js rename to src/style-spec/expression/definitions/format.ts index a376cacff0..92c5047f72 100644 --- a/src/style-spec/expression/definitions/format.js +++ b/src/style-spec/expression/definitions/format.ts @@ -1,6 +1,12 @@ -// @flow - -import {NumberType, ValueType, FormattedType, array, StringType, ColorType, ResolvedImageType} from '../types'; +import { + NumberType, + ValueType, + FormattedType, + array, + StringType, + ColorType, + ResolvedImageType, +} from '../types'; import Formatted, {FormattedSection} from '../types/formatted'; import {toString, typeOf} from '../values'; @@ -10,13 +16,13 @@ import type ParsingContext from '../parsing_context'; import type {Type} from '../types'; type FormattedSectionExpression = { - // Content of a section may be Image expression or other - // type of expression that is coercable to 'string'. - content: Expression, - scale: Expression | null; - font: Expression | null; - textColor: Expression | null; -} + // Content of a section may be Image expression or other + // type of expression that is coercable to 'string'. + content: Expression; + scale: Expression | null; + font: Expression | null; + textColor: Expression | null; +}; export default class FormatExpression implements Expression { type: Type; @@ -27,22 +33,22 @@ export default class FormatExpression implements Expression { this.sections = sections; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 2) { - return context.error(`Expected at least one argument.`); + return context.error('Expected at least one argument.') as null; } const firstArg = args[1]; if (!Array.isArray(firstArg) && typeof firstArg === 'object') { - return context.error(`First argument must be an image or text section.`); + return context.error('First argument must be an image or text section.') as null; } const sections: Array = []; let nextTokenMayBeObject = false; for (let i = 1; i <= args.length - 1; ++i) { - const arg = (args[i]: any); + const arg = (args[i] as any); - if (nextTokenMayBeObject && typeof arg === "object" && !Array.isArray(arg)) { + if (nextTokenMayBeObject && typeof arg === 'object' && !Array.isArray(arg)) { nextTokenMayBeObject = false; let scale = null; @@ -73,7 +79,7 @@ export default class FormatExpression implements Expression { const kind = content.type.kind; if (kind !== 'string' && kind !== 'value' && kind !== 'null' && kind !== 'resolvedImage') - return context.error(`Formatted text type must be 'string', 'value', 'image' or 'null'.`); + return context.error('Formatted text type must be \'string\', \'value\', \'image\' or \'null\'.') as null; nextTokenMayBeObject = true; sections.push({content, scale: null, font: null, textColor: null}); @@ -124,7 +130,7 @@ export default class FormatExpression implements Expression { } serialize() { - const serialized = ["format"]; + const serialized = ['format'] as (string | {})[]; for (const section of this.sections) { serialized.push(section.content.serialize()); const options = {}; diff --git a/src/style-spec/expression/definitions/image.js b/src/style-spec/expression/definitions/image.ts similarity index 80% rename from src/style-spec/expression/definitions/image.js rename to src/style-spec/expression/definitions/image.ts index 8b73e1c79d..133c07a1c2 100644 --- a/src/style-spec/expression/definitions/image.js +++ b/src/style-spec/expression/definitions/image.ts @@ -1,5 +1,3 @@ -// @flow - import {ResolvedImageType, StringType} from '../types'; import ResolvedImage from '../types/resolved_image'; @@ -17,13 +15,13 @@ export default class ImageExpression implements Expression { this.input = input; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2) { - return context.error(`Expected two arguments.`); + return context.error('Expected two arguments.') as null; } const name = context.parse(args[1], 1, StringType); - if (!name) return context.error(`No image name provided.`); + if (!name) return context.error('No image name provided.') as null; return new ImageExpression(name); } @@ -47,6 +45,6 @@ export default class ImageExpression implements Expression { } serialize() { - return ["image", this.input.serialize()]; + return ['image', this.input.serialize()]; } } diff --git a/src/style-spec/expression/definitions/in.js b/src/style-spec/expression/definitions/in.ts similarity index 78% rename from src/style-spec/expression/definitions/in.js rename to src/style-spec/expression/definitions/in.ts index 0e6681a508..cec0a2524d 100644 --- a/src/style-spec/expression/definitions/in.js +++ b/src/style-spec/expression/definitions/in.ts @@ -1,6 +1,13 @@ -// @flow - -import {BooleanType, StringType, ValueType, NullType, toString, NumberType, isValidType, isValidNativeType} from '../types'; +import { + BooleanType, + StringType, + ValueType, + NullType, + toString, + NumberType, + isValidType, + isValidNativeType, +} from '../types'; import RuntimeError from '../runtime_error'; import {typeOf} from '../values'; @@ -20,9 +27,9 @@ class In implements Expression { this.haystack = haystack; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 3) { - return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`); + return context.error(`Expected 2 arguments, but found ${args.length - 1} instead.`) as null; } const needle = context.parse(args[1], 1, ValueType); @@ -32,15 +39,15 @@ class In implements Expression { if (!needle || !haystack) return null; if (!isValidType(needle.type, [BooleanType, StringType, NumberType, NullType, ValueType])) { - return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`); + return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`) as null; } return new In(needle, haystack); } evaluate(ctx: EvaluationContext) { - const needle = (this.needle.evaluate(ctx): any); - const haystack = (this.haystack.evaluate(ctx): any); + const needle = (this.needle.evaluate(ctx) as any); + const haystack = (this.haystack.evaluate(ctx) as any); if (!haystack) return false; @@ -65,7 +72,7 @@ class In implements Expression { } serialize() { - return ["in", this.needle.serialize(), this.haystack.serialize()]; + return ['in', this.needle.serialize(), this.haystack.serialize()]; } } diff --git a/src/style-spec/expression/definitions/index.js b/src/style-spec/expression/definitions/index.ts similarity index 91% rename from src/style-spec/expression/definitions/index.js rename to src/style-spec/expression/definitions/index.ts index fcc1535c8b..3767fd9069 100644 --- a/src/style-spec/expression/definitions/index.js +++ b/src/style-spec/expression/definitions/index.ts @@ -1,7 +1,4 @@ -// @flow - import { - type Type, NumberType, StringType, BooleanType, @@ -11,9 +8,11 @@ import { ErrorType, CollatorType, array, - toString as typeToString + toString as typeToString, } from '../types'; +import type {Type} from '../types'; + import {typeOf, Color, validateRGBA, toString as valueToString} from '../values'; import CompoundExpression from '../compound_expression'; import RuntimeError from '../runtime_error'; @@ -369,24 +368,24 @@ CompoundExpression.register(expressions, { 'filter-==': [ BooleanType, [StringType, ValueType], - (ctx, [k, v]) => ctx.properties()[(k: any).value] === (v: any).value + (ctx, [k, v]) => ctx.properties()[(k as any).value] === (v as any).value ], 'filter-id-==': [ BooleanType, [ValueType], - (ctx, [v]) => ctx.id() === (v: any).value + (ctx, [v]) => ctx.id() === (v as any).value ], 'filter-type-==': [ BooleanType, [StringType], - (ctx, [v]) => ctx.geometryType() === (v: any).value + (ctx, [v]) => ctx.geometryType() === (v as any).value ], 'filter-<': [ BooleanType, [StringType, ValueType], (ctx, [k, v]) => { - const a = ctx.properties()[(k: any).value]; - const b = (v: any).value; + const a = ctx.properties()[(k as any).value]; + const b = (v as any).value; return typeof a === typeof b && a < b; } ], @@ -395,7 +394,7 @@ CompoundExpression.register(expressions, { [ValueType], (ctx, [v]) => { const a = ctx.id(); - const b = (v: any).value; + const b = (v as any).value; return typeof a === typeof b && a < b; } ], @@ -403,8 +402,8 @@ CompoundExpression.register(expressions, { BooleanType, [StringType, ValueType], (ctx, [k, v]) => { - const a = ctx.properties()[(k: any).value]; - const b = (v: any).value; + const a = ctx.properties()[(k as any).value]; + const b = (v as any).value; return typeof a === typeof b && a > b; } ], @@ -413,7 +412,7 @@ CompoundExpression.register(expressions, { [ValueType], (ctx, [v]) => { const a = ctx.id(); - const b = (v: any).value; + const b = (v as any).value; return typeof a === typeof b && a > b; } ], @@ -421,8 +420,8 @@ CompoundExpression.register(expressions, { BooleanType, [StringType, ValueType], (ctx, [k, v]) => { - const a = ctx.properties()[(k: any).value]; - const b = (v: any).value; + const a = ctx.properties()[(k as any).value]; + const b = (v as any).value; return typeof a === typeof b && a <= b; } ], @@ -431,7 +430,7 @@ CompoundExpression.register(expressions, { [ValueType], (ctx, [v]) => { const a = ctx.id(); - const b = (v: any).value; + const b = (v as any).value; return typeof a === typeof b && a <= b; } ], @@ -439,8 +438,8 @@ CompoundExpression.register(expressions, { BooleanType, [StringType, ValueType], (ctx, [k, v]) => { - const a = ctx.properties()[(k: any).value]; - const b = (v: any).value; + const a = ctx.properties()[(k as any).value]; + const b = (v as any).value; return typeof a === typeof b && a >= b; } ], @@ -449,14 +448,14 @@ CompoundExpression.register(expressions, { [ValueType], (ctx, [v]) => { const a = ctx.id(); - const b = (v: any).value; + const b = (v as any).value; return typeof a === typeof b && a >= b; } ], 'filter-has': [ BooleanType, [ValueType], - (ctx, [k]) => (k: any).value in ctx.properties() + (ctx, [k]) => (k as any).value in ctx.properties() ], 'filter-has-id': [ BooleanType, @@ -466,24 +465,24 @@ CompoundExpression.register(expressions, { 'filter-type-in': [ BooleanType, [array(StringType)], - (ctx, [v]) => (v: any).value.indexOf(ctx.geometryType()) >= 0 + (ctx, [v]) => (v as any).value.indexOf(ctx.geometryType()) >= 0 ], 'filter-id-in': [ BooleanType, [array(ValueType)], - (ctx, [v]) => (v: any).value.indexOf(ctx.id()) >= 0 + (ctx, [v]) => (v as any).value.indexOf(ctx.id()) >= 0 ], 'filter-in-small': [ BooleanType, [StringType, array(ValueType)], // assumes v is an array literal - (ctx, [k, v]) => (v: any).value.indexOf(ctx.properties()[(k: any).value]) >= 0 + (ctx, [k, v]) => (v as any).value.indexOf(ctx.properties()[(k as any).value]) >= 0 ], 'filter-in-large': [ BooleanType, [StringType, array(ValueType)], // assumes v is a array literal with values sorted in ascending order and of a single type - (ctx, [k, v]) => binarySearch(ctx.properties()[(k: any).value], (v: any).value, 0, (v: any).value.length - 1) + (ctx, [k, v]) => binarySearch(ctx.properties()[(k as any).value], (v as any).value, 0, (v as any).value.length - 1) ], 'all': { type: BooleanType, diff --git a/src/style-spec/expression/definitions/index_of.js b/src/style-spec/expression/definitions/index_of.ts similarity index 78% rename from src/style-spec/expression/definitions/index_of.js rename to src/style-spec/expression/definitions/index_of.ts index 48e629335c..543cd205a5 100644 --- a/src/style-spec/expression/definitions/index_of.js +++ b/src/style-spec/expression/definitions/index_of.ts @@ -1,6 +1,13 @@ -// @flow - -import {BooleanType, StringType, ValueType, NullType, toString, NumberType, isValidType, isValidNativeType} from '../types'; +import { + BooleanType, + StringType, + ValueType, + NullType, + toString, + NumberType, + isValidType, + isValidNativeType, +} from '../types'; import RuntimeError from '../runtime_error'; import {typeOf} from '../values'; @@ -13,7 +20,7 @@ class IndexOf implements Expression { type: Type; needle: Expression; haystack: Expression; - fromIndex: ?Expression; + fromIndex: Expression | undefined | null; constructor(needle: Expression, haystack: Expression, fromIndex?: Expression) { this.type = NumberType; @@ -22,9 +29,9 @@ class IndexOf implements Expression { this.fromIndex = fromIndex; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length <= 2 || args.length >= 5) { - return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`); + return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`) as null; } const needle = context.parse(args[1], 1, ValueType); @@ -33,7 +40,7 @@ class IndexOf implements Expression { if (!needle || !haystack) return null; if (!isValidType(needle.type, [BooleanType, StringType, NumberType, NullType, ValueType])) { - return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`); + return context.error(`Expected first argument to be of type boolean, string, number or null, but found ${toString(needle.type)} instead`) as null; } if (args.length === 4) { @@ -46,8 +53,8 @@ class IndexOf implements Expression { } evaluate(ctx: EvaluationContext) { - const needle = (this.needle.evaluate(ctx): any); - const haystack = (this.haystack.evaluate(ctx): any); + const needle = (this.needle.evaluate(ctx) as any); + const haystack = (this.haystack.evaluate(ctx) as any); if (!isValidNativeType(needle, ['boolean', 'string', 'number', 'null'])) { throw new RuntimeError(`Expected first argument to be of type boolean, string, number or null, but found ${toString(typeOf(needle))} instead.`); @@ -58,7 +65,7 @@ class IndexOf implements Expression { } if (this.fromIndex) { - const fromIndex = (this.fromIndex.evaluate(ctx): number); + const fromIndex = (this.fromIndex.evaluate(ctx) as number); return haystack.indexOf(needle, fromIndex); } @@ -80,9 +87,9 @@ class IndexOf implements Expression { serialize() { if (this.fromIndex != null && this.fromIndex !== undefined) { const fromIndex = this.fromIndex.serialize(); - return ["index-of", this.needle.serialize(), this.haystack.serialize(), fromIndex]; + return ['index-of', this.needle.serialize(), this.haystack.serialize(), fromIndex]; } - return ["index-of", this.needle.serialize(), this.haystack.serialize()]; + return ['index-of', this.needle.serialize(), this.haystack.serialize()]; } } diff --git a/src/style-spec/expression/definitions/interpolate.js b/src/style-spec/expression/definitions/interpolate.ts similarity index 85% rename from src/style-spec/expression/definitions/interpolate.js rename to src/style-spec/expression/definitions/interpolate.ts index 98a1b65e4f..3011db723c 100644 --- a/src/style-spec/expression/definitions/interpolate.js +++ b/src/style-spec/expression/definitions/interpolate.ts @@ -1,5 +1,3 @@ -// @flow - import UnitBezier from '@mapbox/unitbezier'; import * as interpolate from '../../util/interpolate'; @@ -13,10 +11,15 @@ import type ParsingContext from '../parsing_context'; import type EvaluationContext from '../evaluation_context'; import type {Type} from '../types'; -export type InterpolationType = - { name: 'linear' } | - { name: 'exponential', base: number } | - { name: 'cubic-bezier', controlPoints: [number, number, number, number] }; +export type InterpolationType = { + name: 'linear'; +} | { + name: 'exponential'; + base: number; +} | { + name: 'cubic-bezier'; + controlPoints: [number, number, number, number]; +}; class Interpolate implements Expression { type: Type; @@ -55,11 +58,11 @@ class Interpolate implements Expression { return t; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { let [operator, interpolation, input, ...rest] = args; if (!Array.isArray(interpolation) || interpolation.length === 0) { - return context.error(`Expected an interpolation type expression.`, 1); + return context.error('Expected an interpolation type expression.', 1) as null; } if (interpolation[0] === 'linear') { @@ -67,7 +70,7 @@ class Interpolate implements Expression { } else if (interpolation[0] === 'exponential') { const base = interpolation[1]; if (typeof base !== 'number') - return context.error(`Exponential interpolation requires a numeric base.`, 1, 1); + return context.error('Exponential interpolation requires a numeric base.', 1, 1) as null; interpolation = { name: 'exponential', base @@ -78,23 +81,23 @@ class Interpolate implements Expression { controlPoints.length !== 4 || controlPoints.some(t => typeof t !== 'number' || t < 0 || t > 1) ) { - return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1); + return context.error('Cubic bezier interpolation requires four numeric arguments with values between 0 and 1.', 1) as null; } interpolation = { name: 'cubic-bezier', - controlPoints: (controlPoints: any) + controlPoints: (controlPoints as any) }; } else { - return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0); + return context.error(`Unknown interpolation type ${String(interpolation[0])}`, 1, 0) as null; } if (args.length - 1 < 4) { - return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`); + return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`) as null; } if ((args.length - 1) % 2 !== 0) { - return context.error(`Expected an even number of arguments.`); + return context.error('Expected an even number of arguments.') as null; } input = context.parse(input, 2, NumberType); @@ -102,7 +105,7 @@ class Interpolate implements Expression { const stops: Stops = []; - let outputType: Type = (null: any); + let outputType: Type = null; if (operator === 'interpolate-hcl' || operator === 'interpolate-lab') { outputType = ColorType; } else if (context.expectedType && context.expectedType.kind !== 'value') { @@ -117,11 +120,11 @@ class Interpolate implements Expression { const valueKey = i + 4; if (typeof label !== 'number') { - return context.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey); + return context.error('Input/output pairs for "interpolate" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey) as null; } if (stops.length && stops[stops.length - 1][0] >= label) { - return context.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.', labelKey); + return context.error('Input/output pairs for "interpolate" expressions must be arranged with input values in strictly ascending order.', labelKey) as null; } const parsed = context.parse(value, valueKey, outputType); @@ -138,10 +141,10 @@ class Interpolate implements Expression { typeof outputType.N === 'number' ) ) { - return context.error(`Type ${toString(outputType)} is not interpolatable.`); + return context.error(`Type ${toString(outputType)} is not interpolatable.`) as null; } - return new Interpolate(outputType, (operator: any), interpolation, input, stops); + return new Interpolate(outputType, (operator as any), interpolation as InterpolationType, input as Expression, stops); } evaluate(ctx: EvaluationContext) { @@ -152,7 +155,7 @@ class Interpolate implements Expression { return outputs[0].evaluate(ctx); } - const value = ((this.input.evaluate(ctx): any): number); + const value = (this.input.evaluate(ctx) as any as number); if (value <= labels[0]) { return outputs[0].evaluate(ctx); } @@ -171,7 +174,7 @@ class Interpolate implements Expression { const outputUpper = outputs[index + 1].evaluate(ctx); if (this.operator === 'interpolate') { - return (interpolate[this.type.kind.toLowerCase()]: any)(outputLower, outputUpper, t); // eslint-disable-line import/namespace + return ((interpolate[this.type.kind.toLowerCase()] as any))(outputLower, outputUpper, t); // eslint-disable-line import/namespace } else if (this.operator === 'interpolate-hcl') { return hcl.reverse(hcl.interpolate(hcl.forward(outputLower), hcl.forward(outputUpper), t)); } else { @@ -190,18 +193,18 @@ class Interpolate implements Expression { return this.outputs.every(out => out.outputDefined()); } - serialize(): Array { + serialize(): Array { let interpolation; if (this.interpolation.name === 'linear') { - interpolation = ["linear"]; + interpolation = ['linear']; } else if (this.interpolation.name === 'exponential') { if (this.interpolation.base === 1) { - interpolation = ["linear"]; + interpolation = ['linear']; } else { - interpolation = ["exponential", this.interpolation.base]; + interpolation = ['exponential', this.interpolation.base]; } } else { - interpolation = ["cubic-bezier" ].concat(this.interpolation.controlPoints); + interpolation = ['cubic-bezier' as unknown].concat(this.interpolation.controlPoints); } const serialized = [this.operator, interpolation, this.input.serialize()]; diff --git a/src/style-spec/expression/definitions/length.js b/src/style-spec/expression/definitions/length.ts similarity index 85% rename from src/style-spec/expression/definitions/length.js rename to src/style-spec/expression/definitions/length.ts index abaaf0bc04..99487fcda6 100644 --- a/src/style-spec/expression/definitions/length.js +++ b/src/style-spec/expression/definitions/length.ts @@ -1,5 +1,3 @@ -// @flow - import {NumberType, toString} from '../types'; import {typeOf} from '../values'; @@ -19,15 +17,15 @@ class Length implements Expression { this.input = input; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2) - return context.error(`Expected 1 argument, but found ${args.length - 1} instead.`); + return context.error(`Expected 1 argument, but found ${args.length - 1} instead.`) as null; const input = context.parse(args[1], 1); if (!input) return null; if (input.type.kind !== 'array' && input.type.kind !== 'string' && input.type.kind !== 'value') - return context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`); + return context.error(`Expected argument of type string or array, but found ${toString(input.type)} instead.`) as null; return new Length(input); } @@ -52,7 +50,7 @@ class Length implements Expression { } serialize() { - const serialized = ["length"]; + const serialized = ['length' as unknown]; this.eachChild(child => { serialized.push(child.serialize()); }); return serialized; } diff --git a/src/style-spec/expression/definitions/let.js b/src/style-spec/expression/definitions/let.ts similarity index 83% rename from src/style-spec/expression/definitions/let.js rename to src/style-spec/expression/definitions/let.ts index cfa449d8a7..bca8c0d159 100644 --- a/src/style-spec/expression/definitions/let.js +++ b/src/style-spec/expression/definitions/let.ts @@ -1,5 +1,3 @@ -// @flow - import type {Type} from '../types'; import type {Expression} from '../expression'; import type ParsingContext from '../parsing_context'; @@ -27,20 +25,20 @@ class Let implements Expression { fn(this.result); } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 4) - return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`); + return context.error(`Expected at least 3 arguments, but found ${args.length - 1} instead.`) as null; const bindings: Array<[string, Expression]> = []; for (let i = 1; i < args.length - 1; i += 2) { const name = args[i]; if (typeof name !== 'string') { - return context.error(`Expected string, but found ${typeof name} instead.`, i); + return context.error(`Expected string, but found ${typeof name} instead.`, i) as null; } if (/[^a-zA-Z0-9_]/.test(name)) { - return context.error(`Variable names must contain only alphanumeric characters or '_'.`, i); + return context.error('Variable names must contain only alphanumeric characters or \'_\'.', i) as null; } const value = context.parse(args[i + 1], i + 1); @@ -60,7 +58,7 @@ class Let implements Expression { } serialize() { - const serialized = ["let"]; + const serialized = ['let' as unknown]; for (const [name, expr] of this.bindings) { serialized.push(name, expr.serialize()); } diff --git a/src/style-spec/expression/definitions/literal.js b/src/style-spec/expression/definitions/literal.ts similarity index 80% rename from src/style-spec/expression/definitions/literal.js rename to src/style-spec/expression/definitions/literal.ts index cdb45dd7fd..df07074a5f 100644 --- a/src/style-spec/expression/definitions/literal.js +++ b/src/style-spec/expression/definitions/literal.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import {isValue, typeOf, Color} from '../values'; import Formatted from '../types/formatted'; @@ -18,14 +16,14 @@ class Literal implements Expression { this.value = value; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2) - return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`); + return context.error(`'literal' expression requires exactly one argument, but found ${args.length - 1} instead.`) as null; if (!isValue(args[1])) - return context.error(`invalid value`); + return context.error('invalid value') as null; - const value = (args[1]: any); + const value = (args[1] as any); let type = typeOf(value); // special case: infer the item type if possible for zero-length arrays @@ -53,14 +51,14 @@ class Literal implements Expression { return true; } - serialize(): Array { + serialize(): Array { if (this.type.kind === 'array' || this.type.kind === 'object') { - return ["literal", this.value]; + return ['literal', this.value]; } else if (this.value instanceof Color) { // Constant-folding can generate Literal expressions that you // couldn't actually generate with a "literal" expression, // so we have to implement an equivalent serialization here - return ["rgba"].concat(this.value.toArray()); + return ['rgba' as unknown].concat(this.value.toArray()); } else if (this.value instanceof Formatted) { // Same as Color return this.value.serialize(); @@ -69,7 +67,7 @@ class Literal implements Expression { typeof this.value === 'string' || typeof this.value === 'number' || typeof this.value === 'boolean'); - return (this.value: any); + return this.value as any; } } } diff --git a/src/style-spec/expression/definitions/match.js b/src/style-spec/expression/definitions/match.ts similarity index 81% rename from src/style-spec/expression/definitions/match.js rename to src/style-spec/expression/definitions/match.ts index ec4d1c30fa..0d307d964c 100644 --- a/src/style-spec/expression/definitions/match.js +++ b/src/style-spec/expression/definitions/match.ts @@ -1,16 +1,18 @@ -// @flow - import assert from 'assert'; import {typeOf} from '../values'; -import {ValueType, type Type} from '../types'; +import {ValueType} from '../types'; + +import type {Type} from '../types'; import type {Expression} from '../expression'; import type ParsingContext from '../parsing_context'; import type EvaluationContext from '../evaluation_context'; // Map input label values to output expression index -type Cases = {[number | string]: number}; +type Cases = { + [k in number | string]: number; +}; class Match implements Expression { type: Type; @@ -30,11 +32,11 @@ class Match implements Expression { this.otherwise = otherwise; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length < 5) - return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`); + return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`) as null; if (args.length % 2 !== 1) - return context.error(`Expected an even number of arguments.`); + return context.error('Expected an even number of arguments.') as null; let inputType; let outputType; @@ -44,7 +46,7 @@ class Match implements Expression { const cases = {}; const outputs = []; for (let i = 2; i < args.length - 1; i += 2) { - let labels = args[i]; + let labels = args[i] as unknown[]; const value = args[i + 1]; if (!Array.isArray(labels)) { @@ -53,17 +55,17 @@ class Match implements Expression { const labelContext = context.concat(i); if (labels.length === 0) { - return labelContext.error('Expected at least one branch label.'); + return labelContext.error('Expected at least one branch label.') as null; } for (const label of labels) { if (typeof label !== 'number' && typeof label !== 'string') { - return labelContext.error(`Branch labels must be numbers or strings.`); + return labelContext.error('Branch labels must be numbers or strings.') as null; } else if (typeof label === 'number' && Math.abs(label) > Number.MAX_SAFE_INTEGER) { - return labelContext.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`); + return labelContext.error(`Branch labels must be integers no larger than ${Number.MAX_SAFE_INTEGER}.`) as null; } else if (typeof label === 'number' && Math.floor(label) !== label) { - return labelContext.error(`Numeric branch labels must be integer values.`); + return labelContext.error('Numeric branch labels must be integer values.') as null; } else if (!inputType) { inputType = typeOf(label); @@ -72,7 +74,7 @@ class Match implements Expression { } if (typeof cases[String(label)] !== 'undefined') { - return labelContext.error('Branch labels must be unique.'); + return labelContext.error('Branch labels must be unique.') as null; } cases[String(label)] = outputs.length; @@ -92,15 +94,15 @@ class Match implements Expression { assert(inputType && outputType); - if (input.type.kind !== 'value' && context.concat(1).checkSubtype((inputType: any), input.type)) { + if (input.type.kind !== 'value' && context.concat(1).checkSubtype(((inputType as any)), input.type)) { return null; } - return new Match((inputType: any), (outputType: any), input, cases, outputs, otherwise); + return new Match((inputType as any), (outputType as any), input, cases, outputs, otherwise); } evaluate(ctx: EvaluationContext) { - const input = (this.input.evaluate(ctx): any); + const input = (this.input.evaluate(ctx) as any); const output = (typeOf(input) === this.inputType && this.outputs[this.cases[input]]) || this.otherwise; return output.evaluate(ctx); } @@ -115,8 +117,8 @@ class Match implements Expression { return this.outputs.every(out => out.outputDefined()) && this.otherwise.outputDefined(); } - serialize(): Array { - const serialized = ["match", this.input.serialize()]; + serialize(): Array { + const serialized = ['match', this.input.serialize()]; // Sort so serialization has an arbitrary defined order, even though // branch order doesn't affect evaluation @@ -125,7 +127,9 @@ class Match implements Expression { // Group branches by unique match expression to support condensed // serializations of the form [case1, case2, ...] -> matchExpression const groupedByOutput: Array<[number, Array]> = []; - const outputLookup: {[index: number]: number} = {}; // lookup index into groupedByOutput for a given output expression + const outputLookup: { + [index: number]: number; + } = {}; // lookup index into groupedByOutput for a given output expression for (const label of sortedLabels) { const outputIndex = outputLookup[this.cases[label]]; if (outputIndex === undefined) { diff --git a/src/style-spec/expression/definitions/number_format.js b/src/style-spec/expression/definitions/number_format.ts similarity index 79% rename from src/style-spec/expression/definitions/number_format.js rename to src/style-spec/expression/definitions/number_format.ts index 754503fb19..ed09a0d310 100644 --- a/src/style-spec/expression/definitions/number_format.js +++ b/src/style-spec/expression/definitions/number_format.ts @@ -1,5 +1,3 @@ -// @flow - import {StringType, NumberType} from '../types'; import type {Expression} from '../expression'; @@ -7,31 +5,23 @@ import type EvaluationContext from '../evaluation_context'; import type ParsingContext from '../parsing_context'; import type {Type} from '../types'; -declare var Intl: { - NumberFormat: Class +declare let Intl: { + NumberFormat: { + new (...args: any): Intl$NumberFormat; + }; }; declare class Intl$NumberFormat { - constructor ( - locales?: string | string[], - options?: NumberFormatOptions - ): Intl$NumberFormat; - - static ( - locales?: string | string[], - options?: NumberFormatOptions - ): Intl$NumberFormat; - + constructor(locales?: string | string[], options?: NumberFormatOptions); format(a: number): string; - resolvedOptions(): any; } type NumberFormatOptions = { - style?: 'decimal' | 'currency' | 'percent'; - currency?: null | string; - minimumFractionDigits?: null | string; - maximumFractionDigits?: null | string; + style?: 'decimal' | 'currency' | 'percent'; + currency?: null | string; + minimumFractionDigits?: null | string; + maximumFractionDigits?: null | string; }; export default class NumberFormat implements Expression { @@ -55,16 +45,16 @@ export default class NumberFormat implements Expression { this.maxFractionDigits = maxFractionDigits; } - static parse(args: $ReadOnlyArray, context: ParsingContext): ?Expression { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 3) - return context.error(`Expected two arguments.`); + return context.error('Expected two arguments.') as null; const number = context.parse(args[1], 1, NumberType); if (!number) return null; - const options = (args[2]: any); - if (typeof options !== "object" || Array.isArray(options)) - return context.error(`NumberFormat options argument must be an object.`); + const options = (args[2] as any); + if (typeof options !== 'object' || Array.isArray(options)) + return context.error('NumberFormat options argument must be an object.') as null; let locale = null; if (options['locale']) { @@ -96,7 +86,7 @@ export default class NumberFormat implements Expression { evaluate(ctx: EvaluationContext) { return new Intl.NumberFormat(this.locale ? this.locale.evaluate(ctx) : [], { - style: this.currency ? "currency" : "decimal", + style: this.currency ? 'currency' : 'decimal', currency: this.currency ? this.currency.evaluate(ctx) : undefined, minimumFractionDigits: this.minFractionDigits ? this.minFractionDigits.evaluate(ctx) : undefined, maximumFractionDigits: this.maxFractionDigits ? this.maxFractionDigits.evaluate(ctx) : undefined, @@ -137,6 +127,6 @@ export default class NumberFormat implements Expression { if (this.maxFractionDigits) { options['max-fraction-digits'] = this.maxFractionDigits.serialize(); } - return ["number-format", this.number.serialize(), options]; + return ['number-format', this.number.serialize(), options]; } } diff --git a/src/style-spec/expression/definitions/slice.js b/src/style-spec/expression/definitions/slice.ts similarity index 77% rename from src/style-spec/expression/definitions/slice.js rename to src/style-spec/expression/definitions/slice.ts index 09a47c10e9..d95d504cc6 100644 --- a/src/style-spec/expression/definitions/slice.js +++ b/src/style-spec/expression/definitions/slice.ts @@ -1,6 +1,12 @@ -// @flow - -import {ValueType, NumberType, StringType, array, toString, isValidType, isValidNativeType} from '../types'; +import { + ValueType, + NumberType, + StringType, + array, + toString, + isValidType, + isValidNativeType, +} from '../types'; import RuntimeError from '../runtime_error'; import {typeOf} from '../values'; @@ -13,7 +19,7 @@ class Slice implements Expression { type: Type; input: Expression; beginIndex: Expression; - endIndex: ?Expression; + endIndex: Expression | undefined | null; constructor(type: Type, input: Expression, beginIndex: Expression, endIndex?: Expression) { this.type = type; @@ -23,9 +29,9 @@ class Slice implements Expression { } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length <= 2 || args.length >= 5) { - return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`); + return context.error(`Expected 3 or 4 arguments, but found ${args.length - 1} instead.`) as null; } const input = context.parse(args[1], 1, ValueType); @@ -34,7 +40,7 @@ class Slice implements Expression { if (!input || !beginIndex) return null; if (!isValidType(input.type, [array(ValueType), StringType, ValueType])) { - return context.error(`Expected first argument to be of type array or string, but found ${toString(input.type)} instead`); + return context.error(`Expected first argument to be of type array or string, but found ${toString(input.type)} instead`) as null; } if (args.length === 4) { @@ -47,15 +53,15 @@ class Slice implements Expression { } evaluate(ctx: EvaluationContext) { - const input = (this.input.evaluate(ctx): any); - const beginIndex = (this.beginIndex.evaluate(ctx): number); + const input = (this.input.evaluate(ctx) as any); + const beginIndex = (this.beginIndex.evaluate(ctx) as number); if (!isValidNativeType(input, ['string', 'array'])) { throw new RuntimeError(`Expected first argument to be of type array or string, but found ${toString(typeOf(input))} instead.`); } if (this.endIndex) { - const endIndex = (this.endIndex.evaluate(ctx): number); + const endIndex = (this.endIndex.evaluate(ctx) as number); return input.slice(beginIndex, endIndex); } @@ -77,9 +83,9 @@ class Slice implements Expression { serialize() { if (this.endIndex != null && this.endIndex !== undefined) { const endIndex = this.endIndex.serialize(); - return ["slice", this.input.serialize(), this.beginIndex.serialize(), endIndex]; + return ['slice', this.input.serialize(), this.beginIndex.serialize(), endIndex]; } - return ["slice", this.input.serialize(), this.beginIndex.serialize()]; + return ['slice', this.input.serialize(), this.beginIndex.serialize()]; } } diff --git a/src/style-spec/expression/definitions/step.js b/src/style-spec/expression/definitions/step.ts similarity index 86% rename from src/style-spec/expression/definitions/step.js rename to src/style-spec/expression/definitions/step.ts index 3e2058290b..c8f9b8a960 100644 --- a/src/style-spec/expression/definitions/step.js +++ b/src/style-spec/expression/definitions/step.ts @@ -1,5 +1,3 @@ -// @flow - import {NumberType} from '../types'; import {findStopLessThanOrEqualTo} from '../stops'; @@ -29,13 +27,13 @@ class Step implements Expression { } } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length - 1 < 4) { - return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`); + return context.error(`Expected at least 4 arguments, but found only ${args.length - 1}.`) as null; } if ((args.length - 1) % 2 !== 0) { - return context.error(`Expected an even number of arguments.`); + return context.error('Expected an even number of arguments.') as null; } const input = context.parse(args[1], 1, NumberType); @@ -43,7 +41,7 @@ class Step implements Expression { const stops: Stops = []; - let outputType: Type = (null: any); + let outputType: Type = null; if (context.expectedType && context.expectedType.kind !== 'value') { outputType = context.expectedType; } @@ -56,11 +54,11 @@ class Step implements Expression { const valueKey = i + 1; if (typeof label !== 'number') { - return context.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey); + return context.error('Input/output pairs for "step" expressions must be defined using literal numeric values (not computed expressions) for the input values.', labelKey) as null; } if (stops.length && stops[stops.length - 1][0] >= label) { - return context.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', labelKey); + return context.error('Input/output pairs for "step" expressions must be arranged with input values in strictly ascending order.', labelKey) as null; } const parsed = context.parse(value, valueKey, outputType); @@ -80,7 +78,7 @@ class Step implements Expression { return outputs[0].evaluate(ctx); } - const value = ((this.input.evaluate(ctx): any): number); + const value = (this.input.evaluate(ctx) as any as number); if (value <= labels[0]) { return outputs[0].evaluate(ctx); } @@ -106,7 +104,7 @@ class Step implements Expression { } serialize() { - const serialized = ["step", this.input.serialize()]; + const serialized = ['step', this.input.serialize()]; for (let i = 0; i < this.labels.length; i++) { if (i > 0) { serialized.push(this.labels[i]); diff --git a/src/style-spec/expression/definitions/var.js b/src/style-spec/expression/definitions/var.ts similarity index 78% rename from src/style-spec/expression/definitions/var.js rename to src/style-spec/expression/definitions/var.ts index aa97e6cc2e..8fc47c1210 100644 --- a/src/style-spec/expression/definitions/var.js +++ b/src/style-spec/expression/definitions/var.ts @@ -1,5 +1,3 @@ -// @flow - import type {Type} from '../types'; import type {Expression} from '../expression'; import type ParsingContext from '../parsing_context'; @@ -16,13 +14,13 @@ class Var implements Expression { this.boundExpression = boundExpression; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2 || typeof args[1] !== 'string') - return context.error(`'var' expression requires exactly one string literal argument.`); + return context.error('\'var\' expression requires exactly one string literal argument.') as null; const name = args[1]; if (!context.scope.has(name)) { - return context.error(`Unknown variable "${name}". Make sure "${name}" has been bound in an enclosing "let" expression before using it.`, 1); + return context.error(`Unknown variable "${name}". Make sure "${name}" has been bound in an enclosing "let" expression before using it.`, 1) as null; } return new Var(name, context.scope.get(name)); @@ -39,7 +37,7 @@ class Var implements Expression { } serialize() { - return ["var", this.name]; + return ['var', this.name]; } } diff --git a/src/style-spec/expression/definitions/within.js b/src/style-spec/expression/definitions/within.ts similarity index 91% rename from src/style-spec/expression/definitions/within.js rename to src/style-spec/expression/definitions/within.ts index 67d60beec4..c0c01b5351 100644 --- a/src/style-spec/expression/definitions/within.js +++ b/src/style-spec/expression/definitions/within.ts @@ -1,22 +1,19 @@ -// @flow - import {isValue} from '../values'; import type {Type} from '../types'; import {BooleanType} from '../types'; import type {Expression} from '../expression'; import type ParsingContext from '../parsing_context'; import type EvaluationContext from '../evaluation_context'; -import type {GeoJSON, GeoJSONPolygon, GeoJSONMultiPolygon} from '@mapbox/geojson-types'; -import Point from '@mapbox/point-geometry'; import type {CanonicalTileID} from '../../../source/tile_id'; -type GeoJSONPolygons =| GeoJSONPolygon | GeoJSONMultiPolygon; +type GeoJSONPolygons = GeoJSON.Polygon | GeoJSON.MultiPolygon; // minX, minY, maxX, maxY type BBox = [number, number, number, number]; + const EXTENT = 8192; -function updateBBox(bbox: BBox, coord: Point) { +function updateBBox(bbox: BBox, coord: [number, number]) { bbox[0] = Math.min(bbox[0], coord[0]); bbox[1] = Math.min(bbox[1], coord[1]); bbox[2] = Math.max(bbox[2], coord[0]); @@ -39,7 +36,7 @@ function boxWithinBox(bbox1: BBox, bbox2: BBox) { return true; } -function getTileCoordinates(p, canonical: CanonicalTileID) { +function getTileCoordinates(p, canonical: CanonicalTileID): [number, number] { const x = mercatorXfromLng(p[0]); const y = mercatorYfromLat(p[1]); const tilesAtZoom = Math.pow(2, canonical.z); @@ -209,7 +206,7 @@ function getTileLines(geometry, lineBBox, polyBBox, canonical) { for (const line of geometry) { const tileLine = []; for (const point of line) { - const p = [point.x + shifts[0], point.y + shifts[1]]; + const p = [point.x + shifts[0], point.y + shifts[1]] as [number, number]; updateBBox(lineBBox, p); tileLine.push(p); } @@ -227,8 +224,8 @@ function getTileLines(geometry, lineBBox, polyBBox, canonical) { } function pointsWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons) { - const pointBBox = [Infinity, Infinity, -Infinity, -Infinity]; - const polyBBox = [Infinity, Infinity, -Infinity, -Infinity]; + const pointBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity]; + const polyBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity]; const canonical = ctx.canonicalID(); @@ -255,8 +252,8 @@ function pointsWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPo } function linesWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPolygons) { - const lineBBox = [Infinity, Infinity, -Infinity, -Infinity]; - const polyBBox = [Infinity, Infinity, -Infinity, -Infinity]; + const lineBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity]; + const polyBBox: BBox = [Infinity, Infinity, -Infinity, -Infinity]; const canonical = ctx.canonicalID(); @@ -283,20 +280,20 @@ function linesWithinPolygons(ctx: EvaluationContext, polygonGeometry: GeoJSONPol class Within implements Expression { type: Type; - geojson: GeoJSON + geojson: GeoJSON.GeoJSON; geometries: GeoJSONPolygons; - constructor(geojson: GeoJSON, geometries: GeoJSONPolygons) { + constructor(geojson: GeoJSON.GeoJSON, geometries: GeoJSONPolygons) { this.type = BooleanType; this.geojson = geojson; this.geometries = geometries; } - static parse(args: $ReadOnlyArray, context: ParsingContext) { + static parse(args: ReadonlyArray, context: ParsingContext): Expression | undefined | null { if (args.length !== 2) - return context.error(`'within' expression requires exactly one argument, but found ${args.length - 1} instead.`); + return context.error(`'within' expression requires exactly one argument, but found ${args.length - 1} instead.`) as null; if (isValue(args[1])) { - const geojson = (args[1]: Object); + const geojson = (args[1] as any); if (geojson.type === 'FeatureCollection') { for (let i = 0; i < geojson.features.length; ++i) { const type = geojson.features[i].geometry.type; @@ -313,7 +310,7 @@ class Within implements Expression { return new Within(geojson, geojson); } } - return context.error(`'within' expression requires valid geojson object that contains polygon geometry type.`); + return context.error('\'within\' expression requires valid geojson object that contains polygon geometry type.') as null; } evaluate(ctx: EvaluationContext) { @@ -333,8 +330,8 @@ class Within implements Expression { return true; } - serialize(): Array { - return ["within", this.geojson]; + serialize(): Array { + return ['within', this.geojson]; } } diff --git a/src/style-spec/expression/evaluation_context.js b/src/style-spec/expression/evaluation_context.ts similarity index 75% rename from src/style-spec/expression/evaluation_context.js rename to src/style-spec/expression/evaluation_context.ts index 1e7a6d587e..fbb90cc437 100644 --- a/src/style-spec/expression/evaluation_context.js +++ b/src/style-spec/expression/evaluation_context.ts @@ -1,5 +1,3 @@ -// @flow - import {Color} from './values'; import type {FormattedSection} from './types/formatted'; import type {GlobalProperties, Feature, FeatureState} from './index'; @@ -9,16 +7,16 @@ const geometryTypes = ['Unknown', 'Point', 'LineString', 'Polygon']; class EvaluationContext { globals: GlobalProperties; - feature: ?Feature; - featureState: ?FeatureState; - formattedSection: ?FormattedSection; - availableImages: ?Array; - canonical: ?CanonicalTileID; + feature: Feature | undefined | null; + featureState: FeatureState | undefined | null; + formattedSection: FormattedSection | undefined | null; + availableImages: Array | undefined | null; + canonical: CanonicalTileID | undefined | null; - _parseColorCache: {[_: string]: ?Color}; + _parseColorCache: {[_: string]: Color | undefined | null}; constructor() { - this.globals = (null: any); + this.globals = null; this.feature = null; this.featureState = null; this.formattedSection = null; @@ -47,10 +45,10 @@ class EvaluationContext { return this.feature && this.feature.properties || {}; } - parseColor(input: string): ?Color { + parseColor(input: string): Color | undefined | null { let cached = this._parseColorCache[input]; if (!cached) { - cached = this._parseColorCache[input] = Color.parse(input); + cached = this._parseColorCache[input] = Color.parse(input) as Color; } return cached; } diff --git a/src/style-spec/expression/expression.js b/src/style-spec/expression/expression.js deleted file mode 100644 index 3404686ede..0000000000 --- a/src/style-spec/expression/expression.js +++ /dev/null @@ -1,27 +0,0 @@ -// @flow - -import type {Type} from './types'; -import type ParsingContext from './parsing_context'; -import type EvaluationContext from './evaluation_context'; - -type SerializedExpression = Array | string | number | boolean | null; - -export interface Expression { - +type: Type; - - evaluate(ctx: EvaluationContext): any; - - eachChild(fn: Expression => void): void; - - /** - * Statically analyze the expression, attempting to enumerate possible outputs. Returns - * false if the complete set of outputs is statically undecidable, otherwise true. - */ - outputDefined(): boolean; - - serialize(): SerializedExpression; -} - -export type ExpressionParser = (args: $ReadOnlyArray, context: ParsingContext) => ?Expression; -export type ExpressionRegistration = Class & { +parse: ExpressionParser }; -export type ExpressionRegistry = {[_: string]: ExpressionRegistration}; diff --git a/src/style-spec/expression/expression.ts b/src/style-spec/expression/expression.ts new file mode 100644 index 0000000000..86c34f2302 --- /dev/null +++ b/src/style-spec/expression/expression.ts @@ -0,0 +1,25 @@ +import type {Type} from './types'; +import type ParsingContext from './parsing_context'; +import type EvaluationContext from './evaluation_context'; + +type SerializedExpression = Array | string | number | boolean | null; + +export interface Expression { + readonly type: Type; + evaluate(ctx: EvaluationContext): any; + eachChild(fn: (a: Expression) => void): void; + /** + * Statically analyze the expression, attempting to enumerate possible outputs. Returns + * false if the complete set of outputs is statically undecidable, otherwise true. + */ + outputDefined(): boolean; + serialize(): SerializedExpression; +} + +export type ExpressionParser = (args: ReadonlyArray, context: ParsingContext) => Expression | undefined | null; +export type ExpressionRegistration = { + new (...args: any): Expression; +} & { + readonly parse: ExpressionParser; +}; +export type ExpressionRegistry = {[_: string]: ExpressionRegistration}; diff --git a/src/style-spec/expression/index.js b/src/style-spec/expression/index.ts similarity index 68% rename from src/style-spec/expression/index.js rename to src/style-spec/expression/index.ts index 736ad8fdc2..96a376fce4 100644 --- a/src/style-spec/expression/index.js +++ b/src/style-spec/expression/index.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import extend from '../util/extend'; @@ -25,25 +23,31 @@ import type {Result} from '../util/result'; import type {InterpolationType} from './definitions/interpolate'; import type {PropertyValueSpecification} from '../types'; import type {FormattedSection} from './types/formatted'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {CanonicalTileID} from '../../source/tile_id'; export type Feature = { - +type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon', - +id?: any, - +properties: {[_: string]: any}, - +patterns?: {[_: string]: {"min": string, "mid": string, "max": string}}, - +geometry?: Array> + readonly type: 1 | 2 | 3 | 'Unknown' | 'Point' | 'MultiPoint' | 'LineString' | 'MultiLineString' | 'Polygon' | 'MultiPolygon'; + readonly id?: any; + readonly properties: {[_: string]: any}; + readonly patterns?: { + [_: string]: { + 'min': string; + 'mid': string; + 'max': string; + }; + }; + readonly geometry?: Array>; }; export type FeatureState = {[_: string]: any}; -export type GlobalProperties = $ReadOnly<{ - zoom: number, - heatmapDensity?: number, - lineProgress?: number, - isSupportedScript?: (_: string) => boolean, - accumulated?: Value +export type GlobalProperties = Readonly<{ + zoom: number; + heatmapDensity?: number; + lineProgress?: number; + isSupportedScript?: (_: string) => boolean; + accumulated?: Value; }>; export class StyleExpression { @@ -52,9 +56,9 @@ export class StyleExpression { _evaluator: EvaluationContext; _defaultValue: Value; _warningHistory: {[key: string]: boolean}; - _enumValues: ?{[_: string]: any}; + _enumValues: {[_: string]: any} | undefined | null; - constructor(expression: Expression, propertySpec: ?StylePropertySpecification) { + constructor(expression: Expression, propertySpec?: StylePropertySpecification | null) { this.expression = expression; this._warningHistory = {}; this._evaluator = new EvaluationContext(); @@ -62,7 +66,14 @@ export class StyleExpression { this._enumValues = propertySpec && propertySpec.type === 'enum' ? propertySpec.values : null; } - evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluateWithoutErrorHandling( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { this._evaluator.globals = globals; this._evaluator.feature = feature; this._evaluator.featureState = featureState; @@ -73,7 +84,14 @@ export class StyleExpression { return this.expression.evaluate(this._evaluator); } - evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluate( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { this._evaluator.globals = globals; this._evaluator.feature = feature || null; this._evaluator.featureState = featureState || null; @@ -103,7 +121,7 @@ export class StyleExpression { } } -export function isExpression(expression: mixed) { +export function isExpression(expression: unknown) { return Array.isArray(expression) && expression.length > 0 && typeof expression[0] === 'string' && expression[0] in definitions; } @@ -117,7 +135,7 @@ export function isExpression(expression: mixed) { * * @private */ -export function createExpression(expression: mixed, propertySpec: ?StylePropertySpecification): Result> { +export function createExpression(expression: unknown, propertySpec?: StylePropertySpecification | null): Result> { const parser = new ParsingContext(definitions, [], propertySpec ? getExpectedType(propertySpec) : undefined); // For string-valued properties, coerce to string at the top level rather than asserting. @@ -132,7 +150,7 @@ export function createExpression(expression: mixed, propertySpec: ?StyleProperty return success(new StyleExpression(parsed, propertySpec)); } -export class ZoomConstantExpression { +export class ZoomConstantExpression { kind: Kind; isStateDependent: boolean; _styleExpression: StyleExpression; @@ -140,39 +158,67 @@ export class ZoomConstantExpression { constructor(kind: Kind, expression: StyleExpression) { this.kind = kind; this._styleExpression = expression; - this.isStateDependent = kind !== ('constant': EvaluationKind) && !isConstant.isStateConstant(expression.expression); + this.isStateDependent = kind !== ('constant' as EvaluationKind) && !isConstant.isStateConstant(expression.expression); } - evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluateWithoutErrorHandling( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection); } - evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluate( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection); } } -export class ZoomDependentExpression { +export class ZoomDependentExpression { kind: Kind; zoomStops: Array; isStateDependent: boolean; _styleExpression: StyleExpression; - interpolationType: ?InterpolationType; + interpolationType: InterpolationType | undefined | null; constructor(kind: Kind, expression: StyleExpression, zoomStops: Array, interpolationType?: InterpolationType) { this.kind = kind; this.zoomStops = zoomStops; this._styleExpression = expression; - this.isStateDependent = kind !== ('camera': EvaluationKind) && !isConstant.isStateConstant(expression.expression); + this.isStateDependent = kind !== ('camera' as EvaluationKind) && !isConstant.isStateConstant(expression.expression); this.interpolationType = interpolationType; } - evaluateWithoutErrorHandling(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluateWithoutErrorHandling( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { return this._styleExpression.evaluateWithoutErrorHandling(globals, feature, featureState, canonical, availableImages, formattedSection); } - evaluate(globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection): any { + evaluate( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ): any { return this._styleExpression.evaluate(globals, feature, featureState, canonical, availableImages, formattedSection); } @@ -186,41 +232,63 @@ export class ZoomDependentExpression { } export type ConstantExpression = { - kind: 'constant', - +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array) => any, -} + kind: 'constant'; + readonly evaluate: ( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array + ) => any; +}; export type SourceExpression = { - kind: 'source', - isStateDependent: boolean, - +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection) => any, + kind: 'source'; + isStateDependent: boolean; + readonly evaluate: ( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ) => any; }; export type CameraExpression = { - kind: 'camera', - +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array) => any, - +interpolationFactor: (input: number, lower: number, upper: number) => number, - zoomStops: Array, - interpolationType: ?InterpolationType + kind: 'camera'; + readonly evaluate: ( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array + ) => any; + readonly interpolationFactor: (input: number, lower: number, upper: number) => number; + zoomStops: Array; + interpolationType: InterpolationType | undefined | null; }; export type CompositeExpression = { - kind: 'composite', - isStateDependent: boolean, - +evaluate: (globals: GlobalProperties, feature?: Feature, featureState?: FeatureState, canonical?: CanonicalTileID, availableImages?: Array, formattedSection?: FormattedSection) => any, - +interpolationFactor: (input: number, lower: number, upper: number) => number, - zoomStops: Array, - interpolationType: ?InterpolationType + kind: 'composite'; + isStateDependent: boolean; + readonly evaluate: ( + globals: GlobalProperties, + feature?: Feature, + featureState?: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array, + formattedSection?: FormattedSection + ) => any; + readonly interpolationFactor: (input: number, lower: number, upper: number) => number; + zoomStops: Array; + interpolationType: InterpolationType | undefined | null; }; -export type StylePropertyExpression = - | ConstantExpression - | SourceExpression - | CameraExpression - | CompositeExpression; +export type StylePropertyExpression = ConstantExpression | SourceExpression | CameraExpression | CompositeExpression; -export function createPropertyExpression(expression: mixed, propertySpec: StylePropertySpecification): Result> { - expression = createExpression(expression, propertySpec); +export function createPropertyExpression(expressionInput: unknown, propertySpec: StylePropertySpecification): Result> { + const expression = createExpression(expressionInput, propertySpec); if (expression.result === 'error') { return expression; } @@ -248,15 +316,15 @@ export function createPropertyExpression(expression: mixed, propertySpec: StyleP if (!zoomCurve) { return success(isFeatureConstant ? - (new ZoomConstantExpression('constant', expression.value): ConstantExpression) : - (new ZoomConstantExpression('source', expression.value): SourceExpression)); + (new ZoomConstantExpression('constant', expression.value) as ConstantExpression) : + (new ZoomConstantExpression('source', expression.value) as SourceExpression)); } const interpolationType = zoomCurve instanceof Interpolate ? zoomCurve.interpolation : undefined; return success(isFeatureConstant ? - (new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType): CameraExpression) : - (new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType): CompositeExpression)); + (new ZoomDependentExpression('camera', expression.value, zoomCurve.labels, interpolationType) as CameraExpression) : + (new ZoomDependentExpression('composite', expression.value, zoomCurve.labels, interpolationType) as CompositeExpression)); } import {isFunction, createFunction} from '../function'; @@ -270,8 +338,8 @@ export class StylePropertyFunction { kind: EvaluationKind; evaluate: (globals: GlobalProperties, feature?: Feature) => any; - interpolationFactor: ?(input: number, lower: number, upper: number) => number; - zoomStops: ?Array; + interpolationFactor: ((input: number, lower: number, upper: number) => number) | undefined | null; + zoomStops: Array | undefined | null; constructor(parameters: PropertyValueSpecification, specification: StylePropertySpecification) { this._parameters = parameters; @@ -279,11 +347,14 @@ export class StylePropertyFunction { extend(this, createFunction(this._parameters, this._specification)); } - static deserialize(serialized: {_parameters: PropertyValueSpecification, _specification: StylePropertySpecification}) { - return ((new StylePropertyFunction(serialized._parameters, serialized._specification)): StylePropertyFunction); + static deserialize(serialized: { + _parameters: PropertyValueSpecification; + _specification: StylePropertySpecification; + }) { + return new StylePropertyFunction(serialized._parameters, serialized._specification) as StylePropertyFunction; } - static serialize(input: StylePropertyFunction) { + static serialize(input: StylePropertyFunction) { return { _parameters: input._parameters, _specification: input._specification @@ -291,9 +362,12 @@ export class StylePropertyFunction { } } -export function normalizePropertyExpression(value: PropertyValueSpecification, specification: StylePropertySpecification): StylePropertyExpression { +export function normalizePropertyExpression( + value: PropertyValueSpecification, + specification: StylePropertySpecification +): StylePropertyExpression { if (isFunction(value)) { - return (new StylePropertyFunction(value, specification): any); + return new StylePropertyFunction(value, specification) as any; } else if (isExpression(value)) { const expression = createPropertyExpression(value, specification); diff --git a/src/style-spec/expression/is_constant.js b/src/style-spec/expression/is_constant.ts similarity index 96% rename from src/style-spec/expression/is_constant.js rename to src/style-spec/expression/is_constant.ts index bb997e899a..46608c49e1 100644 --- a/src/style-spec/expression/is_constant.js +++ b/src/style-spec/expression/is_constant.ts @@ -1,8 +1,6 @@ -// @flow - import CompoundExpression from './compound_expression'; import Within from './definitions/within'; -import type {Expression} from './expression.js'; +import type {Expression} from './expression'; function isFeatureConstant(e: Expression) { if (e instanceof CompoundExpression) { diff --git a/src/style-spec/expression/parsing_context.js b/src/style-spec/expression/parsing_context.ts similarity index 89% rename from src/style-spec/expression/parsing_context.js rename to src/style-spec/expression/parsing_context.ts index 7cf8ce94e8..a3f5d2bae4 100644 --- a/src/style-spec/expression/parsing_context.js +++ b/src/style-spec/expression/parsing_context.ts @@ -1,5 +1,3 @@ -// @flow - import Scope from './scope'; import {checkSubtype} from './types'; import ParsingError from './parsing_error'; @@ -31,12 +29,12 @@ class ParsingContext { // implementations to infer argument types: Expression#parse() need not // check that the output type of the parsed expression matches // `expectedType`. - expectedType: ?Type; + expectedType: Type | undefined | null; constructor( registry: ExpressionRegistry, path: Array = [], - expectedType: ?Type, + expectedType?: Type | null, scope: Scope = new Scope(), errors: Array = [] ) { @@ -56,19 +54,26 @@ class ParsingContext { * @private */ parse( - expr: mixed, - index?: number, - expectedType?: ?Type, - bindings?: Array<[string, Expression]>, - options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'} = {} - ): ?Expression { + expr: unknown, + index?: number, + expectedType?: Type | null, + bindings?: Array<[string, Expression]>, + options: { + typeAnnotation?: 'assert' | 'coerce' | 'omit'; + } = {} + ): Expression | undefined | null { if (index) { return this.concat(index, expectedType, bindings)._parse(expr, options); } return this._parse(expr, options); } - _parse(expr: mixed, options: {typeAnnotation?: 'assert' | 'coerce' | 'omit'}): ?Expression { + _parse( + expr: unknown, + options: { + typeAnnotation?: 'assert' | 'coerce' | 'omit'; + } + ): Expression | undefined | null { if (expr === null || typeof expr === 'string' || typeof expr === 'boolean' || typeof expr === 'number') { expr = ['literal', expr]; } @@ -85,7 +90,7 @@ class ParsingContext { if (Array.isArray(expr)) { if (expr.length === 0) { - return this.error(`Expected an array with at least one element. If you wanted a literal array, use ["literal", []].`); + return this.error('Expected an array with at least one element. If you wanted a literal array, use ["literal", []].') as null; } const op = expr[0]; @@ -137,13 +142,13 @@ class ParsingContext { return parsed; } - return this.error(`Unknown expression "${op}". If you wanted a literal array, use ["literal", [...]].`, 0); + return this.error(`Unknown expression "${op}". If you wanted a literal array, use ["literal", [...]].`, 0) as null; } else if (typeof expr === 'undefined') { - return this.error(`'undefined' value invalid. Use null instead.`); + return this.error('\'undefined\' value invalid. Use null instead.') as null; } else if (typeof expr === 'object') { - return this.error(`Bare objects invalid. Use ["literal", {...}] instead.`); + return this.error('Bare objects invalid. Use ["literal", {...}] instead.') as null; } else { - return this.error(`Expected an array, but found ${typeof expr} instead.`); + return this.error(`Expected an array, but found ${typeof expr} instead.`) as null; } } @@ -155,7 +160,7 @@ class ParsingContext { * parsing, is copied by reference rather than cloned. * @private */ - concat(index: number, expectedType?: ?Type, bindings?: Array<[string, Expression]>) { + concat(index: number, expectedType?: Type | null, bindings?: Array<[string, Expression]>) { const path = typeof index === 'number' ? this.path.concat(index) : this.path; const scope = bindings ? this.scope.concat(bindings) : this.scope; return new ParsingContext( @@ -183,7 +188,7 @@ class ParsingContext { * Returns null if `t` is a subtype of `expected`; otherwise returns an * error message and also pushes it to `this.errors`. */ - checkSubtype(expected: Type, t: Type): ?string { + checkSubtype(expected: Type, t: Type): string | undefined | null { const error = checkSubtype(expected, t); if (error) this.error(error); return error; diff --git a/src/style-spec/expression/parsing_error.js b/src/style-spec/expression/parsing_error.ts similarity index 95% rename from src/style-spec/expression/parsing_error.js rename to src/style-spec/expression/parsing_error.ts index 8f676e8131..b381fe4bc9 100644 --- a/src/style-spec/expression/parsing_error.js +++ b/src/style-spec/expression/parsing_error.ts @@ -1,5 +1,3 @@ -// @flow - class ParsingError extends Error { key: string; message: string; diff --git a/src/style-spec/expression/runtime_error.js b/src/style-spec/expression/runtime_error.ts similarity index 96% rename from src/style-spec/expression/runtime_error.js rename to src/style-spec/expression/runtime_error.ts index 6c7c114485..5dd9064449 100644 --- a/src/style-spec/expression/runtime_error.js +++ b/src/style-spec/expression/runtime_error.ts @@ -1,5 +1,3 @@ -// @flow - class RuntimeError { name: string; message: string; diff --git a/src/style-spec/expression/scope.js b/src/style-spec/expression/scope.ts similarity index 96% rename from src/style-spec/expression/scope.js rename to src/style-spec/expression/scope.ts index b47e7cda5b..8228c4efe8 100644 --- a/src/style-spec/expression/scope.js +++ b/src/style-spec/expression/scope.ts @@ -1,5 +1,3 @@ -// @flow - import type {Expression} from './expression'; /** @@ -7,7 +5,7 @@ import type {Expression} from './expression'; * @private */ class Scope { - parent: ?Scope; + parent: Scope | undefined | null; bindings: {[_: string]: Expression}; constructor(parent?: Scope, bindings: Array<[string, Expression]> = []) { this.parent = parent; diff --git a/src/style-spec/expression/stops.js b/src/style-spec/expression/stops.ts similarity index 99% rename from src/style-spec/expression/stops.js rename to src/style-spec/expression/stops.ts index 770ab4acfb..b9f00f0ffc 100644 --- a/src/style-spec/expression/stops.js +++ b/src/style-spec/expression/stops.ts @@ -1,5 +1,3 @@ -// @flow - import RuntimeError from './runtime_error'; import type {Expression} from './expression'; diff --git a/src/style-spec/expression/types.js b/src/style-spec/expression/types.ts similarity index 56% rename from src/style-spec/expression/types.js rename to src/style-spec/expression/types.ts index 320c713de9..6964b62736 100644 --- a/src/style-spec/expression/types.js +++ b/src/style-spec/expression/types.ts @@ -1,54 +1,63 @@ -// @flow - -export type NullTypeT = { kind: 'null' }; -export type NumberTypeT = { kind: 'number' }; -export type StringTypeT = { kind: 'string' }; -export type BooleanTypeT = { kind: 'boolean' }; -export type ColorTypeT = { kind: 'color' }; -export type ObjectTypeT = { kind: 'object' }; -export type ValueTypeT = { kind: 'value' }; -export type ErrorTypeT = { kind: 'error' }; -export type CollatorTypeT = { kind: 'collator' }; -export type FormattedTypeT = { kind: 'formatted' }; -export type ResolvedImageTypeT = { kind: 'resolvedImage' }; +export type NullTypeT = { + kind: 'null'; +}; +export type NumberTypeT = { + kind: 'number'; +}; +export type StringTypeT = { + kind: 'string'; +}; +export type BooleanTypeT = { + kind: 'boolean'; +}; +export type ColorTypeT = { + kind: 'color'; +}; +export type ObjectTypeT = { + kind: 'object'; +}; +export type ValueTypeT = { + kind: 'value'; +}; +export type ErrorTypeT = { + kind: 'error'; +}; +export type CollatorTypeT = { + kind: 'collator'; +}; +export type FormattedTypeT = { + kind: 'formatted'; +}; +export type ResolvedImageTypeT = { + kind: 'resolvedImage'; +}; export type EvaluationKind = 'constant' | 'source' | 'camera' | 'composite'; -export type Type = - NullTypeT | - NumberTypeT | - StringTypeT | - BooleanTypeT | - ColorTypeT | - ObjectTypeT | - ValueTypeT | - ArrayType | // eslint-disable-line no-use-before-define - ErrorTypeT | - CollatorTypeT | - FormattedTypeT | - ResolvedImageTypeT +export type Type = NullTypeT | NumberTypeT | StringTypeT | BooleanTypeT | ColorTypeT | ObjectTypeT | ValueTypeT | // eslint-disable-line no-use-before-define +ArrayType | ErrorTypeT | CollatorTypeT | FormattedTypeT | ResolvedImageTypeT; export type ArrayType = { - kind: 'array', - itemType: Type, - N: ?number -} + kind: 'array'; + itemType: Type; + N: number | undefined | null; +}; -export type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object' +export type NativeType = 'number' | 'string' | 'boolean' | 'null' | 'array' | 'object'; -export const NullType = {kind: 'null'}; -export const NumberType = {kind: 'number'}; -export const StringType = {kind: 'string'}; -export const BooleanType = {kind: 'boolean'}; -export const ColorType = {kind: 'color'}; -export const ObjectType = {kind: 'object'}; -export const ValueType = {kind: 'value'}; -export const ErrorType = {kind: 'error'}; -export const CollatorType = {kind: 'collator'}; -export const FormattedType = {kind: 'formatted'}; -export const ResolvedImageType = {kind: 'resolvedImage'}; +export const NullType = {kind: 'null'} as NullTypeT; +export const NumberType = {kind: 'number'} as NumberTypeT; +export const StringType = {kind: 'string'} as StringTypeT; +export const BooleanType = {kind: 'boolean'} as BooleanTypeT; +export const ColorType = {kind: 'color'} as ColorTypeT; +export const ObjectType = {kind: 'object'} as ObjectTypeT; +export const ValueType = {kind: 'value'} as ValueTypeT; +export const ErrorType = {kind: 'error'} as ErrorTypeT; +export const CollatorType = {kind: 'collator'} as CollatorTypeT; +export const FormattedType = {kind: 'formatted'} as FormattedTypeT; +export const ResolvedImageType = {kind: 'resolvedImage'} as ResolvedImageTypeT; -export function array(itemType: Type, N: ?number): ArrayType { +export function array(itemType: Type, N?: number | null): ArrayType { return { kind: 'array', itemType, @@ -84,7 +93,7 @@ const valueMemberTypes = [ * error message. * @private */ -export function checkSubtype(expected: Type, t: Type): ?string { +export function checkSubtype(expected: Type, t: Type): string | undefined | null { if (t.kind === 'error') { // Error is a subtype of every type return null; diff --git a/src/style-spec/expression/types/collator.js b/src/style-spec/expression/types/collator.ts similarity index 67% rename from src/style-spec/expression/types/collator.js rename to src/style-spec/expression/types/collator.ts index c9bcd61589..12f46b53e3 100644 --- a/src/style-spec/expression/types/collator.js +++ b/src/style-spec/expression/types/collator.ts @@ -1,36 +1,26 @@ -// @flow - // Flow type declarations for Intl cribbed from // https://github.com/facebook/flow/issues/1270 -declare var Intl: { - Collator: Class +declare let Intl: { + Collator: { + new (...args: any): Intl$Collator; + }; }; declare class Intl$Collator { - constructor ( - locales?: string | string[], - options?: CollatorOptions - ): Intl$Collator; - - static ( - locales?: string | string[], - options?: CollatorOptions - ): Intl$Collator; - - compare (a: string, b: string): number; - + constructor(locales?: string | string[], options?: CollatorOptions); + compare(a: string, b: string): number; resolvedOptions(): any; } type CollatorOptions = { - localeMatcher?: 'lookup' | 'best fit', - usage?: 'sort' | 'search', - sensitivity?: 'base' | 'accent' | 'case' | 'variant', - ignorePunctuation?: boolean, - numeric?: boolean, - caseFirst?: 'upper' | 'lower' | 'false' -} + localeMatcher?: 'lookup' | 'best fit'; + usage?: 'sort' | 'search'; + sensitivity?: 'base' | 'accent' | 'case' | 'variant'; + ignorePunctuation?: boolean; + numeric?: boolean; + caseFirst?: 'upper' | 'lower' | 'false'; +}; export default class Collator { locale: string | null; diff --git a/src/style-spec/expression/types/formatted.js b/src/style-spec/expression/types/formatted.ts similarity index 81% rename from src/style-spec/expression/types/formatted.js rename to src/style-spec/expression/types/formatted.ts index 378a0a2bd5..13f64077cc 100644 --- a/src/style-spec/expression/types/formatted.js +++ b/src/style-spec/expression/types/formatted.ts @@ -1,4 +1,3 @@ -// @flow import type Color from '../../util/color'; import type ResolvedImage from '../types/resolved_image'; @@ -48,23 +47,23 @@ export default class Formatted { return this.sections.map(section => section.text).join(''); } - serialize(): Array { - const serialized: Array = ["format"]; + serialize(): Array { + const serialized: Array = ['format']; for (const section of this.sections) { if (section.image) { - serialized.push(["image", section.image.name]); + serialized.push(['image', section.image.name]); continue; } serialized.push(section.text); - const options: { [key: string]: mixed } = {}; + const options: {[key: string]: unknown} = {}; if (section.fontStack) { - options["text-font"] = ["literal", section.fontStack.split(',')]; + options['text-font'] = ['literal', section.fontStack.split(',')]; } if (section.scale) { - options["font-scale"] = section.scale; + options['font-scale'] = section.scale; } if (section.textColor) { - options["text-color"] = (["rgba"]: Array).concat(section.textColor.toArray()); + options['text-color'] = (['rgba'] as Array).concat(section.textColor.toArray()); } serialized.push(options); } diff --git a/src/style-spec/expression/types/resolved_image.js b/src/style-spec/expression/types/resolved_image.ts similarity index 86% rename from src/style-spec/expression/types/resolved_image.js rename to src/style-spec/expression/types/resolved_image.ts index a9e92f8fed..491d886435 100644 --- a/src/style-spec/expression/types/resolved_image.js +++ b/src/style-spec/expression/types/resolved_image.ts @@ -1,8 +1,6 @@ -// @flow - export type ResolvedImageOptions = { - name: string, - available: boolean + name: string; + available: boolean; }; export default class ResolvedImage { @@ -24,6 +22,6 @@ export default class ResolvedImage { } serialize(): Array { - return ["image", this.name]; + return ['image', this.name]; } } diff --git a/src/style-spec/expression/values.js b/src/style-spec/expression/values.ts similarity index 93% rename from src/style-spec/expression/values.js rename to src/style-spec/expression/values.ts index 6c5e5407dc..c0d319bf6b 100644 --- a/src/style-spec/expression/values.js +++ b/src/style-spec/expression/values.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import Color from '../util/color'; @@ -10,7 +8,7 @@ import {NullType, NumberType, StringType, BooleanType, ColorType, ObjectType, Va import type {Type} from './types'; -export function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): string | null { +export function validateRGBA(r: unknown, g: unknown, b: unknown, a?: unknown): string | null { if (!( typeof r === 'number' && r >= 0 && r <= 255 && typeof g === 'number' && g >= 0 && g <= 255 && @@ -29,9 +27,11 @@ export function validateRGBA(r: mixed, g: mixed, b: mixed, a?: mixed): string | return null; } -export type Value = null | string | boolean | number | Color | Collator | Formatted | ResolvedImage | $ReadOnlyArray | { +[string]: Value } +export type Value = null | string | boolean | number | Color | Collator | Formatted | ResolvedImage | ReadonlyArray | { + readonly [x: string]: Value; +}; -export function isValue(mixed: mixed): boolean { +export function isValue(mixed: unknown): boolean { if (mixed === null) { return true; } else if (typeof mixed === 'string') { diff --git a/src/style-spec/feature_filter/convert.js b/src/style-spec/feature_filter/convert.ts similarity index 91% rename from src/style-spec/feature_filter/convert.js rename to src/style-spec/feature_filter/convert.ts index d7d473c2c4..8592765756 100644 --- a/src/style-spec/feature_filter/convert.js +++ b/src/style-spec/feature_filter/convert.ts @@ -1,5 +1,3 @@ -// @flow - import {isExpressionFilter} from './index'; import type {FilterSpecification} from '../types'; @@ -11,7 +9,7 @@ type ExpectedTypes = {[_: string]: 'string' | 'number' | 'boolean'}; * equivalent expression * @private */ -export default function convertFilter(filter: FilterSpecification): mixed { +export default function convertFilter(filter: FilterSpecification): unknown { return _convertFilter(filter, {}); } @@ -63,7 +61,7 @@ export default function convertFilter(filter: FilterSpecification): mixed { * false (legacy filter semantics) are equivalent: they cause the filter to * produce a `false` result. */ -function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): mixed { +function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedTypes): unknown { if (isExpressionFilter(filter)) { return filter; } if (!filter) return true; @@ -80,10 +78,10 @@ function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedType op === '<=' || op === '>=' ) { - const [, property, value] = (filter: any); + const [, property, value] = (filter as any); converted = convertComparisonOp(property, value, op, expectedTypes); } else if (op === 'any') { - const children = (filter: any).slice(1).map(f => { + const children = (filter as any).slice(1).map(f => { const types = {}; const child = _convertFilter(f, types); const typechecks = runtimeTypeChecks(types); @@ -91,18 +89,18 @@ function _convertFilter(filter: FilterSpecification, expectedTypes: ExpectedType }); return ['any'].concat(children); } else if (op === 'all') { - const children = (filter: any).slice(1).map(f => _convertFilter(f, expectedTypes)); + const children = (filter as any).slice(1).map(f => _convertFilter(f, expectedTypes)); return children.length > 1 ? ['all'].concat(children) : [].concat(...children); } else if (op === 'none') { - return ['!', _convertFilter(['any'].concat(filter.slice(1)), {})]; + return ['!', _convertFilter(['any'].concat(filter.slice(1) as any), {})]; } else if (op === 'in') { - converted = convertInOp((filter[1]: any), filter.slice(2)); + converted = convertInOp(filter[1] as any, filter.slice(2)); } else if (op === '!in') { - converted = convertInOp((filter[1]: any), filter.slice(2), true); + converted = convertInOp(filter[1] as any, filter.slice(2), true); } else if (op === 'has') { - converted = convertHasOp((filter[1]: any)); + converted = convertHasOp(filter[1] as any); } else if (op === '!has') { - converted = ['!', convertHasOp((filter[1]: any))]; + converted = ['!', convertHasOp(filter[1] as any)]; } else { converted = true; } @@ -129,7 +127,7 @@ function runtimeTypeChecks(expectedTypes: ExpectedTypes) { return ['all'].concat(conditions); } -function convertComparisonOp(property: string, value: any, op: string, expectedTypes: ?ExpectedTypes) { +function convertComparisonOp(property: string, value: any, op: string, expectedTypes?: ExpectedTypes | null) { let get; if (property === '$type') { return [op, ['geometry-type'], value]; @@ -140,7 +138,7 @@ function convertComparisonOp(property: string, value: any, op: string, expectedT } if (expectedTypes && value !== null) { - const type = ((typeof value): any); + const type = (typeof value as any); expectedTypes[property] = type; } @@ -192,7 +190,7 @@ function convertInOp(property: string, values: Array, negate = false) { return ['match', get, uniqueValues, !negate, negate]; } - return [ negate ? 'all' : 'any' ].concat( + return [ negate ? 'all' : 'any' as any].concat( values.map(v => [negate ? '!=' : '==', get, v]) ); } diff --git a/src/style-spec/feature_filter/index.js b/src/style-spec/feature_filter/index.ts similarity index 83% rename from src/style-spec/feature_filter/index.js rename to src/style-spec/feature_filter/index.ts index c95904bd92..935141a4f5 100644 --- a/src/style-spec/feature_filter/index.js +++ b/src/style-spec/feature_filter/index.ts @@ -1,11 +1,18 @@ -// @flow - import {createExpression} from '../expression'; import type {GlobalProperties, Feature} from '../expression'; import type {CanonicalTileID} from '../../source/tile_id'; +import {StylePropertySpecification} from '../style-spec'; + +type FilterExpression = ( + globalProperties: GlobalProperties, + feature: Feature, + canonical?: CanonicalTileID +) => boolean; -type FilterExpression = (globalProperties: GlobalProperties, feature: Feature, canonical?: CanonicalTileID) => boolean; -export type FeatureFilter ={filter: FilterExpression, needGeometry: boolean}; +export type FeatureFilter = { + filter: FilterExpression; + needGeometry: boolean; +}; export default createFilter; export {isExpressionFilter}; @@ -81,7 +88,7 @@ function createFilter(filter: any): FeatureFilter { filter = convertFilter(filter); } - const compiled = createExpression(filter, filterSpec); + const compiled = createExpression(filter, filterSpec as StylePropertySpecification); if (compiled.result === 'error') { throw new Error(compiled.value.map(err => `${err.key}: ${err.message}`).join(', ')); } else { @@ -105,7 +112,7 @@ function geometryNeeded(filter) { return false; } -function convertFilter(filter: ?Array): mixed { +function convertFilter(filter?: Array | null): unknown { if (!filter) return true; const op = filter[0]; if (filter.length <= 1) return (op !== 'any'); @@ -117,8 +124,8 @@ function convertFilter(filter: ?Array): mixed { op === '<=' || op === '>=' ? convertComparisonOp(filter[1], filter[2], op) : op === 'any' ? convertDisjunctionOp(filter.slice(1)) : - op === 'all' ? ['all'].concat(filter.slice(1).map(convertFilter)) : - op === 'none' ? ['all'].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : + op === 'all' ? ['all' as unknown].concat(filter.slice(1).map(convertFilter)) : + op === 'none' ? ['all' as unknown].concat(filter.slice(1).map(convertFilter).map(convertNegation)) : op === 'in' ? convertInOp(filter[1], filter.slice(2)) : op === '!in' ? convertNegation(convertInOp(filter[1], filter.slice(2))) : op === 'has' ? convertHasOp(filter[1]) : @@ -140,16 +147,16 @@ function convertComparisonOp(property: string, value: any, op: string) { } function convertDisjunctionOp(filters: Array>) { - return ['any'].concat(filters.map(convertFilter)); + return ['any' as unknown].concat(filters.map(convertFilter)); } function convertInOp(property: string, values: Array) { if (values.length === 0) { return false; } switch (property) { case '$type': - return [`filter-type-in`, ['literal', values]]; + return ['filter-type-in', ['literal', values]]; case '$id': - return [`filter-id-in`, ['literal', values]]; + return ['filter-id-in', ['literal', values]]; default: if (values.length > 200 && !values.some(v => typeof v !== typeof values[0])) { return ['filter-in-large', property, ['literal', values.sort(compare)]]; @@ -164,12 +171,12 @@ function convertHasOp(property: string) { case '$type': return true; case '$id': - return [`filter-has-id`]; + return ['filter-has-id']; default: - return [`filter-has`, property]; + return ['filter-has', property]; } } -function convertNegation(filter: mixed) { +function convertNegation(filter: unknown) { return ['!', filter]; } diff --git a/src/style-spec/format.js b/src/style-spec/format.ts similarity index 96% rename from src/style-spec/format.js rename to src/style-spec/format.ts index 8212194af9..8ef3b43d31 100644 --- a/src/style-spec/format.js +++ b/src/style-spec/format.ts @@ -1,5 +1,5 @@ -import reference from './reference/latest.js'; +import reference from './reference/latest'; import stringifyPretty from 'json-stringify-pretty-compact'; function sortKeysBy(obj, reference) { diff --git a/src/style-spec/function/convert.js b/src/style-spec/function/convert.ts similarity index 95% rename from src/style-spec/function/convert.js rename to src/style-spec/function/convert.ts index 34624f4238..a281ce0fe0 100644 --- a/src/style-spec/function/convert.js +++ b/src/style-spec/function/convert.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import type {StylePropertySpecification} from '../style-spec'; @@ -21,7 +19,7 @@ function convertFunction(parameters: any, propertySpec: StylePropertySpecificati const zoomDependent = zoomAndFeatureDependent || !featureDependent; stops = stops.map((stop) => { - if (!featureDependent && propertySpec.tokens && typeof stop[1] === 'string') { + if (!featureDependent && (propertySpec as any).tokens && typeof stop[1] === 'string') { return [stop[0], convertTokenString(stop[1])]; } return [stop[0], convertLiteral(stop[1])]; @@ -36,7 +34,7 @@ function convertFunction(parameters: any, propertySpec: StylePropertySpecificati } } -function convertIdentityFunction(parameters, propertySpec): Array { +function convertIdentityFunction(parameters, propertySpec): Array { const get = ['get', parameters.property]; if (parameters.default === undefined) { @@ -141,7 +139,7 @@ function convertPropertyFunction(parameters, propertySpec, stops) { const get = ['get', parameters.property]; if (type === 'categorical' && typeof stops[0][0] === 'boolean') { assert(parameters.stops.length > 0 && parameters.stops.length <= 2); - const expression = ['case']; + const expression: any = ['case']; for (const stop of stops) { expression.push(['==', get, stop[0]], stop[1]); } @@ -171,8 +169,8 @@ function convertPropertyFunction(parameters, propertySpec, stops) { const base = parameters.base !== undefined ? parameters.base : 1; const expression = [ getInterpolateOperator(parameters), - base === 1 ? ["linear"] : ["exponential", base], - ["number", get] + base === 1 ? ['linear'] : ['exponential', base], + ['number', get] ]; for (const stop of stops) { @@ -198,7 +196,7 @@ function convertZoomFunction(parameters, propertySpec, stops, input = ['zoom']) isStep = true; } else if (type === 'exponential') { const base = parameters.base !== undefined ? parameters.base : 1; - expression = [getInterpolateOperator(parameters), base === 1 ? ["linear"] : ["exponential", base], input]; + expression = [getInterpolateOperator(parameters), base === 1 ? ['linear'] : ['exponential', base], input]; } else { throw new Error(`Unknown zoom function type "${type}"`); @@ -239,13 +237,13 @@ function getFunctionType(parameters, propertySpec) { return parameters.type; } else { assert(propertySpec.expression); - return (propertySpec.expression: any).interpolated ? 'exponential' : 'interval'; + return (propertySpec.expression as any).interpolated ? 'exponential' : 'interval'; } } // "String with {name} token" => ["concat", "String with ", ["get", "name"], " token"] export function convertTokenString(s: string) { - const result = ['concat']; + const result: any = ['concat']; const re = /{([^{}]+)}/g; let pos = 0; for (let match = re.exec(s); match !== null; match = re.exec(s)) { diff --git a/src/style-spec/function/index.js b/src/style-spec/function/index.ts similarity index 99% rename from src/style-spec/function/index.js rename to src/style-spec/function/index.ts index a78b575f73..0ca69ca143 100644 --- a/src/style-spec/function/index.js +++ b/src/style-spec/function/index.ts @@ -131,7 +131,7 @@ export function createFunction(parameters, propertySpec) { } } -function coalesce(a, b, c) { +function coalesce(a, b, c?) { if (a !== undefined) return a; if (b !== undefined) return b; if (c !== undefined) return c; diff --git a/src/style-spec/group_by_layout.js b/src/style-spec/group_by_layout.ts similarity index 100% rename from src/style-spec/group_by_layout.js rename to src/style-spec/group_by_layout.ts diff --git a/src/style-spec/migrate.js b/src/style-spec/migrate.ts similarity index 86% rename from src/style-spec/migrate.js rename to src/style-spec/migrate.ts index 883cc677a0..5c7f452967 100644 --- a/src/style-spec/migrate.js +++ b/src/style-spec/migrate.ts @@ -24,12 +24,12 @@ export default function(style) { } if (style.version === 8) { - migrated = migrateToExpressions(style); + migrated = !!migrateToExpressions(style); migrated = true; } if (!migrated) { - throw new Error('cannot migrate from', style.version); + throw new Error(`Cannot migrate from ${style.version}`); } return style; diff --git a/src/style-spec/migrate/expressions.js b/src/style-spec/migrate/expressions.ts similarity index 70% rename from src/style-spec/migrate/expressions.js rename to src/style-spec/migrate/expressions.ts index 544e6d15d0..1f13342852 100644 --- a/src/style-spec/migrate/expressions.js +++ b/src/style-spec/migrate/expressions.ts @@ -1,14 +1,9 @@ -// @flow - -import { - eachLayer, - eachProperty -} from '../visit'; +import {eachLayer, eachProperty} from '../visit'; import {isExpression} from '../expression'; import convertFunction, {convertTokenString} from '../function/convert'; import convertFilter from '../feature_filter/convert'; -import type {StyleSpecification} from '../types'; +import type {FilterSpecification, LayerSpecification, StyleSpecification} from '../types'; /** * Migrate the given style object in place to use expressions. Specifically, @@ -18,9 +13,9 @@ import type {StyleSpecification} from '../types'; export default function(style: StyleSpecification) { const converted = []; - eachLayer(style, (layer) => { + eachLayer(style, (layer: LayerSpecification & { filter?: FilterSpecification }) => { if (layer.filter) { - layer.filter = (convertFilter(layer.filter): any); + layer.filter = (convertFilter(layer.filter) as any); } }); @@ -29,7 +24,7 @@ export default function(style: StyleSpecification) { if (typeof value === 'object' && !Array.isArray(value)) { set(convertFunction(value, reference)); converted.push(path.join('.')); - } else if (reference.tokens && typeof value === 'string') { + } else if ((reference as any).tokens && typeof value === 'string') { set(convertTokenString(value)); } }); diff --git a/src/style-spec/migrate/v8.js b/src/style-spec/migrate/v8.ts similarity index 98% rename from src/style-spec/migrate/v8.js rename to src/style-spec/migrate/v8.ts index 632b938ee4..1e2d127ad8 100644 --- a/src/style-spec/migrate/v8.js +++ b/src/style-spec/migrate/v8.ts @@ -39,7 +39,7 @@ export default function(style) { // Rename properties, reverse coordinates in source and layers eachSource(style, (source) => { - if (source.type === 'video' && source.url !== undefined) { + if (source.type === 'video' && source['url'] !== undefined) { renameProperty(source, 'url', 'urls'); } if (source.type === 'video') { @@ -161,7 +161,7 @@ export default function(style) { return font; } else { - throw new Error("unexpected font value"); + throw new Error('unexpected font value'); } } diff --git a/src/style-spec/migrate/v9.js b/src/style-spec/migrate/v9.ts similarity index 100% rename from src/style-spec/migrate/v9.js rename to src/style-spec/migrate/v9.ts diff --git a/src/style-spec/package.json b/src/style-spec/package.json index e71949d86c..5826109308 100644 --- a/src/style-spec/package.json +++ b/src/style-spec/package.json @@ -15,10 +15,6 @@ "main": "./dist/index.js", "module": "./dist/index.es.js", "scripts": { - "copy-flow-typed": "cp -R ../../flow-typed .", - "build": "../../node_modules/.bin/rollup -c && ../../node_modules/.bin/rollup -c --environment esm", - "prepublish": "git clean -fdx && yarn copy-flow-typed && yarn build", - "postpublish": "rm -r flow-typed dist/index.js" }, "repository": { "type": "git", @@ -33,7 +29,6 @@ "dependencies": { "@mapbox/jsonlint-lines-primitives": "~2.0.2", "@mapbox/unitbezier": "^0.0.0", - "@mapbox/point-geometry": "^0.1.0", "csscolorparser": "~1.0.2", "json-stringify-pretty-compact": "^2.0.0", "minimist": "^1.2.5", diff --git a/src/style-spec/read_style.js b/src/style-spec/read_style.ts similarity index 100% rename from src/style-spec/read_style.js rename to src/style-spec/read_style.ts diff --git a/src/style-spec/reference/latest.js b/src/style-spec/reference/latest.ts similarity index 100% rename from src/style-spec/reference/latest.js rename to src/style-spec/reference/latest.ts diff --git a/src/style-spec/style-spec.js b/src/style-spec/style-spec.ts similarity index 59% rename from src/style-spec/style-spec.js rename to src/style-spec/style-spec.ts index 1ad1fe676f..a2cd866179 100644 --- a/src/style-spec/style-spec.js +++ b/src/style-spec/style-spec.ts @@ -1,62 +1,60 @@ -// @flow - type ExpressionType = 'data-driven' | 'cross-faded' | 'cross-faded-data-driven' | 'color-ramp' | 'data-constant' | 'constant'; type ExpressionParameters = Array<'zoom' | 'feature' | 'feature-state' | 'heatmap-density' | 'line-progress'>; type ExpressionSpecification = { - interpolated: boolean, - parameters: ExpressionParameters -} + interpolated: boolean; + parameters: ExpressionParameters; +}; export type StylePropertySpecification = { - type: 'number', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - transition: boolean, - default?: number + type: 'number'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + transition: boolean; + default?: number; } | { - type: 'string', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - transition: boolean, - default?: string, - tokens?: boolean + type: 'string'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + transition: boolean; + default?: string; + tokens?: boolean; } | { - type: 'boolean', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - transition: boolean, - default?: boolean + type: 'boolean'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + transition: boolean; + default?: boolean; } | { - type: 'enum', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - values: {[_: string]: {}}, - transition: boolean, - default?: string + type: 'enum'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + values: {[_: string]: {}}; + transition: boolean; + default?: string; } | { - type: 'color', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - transition: boolean, - default?: string, - overridable: boolean + type: 'color'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + transition: boolean; + default?: string; + overridable: boolean; } | { - type: 'array', - value: 'number', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - length?: number, - transition: boolean, - default?: Array + type: 'array'; + value: 'number'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + length?: number; + transition: boolean; + default?: Array; } | { - type: 'array', - value: 'string', - 'property-type': ExpressionType, - expression?: ExpressionSpecification, - length?: number, - transition: boolean, - default?: Array + type: 'array'; + value: 'string'; + 'property-type': ExpressionType; + expression?: ExpressionSpecification; + length?: number; + transition: boolean; + default?: Array; }; import v8 from './reference/v8.json'; @@ -118,5 +116,5 @@ export { visit }; -validate.parsed = validate; -validate.latest = validate; +(validate as any).parsed = validate; +(validate as any).latest = validate; diff --git a/src/style-spec/types.js b/src/style-spec/types.js deleted file mode 100644 index 34a380e1ba..0000000000 --- a/src/style-spec/types.js +++ /dev/null @@ -1,432 +0,0 @@ -// @flow -// Generated code; do not edit. Edit build/generate-flow-typed-style-spec.js instead. -/* eslint-disable */ - -export type ColorSpecification = string; - -export type FormattedSpecification = string; - -export type ResolvedImageSpecification = string; - -export type PromoteIdSpecification = {[_: string]: string} | string; - -export type FilterSpecification = - | ['has', string] - | ['!has', string] - | ['==', string, string | number | boolean] - | ['!=', string, string | number | boolean] - | ['>', string, string | number | boolean] - | ['>=', string, string | number | boolean] - | ['<', string, string | number | boolean] - | ['<=', string, string | number | boolean] - | Array; // Can't type in, !in, all, any, none -- https://github.com/facebook/flow/issues/2443 - -export type TransitionSpecification = { - duration?: number, - delay?: number -}; - -// Note: doesn't capture interpolatable vs. non-interpolatable types. - -export type CameraFunctionSpecification = - | {| type: 'exponential', stops: Array<[number, T]> |} - | {| type: 'interval', stops: Array<[number, T]> |}; - -export type SourceFunctionSpecification = - | {| type: 'exponential', stops: Array<[number, T]>, property: string, default?: T |} - | {| type: 'interval', stops: Array<[number, T]>, property: string, default?: T |} - | {| type: 'categorical', stops: Array<[string | number | boolean, T]>, property: string, default?: T |} - | {| type: 'identity', property: string, default?: T |}; - -export type CompositeFunctionSpecification = - | {| type: 'exponential', stops: Array<[{zoom: number, value: number}, T]>, property: string, default?: T |} - | {| type: 'interval', stops: Array<[{zoom: number, value: number}, T]>, property: string, default?: T |} - | {| type: 'categorical', stops: Array<[{zoom: number, value: string | number | boolean}, T]>, property: string, default?: T |}; - -export type ExpressionSpecification = Array; - -export type PropertyValueSpecification = - | T - | CameraFunctionSpecification - | ExpressionSpecification; - -export type DataDrivenPropertyValueSpecification = - | T - | CameraFunctionSpecification - | SourceFunctionSpecification - | CompositeFunctionSpecification - | ExpressionSpecification; - -export type StyleSpecification = {| - "version": 8, - "name"?: string, - "metadata"?: mixed, - "center"?: Array, - "zoom"?: number, - "bearing"?: number, - "pitch"?: number, - "light"?: LightSpecification, - "sources": {[_: string]: SourceSpecification}, - "sprite"?: string, - "glyphs"?: string, - "transition"?: TransitionSpecification, - "layers": Array -|} - -export type LightSpecification = {| - "anchor"?: PropertyValueSpecification<"map" | "viewport">, - "position"?: PropertyValueSpecification<[number, number, number]>, - "color"?: PropertyValueSpecification, - "intensity"?: PropertyValueSpecification -|} - -export type VectorSourceSpecification = { - "type": "vector", - "url"?: string, - "tiles"?: Array, - "bounds"?: [number, number, number, number], - "scheme"?: "xyz" | "tms", - "minzoom"?: number, - "maxzoom"?: number, - "attribution"?: string, - "promoteId"?: PromoteIdSpecification, - "volatile"?: boolean -} - -export type RasterSourceSpecification = { - "type": "raster", - "url"?: string, - "tiles"?: Array, - "bounds"?: [number, number, number, number], - "minzoom"?: number, - "maxzoom"?: number, - "tileSize"?: number, - "scheme"?: "xyz" | "tms", - "attribution"?: string, - "volatile"?: boolean -} - -export type RasterDEMSourceSpecification = { - "type": "raster-dem", - "url"?: string, - "tiles"?: Array, - "bounds"?: [number, number, number, number], - "minzoom"?: number, - "maxzoom"?: number, - "tileSize"?: number, - "attribution"?: string, - "encoding"?: "terrarium" | "mapbox", - "volatile"?: boolean -} - -export type GeoJSONSourceSpecification = {| - "type": "geojson", - "data"?: mixed, - "maxzoom"?: number, - "attribution"?: string, - "buffer"?: number, - "filter"?: mixed, - "tolerance"?: number, - "cluster"?: boolean, - "clusterRadius"?: number, - "clusterMaxZoom"?: number, - "clusterMinPoints"?: number, - "clusterProperties"?: mixed, - "lineMetrics"?: boolean, - "generateId"?: boolean, - "promoteId"?: PromoteIdSpecification -|} - -export type VideoSourceSpecification = {| - "type": "video", - "urls": Array, - "coordinates": [[number, number], [number, number], [number, number], [number, number]] -|} - -export type ImageSourceSpecification = {| - "type": "image", - "url": string, - "coordinates": [[number, number], [number, number], [number, number], [number, number]] -|} - -export type SourceSpecification = - | VectorSourceSpecification - | RasterSourceSpecification - | RasterDEMSourceSpecification - | GeoJSONSourceSpecification - | VideoSourceSpecification - | ImageSourceSpecification - -export type FillLayerSpecification = {| - "id": string, - "type": "fill", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "fill-sort-key"?: DataDrivenPropertyValueSpecification, - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "fill-antialias"?: PropertyValueSpecification, - "fill-opacity"?: DataDrivenPropertyValueSpecification, - "fill-color"?: DataDrivenPropertyValueSpecification, - "fill-outline-color"?: DataDrivenPropertyValueSpecification, - "fill-translate"?: PropertyValueSpecification<[number, number]>, - "fill-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "fill-pattern"?: DataDrivenPropertyValueSpecification - |} -|} - -export type LineLayerSpecification = {| - "id": string, - "type": "line", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "line-cap"?: PropertyValueSpecification<"butt" | "round" | "square">, - "line-join"?: DataDrivenPropertyValueSpecification<"bevel" | "round" | "miter">, - "line-miter-limit"?: PropertyValueSpecification, - "line-round-limit"?: PropertyValueSpecification, - "line-sort-key"?: DataDrivenPropertyValueSpecification, - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "line-opacity"?: DataDrivenPropertyValueSpecification, - "line-color"?: DataDrivenPropertyValueSpecification, - "line-translate"?: PropertyValueSpecification<[number, number]>, - "line-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "line-width"?: DataDrivenPropertyValueSpecification, - "line-gap-width"?: DataDrivenPropertyValueSpecification, - "line-offset"?: DataDrivenPropertyValueSpecification, - "line-blur"?: DataDrivenPropertyValueSpecification, - "line-dasharray"?: PropertyValueSpecification>, - "line-pattern"?: DataDrivenPropertyValueSpecification, - "line-gradient"?: ExpressionSpecification - |} -|} - -export type SymbolLayerSpecification = {| - "id": string, - "type": "symbol", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "symbol-placement"?: PropertyValueSpecification<"point" | "line" | "line-center">, - "symbol-spacing"?: PropertyValueSpecification, - "symbol-avoid-edges"?: PropertyValueSpecification, - "symbol-sort-key"?: DataDrivenPropertyValueSpecification, - "symbol-z-order"?: PropertyValueSpecification<"auto" | "viewport-y" | "source">, - "icon-allow-overlap"?: PropertyValueSpecification, - "icon-ignore-placement"?: PropertyValueSpecification, - "icon-optional"?: PropertyValueSpecification, - "icon-rotation-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, - "icon-size"?: DataDrivenPropertyValueSpecification, - "icon-text-fit"?: PropertyValueSpecification<"none" | "width" | "height" | "both">, - "icon-text-fit-padding"?: PropertyValueSpecification<[number, number, number, number]>, - "icon-image"?: DataDrivenPropertyValueSpecification, - "icon-rotate"?: DataDrivenPropertyValueSpecification, - "icon-padding"?: PropertyValueSpecification, - "icon-keep-upright"?: PropertyValueSpecification, - "icon-offset"?: DataDrivenPropertyValueSpecification<[number, number]>, - "icon-anchor"?: DataDrivenPropertyValueSpecification<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, - "icon-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, - "text-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, - "text-rotation-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, - "text-field"?: DataDrivenPropertyValueSpecification, - "text-font"?: DataDrivenPropertyValueSpecification>, - "text-size"?: DataDrivenPropertyValueSpecification, - "text-max-width"?: DataDrivenPropertyValueSpecification, - "text-line-height"?: PropertyValueSpecification, - "text-letter-spacing"?: DataDrivenPropertyValueSpecification, - "text-justify"?: DataDrivenPropertyValueSpecification<"auto" | "left" | "center" | "right">, - "text-radial-offset"?: DataDrivenPropertyValueSpecification, - "text-variable-anchor"?: PropertyValueSpecification>, - "text-anchor"?: DataDrivenPropertyValueSpecification<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, - "text-max-angle"?: PropertyValueSpecification, - "text-writing-mode"?: PropertyValueSpecification>, - "text-rotate"?: DataDrivenPropertyValueSpecification, - "text-padding"?: PropertyValueSpecification, - "text-keep-upright"?: PropertyValueSpecification, - "text-transform"?: DataDrivenPropertyValueSpecification<"none" | "uppercase" | "lowercase">, - "text-offset"?: DataDrivenPropertyValueSpecification<[number, number]>, - "text-allow-overlap"?: PropertyValueSpecification, - "text-ignore-placement"?: PropertyValueSpecification, - "text-optional"?: PropertyValueSpecification, - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "icon-opacity"?: DataDrivenPropertyValueSpecification, - "icon-color"?: DataDrivenPropertyValueSpecification, - "icon-halo-color"?: DataDrivenPropertyValueSpecification, - "icon-halo-width"?: DataDrivenPropertyValueSpecification, - "icon-halo-blur"?: DataDrivenPropertyValueSpecification, - "icon-translate"?: PropertyValueSpecification<[number, number]>, - "icon-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "text-opacity"?: DataDrivenPropertyValueSpecification, - "text-color"?: DataDrivenPropertyValueSpecification, - "text-halo-color"?: DataDrivenPropertyValueSpecification, - "text-halo-width"?: DataDrivenPropertyValueSpecification, - "text-halo-blur"?: DataDrivenPropertyValueSpecification, - "text-translate"?: PropertyValueSpecification<[number, number]>, - "text-translate-anchor"?: PropertyValueSpecification<"map" | "viewport"> - |} -|} - -export type CircleLayerSpecification = {| - "id": string, - "type": "circle", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "circle-sort-key"?: DataDrivenPropertyValueSpecification, - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "circle-radius"?: DataDrivenPropertyValueSpecification, - "circle-color"?: DataDrivenPropertyValueSpecification, - "circle-blur"?: DataDrivenPropertyValueSpecification, - "circle-opacity"?: DataDrivenPropertyValueSpecification, - "circle-translate"?: PropertyValueSpecification<[number, number]>, - "circle-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "circle-pitch-scale"?: PropertyValueSpecification<"map" | "viewport">, - "circle-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport">, - "circle-stroke-width"?: DataDrivenPropertyValueSpecification, - "circle-stroke-color"?: DataDrivenPropertyValueSpecification, - "circle-stroke-opacity"?: DataDrivenPropertyValueSpecification - |} -|} - -export type HeatmapLayerSpecification = {| - "id": string, - "type": "heatmap", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "heatmap-radius"?: DataDrivenPropertyValueSpecification, - "heatmap-weight"?: DataDrivenPropertyValueSpecification, - "heatmap-intensity"?: PropertyValueSpecification, - "heatmap-color"?: ExpressionSpecification, - "heatmap-opacity"?: PropertyValueSpecification - |} -|} - -export type FillExtrusionLayerSpecification = {| - "id": string, - "type": "fill-extrusion", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "fill-extrusion-opacity"?: PropertyValueSpecification, - "fill-extrusion-color"?: DataDrivenPropertyValueSpecification, - "fill-extrusion-translate"?: PropertyValueSpecification<[number, number]>, - "fill-extrusion-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "fill-extrusion-pattern"?: DataDrivenPropertyValueSpecification, - "fill-extrusion-height"?: DataDrivenPropertyValueSpecification, - "fill-extrusion-base"?: DataDrivenPropertyValueSpecification, - "fill-extrusion-vertical-gradient"?: PropertyValueSpecification - |} -|} - -export type RasterLayerSpecification = {| - "id": string, - "type": "raster", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "raster-opacity"?: PropertyValueSpecification, - "raster-hue-rotate"?: PropertyValueSpecification, - "raster-brightness-min"?: PropertyValueSpecification, - "raster-brightness-max"?: PropertyValueSpecification, - "raster-saturation"?: PropertyValueSpecification, - "raster-contrast"?: PropertyValueSpecification, - "raster-resampling"?: PropertyValueSpecification<"linear" | "nearest">, - "raster-fade-duration"?: PropertyValueSpecification - |} -|} - -export type HillshadeLayerSpecification = {| - "id": string, - "type": "hillshade", - "metadata"?: mixed, - "source": string, - "source-layer"?: string, - "minzoom"?: number, - "maxzoom"?: number, - "filter"?: FilterSpecification, - "layout"?: {| - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "hillshade-illumination-direction"?: PropertyValueSpecification, - "hillshade-illumination-anchor"?: PropertyValueSpecification<"map" | "viewport">, - "hillshade-exaggeration"?: PropertyValueSpecification, - "hillshade-shadow-color"?: PropertyValueSpecification, - "hillshade-highlight-color"?: PropertyValueSpecification, - "hillshade-accent-color"?: PropertyValueSpecification - |} -|} - -export type BackgroundLayerSpecification = {| - "id": string, - "type": "background", - "metadata"?: mixed, - "minzoom"?: number, - "maxzoom"?: number, - "layout"?: {| - "visibility"?: "visible" | "none" - |}, - "paint"?: {| - "background-color"?: PropertyValueSpecification, - "background-pattern"?: PropertyValueSpecification, - "background-opacity"?: PropertyValueSpecification - |} -|} - -export type LayerSpecification = - | FillLayerSpecification - | LineLayerSpecification - | SymbolLayerSpecification - | CircleLayerSpecification - | HeatmapLayerSpecification - | FillExtrusionLayerSpecification - | RasterLayerSpecification - | HillshadeLayerSpecification - | BackgroundLayerSpecification; - diff --git a/src/style-spec/types.ts b/src/style-spec/types.ts new file mode 100644 index 0000000000..76a6b0ad2a --- /dev/null +++ b/src/style-spec/types.ts @@ -0,0 +1,439 @@ +// Generated code; do not edit. Edit build/generate-flow-typed-style-spec.js instead. +/* eslint-disable */ + +export type ColorSpecification = string; + +export type FormattedSpecification = string; + +export type ResolvedImageSpecification = string; + +export type PromoteIdSpecification = {[_: string]: string} | string; + +export type FilterSpecification = ["has", string] | ["!has", string] | ["==", string, string | number | boolean] | ["!=", string, string | number | boolean] | [">", string, string | number | boolean] | [">=", string, string | number | boolean] | ["<", string, string | number | boolean] | ["<=", string, string | number | boolean] | Array; // Can't type in, !in, all, any, none -- https://github.com/facebook/flow/issues/2443 + +export type TransitionSpecification = { + duration?: number, + delay?: number +}; + +// Note: doesn't capture interpolatable vs. non-interpolatable types. + +export type CameraFunctionSpecification = { + type: "exponential", + stops: Array<[number, T]> +} | { + type: "interval", + stops: Array<[number, T]> +}; + +export type SourceFunctionSpecification = { + type: "exponential", + stops: Array<[number, T]>, + property: string, + default?: T +} | { + type: "interval", + stops: Array<[number, T]>, + property: string, + default?: T +} | { + type: "categorical", + stops: Array<[string | number | boolean, T]>, + property: string, + default?: T +} | { + type: "identity", + property: string, + default?: T +}; + +export type CompositeFunctionSpecification = { + type: "exponential", + stops: Array<[{ + zoom: number, + value: number + }, T]>, + property: string, + default?: T +} | { + type: "interval", + stops: Array<[{ + zoom: number, + value: number + }, T]>, + property: string, + default?: T +} | { + type: "categorical", + stops: Array<[{ + zoom: number, + value: string | number | boolean + }, T]>, + property: string, + default?: T +}; + +export type ExpressionSpecification = Array; + +export type PropertyValueSpecification = T | CameraFunctionSpecification | ExpressionSpecification; + +export type DataDrivenPropertyValueSpecification = T | CameraFunctionSpecification | SourceFunctionSpecification | CompositeFunctionSpecification | ExpressionSpecification; + +export type StyleSpecification = { + "version": 8, + "name"?: string, + "metadata"?: unknown, + "center"?: Array, + "zoom"?: number, + "bearing"?: number, + "pitch"?: number, + "light"?: LightSpecification, + "sources": {[_: string]: SourceSpecification}, + "sprite"?: string, + "glyphs"?: string, + "transition"?: TransitionSpecification, + "layers": Array +}; + +export type LightSpecification = { + "anchor"?: PropertyValueSpecification<"map" | "viewport">, + "position"?: PropertyValueSpecification<[number, number, number]>, + "color"?: PropertyValueSpecification, + "intensity"?: PropertyValueSpecification +}; + +export type VectorSourceSpecification = { + "type": "vector", + "url"?: string, + "tiles"?: Array, + "bounds"?: [number, number, number, number], + "scheme"?: "xyz" | "tms", + "minzoom"?: number, + "maxzoom"?: number, + "attribution"?: string, + "promoteId"?: PromoteIdSpecification, + "volatile"?: boolean +}; + +export type RasterSourceSpecification = { + "type": "raster", + "url"?: string, + "tiles"?: Array, + "bounds"?: [number, number, number, number], + "minzoom"?: number, + "maxzoom"?: number, + "tileSize"?: number, + "scheme"?: "xyz" | "tms", + "attribution"?: string, + "volatile"?: boolean +}; + +export type RasterDEMSourceSpecification = { + "type": "raster-dem", + "url"?: string, + "tiles"?: Array, + "bounds"?: [number, number, number, number], + "minzoom"?: number, + "maxzoom"?: number, + "tileSize"?: number, + "attribution"?: string, + "encoding"?: "terrarium" | "mapbox", + "volatile"?: boolean +}; + +export type GeoJSONSourceSpecification = { + "type": "geojson", + "data"?: unknown, + "maxzoom"?: number, + "attribution"?: string, + "buffer"?: number, + "filter"?: unknown, + "tolerance"?: number, + "cluster"?: boolean, + "clusterRadius"?: number, + "clusterMaxZoom"?: number, + "clusterMinPoints"?: number, + "clusterProperties"?: unknown, + "lineMetrics"?: boolean, + "generateId"?: boolean, + "promoteId"?: PromoteIdSpecification +}; + +export type VideoSourceSpecification = { + "type": "video", + "urls": Array, + "coordinates": [[number, number], [number, number], [number, number], [number, number]] +}; + +export type ImageSourceSpecification = { + "type": "image", + "url": string, + "coordinates": [[number, number], [number, number], [number, number], [number, number]] +}; + +export type SourceSpecification = VectorSourceSpecification | RasterSourceSpecification | RasterDEMSourceSpecification | GeoJSONSourceSpecification | VideoSourceSpecification | ImageSourceSpecification; + +export type FillLayerSpecification = { + "id": string, + "type": "fill", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "fill-sort-key"?: DataDrivenPropertyValueSpecification, + "visibility"?: "visible" | "none" + }, + "paint"?: { + "fill-antialias"?: PropertyValueSpecification, + "fill-opacity"?: DataDrivenPropertyValueSpecification, + "fill-color"?: DataDrivenPropertyValueSpecification, + "fill-outline-color"?: DataDrivenPropertyValueSpecification, + "fill-translate"?: PropertyValueSpecification<[number, number]>, + "fill-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "fill-pattern"?: DataDrivenPropertyValueSpecification + } +}; + +export type LineLayerSpecification = { + "id": string, + "type": "line", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "line-cap"?: PropertyValueSpecification<"butt" | "round" | "square">, + "line-join"?: DataDrivenPropertyValueSpecification<"bevel" | "round" | "miter">, + "line-miter-limit"?: PropertyValueSpecification, + "line-round-limit"?: PropertyValueSpecification, + "line-sort-key"?: DataDrivenPropertyValueSpecification, + "visibility"?: "visible" | "none" + }, + "paint"?: { + "line-opacity"?: DataDrivenPropertyValueSpecification, + "line-color"?: DataDrivenPropertyValueSpecification, + "line-translate"?: PropertyValueSpecification<[number, number]>, + "line-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "line-width"?: DataDrivenPropertyValueSpecification, + "line-gap-width"?: DataDrivenPropertyValueSpecification, + "line-offset"?: DataDrivenPropertyValueSpecification, + "line-blur"?: DataDrivenPropertyValueSpecification, + "line-dasharray"?: PropertyValueSpecification>, + "line-pattern"?: DataDrivenPropertyValueSpecification, + "line-gradient"?: ExpressionSpecification + } +}; + +export type SymbolLayerSpecification = { + "id": string, + "type": "symbol", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "symbol-placement"?: PropertyValueSpecification<"point" | "line" | "line-center">, + "symbol-spacing"?: PropertyValueSpecification, + "symbol-avoid-edges"?: PropertyValueSpecification, + "symbol-sort-key"?: DataDrivenPropertyValueSpecification, + "symbol-z-order"?: PropertyValueSpecification<"auto" | "viewport-y" | "source">, + "icon-allow-overlap"?: PropertyValueSpecification, + "icon-ignore-placement"?: PropertyValueSpecification, + "icon-optional"?: PropertyValueSpecification, + "icon-rotation-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, + "icon-size"?: DataDrivenPropertyValueSpecification, + "icon-text-fit"?: PropertyValueSpecification<"none" | "width" | "height" | "both">, + "icon-text-fit-padding"?: PropertyValueSpecification<[number, number, number, number]>, + "icon-image"?: DataDrivenPropertyValueSpecification, + "icon-rotate"?: DataDrivenPropertyValueSpecification, + "icon-padding"?: PropertyValueSpecification, + "icon-keep-upright"?: PropertyValueSpecification, + "icon-offset"?: DataDrivenPropertyValueSpecification<[number, number]>, + "icon-anchor"?: DataDrivenPropertyValueSpecification<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "icon-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, + "text-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, + "text-rotation-alignment"?: PropertyValueSpecification<"map" | "viewport" | "auto">, + "text-field"?: DataDrivenPropertyValueSpecification, + "text-font"?: DataDrivenPropertyValueSpecification>, + "text-size"?: DataDrivenPropertyValueSpecification, + "text-max-width"?: DataDrivenPropertyValueSpecification, + "text-line-height"?: PropertyValueSpecification, + "text-letter-spacing"?: DataDrivenPropertyValueSpecification, + "text-justify"?: DataDrivenPropertyValueSpecification<"auto" | "left" | "center" | "right">, + "text-radial-offset"?: DataDrivenPropertyValueSpecification, + "text-variable-anchor"?: PropertyValueSpecification>, + "text-anchor"?: DataDrivenPropertyValueSpecification<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "text-max-angle"?: PropertyValueSpecification, + "text-writing-mode"?: PropertyValueSpecification>, + "text-rotate"?: DataDrivenPropertyValueSpecification, + "text-padding"?: PropertyValueSpecification, + "text-keep-upright"?: PropertyValueSpecification, + "text-transform"?: DataDrivenPropertyValueSpecification<"none" | "uppercase" | "lowercase">, + "text-offset"?: DataDrivenPropertyValueSpecification<[number, number]>, + "text-allow-overlap"?: PropertyValueSpecification, + "text-ignore-placement"?: PropertyValueSpecification, + "text-optional"?: PropertyValueSpecification, + "visibility"?: "visible" | "none" + }, + "paint"?: { + "icon-opacity"?: DataDrivenPropertyValueSpecification, + "icon-color"?: DataDrivenPropertyValueSpecification, + "icon-halo-color"?: DataDrivenPropertyValueSpecification, + "icon-halo-width"?: DataDrivenPropertyValueSpecification, + "icon-halo-blur"?: DataDrivenPropertyValueSpecification, + "icon-translate"?: PropertyValueSpecification<[number, number]>, + "icon-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "text-opacity"?: DataDrivenPropertyValueSpecification, + "text-color"?: DataDrivenPropertyValueSpecification, + "text-halo-color"?: DataDrivenPropertyValueSpecification, + "text-halo-width"?: DataDrivenPropertyValueSpecification, + "text-halo-blur"?: DataDrivenPropertyValueSpecification, + "text-translate"?: PropertyValueSpecification<[number, number]>, + "text-translate-anchor"?: PropertyValueSpecification<"map" | "viewport"> + } +}; + +export type CircleLayerSpecification = { + "id": string, + "type": "circle", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "circle-sort-key"?: DataDrivenPropertyValueSpecification, + "visibility"?: "visible" | "none" + }, + "paint"?: { + "circle-radius"?: DataDrivenPropertyValueSpecification, + "circle-color"?: DataDrivenPropertyValueSpecification, + "circle-blur"?: DataDrivenPropertyValueSpecification, + "circle-opacity"?: DataDrivenPropertyValueSpecification, + "circle-translate"?: PropertyValueSpecification<[number, number]>, + "circle-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "circle-pitch-scale"?: PropertyValueSpecification<"map" | "viewport">, + "circle-pitch-alignment"?: PropertyValueSpecification<"map" | "viewport">, + "circle-stroke-width"?: DataDrivenPropertyValueSpecification, + "circle-stroke-color"?: DataDrivenPropertyValueSpecification, + "circle-stroke-opacity"?: DataDrivenPropertyValueSpecification + } +}; + +export type HeatmapLayerSpecification = { + "id": string, + "type": "heatmap", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "visibility"?: "visible" | "none" + }, + "paint"?: { + "heatmap-radius"?: DataDrivenPropertyValueSpecification, + "heatmap-weight"?: DataDrivenPropertyValueSpecification, + "heatmap-intensity"?: PropertyValueSpecification, + "heatmap-color"?: ExpressionSpecification, + "heatmap-opacity"?: PropertyValueSpecification + } +}; + +export type FillExtrusionLayerSpecification = { + "id": string, + "type": "fill-extrusion", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "visibility"?: "visible" | "none" + }, + "paint"?: { + "fill-extrusion-opacity"?: PropertyValueSpecification, + "fill-extrusion-color"?: DataDrivenPropertyValueSpecification, + "fill-extrusion-translate"?: PropertyValueSpecification<[number, number]>, + "fill-extrusion-translate-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "fill-extrusion-pattern"?: DataDrivenPropertyValueSpecification, + "fill-extrusion-height"?: DataDrivenPropertyValueSpecification, + "fill-extrusion-base"?: DataDrivenPropertyValueSpecification, + "fill-extrusion-vertical-gradient"?: PropertyValueSpecification + } +}; + +export type RasterLayerSpecification = { + "id": string, + "type": "raster", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "visibility"?: "visible" | "none" + }, + "paint"?: { + "raster-opacity"?: PropertyValueSpecification, + "raster-hue-rotate"?: PropertyValueSpecification, + "raster-brightness-min"?: PropertyValueSpecification, + "raster-brightness-max"?: PropertyValueSpecification, + "raster-saturation"?: PropertyValueSpecification, + "raster-contrast"?: PropertyValueSpecification, + "raster-resampling"?: PropertyValueSpecification<"linear" | "nearest">, + "raster-fade-duration"?: PropertyValueSpecification + } +}; + +export type HillshadeLayerSpecification = { + "id": string, + "type": "hillshade", + "metadata"?: unknown, + "source": string, + "source-layer"?: string, + "minzoom"?: number, + "maxzoom"?: number, + "filter"?: FilterSpecification, + "layout"?: { + "visibility"?: "visible" | "none" + }, + "paint"?: { + "hillshade-illumination-direction"?: PropertyValueSpecification, + "hillshade-illumination-anchor"?: PropertyValueSpecification<"map" | "viewport">, + "hillshade-exaggeration"?: PropertyValueSpecification, + "hillshade-shadow-color"?: PropertyValueSpecification, + "hillshade-highlight-color"?: PropertyValueSpecification, + "hillshade-accent-color"?: PropertyValueSpecification + } +}; + +export type BackgroundLayerSpecification = { + "id": string, + "type": "background", + "metadata"?: unknown, + "minzoom"?: number, + "maxzoom"?: number, + "layout"?: { + "visibility"?: "visible" | "none" + }, + "paint"?: { + "background-color"?: PropertyValueSpecification, + "background-pattern"?: PropertyValueSpecification, + "background-opacity"?: PropertyValueSpecification + } +}; + +export type LayerSpecification = FillLayerSpecification | LineLayerSpecification | SymbolLayerSpecification | CircleLayerSpecification | HeatmapLayerSpecification | FillExtrusionLayerSpecification | RasterLayerSpecification | HillshadeLayerSpecification | BackgroundLayerSpecification; + diff --git a/src/style-spec/util/color.js b/src/style-spec/util/color.ts similarity index 99% rename from src/style-spec/util/color.js rename to src/style-spec/util/color.ts index a8e59b74f0..f650cec075 100644 --- a/src/style-spec/util/color.js +++ b/src/style-spec/util/color.ts @@ -1,5 +1,3 @@ -// @flow - import {parseCSSColor} from 'csscolorparser'; /** diff --git a/src/style-spec/util/color_spaces.js b/src/style-spec/util/color_spaces.ts similarity index 96% rename from src/style-spec/util/color_spaces.js rename to src/style-spec/util/color_spaces.ts index 21ee75b0c6..bc1fd6322e 100644 --- a/src/style-spec/util/color_spaces.js +++ b/src/style-spec/util/color_spaces.ts @@ -1,21 +1,19 @@ -// @flow - import Color from './color'; import {number as interpolateNumber} from './interpolate'; type LABColor = { - l: number, - a: number, - b: number, - alpha: number + l: number; + a: number; + b: number; + alpha: number; }; type HCLColor = { - h: number, - c: number, - l: number, - alpha: number + h: number; + c: number; + l: number; + alpha: number; }; // Constants diff --git a/src/style-spec/util/deep_equal.js b/src/style-spec/util/deep_equal.ts similarity index 90% rename from src/style-spec/util/deep_equal.js rename to src/style-spec/util/deep_equal.ts index 773af912f5..1ea97d1f7f 100644 --- a/src/style-spec/util/deep_equal.js +++ b/src/style-spec/util/deep_equal.ts @@ -1,11 +1,9 @@ -// @flow - /** * Deeply compares two object literals. * * @private */ -function deepEqual(a: ?mixed, b: ?mixed): boolean { +function deepEqual(a?: unknown | null, b?: unknown | null): boolean { if (Array.isArray(a)) { if (!Array.isArray(b) || a.length !== b.length) return false; for (let i = 0; i < a.length; i++) { diff --git a/src/style-spec/util/extend.js b/src/style-spec/util/extend.ts similarity index 65% rename from src/style-spec/util/extend.js rename to src/style-spec/util/extend.ts index 076b6f278a..2ae4a51102 100644 --- a/src/style-spec/util/extend.js +++ b/src/style-spec/util/extend.ts @@ -1,6 +1,4 @@ -// @flow - -export default function (output: any, ...inputs: Array) { +export default function(output: any, ...inputs: Array) { for (const input of inputs) { for (const k in input) { output[k] = input[k]; diff --git a/src/style-spec/util/get_type.js b/src/style-spec/util/get_type.ts similarity index 84% rename from src/style-spec/util/get_type.js rename to src/style-spec/util/get_type.ts index 18b03eb625..4cf28f488b 100644 --- a/src/style-spec/util/get_type.js +++ b/src/style-spec/util/get_type.ts @@ -1,6 +1,4 @@ -// @flow - -export default function getType(val: mixed): string { +export default function getType(val: unknown): string { if (val instanceof Number) { return 'number'; } else if (val instanceof String) { diff --git a/src/style-spec/util/interpolate.js b/src/style-spec/util/interpolate.ts similarity index 98% rename from src/style-spec/util/interpolate.js rename to src/style-spec/util/interpolate.ts index 9cbed3caa1..57a191874a 100644 --- a/src/style-spec/util/interpolate.js +++ b/src/style-spec/util/interpolate.ts @@ -1,5 +1,3 @@ -// @flow - import Color from './color'; export function number(a: number, b: number, t: number) { diff --git a/src/style-spec/util/properties.js b/src/style-spec/util/properties.ts similarity index 98% rename from src/style-spec/util/properties.js rename to src/style-spec/util/properties.ts index dbb3ef9144..afcddc2faa 100644 --- a/src/style-spec/util/properties.js +++ b/src/style-spec/util/properties.ts @@ -1,5 +1,3 @@ -// @flow - import type {StylePropertySpecification} from '../style-spec'; export function supportsPropertyExpression(spec: StylePropertySpecification): boolean { diff --git a/src/style-spec/util/ref_properties.js b/src/style-spec/util/ref_properties.ts similarity index 100% rename from src/style-spec/util/ref_properties.js rename to src/style-spec/util/ref_properties.ts diff --git a/src/style-spec/util/result.js b/src/style-spec/util/result.ts similarity index 77% rename from src/style-spec/util/result.js rename to src/style-spec/util/result.ts index 9d0d3a6c4f..3928ad4e1d 100644 --- a/src/style-spec/util/result.js +++ b/src/style-spec/util/result.ts @@ -1,14 +1,16 @@ -// @flow - /** * A type used for returning and propagating errors. The first element of the union * represents success and contains a value, and the second represents an error and * contains an error value. * @private */ -export type Result = - | {| result: 'success', value: T |} - | {| result: 'error', value: E |}; +export type Result = { + result: 'success'; + value: T; +} | { + result: 'error'; + value: E; +}; export function success(value: T): Result { return {result: 'success', value}; diff --git a/src/style-spec/util/unbundle_jsonlint.js b/src/style-spec/util/unbundle_jsonlint.ts similarity index 78% rename from src/style-spec/util/unbundle_jsonlint.js rename to src/style-spec/util/unbundle_jsonlint.ts index 72eb2d9264..43128dc9c8 100644 --- a/src/style-spec/util/unbundle_jsonlint.js +++ b/src/style-spec/util/unbundle_jsonlint.ts @@ -1,7 +1,5 @@ -// @flow - // Turn jsonlint-lines-primitives objects into primitive objects -export function unbundle(value: mixed) { +export function unbundle(value: unknown) { if (value instanceof Number || value instanceof String || value instanceof Boolean) { return value.valueOf(); } else { @@ -9,11 +7,11 @@ export function unbundle(value: mixed) { } } -export function deepUnbundle(value: mixed): mixed { +export function deepUnbundle(value: unknown): unknown { if (Array.isArray(value)) { return value.map(deepUnbundle); } else if (value instanceof Object && !(value instanceof Number || value instanceof String || value instanceof Boolean)) { - const unbundledValue: { [key: string]: mixed } = {}; + const unbundledValue: {[key: string]: unknown} = {}; for (const key in value) { unbundledValue[key] = deepUnbundle(value[key]); } diff --git a/src/style-spec/validate/latest.js b/src/style-spec/validate/latest.ts similarity index 100% rename from src/style-spec/validate/latest.js rename to src/style-spec/validate/latest.ts diff --git a/src/style-spec/validate/validate.js b/src/style-spec/validate/validate.ts similarity index 100% rename from src/style-spec/validate/validate.js rename to src/style-spec/validate/validate.ts diff --git a/src/style-spec/validate/validate_array.js b/src/style-spec/validate/validate_array.ts similarity index 92% rename from src/style-spec/validate/validate_array.js rename to src/style-spec/validate/validate_array.ts index 2f5638a61a..d7f68e52ca 100644 --- a/src/style-spec/validate/validate_array.js +++ b/src/style-spec/validate/validate_array.ts @@ -24,12 +24,12 @@ export default function validateArray(options) { } let arrayElementSpec = { - "type": arraySpec.value, - "values": arraySpec.values + 'type': arraySpec.value, + 'values': arraySpec.values }; if (styleSpec.$version < 7) { - arrayElementSpec.function = arraySpec.function; + arrayElementSpec['function'] = arraySpec.function; } if (getType(arraySpec.value) === 'object') { diff --git a/src/style-spec/validate/validate_boolean.js b/src/style-spec/validate/validate_boolean.ts similarity index 100% rename from src/style-spec/validate/validate_boolean.js rename to src/style-spec/validate/validate_boolean.ts diff --git a/src/style-spec/validate/validate_color.js b/src/style-spec/validate/validate_color.ts similarity index 100% rename from src/style-spec/validate/validate_color.js rename to src/style-spec/validate/validate_color.ts diff --git a/src/style-spec/validate/validate_constants.js b/src/style-spec/validate/validate_constants.ts similarity index 100% rename from src/style-spec/validate/validate_constants.js rename to src/style-spec/validate/validate_constants.ts diff --git a/src/style-spec/validate/validate_enum.js b/src/style-spec/validate/validate_enum.ts similarity index 97% rename from src/style-spec/validate/validate_enum.js rename to src/style-spec/validate/validate_enum.ts index 655830c96a..66b9cb3866 100644 --- a/src/style-spec/validate/validate_enum.js +++ b/src/style-spec/validate/validate_enum.ts @@ -13,7 +13,7 @@ export default function validateEnum(options) { errors.push(new ValidationError(key, value, `expected one of [${valueSpec.values.join(', ')}], ${JSON.stringify(value)} found`)); } } else { // >=v8 - if (Object.keys(valueSpec.values).indexOf(unbundle(value)) === -1) { + if (Object.keys(valueSpec.values).indexOf(unbundle(value) as string) === -1) { errors.push(new ValidationError(key, value, `expected one of [${Object.keys(valueSpec.values).join(', ')}], ${JSON.stringify(value)} found`)); } } diff --git a/src/style-spec/validate/validate_expression.js b/src/style-spec/validate/validate_expression.ts similarity index 94% rename from src/style-spec/validate/validate_expression.js rename to src/style-spec/validate/validate_expression.ts index 63a73f441c..f331880bfe 100644 --- a/src/style-spec/validate/validate_expression.js +++ b/src/style-spec/validate/validate_expression.ts @@ -1,5 +1,3 @@ -// @flow - import ValidationError from '../error/validation_error'; import {createExpression, createPropertyExpression} from '../expression'; @@ -14,7 +12,7 @@ export default function validateExpression(options: any): Array }); } - const expressionObj = (expression.value: any).expression || (expression.value: any)._styleExpression.expression; + const expressionObj = (expression.value as any).expression || (expression.value as any)._styleExpression.expression; if (options.expressionContext === 'property' && (options.propertyKey === 'text-font') && !expressionObj.outputDefined()) { diff --git a/src/style-spec/validate/validate_filter.js b/src/style-spec/validate/validate_filter.ts similarity index 100% rename from src/style-spec/validate/validate_filter.js rename to src/style-spec/validate/validate_filter.ts diff --git a/src/style-spec/validate/validate_formatted.js b/src/style-spec/validate/validate_formatted.ts similarity index 96% rename from src/style-spec/validate/validate_formatted.js rename to src/style-spec/validate/validate_formatted.ts index 61ed402df3..3b622a6816 100644 --- a/src/style-spec/validate/validate_formatted.js +++ b/src/style-spec/validate/validate_formatted.ts @@ -1,4 +1,3 @@ -// @flow import validateExpression from './validate_expression'; import validateString from './validate_string'; diff --git a/src/style-spec/validate/validate_function.js b/src/style-spec/validate/validate_function.ts similarity index 97% rename from src/style-spec/validate/validate_function.js rename to src/style-spec/validate/validate_function.ts index 5c2fa42e6f..ff0470c311 100644 --- a/src/style-spec/validate/validate_function.js +++ b/src/style-spec/validate/validate_function.ts @@ -176,7 +176,7 @@ export default function validateFunction(options) { return [new ValidationError(options.key, reportValue, message)]; } - if (functionType === 'categorical' && type === 'number' && (!isFinite(value) || Math.floor(value) !== value)) { + if (functionType === 'categorical' && type === 'number' && (!isFinite(value as number) || Math.floor(value as number) !== value)) { return [new ValidationError(options.key, reportValue, `integer expected, found ${value}`)]; } @@ -186,10 +186,10 @@ export default function validateFunction(options) { previousStopDomainValue = value; } - if (functionType === 'categorical' && value in stopDomainValues) { + if (functionType === 'categorical' && (value as any) in stopDomainValues) { return [new ValidationError(options.key, reportValue, 'stop domain values must be unique')]; } else { - stopDomainValues[value] = true; + stopDomainValues[value as any] = true; } return []; diff --git a/src/style-spec/validate/validate_glyphs_url.js b/src/style-spec/validate/validate_glyphs_url.ts similarity index 100% rename from src/style-spec/validate/validate_glyphs_url.js rename to src/style-spec/validate/validate_glyphs_url.ts diff --git a/src/style-spec/validate/validate_image.js b/src/style-spec/validate/validate_image.ts similarity index 96% rename from src/style-spec/validate/validate_image.js rename to src/style-spec/validate/validate_image.ts index b02763ffd9..6bc72596ba 100644 --- a/src/style-spec/validate/validate_image.js +++ b/src/style-spec/validate/validate_image.ts @@ -1,4 +1,3 @@ -// @flow import validateExpression from './validate_expression'; import validateString from './validate_string'; diff --git a/src/style-spec/validate/validate_layer.js b/src/style-spec/validate/validate_layer.ts similarity index 100% rename from src/style-spec/validate/validate_layer.js rename to src/style-spec/validate/validate_layer.ts diff --git a/src/style-spec/validate/validate_layout_property.js b/src/style-spec/validate/validate_layout_property.ts similarity index 100% rename from src/style-spec/validate/validate_layout_property.js rename to src/style-spec/validate/validate_layout_property.ts diff --git a/src/style-spec/validate/validate_light.js b/src/style-spec/validate/validate_light.ts similarity index 100% rename from src/style-spec/validate/validate_light.js rename to src/style-spec/validate/validate_light.ts diff --git a/src/style-spec/validate/validate_number.js b/src/style-spec/validate/validate_number.ts similarity index 100% rename from src/style-spec/validate/validate_number.js rename to src/style-spec/validate/validate_number.ts diff --git a/src/style-spec/validate/validate_object.js b/src/style-spec/validate/validate_object.ts similarity index 100% rename from src/style-spec/validate/validate_object.js rename to src/style-spec/validate/validate_object.ts diff --git a/src/style-spec/validate/validate_paint_property.js b/src/style-spec/validate/validate_paint_property.ts similarity index 100% rename from src/style-spec/validate/validate_paint_property.js rename to src/style-spec/validate/validate_paint_property.ts diff --git a/src/style-spec/validate/validate_property.js b/src/style-spec/validate/validate_property.ts similarity index 100% rename from src/style-spec/validate/validate_property.js rename to src/style-spec/validate/validate_property.ts diff --git a/src/style-spec/validate/validate_source.js b/src/style-spec/validate/validate_source.ts similarity index 97% rename from src/style-spec/validate/validate_source.js rename to src/style-spec/validate/validate_source.ts index 820557d148..322271cbdd 100644 --- a/src/style-spec/validate/validate_source.js +++ b/src/style-spec/validate/validate_source.ts @@ -85,7 +85,7 @@ export default function validateSource(options) { }); case 'canvas': - return [new ValidationError(key, null, `Please use runtime APIs to add canvas sources, rather than including them in stylesheets.`, 'source.canvas')]; + return [new ValidationError(key, null, 'Please use runtime APIs to add canvas sources, rather than including them in stylesheets.', 'source.canvas')]; default: return validateEnum({ diff --git a/src/style-spec/validate/validate_string.js b/src/style-spec/validate/validate_string.ts similarity index 100% rename from src/style-spec/validate/validate_string.js rename to src/style-spec/validate/validate_string.ts diff --git a/src/style-spec/validate_style.min.js b/src/style-spec/validate_style.min.ts similarity index 100% rename from src/style-spec/validate_style.min.js rename to src/style-spec/validate_style.min.ts diff --git a/src/style-spec/validate_style.js b/src/style-spec/validate_style.ts similarity index 100% rename from src/style-spec/validate_style.js rename to src/style-spec/validate_style.ts diff --git a/src/style-spec/visit.js b/src/style-spec/visit.ts similarity index 70% rename from src/style-spec/visit.js rename to src/style-spec/visit.ts index 2911c1f036..880e39eb6d 100644 --- a/src/style-spec/visit.js +++ b/src/style-spec/visit.ts @@ -1,5 +1,3 @@ -// @flow - import Reference from './reference/v8.json'; import type {StylePropertySpecification} from './style-spec'; import type { @@ -13,16 +11,16 @@ import type { function getPropertyReference(propertyName): StylePropertySpecification { for (let i = 0; i < Reference.layout.length; i++) { for (const key in Reference[Reference.layout[i]]) { - if (key === propertyName) return (Reference[Reference.layout[i]][key]: any); + if (key === propertyName) return Reference[Reference.layout[i]][key] as any; } } for (let i = 0; i < Reference.paint.length; i++) { for (const key in Reference[Reference.paint[i]]) { - if (key === propertyName) return (Reference[Reference.paint[i]][key]: any); + if (key === propertyName) return Reference[Reference.paint[i]][key] as any; } } - return (null: any); + return null; } export function eachSource(style: StyleSpecification, callback: (_: SourceSpecification) => void) { @@ -37,21 +35,28 @@ export function eachLayer(style: StyleSpecification, callback: (_: LayerSpecific } } -type PropertyCallback = ({ - path: [string, 'paint' | 'layout', string], // [layerid, paint/layout, property key] - key: string, - value: PropertyValueSpecification | DataDrivenPropertyValueSpecification, - reference: StylePropertySpecification, - set: (PropertyValueSpecification | DataDrivenPropertyValueSpecification) => void -}) => void; +type PropertyCallback = ( + a: { + path: [string, 'paint' | 'layout', string]; // [layerid, paint/layout, property key], + key: string; + value: PropertyValueSpecification | DataDrivenPropertyValueSpecification; + reference: StylePropertySpecification; + set: ( + a: PropertyValueSpecification | DataDrivenPropertyValueSpecification + ) => void; + } +) => void; export function eachProperty( style: StyleSpecification, - options: {paint?: boolean, layout?: boolean}, + options: { + paint?: boolean; + layout?: boolean; + }, callback: PropertyCallback ) { function inner(layer, propertyType: 'paint' | 'layout') { - const properties = (layer[propertyType]: any); + const properties = (layer[propertyType] as any); if (!properties) return; Object.keys(properties).forEach((key) => { callback({ diff --git a/src/style/create_style_layer.js b/src/style/create_style_layer.ts similarity index 99% rename from src/style/create_style_layer.js rename to src/style/create_style_layer.ts index aae084e6e8..11fe8d434c 100644 --- a/src/style/create_style_layer.js +++ b/src/style/create_style_layer.ts @@ -1,5 +1,3 @@ -// @flow - import circle from './style_layer/circle_style_layer'; import heatmap from './style_layer/heatmap_style_layer'; import hillshade from './style_layer/hillshade_style_layer'; diff --git a/src/style/evaluation_parameters.js b/src/style/evaluation_parameters.ts similarity index 93% rename from src/style/evaluation_parameters.js rename to src/style/evaluation_parameters.ts index a0bdc3930e..757ac01c92 100644 --- a/src/style/evaluation_parameters.js +++ b/src/style/evaluation_parameters.ts @@ -1,5 +1,3 @@ -// @flow - import ZoomHistory from './zoom_history'; import {isStringInSupportedScript} from '../util/script_detection'; import {plugin as rtlTextPlugin} from '../source/rtl_text_plugin'; @@ -7,9 +5,9 @@ import {plugin as rtlTextPlugin} from '../source/rtl_text_plugin'; import type {TransitionSpecification} from '../style-spec/types'; export type CrossfadeParameters = { - fromScale: number, - toScale: number, - t: number + fromScale: number; + toScale: number; + t: number; }; class EvaluationParameters { @@ -20,7 +18,7 @@ class EvaluationParameters { transition: TransitionSpecification; // "options" may also be another EvaluationParameters to copy, see CrossFadedProperty.possiblyEvaluate - constructor(zoom: number, options?: *) { + constructor(zoom: number, options?: any) { this.zoom = zoom; if (options) { diff --git a/src/style/format_section_override.js b/src/style/format_section_override.ts similarity index 95% rename from src/style/format_section_override.js rename to src/style/format_section_override.ts index fd69be19ee..9b7e7c9754 100644 --- a/src/style/format_section_override.js +++ b/src/style/format_section_override.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import type {Expression} from '../style-spec/expression/expression'; import type EvaluationContext from '../style-spec/expression/evaluation_context'; @@ -38,7 +36,7 @@ export default class FormatSectionOverride implements Expression { eachChild(fn: (_: Expression) => void) { if (!this.defaultValue.isConstant()) { - const expr: ZoomConstantExpression<'source'> = ((this.defaultValue.value): any); + const expr: ZoomConstantExpression<'source'> = (this.defaultValue.value as any); fn(expr._styleExpression.expression); } } diff --git a/src/style/light.js b/src/style/light.ts similarity index 69% rename from src/style/light.js rename to src/style/light.ts index 99c24d0d23..ac9fd4a358 100644 --- a/src/style/light.js +++ b/src/style/light.ts @@ -1,8 +1,6 @@ -// @flow - import styleSpec from '../style-spec/reference/latest'; -import {endsWith, extend, sphericalToCartesian} from '../util/util'; +import {extend, sphericalToCartesian} from '../util/util'; import {Evented} from '../util/evented'; import { validateStyle, @@ -26,19 +24,22 @@ import type { import type {LightSpecification} from '../style-spec/types'; type LightPosition = { - x: number, - y: number, - z: number + x: number; + y: number; + z: number; }; class LightPositionProperty implements Property<[number, number, number], LightPosition> { specification: StylePropertySpecification; constructor() { - this.specification = styleSpec.light.position; + this.specification = styleSpec.light.position as StylePropertySpecification; } - possiblyEvaluate(value: PropertyValue<[number, number, number], LightPosition>, parameters: EvaluationParameters): LightPosition { + possiblyEvaluate( + value: PropertyValue<[number, number, number], LightPosition>, + parameters: EvaluationParameters + ): LightPosition { return sphericalToCartesian(value.expression.evaluate(parameters)); } @@ -51,18 +52,25 @@ class LightPositionProperty implements Property<[number, number, number], LightP } } -type Props = {| - "anchor": DataConstantProperty<"map" | "viewport">, - "position": LightPositionProperty, - "color": DataConstantProperty, - "intensity": DataConstantProperty, -|}; +type Props = { + 'anchor': DataConstantProperty<'map' | 'viewport'>; + 'position': LightPositionProperty; + 'color': DataConstantProperty; + 'intensity': DataConstantProperty; +}; + +type PropsPossiblyEvaluated = { + 'anchor': 'map' | 'viewport'; + 'position': LightPosition; + 'color': Color; + 'intensity': number; +}; const properties: Properties = new Properties({ - "anchor": new DataConstantProperty(styleSpec.light.anchor), - "position": new LightPositionProperty(), - "color": new DataConstantProperty(styleSpec.light.color), - "intensity": new DataConstantProperty(styleSpec.light.intensity), + 'anchor': new DataConstantProperty(styleSpec.light.anchor as StylePropertySpecification), + 'position': new LightPositionProperty(), + 'color': new DataConstantProperty(styleSpec.light.color as StylePropertySpecification), + 'intensity': new DataConstantProperty(styleSpec.light.intensity as StylePropertySpecification), }); const TRANSITION_SUFFIX = '-transition'; @@ -73,7 +81,7 @@ const TRANSITION_SUFFIX = '-transition'; class Light extends Evented { _transitionable: Transitionable; _transitioning: Transitioning; - properties: PossiblyEvaluated; + properties: PossiblyEvaluated; constructor(lightOptions?: LightSpecification) { super(); @@ -93,10 +101,10 @@ class Light extends Evented { for (const name in light) { const value = light[name]; - if (endsWith(name, TRANSITION_SUFFIX)) { - this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), value); + if (name.endsWith(TRANSITION_SUFFIX)) { + this._transitionable.setTransition(name.slice(0, -TRANSITION_SUFFIX.length) as keyof Props, value); } else { - this._transitionable.setValue(name, value); + this._transitionable.setValue(name as keyof Props, value); } } } @@ -113,7 +121,9 @@ class Light extends Evented { this.properties = this._transitioning.possiblyEvaluate(parameters); } - _validate(validate: Function, value: mixed, options?: {validate?: boolean}) { + _validate(validate: Function, value: unknown, options?: { + validate?: boolean; + }) { if (options && options.validate === false) { return false; } diff --git a/src/style/load_glyph_range.js b/src/style/load_glyph_range.ts similarity index 82% rename from src/style/load_glyph_range.js rename to src/style/load_glyph_range.ts index d57efd6f02..8b8eaded0c 100644 --- a/src/style/load_glyph_range.js +++ b/src/style/load_glyph_range.ts @@ -1,5 +1,3 @@ -// @flow - import {getArrayBuffer, ResourceType} from '../util/ajax'; import parseGlyphPBF from './parse_glyph_pbf'; @@ -12,7 +10,9 @@ export default function (fontstack: string, range: number, urlTemplate: string, requestManager: RequestManager, - callback: Callback<{[_: number]: StyleGlyph | null}>) { + callback: Callback<{ + [_: number]: StyleGlyph | null; + }>) { const begin = range * 256; const end = begin + 255; @@ -22,7 +22,7 @@ export default function (fontstack: string, .replace('{range}', `${begin}-${end}`), ResourceType.Glyphs); - getArrayBuffer(request, (err: ?Error, data: ?ArrayBuffer) => { + getArrayBuffer(request, (err?: Error | null, data?: ArrayBuffer | null) => { if (err) { callback(err); } else if (data) { diff --git a/src/style/load_sprite.js b/src/style/load_sprite.ts similarity index 85% rename from src/style/load_sprite.js rename to src/style/load_sprite.ts index 2f166ca0c0..f481343bd4 100644 --- a/src/style/load_sprite.js +++ b/src/style/load_sprite.ts @@ -1,5 +1,3 @@ -// @flow - import {getJSON, getImage, ResourceType} from '../util/ajax'; import browser from '../util/browser'; @@ -10,13 +8,15 @@ import type {RequestManager} from '../util/mapbox'; import type {Callback} from '../types/callback'; import type {Cancelable} from '../types/cancelable'; -export default function(baseURL: string, - requestManager: RequestManager, - callback: Callback<{[_: string]: StyleImage}>): Cancelable { +export default function( + baseURL: string, + requestManager: RequestManager, + callback: Callback<{[_: string]: StyleImage}> +): Cancelable { let json: any, image, error; - const format = browser.devicePixelRatio > 1 ? '@2x' : ''; + const format = devicePixelRatio > 1 ? '@2x' : ''; - let jsonRequest = getJSON(requestManager.transformRequest(requestManager.normalizeSpriteURL(baseURL, format, '.json'), ResourceType.SpriteJSON), (err: ?Error, data: ?Object) => { + let jsonRequest = getJSON(requestManager.transformRequest(requestManager.normalizeSpriteURL(baseURL, format, '.json'), ResourceType.SpriteJSON), (err?: Error | null, data?: any | null) => { jsonRequest = null; if (!error) { error = err; diff --git a/src/style/parse_glyph_pbf.js b/src/style/parse_glyph_pbf.ts similarity index 89% rename from src/style/parse_glyph_pbf.js rename to src/style/parse_glyph_pbf.ts index c5536d721e..4af04cbfc3 100644 --- a/src/style/parse_glyph_pbf.js +++ b/src/style/parse_glyph_pbf.ts @@ -1,5 +1,3 @@ -// @flow - import {AlphaImage} from '../util/image'; import Protobuf from 'pbf'; @@ -27,7 +25,7 @@ function readFontstack(tag: number, glyphs: Array, pbf: Protobuf) { } } -function readGlyph(tag: number, glyph: Object, pbf: Protobuf) { +function readGlyph(tag: number, glyph: any, pbf: Protobuf) { if (tag === 1) glyph.id = pbf.readVarint(); else if (tag === 2) glyph.bitmap = pbf.readBytes(); else if (tag === 3) glyph.width = pbf.readVarint(); @@ -37,7 +35,7 @@ function readGlyph(tag: number, glyph: Object, pbf: Protobuf) { else if (tag === 7) glyph.advance = pbf.readVarint(); } -export default function (data: ArrayBuffer | Uint8Array): Array { +export default function(data: ArrayBuffer | Uint8Array): Array { return new Protobuf(data).readFields(readFontstacks, []); } diff --git a/src/style/pauseable_placement.js b/src/style/pauseable_placement.ts similarity index 83% rename from src/style/pauseable_placement.js rename to src/style/pauseable_placement.ts index 7143206cae..05f8a9da17 100644 --- a/src/style/pauseable_placement.js +++ b/src/style/pauseable_placement.ts @@ -1,5 +1,3 @@ -// @flow - import browser from '../util/browser'; import {Placement} from '../symbol/placement'; @@ -14,7 +12,9 @@ class LayerPlacement { _sortAcrossTiles: boolean; _currentTileIndex: number; _currentPartIndex: number; - _seenCrossTileIDs: { [string | number]: boolean }; + _seenCrossTileIDs: { + [k in string | number]: boolean; + }; _bucketParts: Array; constructor(styleLayer: SymbolStyleLayer) { @@ -43,7 +43,7 @@ class LayerPlacement { if (this._sortAcrossTiles) { this._sortAcrossTiles = false; - bucketParts.sort((a, b) => ((a.sortKey: any): number) - ((b.sortKey: any): number)); + bucketParts.sort((a, b) => (a.sortKey as any as number) - (b.sortKey as any as number)); } while (this._currentPartIndex < bucketParts.length) { @@ -65,15 +65,17 @@ class PauseablePlacement { _currentPlacementIndex: number; _forceFullPlacement: boolean; _showCollisionBoxes: boolean; - _inProgressLayer: ?LayerPlacement; - - constructor(transform: Transform, order: Array, - forceFullPlacement: boolean, - showCollisionBoxes: boolean, - fadeDuration: number, - crossSourceCollisions: boolean, - prevPlacement?: Placement) { - + _inProgressLayer: LayerPlacement | undefined | null; + + constructor( + transform: Transform, + order: Array, + forceFullPlacement: boolean, + showCollisionBoxes: boolean, + fadeDuration: number, + crossSourceCollisions: boolean, + prevPlacement?: Placement + ) { this.placement = new Placement(transform, fadeDuration, crossSourceCollisions, prevPlacement); this._currentPlacementIndex = order.length - 1; this._forceFullPlacement = forceFullPlacement; @@ -81,11 +83,15 @@ class PauseablePlacement { this._done = false; } - isDone(): boolean { + isDone() { return this._done; } - continuePlacement(order: Array, layers: {[_: string]: StyleLayer}, layerTiles: {[_: string]: Array}) { + continuePlacement( + order: Array, + layers: {[_: string]: StyleLayer}, + layerTiles: {[_: string]: Array} + ) { const startTime = browser.now(); const shouldPausePlacement = () => { @@ -102,7 +108,7 @@ class PauseablePlacement { (!layer.maxzoom || layer.maxzoom > placementZoom)) { if (!this._inProgressLayer) { - this._inProgressLayer = new LayerPlacement(((layer: any): SymbolStyleLayer)); + this._inProgressLayer = new LayerPlacement(layer as any as SymbolStyleLayer); } const pausePlacement = this._inProgressLayer.continuePlacement(layerTiles[layer.source], this.placement, this._showCollisionBoxes, layer, shouldPausePlacement); diff --git a/src/style/properties.js b/src/style/properties.ts similarity index 75% rename from src/style/properties.js rename to src/style/properties.ts index 57829f85bd..f8cc953326 100644 --- a/src/style/properties.js +++ b/src/style/properties.ts @@ -1,21 +1,19 @@ -// @flow - import assert from 'assert'; import {clone, extend, easeCubicInOut} from '../util/util'; import * as interpolate from '../style-spec/util/interpolate'; -import {normalizePropertyExpression} from '../style-spec/expression'; import Color from '../style-spec/util/color'; import {register} from '../util/web_worker_transfer'; import EvaluationParameters from './evaluation_parameters'; -import type {CanonicalTileID} from '../source/tile_id'; -import type {StylePropertySpecification} from '../style-spec/style-spec'; -import type { +import {CanonicalTileID} from '../source/tile_id'; +import {StylePropertySpecification} from '../style-spec/style-spec'; +import { TransitionSpecification, PropertyValueSpecification } from '../style-spec/types'; -import type { +import { + normalizePropertyExpression, Feature, FeatureState, StylePropertyExpression, @@ -26,8 +24,8 @@ import type { type TimePoint = number; export type CrossFaded = { - to: T, - from: T + to: T; + from: T; }; /** @@ -66,9 +64,14 @@ export type CrossFaded = { * @private */ export interface Property { - specification: StylePropertySpecification; - possiblyEvaluate(value: PropertyValue, parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): R; - interpolate(a: R, b: R, t: number): R; + specification: StylePropertySpecification; + possiblyEvaluate( + value: PropertyValue, + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): R; + interpolate(a: R, b: R, t: number): R; } /** @@ -105,7 +108,11 @@ export class PropertyValue { return this.expression.kind === 'source' || this.expression.kind === 'composite'; } - possiblyEvaluate(parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): R { + possiblyEvaluate( + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): R { return this.property.possiblyEvaluate(this, parameters, canonical, availableImages); } } @@ -113,8 +120,8 @@ export class PropertyValue { // ------- Transitionable ------- export type TransitionParameters = { - now: TimePoint, - transition: TransitionSpecification + now: TimePoint; + transition: TransitionSpecification; }; /** @@ -139,8 +146,7 @@ class TransitionablePropertyValue { this.value = new PropertyValue(property, undefined); } - transitioned(parameters: TransitionParameters, - prior: TransitioningPropertyValue): TransitioningPropertyValue { + transitioned(parameters: TransitionParameters, prior: TransitioningPropertyValue): TransitioningPropertyValue { return new TransitioningPropertyValue(this.property, this.value, prior, // eslint-disable-line no-use-before-define extend({}, parameters.transition, this.transition), parameters.now); } @@ -150,15 +156,6 @@ class TransitionablePropertyValue { } } -/** - * A helper type: given an object type `Properties` whose values are each of type `Property`, it calculates - * an object type with the same keys and values of type `TransitionablePropertyValue`. - * - * @private - */ -type TransitionablePropertyValues - = $Exact<$ObjMap(p: Property) => TransitionablePropertyValue>> - /** * `Transitionable` stores a map of all (property name, `TransitionablePropertyValue`) pairs for paint properties of a * given layer type. It can calculate the `TransitioningPropertyValue`s for all of them at once, producing a @@ -166,21 +163,21 @@ type TransitionablePropertyValues * * @private */ -export class Transitionable { +export class Transitionable { _properties: Properties; - _values: TransitionablePropertyValues; + _values: {[K in keyof Props]: TransitionablePropertyValue}; constructor(properties: Properties) { this._properties = properties; - this._values = (Object.create(properties.defaultTransitionablePropertyValues): any); + this._values = (Object.create(properties.defaultTransitionablePropertyValues) as any); } - getValue(name: S): PropertyValueSpecification | void { + getValue(name: S): PropertyValueSpecification | void { return clone(this._values[name].value.value); } - setValue(name: S, value: PropertyValueSpecification | void) { - if (!this._values.hasOwnProperty(name)) { + setValue(name: S, value: PropertyValueSpecification | void) { + if (!Object.prototype.hasOwnProperty.call(this._values, name)) { this._values[name] = new TransitionablePropertyValue(this._values[name].property); } // Note that we do not _remove_ an own property in the case where a value is being reset @@ -188,12 +185,12 @@ export class Transitionable { this._values[name].value = new PropertyValue(this._values[name].property, value === null ? undefined : clone(value)); } - getTransition(name: S): TransitionSpecification | void { + getTransition(name: S): TransitionSpecification | void { return clone(this._values[name].transition); } - setTransition(name: S, value: TransitionSpecification | void) { - if (!this._values.hasOwnProperty(name)) { + setTransition(name: S, value: TransitionSpecification | void) { + if (!Object.prototype.hasOwnProperty.call(this._values, name)) { this._values[name] = new TransitionablePropertyValue(this._values[name].property); } this._values[name].transition = clone(value) || undefined; @@ -202,12 +199,12 @@ export class Transitionable { serialize() { const result: any = {}; for (const property of Object.keys(this._values)) { - const value = this.getValue(property); + const value = this.getValue(property as keyof Props); if (value !== undefined) { result[property] = value; } - const transition = this.getTransition(property); + const transition = this.getTransition(property as keyof Props); if (transition !== undefined) { result[`${property}-transition`] = transition; } @@ -246,13 +243,13 @@ export class Transitionable { class TransitioningPropertyValue { property: Property; value: PropertyValue; - prior: ?TransitioningPropertyValue; + prior: TransitioningPropertyValue | undefined | null; begin: TimePoint; end: TimePoint; constructor(property: Property, value: PropertyValue, - prior: ?TransitioningPropertyValue, + prior: TransitioningPropertyValue | undefined | null, transition: TransitionSpecification, now: TimePoint) { this.property = property; @@ -264,7 +261,11 @@ class TransitioningPropertyValue { } } - possiblyEvaluate(parameters: EvaluationParameters, canonical: CanonicalTileID, availableImages: Array): R { + possiblyEvaluate( + parameters: EvaluationParameters, + canonical: CanonicalTileID, + availableImages: Array + ): R { const now = parameters.now || 0; const finalValue = this.value.possiblyEvaluate(parameters, canonical, availableImages); const prior = this.prior; @@ -292,15 +293,6 @@ class TransitioningPropertyValue { } } -/** - * A helper type: given an object type `Properties` whose values are each of type `Property`, it calculates - * an object type with the same keys and values of type `TransitioningPropertyValue`. - * - * @private - */ -type TransitioningPropertyValues - = $Exact<$ObjMap(p: Property) => TransitioningPropertyValue>> - /** * `Transitioning` stores a map of all (property name, `TransitioningPropertyValue`) pairs for paint properties of a * given layer type. It can calculate the possibly-evaluated values for all of them at once, producing a @@ -308,16 +300,20 @@ type TransitioningPropertyValues * * @private */ -export class Transitioning { +export class Transitioning { _properties: Properties; - _values: TransitioningPropertyValues; + _values: {[K in keyof Props]: PossiblyEvaluatedPropertyValue}; constructor(properties: Properties) { this._properties = properties; - this._values = (Object.create(properties.defaultTransitioningPropertyValues): any); + this._values = (Object.create(properties.defaultTransitioningPropertyValues) as any); } - possiblyEvaluate(parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): PossiblyEvaluated { + possiblyEvaluate( + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): PossiblyEvaluated { const result = new PossiblyEvaluated(this._properties); // eslint-disable-line no-use-before-define for (const property of Object.keys(this._values)) { result._values[property] = this._values[property].possiblyEvaluate(parameters, canonical, availableImages); @@ -337,15 +333,6 @@ export class Transitioning { // ------- Layout ------- -/** - * A helper type: given an object type `Properties` whose values are each of type `Property`, it calculates - * an object type with the same keys and values of type `PropertyValue`. - * - * @private - */ -type PropertyValues - = $Exact<$ObjMap(p: Property) => PropertyValue>> - /** * Because layout properties are not transitionable, they have a simpler representation and evaluation chain than * paint properties: `PropertyValue`s are possibly evaluated, producing possibly evaluated values, which are then @@ -357,27 +344,27 @@ type PropertyValues * * @private */ -export class Layout { +export class Layout { _properties: Properties; - _values: PropertyValues; + _values: {[K in keyof Props]: PropertyValue>}; constructor(properties: Properties) { this._properties = properties; - this._values = (Object.create(properties.defaultPropertyValues): any); + this._values = (Object.create(properties.defaultPropertyValues) as any); } - getValue(name: S) { + getValue(name: S) { return clone(this._values[name].value); } - setValue(name: S, value: *) { - this._values[name] = new PropertyValue(this._values[name].property, value === null ? undefined : clone(value)); + setValue(name: S, value: any) { + this._values[name] = new PropertyValue(this._values[name].property, value === null ? undefined : clone(value)) as any; } serialize() { const result: any = {}; for (const property of Object.keys(this._values)) { - const value = this.getValue(property); + const value = this.getValue(property as keyof Props); if (value !== undefined) { result[property] = value; } @@ -385,7 +372,11 @@ export class Layout { return result; } - possiblyEvaluate(parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): PossiblyEvaluated { + possiblyEvaluate( + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): PossiblyEvaluated { const result = new PossiblyEvaluated(this._properties); // eslint-disable-line no-use-before-define for (const property of Object.keys(this._values)) { result._values[property] = this._values[property].possiblyEvaluate(parameters, canonical, availableImages); @@ -417,10 +408,10 @@ export class Layout { * * @private */ -type PossiblyEvaluatedValue = - | {kind: 'constant', value: T} - | SourceExpression - | CompositeExpression; +type PossiblyEvaluatedValue = { + kind: 'constant'; + value: T; +} | SourceExpression | CompositeExpression; /** * `PossiblyEvaluatedPropertyValue` is used for data-driven paint and layout property values. It holds a @@ -453,46 +444,31 @@ export class PossiblyEvaluatedPropertyValue { } } - evaluate(feature: Feature, featureState: FeatureState, canonical?: CanonicalTileID, availableImages?: Array): T { + evaluate( + feature: Feature, + featureState: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array + ): T { return this.property.evaluate(this.value, this.parameters, feature, featureState, canonical, availableImages); } } -/** - * A helper type: given an object type `Properties` whose values are each of type `Property`, it calculates - * an object type with the same keys, and values of type `R`. - * - * For properties that don't allow data-driven values, `R` is a scalar type such as `number`, `string`, or `Color`. - * For data-driven properties, it is `PossiblyEvaluatedPropertyValue`. Critically, the type definitions are set up - * in a way that allows flow to know which of these two cases applies for any given property name, and if you attempt - * to use a `PossiblyEvaluatedPropertyValue` as if it was a scalar, or vice versa, you will get a type error. (However, - * there's at least one case in which flow fails to produce a type error that you should be aware of: in a context such - * as `layer.paint.get('foo-opacity') === 0`, if `foo-opacity` is data-driven, than the left-hand side is of type - * `PossiblyEvaluatedPropertyValue`, but flow will not complain about comparing this to a number using `===`. - * See https://github.com/facebook/flow/issues/2359.) - * - * There's also a third, special case possiblity for `R`: for cross-faded properties, it's `?CrossFaded`. - * - * @private - */ -type PossiblyEvaluatedPropertyValues - = $Exact<$ObjMap(p: Property) => R>> - /** * `PossiblyEvaluated` stores a map of all (property name, `R`) pairs for paint or layout properties of a * given layer type. * @private */ -export class PossiblyEvaluated { +export class PossiblyEvaluated { _properties: Properties; - _values: PossiblyEvaluatedPropertyValues; + _values: PossibleEvaluatedProps; constructor(properties: Properties) { this._properties = properties; - this._values = (Object.create(properties.defaultPossiblyEvaluatedValues): any); + this._values = (Object.create(properties.defaultPossiblyEvaluatedValues) as any); } - get(name: S): $ElementType, S> { + get(name: S): PossibleEvaluatedProps[S] { return this._values[name]; } } @@ -517,7 +493,7 @@ export class DataConstantProperty implements Property { } interpolate(a: T, b: T, t: number): T { - const interp: ?(a: T, b: T, t: number) => T = (interpolate: any)[this.specification.type]; + const interp: ((a: T, b: T, t: number) => T) | undefined | null = (interpolate as any)[this.specification.type]; if (interp) { return interp(a, b, t); } else { @@ -535,24 +511,31 @@ export class DataConstantProperty implements Property { */ export class DataDrivenProperty implements Property> { specification: StylePropertySpecification; - overrides: ?Object; + overrides: any; - constructor(specification: StylePropertySpecification, overrides?: Object) { + constructor(specification: StylePropertySpecification, overrides?: any) { this.specification = specification; this.overrides = overrides; } - possiblyEvaluate(value: PropertyValue>, parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): PossiblyEvaluatedPropertyValue { + possiblyEvaluate( + value: PropertyValue>, + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): PossiblyEvaluatedPropertyValue { if (value.expression.kind === 'constant' || value.expression.kind === 'camera') { - return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: value.expression.evaluate(parameters, (null: any), {}, canonical, availableImages)}, parameters); + return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: value.expression.evaluate(parameters, null, {}, canonical, availableImages)}, parameters); } else { return new PossiblyEvaluatedPropertyValue(this, value.expression, parameters); } } - interpolate(a: PossiblyEvaluatedPropertyValue, - b: PossiblyEvaluatedPropertyValue, - t: number): PossiblyEvaluatedPropertyValue { + interpolate( + a: PossiblyEvaluatedPropertyValue, + b: PossiblyEvaluatedPropertyValue, + t: number + ): PossiblyEvaluatedPropertyValue { // If either possibly-evaluated value is non-constant, give up: we aren't able to interpolate data-driven values. if (a.value.kind !== 'constant' || b.value.kind !== 'constant') { return a; @@ -566,10 +549,10 @@ export class DataDrivenProperty implements Property T = (interpolate: any)[this.specification.type]; + const interp: ((a: T, b: T, t: number) => T) | undefined | null = (interpolate as any)[this.specification.type]; if (interp) { return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: interp(a.value.value, b.value.value, t)}, a.parameters); } else { @@ -577,7 +560,14 @@ export class DataDrivenProperty implements Property, parameters: EvaluationParameters, feature: Feature, featureState: FeatureState, canonical?: CanonicalTileID, availableImages?: Array): T { + evaluate( + value: PossiblyEvaluatedValue, + parameters: EvaluationParameters, + feature: Feature, + featureState: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array + ): T { if (value.kind === 'constant') { return value.value; } else { @@ -593,14 +583,19 @@ export class DataDrivenProperty implements Property extends DataDrivenProperty> { +export class CrossFadedDataDrivenProperty extends DataDrivenProperty | undefined | null> { - possiblyEvaluate(value: PropertyValue, PossiblyEvaluatedPropertyValue>>, parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): PossiblyEvaluatedPropertyValue> { + possiblyEvaluate( + value: PropertyValue | undefined | null, PossiblyEvaluatedPropertyValue | undefined | null>>, + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): PossiblyEvaluatedPropertyValue | undefined | null> { if (value.value === undefined) { return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: undefined}, parameters); } else if (value.expression.kind === 'constant') { - const evaluatedValue = value.expression.evaluate(parameters, (null: any), {}, canonical, availableImages); - const isImageExpression = value.property.specification.type === 'resolvedImage'; + const evaluatedValue = value.expression.evaluate(parameters, null, {}, canonical, availableImages); + const isImageExpression = value.property.specification.type as any === 'resolvedImage'; const constantValue = isImageExpression && typeof evaluatedValue !== 'string' ? evaluatedValue.name : evaluatedValue; const constant = this._calculate(constantValue, constantValue, constantValue, parameters); return new PossiblyEvaluatedPropertyValue(this, {kind: 'constant', value: constant}, parameters); @@ -617,7 +612,14 @@ export class CrossFadedDataDrivenProperty extends DataDrivenProperty>, globals: EvaluationParameters, feature: Feature, featureState: FeatureState, canonical?: CanonicalTileID, availableImages?: Array): ?CrossFaded { + evaluate( + value: PossiblyEvaluatedValue | undefined | null>, + globals: EvaluationParameters, + feature: Feature, + featureState: FeatureState, + canonical?: CanonicalTileID, + availableImages?: Array + ): CrossFaded | undefined | null { if (value.kind === 'source') { const constant = value.evaluate(globals, feature, featureState, canonical, availableImages); return this._calculate(constant, constant, constant, globals); @@ -637,7 +639,7 @@ export class CrossFadedDataDrivenProperty extends DataDrivenProperty parameters.zoomHistory.lastIntegerZoom ? {from: min, to: mid} : {from: max, to: mid}; } - interpolate(a: PossiblyEvaluatedPropertyValue>): PossiblyEvaluatedPropertyValue> { + interpolate(a: PossiblyEvaluatedPropertyValue | undefined | null>): PossiblyEvaluatedPropertyValue | undefined | null> { return a; } } @@ -647,18 +649,23 @@ export class CrossFadedDataDrivenProperty extends DataDrivenProperty implements Property> { +export class CrossFadedProperty implements Property | undefined | null> { specification: StylePropertySpecification; constructor(specification: StylePropertySpecification) { this.specification = specification; } - possiblyEvaluate(value: PropertyValue>, parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): ?CrossFaded { + possiblyEvaluate( + value: PropertyValue | undefined | null>, + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): CrossFaded | undefined | null { if (value.value === undefined) { return undefined; } else if (value.expression.kind === 'constant') { - const constant = value.expression.evaluate(parameters, (null: any), {}, canonical, availableImages); + const constant = value.expression.evaluate(parameters, null, {}, canonical, availableImages); return this._calculate(constant, constant, constant, parameters); } else { assert(!value.isDataDriven()); @@ -670,12 +677,12 @@ export class CrossFadedProperty implements Property> { } } - _calculate(min: T, mid: T, max: T, parameters: EvaluationParameters): ?CrossFaded { + _calculate(min: T, mid: T, max: T, parameters: EvaluationParameters): CrossFaded | undefined | null { const z = parameters.zoom; return z > parameters.zoomHistory.lastIntegerZoom ? {from: min, to: mid} : {from: max, to: mid}; } - interpolate(a: ?CrossFaded): ?CrossFaded { + interpolate(a?: CrossFaded | null): CrossFaded | undefined | null { return a; } } @@ -695,8 +702,13 @@ export class ColorRampProperty implements Property { this.specification = specification; } - possiblyEvaluate(value: PropertyValue, parameters: EvaluationParameters, canonical?: CanonicalTileID, availableImages?: Array): boolean { - return !!value.expression.evaluate(parameters, (null: any), {}, canonical, availableImages); + possiblyEvaluate( + value: PropertyValue, + parameters: EvaluationParameters, + canonical?: CanonicalTileID, + availableImages?: Array + ): boolean { + return !!value.expression.evaluate(parameters, null, {}, canonical, availableImages); } interpolate(): boolean { return false; } @@ -713,24 +725,24 @@ export class ColorRampProperty implements Property { * * @private */ -export class Properties { +export class Properties { properties: Props; - defaultPropertyValues: PropertyValues; - defaultTransitionablePropertyValues: TransitionablePropertyValues; - defaultTransitioningPropertyValues: TransitioningPropertyValues; - defaultPossiblyEvaluatedValues: PossiblyEvaluatedPropertyValues; + defaultPropertyValues: {[K in keyof Props]: PropertyValue}; + defaultTransitionablePropertyValues: {[K in keyof Props]: TransitionablePropertyValue}; + defaultTransitioningPropertyValues: {[K in keyof Props]: TransitioningPropertyValue}; + defaultPossiblyEvaluatedValues: {[K in keyof Props]: PossiblyEvaluatedPropertyValue};; overridableProperties: Array; constructor(properties: Props) { this.properties = properties; - this.defaultPropertyValues = ({}: any); - this.defaultTransitionablePropertyValues = ({}: any); - this.defaultTransitioningPropertyValues = ({}: any); - this.defaultPossiblyEvaluatedValues = ({}: any); - this.overridableProperties = ([]: any); + this.defaultPropertyValues = ({} as any); + this.defaultTransitionablePropertyValues = ({} as any); + this.defaultTransitioningPropertyValues = ({} as any); + this.defaultPossiblyEvaluatedValues = ({} as any); + this.overridableProperties = ([] as any); for (const property in properties) { - const prop = properties[property]; + const prop = properties[property] as any; if (prop.specification.overridable) { this.overridableProperties.push(property); } @@ -741,7 +753,7 @@ export class Properties { this.defaultTransitioningPropertyValues[property] = defaultTransitionablePropertyValue.untransitioned(); this.defaultPossiblyEvaluatedValues[property] = - defaultPropertyValue.possiblyEvaluate(({}: any)); + defaultPropertyValue.possiblyEvaluate({} as any); } } } diff --git a/src/style/query_utils.js b/src/style/query_utils.ts similarity index 74% rename from src/style/query_utils.js rename to src/style/query_utils.ts index dc0f6754a8..e01b4afbee 100644 --- a/src/style/query_utils.js +++ b/src/style/query_utils.ts @@ -1,14 +1,16 @@ -// @flow +import Point from '../util/point'; -import Point from '@mapbox/point-geometry'; - -import type {PossiblyEvaluatedPropertyValue} from "./properties"; +import type {PossiblyEvaluatedPropertyValue} from './properties'; import type StyleLayer from '../style/style_layer'; import type CircleBucket from '../data/bucket/circle_bucket'; import type LineBucket from '../data/bucket/line_bucket'; -export function getMaximumPaintValue(property: string, layer: StyleLayer, bucket: CircleBucket<*> | LineBucket): number { - const value = ((layer.paint: any).get(property): PossiblyEvaluatedPropertyValue).value; +export function getMaximumPaintValue( + property: string, + layer: StyleLayer, + bucket: CircleBucket | LineBucket +): number { + const value = ((layer.paint as any).get(property) as PossiblyEvaluatedPropertyValue).value; if (value.kind === 'constant') { return value.value; } else { @@ -30,7 +32,7 @@ export function translate(queryGeometry: Array, } const pt = Point.convert(translate)._mult(pixelsToTileUnits); - if (translateAnchor === "viewport") { + if (translateAnchor === 'viewport') { pt._rotate(-bearing); } diff --git a/src/style/style.js b/src/style/style.ts similarity index 93% rename from src/style/style.js rename to src/style/style.ts index 7052394187..7ca2bd0a63 100644 --- a/src/style/style.js +++ b/src/style/style.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import {Event, ErrorEvent, Evented} from '../util/evented'; @@ -16,11 +14,8 @@ import {isMapboxURL} from '../util/mapbox'; import browser from '../util/browser'; import Dispatcher from '../util/dispatcher'; import {validateStyle, emitValidationErrors as _emitValidationErrors} from './validate_style'; -import { - getType as getSourceType, - setType as setSourceType, - type SourceClass -} from '../source/source'; +import {getType as getSourceType, setType as setSourceType} from '../source/source'; +import type {SourceClass} from '../source/source'; import {queryRenderedFeatures, queryRenderedSymbols, querySourceFeatures} from '../source/query_features'; import SourceCache from '../source/source_cache'; import GeoJSONSource from '../source/geojson_source'; @@ -42,7 +37,10 @@ import {validateCustomStyleLayer} from './style_layer/custom_style_layer'; // We're skipping validation errors with the `source.canvas` identifier in order // to continue to allow canvas sources to be added at runtime/updated in // smart setStyle (see https://github.com/mapbox/mapbox-gl-js/pull/6424): -const emitValidationErrors = (evented: Evented, errors: ?$ReadOnlyArray<{message: string, identifier?: string}>) => +const emitValidationErrors = (evented: Evented, errors?: ReadonlyArray<{ + message: string; + identifier?: string; +}> | null) => _emitValidationErrors(evented, errors && errors.filter(error => error.identifier !== 'source.canvas')); import type Map from '../ui/map'; @@ -54,7 +52,6 @@ import type EvaluationParameters from './evaluation_parameters'; import type {Placement} from '../symbol/placement'; import type {Cancelable} from '../types/cancelable'; import type {RequestParameters, ResponseCallback} from '../util/ajax'; -import type {GeoJSON} from '@mapbox/geojson-types'; import type { LayerSpecification, FilterSpecification, @@ -89,15 +86,15 @@ const ignoredDiffOperations = pick(diffOperations, [ 'setPitch' ]); -const empty = emptyStyle(); +const empty = emptyStyle() as StyleSpecification; export type StyleOptions = { - validate?: boolean, - localIdeographFontFamily?: string + validate?: boolean; + localIdeographFontFamily?: string; }; export type StyleSetterOptions = { - validate?: boolean + validate?: boolean; }; /** * @private @@ -111,15 +108,15 @@ class Style extends Evented { lineAtlas: LineAtlas; light: Light; - _request: ?Cancelable; - _spriteRequest: ?Cancelable; + _request: Cancelable | undefined | null; + _spriteRequest: Cancelable | undefined | null; _layers: {[_: string]: StyleLayer}; - _serializedLayers: {[_: string]: Object}; + _serializedLayers: {[_: string]: any}; _order: Array; sourceCaches: {[_: string]: SourceCache}; zoomHistory: ZoomHistory; _loaded: boolean; - _rtlTextPluginCallback: Function; + _rtlTextPluginCallback: (a: any) => any; _changed: boolean; _updatedSources: {[_: string]: 'clear' | 'reload'}; _updatedLayers: {[_: string]: true}; @@ -207,8 +204,8 @@ class Style extends Evented { } loadURL(url: string, options: { - validate?: boolean, - accessToken?: string + validate?: boolean; + accessToken?: string; } = {}) { this.fire(new Event('dataloading', {dataType: 'style'})); @@ -217,7 +214,7 @@ class Style extends Evented { url = this.map._requestManager.normalizeStyleURL(url, options.accessToken); const request = this.map._requestManager.transformRequest(url, ResourceType.Style); - this._request = getJSON(request, (error: ?Error, json: ?Object) => { + this._request = getJSON(request, (error?: Error | null, json?: any | null) => { this._request = null; if (error) { this.fire(new ErrorEvent(error)); @@ -337,7 +334,7 @@ class Style extends Evented { return true; } - _serializeLayers(ids: Array): Array { + _serializeLayers(ids: Array): Array { const serializedLayers = []; for (const id of ids) { const layer = this._layers[id]; @@ -513,7 +510,7 @@ class Style extends Evented { // `this.stylesheet`, which we update below return; } - (this: any)[op.command].apply(this, op.args); + (this as any)[op.command].apply(this, op.args); }); this.stylesheet = nextState; @@ -533,7 +530,7 @@ class Style extends Evented { this.imageManager.updateImage(id, image); } - getImage(id: string): ?StyleImage { + getImage(id: string): StyleImage | undefined | null { return this.imageManager.getImage(id); } @@ -574,7 +571,7 @@ class Style extends Evented { const shouldValidate = builtIns.indexOf(source.type) >= 0; if (shouldValidate && this._validate(validateStyle.source, `sources.${id}`, source, null, options)) return; - if (this.map && this.map._collectResourceTiming) (source: any).collectResourceTiming = true; + if (this.map && this.map._collectResourceTiming) (source as any).collectResourceTiming = true; const sourceCache = this.sourceCaches[id] = new SourceCache(id, source, this.dispatcher); sourceCache.style = this; sourceCache.setEventedParent(this, () => ({ @@ -621,11 +618,11 @@ class Style extends Evented { * @param {string} id id of the source * @param {GeoJSON|string} data GeoJSON source */ - setGeoJSONSourceData(id: string, data: GeoJSON | string) { + setGeoJSONSourceData(id: string, data: GeoJSON.GeoJSON | string) { this._checkLoaded(); assert(this.sourceCaches[id] !== undefined, 'There is no source with this ID'); - const geojsonSource: GeoJSONSource = (this.sourceCaches[id].getSource(): any); + const geojsonSource: GeoJSONSource = (this.sourceCaches[id].getSource() as any); assert(geojsonSource.type === 'geojson'); geojsonSource.setData(data); @@ -637,7 +634,7 @@ class Style extends Evented { * @param {string} id id of the desired source * @returns {Object} source */ - getSource(id: string): Object { + getSource(id: string): any { return this.sourceCaches[id] && this.sourceCaches[id].getSource(); } @@ -667,10 +664,10 @@ class Style extends Evented { layer = createStyleLayer(layerObject); } else { - if (typeof layerObject.source === 'object') { - this.addSource(id, layerObject.source); + if (typeof (layerObject as any).source === 'object') { + this.addSource(id, (layerObject as any).source); layerObject = clone(layerObject); - layerObject = (extend(layerObject, {source: id}): any); + layerObject = (extend(layerObject, {source: id}) as any); } // this layer is not in the style.layers array, so we pass an impossible array index @@ -793,7 +790,7 @@ class Style extends Evented { * @param {string} id - id of the desired layer * @returns {?Object} a layer, if one with the given `id` exists */ - getLayer(id: string): Object { + getLayer(id: string): any { return this._layers[id]; } @@ -807,7 +804,7 @@ class Style extends Evented { return id in this._layers; } - setLayerZoomRange(layerId: string, minzoom: ?number, maxzoom: ?number) { + setLayerZoomRange(layerId: string, minzoom?: number | null, maxzoom?: number | null) { this._checkLoaded(); const layer = this.getLayer(layerId); @@ -827,7 +824,7 @@ class Style extends Evented { this._updateLayer(layer); } - setFilter(layerId: string, filter: ?FilterSpecification, options: StyleSetterOptions = {}) { + setFilter(layerId: string, filter?: FilterSpecification | null, options: StyleSetterOptions = {}) { this._checkLoaded(); const layer = this.getLayer(layerId); @@ -918,7 +915,11 @@ class Style extends Evented { return this.getLayer(layer).getPaintProperty(name); } - setFeatureState(target: { source: string; sourceLayer?: string; id: string | number; }, state: Object) { + setFeatureState(target: { + source: string; + sourceLayer?: string; + id: string | number; + }, state: any) { this._checkLoaded(); const sourceId = target.source; const sourceLayer = target.sourceLayer; @@ -930,21 +931,25 @@ class Style extends Evented { } const sourceType = sourceCache.getSource().type; if (sourceType === 'geojson' && sourceLayer) { - this.fire(new ErrorEvent(new Error(`GeoJSON sources cannot have a sourceLayer parameter.`))); + this.fire(new ErrorEvent(new Error('GeoJSON sources cannot have a sourceLayer parameter.'))); return; } if (sourceType === 'vector' && !sourceLayer) { - this.fire(new ErrorEvent(new Error(`The sourceLayer parameter must be provided for vector source types.`))); + this.fire(new ErrorEvent(new Error('The sourceLayer parameter must be provided for vector source types.'))); return; } if (target.id === undefined) { - this.fire(new ErrorEvent(new Error(`The feature id parameter must be provided.`))); + this.fire(new ErrorEvent(new Error('The feature id parameter must be provided.'))); } sourceCache.setFeatureState(sourceLayer, target.id, state); } - removeFeatureState(target: { source: string; sourceLayer?: string; id?: string | number; }, key?: string) { + removeFeatureState(target: { + source: string; + sourceLayer?: string; + id?: string | number; + }, key?: string) { this._checkLoaded(); const sourceId = target.source; const sourceCache = this.sourceCaches[sourceId]; @@ -958,19 +963,23 @@ class Style extends Evented { const sourceLayer = sourceType === 'vector' ? target.sourceLayer : undefined; if (sourceType === 'vector' && !sourceLayer) { - this.fire(new ErrorEvent(new Error(`The sourceLayer parameter must be provided for vector source types.`))); + this.fire(new ErrorEvent(new Error('The sourceLayer parameter must be provided for vector source types.'))); return; } if (key && (typeof target.id !== 'string' && typeof target.id !== 'number')) { - this.fire(new ErrorEvent(new Error(`A feature id is required to remove its specific state property.`))); + this.fire(new ErrorEvent(new Error('A feature id is required to remove its specific state property.'))); return; } sourceCache.removeFeatureState(sourceLayer, target.id, key); } - getFeatureState(target: { source: string; sourceLayer?: string; id: string | number; }) { + getFeatureState(target: { + source: string; + sourceLayer?: string; + id: string | number; + }) { this._checkLoaded(); const sourceId = target.source; const sourceLayer = target.sourceLayer; @@ -982,11 +991,11 @@ class Style extends Evented { } const sourceType = sourceCache.getSource().type; if (sourceType === 'vector' && !sourceLayer) { - this.fire(new ErrorEvent(new Error(`The sourceLayer parameter must be provided for vector source types.`))); + this.fire(new ErrorEvent(new Error('The sourceLayer parameter must be provided for vector source types.'))); return; } if (target.id === undefined) { - this.fire(new ErrorEvent(new Error(`The feature id parameter must be provided.`))); + this.fire(new ErrorEvent(new Error('The feature id parameter must be provided.'))); } return sourceCache.getFeatureState(sourceLayer, target.id); @@ -1150,7 +1159,14 @@ class Style extends Evented { return this._flattenAndSortRenderedFeatures(sourceResults); } - querySourceFeatures(sourceID: string, params: ?{sourceLayer: ?string, filter: ?Array, validate?: boolean}) { + querySourceFeatures( + sourceID: string, + params?: { + sourceLayer: string | undefined | null; + filter: Array | undefined | null; + validate?: boolean; + } | null + ) { if (params && params.filter) { this._validate(validateStyle.filter, 'querySourceFeatures.filter', params.filter, null, params); } @@ -1204,7 +1220,9 @@ class Style extends Evented { this.light.updateTransitions(parameters); } - _validate(validate: Validator, key: string, value: any, props: any, options: { validate?: boolean } = {}) { + _validate(validate: Validator, key: string, value: any, props: any, options: { + validate?: boolean; + } = {}) { if (options && options.validate === false) { return false; } @@ -1338,8 +1356,16 @@ class Style extends Evented { // Callbacks from web workers - getImages(mapId: string, params: {icons: Array, source: string, tileID: OverscaledTileID, type: string}, callback: Callback<{[_: string]: StyleImage}>) { - + getImages( + mapId: string, + params: { + icons: Array; + source: string; + tileID: OverscaledTileID; + type: string; + }, + callback: Callback<{[_: string]: StyleImage}> + ) { this.imageManager.getImages(params.icons, callback); // Apply queued image changes before setting the tile's dependencies so that the tile @@ -1358,7 +1384,11 @@ class Style extends Evented { } } - getGlyphs(mapId: string, params: {stacks: {[_: string]: Array}}, callback: Callback<{[_: string]: {[_: number]: ?StyleGlyph}}>) { + getGlyphs( + mapId: string, + params: {stacks: {[_: string]: Array}}, + callback: Callback<{[_: string]: {[_: number]: StyleGlyph | undefined | null}}> + ) { this.glyphManager.getGlyphs(params.stacks, callback); } diff --git a/src/style/style_glyph.js b/src/style/style_glyph.js deleted file mode 100644 index 009bf12579..0000000000 --- a/src/style/style_glyph.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -import type {AlphaImage} from '../util/image'; - -export type GlyphMetrics = { - width: number, - height: number, - left: number, - top: number, - advance: number -}; - -export type StyleGlyph = { - id: number, - bitmap: AlphaImage, - metrics: GlyphMetrics -}; diff --git a/src/style/style_glyph.ts b/src/style/style_glyph.ts new file mode 100644 index 0000000000..cfb0b4b492 --- /dev/null +++ b/src/style/style_glyph.ts @@ -0,0 +1,15 @@ +import type {AlphaImage} from '../util/image'; + +export type GlyphMetrics = { + width: number; + height: number; + left: number; + top: number; + advance: number; +}; + +export type StyleGlyph = { + id: number; + bitmap: AlphaImage; + metrics: GlyphMetrics; +}; diff --git a/src/style/style_image.js b/src/style/style_image.ts similarity index 88% rename from src/style/style_image.js rename to src/style/style_image.ts index 7d528b79fb..edd7c4260c 100644 --- a/src/style/style_image.js +++ b/src/style/style_image.ts @@ -1,33 +1,31 @@ -// @flow - import {RGBAImage} from '../util/image'; import type Map from '../ui/map'; export type StyleImageData = { - data: RGBAImage, - version: number, - hasRenderCallback?: boolean, - userImage?: StyleImageInterface + data: RGBAImage; + version: number; + hasRenderCallback?: boolean; + userImage?: StyleImageInterface; }; export type StyleImageMetadata = { - pixelRatio: number, - sdf: boolean, - stretchX?: Array<[number, number]>, - stretchY?: Array<[number, number]>, - content?: [number, number, number, number] + pixelRatio: number; + sdf: boolean; + stretchX?: Array<[number, number]>; + stretchY?: Array<[number, number]>; + content?: [number, number, number, number]; }; export type StyleImage = StyleImageData & StyleImageMetadata; export type StyleImageInterface = { - width: number, - height: number, - data: Uint8Array | Uint8ClampedArray, - render?: () => boolean, - onAdd?: (map: Map, id: string) => void, - onRemove?: () => void + width: number; + height: number; + data: Uint8Array | Uint8ClampedArray; + render?: () => boolean; + onAdd?: (map: Map, id: string) => void; + onRemove?: () => void; }; export function renderStyleImage(image: StyleImage) { diff --git a/src/style/style_layer.js b/src/style/style_layer.ts similarity index 81% rename from src/style/style_layer.js rename to src/style/style_layer.ts index c2a7d6cb0c..3789bd905e 100644 --- a/src/style/style_layer.js +++ b/src/style/style_layer.ts @@ -1,6 +1,4 @@ -// @flow - -import {endsWith, filterObject} from '../util/util'; +import {filterObject} from '../util/util'; import styleSpec from '../style-spec/reference/latest'; import { @@ -15,10 +13,12 @@ import {supportsPropertyExpression} from '../style-spec/util/properties'; import type {FeatureState} from '../style-spec/expression'; import type {Bucket} from '../data/bucket'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../util/point'; import type {FeatureFilter} from '../style-spec/feature_filter'; import type {TransitionParameters, PropertyValue} from './properties'; -import type EvaluationParameters, {CrossfadeParameters} from './evaluation_parameters'; +import EvaluationParameters from './evaluation_parameters'; +import type {CrossfadeParameters} from './evaluation_parameters'; + import type Transform from '../geo/transform'; import type { LayerSpecification, @@ -27,44 +27,50 @@ import type { import type {CustomLayerInterface} from './style_layer/custom_style_layer'; import type Map from '../ui/map'; import type {StyleSetterOptions} from './style'; +import {mat4} from 'gl-matrix'; const TRANSITION_SUFFIX = '-transition'; class StyleLayer extends Evented { id: string; - metadata: mixed; + metadata: unknown; type: string; source: string; - sourceLayer: ?string; - minzoom: ?number; - maxzoom: ?number; + sourceLayer: string | undefined | null; + minzoom: number | undefined | null; + maxzoom: number | undefined | null; filter: FilterSpecification | void; visibility: 'visible' | 'none' | void; _crossfadeParameters: CrossfadeParameters; _unevaluatedLayout: Layout; - +layout: mixed; + readonly layout: unknown; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - +paint: mixed; + readonly paint: unknown; _featureFilter: FeatureFilter; - +queryRadius: (bucket: Bucket) => number; - +queryIntersectsFeature: (queryGeometry: Array, - feature: VectorTileFeature, - featureState: FeatureState, - geometry: Array>, - zoom: number, - transform: Transform, - pixelsToTileUnits: number, - pixelPosMatrix: Float32Array) => boolean | number; - - +onAdd: ?(map: Map) => void; - +onRemove: ?(map: Map) => void; - - constructor(layer: LayerSpecification | CustomLayerInterface, properties: $ReadOnly<{layout?: Properties<*>, paint?: Properties<*>}>) { + readonly queryRadius: (bucket: Bucket) => number; + readonly queryIntersectsFeature: ( + queryGeometry: Array, + feature: VectorTileFeature, + featureState: FeatureState, + geometry: Array>, + zoom: number, + transform: Transform, + pixelsToTileUnits: number, + pixelPosMatrix: mat4 + ) => boolean | number; + + readonly onAdd: ((map: Map) => void) | undefined | null; + readonly onRemove: ((map: Map) => void) | undefined | null; + + constructor(layer: LayerSpecification | CustomLayerInterface, properties: Readonly<{ + layout?: Properties; + paint?: Properties; + }>) { super(); this.id = layer.id; @@ -73,7 +79,7 @@ class StyleLayer extends Evented { if (layer.type === 'custom') return; - layer = ((layer: any): LayerSpecification); + layer = (layer as any as LayerSpecification); this.metadata = layer.metadata; this.minzoom = layer.minzoom; @@ -134,14 +140,14 @@ class StyleLayer extends Evented { } getPaintProperty(name: string) { - if (endsWith(name, TRANSITION_SUFFIX)) { + if (name.endsWith(TRANSITION_SUFFIX)) { return this._transitionablePaint.getTransition(name.slice(0, -TRANSITION_SUFFIX.length)); } else { return this._transitionablePaint.getValue(name); } } - setPaintProperty(name: string, value: mixed, options: StyleSetterOptions = {}) { + setPaintProperty(name: string, value: unknown, options: StyleSetterOptions = {}) { if (value !== null && value !== undefined) { const key = `layers.${this.id}.paint.${name}`; if (this._validate(validatePaintProperty, key, name, value, options)) { @@ -149,12 +155,12 @@ class StyleLayer extends Evented { } } - if (endsWith(name, TRANSITION_SUFFIX)) { - this._transitionablePaint.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), (value: any) || undefined); + if (name.endsWith(TRANSITION_SUFFIX)) { + this._transitionablePaint.setTransition(name.slice(0, -TRANSITION_SUFFIX.length), (value as any) || undefined); return false; } else { const transitionable = this._transitionablePaint._values[name]; - const isCrossFadedProperty = transitionable.property.specification["property-type"] === 'cross-faded-data-driven'; + const isCrossFadedProperty = transitionable.property.specification['property-type'] === 'cross-faded-data-driven'; const wasDataDriven = transitionable.value.isDataDriven(); const oldValue = transitionable.value; @@ -175,7 +181,7 @@ class StyleLayer extends Evented { // No-op; can be overridden by derived classes. } - // eslint-disable-next-line no-unused-vars + // eslint-disable-next-line @typescript-eslint/no-unused-vars _handleOverridablePaintPropertyUpdate(name: string, oldValue: PropertyValue, newValue: PropertyValue): boolean { // No-op; can be overridden by derived classes. return false; @@ -201,10 +207,10 @@ class StyleLayer extends Evented { } if (this._unevaluatedLayout) { - (this: any).layout = this._unevaluatedLayout.possiblyEvaluate(parameters, undefined, availableImages); + (this as any).layout = this._unevaluatedLayout.possiblyEvaluate(parameters, undefined, availableImages); } - (this: any).paint = this._transitioningPaint.possiblyEvaluate(parameters, undefined, availableImages); + (this as any).paint = this._transitioningPaint.possiblyEvaluate(parameters, undefined, availableImages); } serialize() { @@ -233,7 +239,7 @@ class StyleLayer extends Evented { }); } - _validate(validate: Function, key: string, name: string, value: mixed, options: StyleSetterOptions = {}) { + _validate(validate: Function, key: string, name: string, value: unknown, options: StyleSetterOptions = {}) { if (options && options.validate === false) { return false; } @@ -265,8 +271,8 @@ class StyleLayer extends Evented { } isStateDependent() { - for (const property in (this: any).paint._values) { - const value = (this: any).paint.get(property); + for (const property in (this as any).paint._values) { + const value = (this as any).paint.get(property); if (!(value instanceof PossiblyEvaluatedPropertyValue) || !supportsPropertyExpression(value.property.specification)) { continue; } diff --git a/src/style/style_layer/background_style_layer.js b/src/style/style_layer/background_style_layer.ts similarity index 76% rename from src/style/style_layer/background_style_layer.js rename to src/style/style_layer/background_style_layer.ts index 33a2ead347..e3988c3626 100644 --- a/src/style/style_layer/background_style_layer.js +++ b/src/style/style_layer/background_style_layer.ts @@ -1,8 +1,6 @@ -// @flow - import StyleLayer from '../style_layer'; -import properties from './background_style_layer_properties'; +import properties, {PaintPropsPossiblyEvaluated} from './background_style_layer_properties'; import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties'; import type {PaintProps} from './background_style_layer_properties'; @@ -11,7 +9,7 @@ import type {LayerSpecification} from '../../style-spec/types'; class BackgroundStyleLayer extends StyleLayer { _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); diff --git a/src/style/style_layer/background_style_layer_properties.js b/src/style/style_layer/background_style_layer_properties.ts similarity index 51% rename from src/style/style_layer/background_style_layer_properties.js rename to src/style/style_layer/background_style_layer_properties.ts index 868663cfce..1ed995bc2a 100644 --- a/src/style/style_layer/background_style_layer_properties.js +++ b/src/style/style_layer/background_style_layer_properties.ts @@ -1,5 +1,4 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. /* eslint-disable */ import styleSpec from '../../style-spec/reference/latest'; @@ -10,7 +9,9 @@ import { DataDrivenProperty, CrossFadedDataDrivenProperty, CrossFadedProperty, - ColorRampProperty + ColorRampProperty, + PossiblyEvaluatedPropertyValue, + CrossFaded } from '../properties'; import type Color from '../../style-spec/util/color'; @@ -18,23 +19,30 @@ import type Color from '../../style-spec/util/color'; import type Formatted from '../../style-spec/expression/types/formatted'; import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; -export type PaintProps = {| - "background-color": DataConstantProperty, - "background-pattern": CrossFadedProperty, - "background-opacity": DataConstantProperty, -|}; +export type PaintProps = { + "background-color": DataConstantProperty, + "background-pattern": CrossFadedProperty, + "background-opacity": DataConstantProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "background-color": Color, + "background-pattern": CrossFaded, + "background-opacity": number +}; const paint: Properties = new Properties({ - "background-color": new DataConstantProperty(styleSpec["paint_background"]["background-color"]), - "background-pattern": new CrossFadedProperty(styleSpec["paint_background"]["background-pattern"]), - "background-opacity": new DataConstantProperty(styleSpec["paint_background"]["background-opacity"]), + "background-color": new DataConstantProperty(styleSpec["paint_background"]["background-color"] as any as StylePropertySpecification), + "background-pattern": new CrossFadedProperty(styleSpec["paint_background"]["background-pattern"] as any as StylePropertySpecification), + "background-opacity": new DataConstantProperty(styleSpec["paint_background"]["background-opacity"] as any as StylePropertySpecification), }); // Note: without adding the explicit type annotation, Flow infers weaker types // for these objects from their use in the constructor to StyleLayer, as // {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint }: $Exact<{ +export default ({ paint } as { paint: Properties -}>); +}); diff --git a/src/style/style_layer/circle_style_layer.js b/src/style/style_layer/circle_style_layer.ts similarity index 77% rename from src/style/style_layer/circle_style_layer.js rename to src/style/style_layer/circle_style_layer.ts index e5168f56a2..84fd062e4e 100644 --- a/src/style/style_layer/circle_style_layer.js +++ b/src/style/style_layer/circle_style_layer.ts @@ -1,15 +1,12 @@ -// @flow - import StyleLayer from '../style_layer'; import CircleBucket from '../../data/bucket/circle_bucket'; import {polygonIntersectsBufferedPoint} from '../../util/intersection_tests'; import {getMaximumPaintValue, translateDistance, translate} from '../query_utils'; -import properties from './circle_style_layer_properties'; +import properties, {LayoutPropsPossiblyEvaluated, PaintPropsPossiblyEvaluated} from './circle_style_layer_properties'; import {Transitionable, Transitioning, Layout, PossiblyEvaluated} from '../properties'; -import {vec4} from 'gl-matrix'; -import Point from '@mapbox/point-geometry'; - +import {mat4, vec4} from 'gl-matrix'; +import Point from '../../util/point'; import type {FeatureState} from '../../style-spec/expression'; import type Transform from '../../geo/transform'; import type {Bucket, BucketParameters} from '../../data/bucket'; @@ -18,35 +15,37 @@ import type {LayerSpecification} from '../../style-spec/types'; class CircleStyleLayer extends StyleLayer { _unevaluatedLayout: Layout; - layout: PossiblyEvaluated; + layout: PossiblyEvaluated; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); } - createBucket(parameters: BucketParameters<*>) { + createBucket(parameters: BucketParameters) { return new CircleBucket(parameters); } - queryRadius(bucket: Bucket): number { - const circleBucket: CircleBucket = (bucket: any); + queryRadius = (bucket: Bucket): number => { + const circleBucket: CircleBucket = (bucket as any); return getMaximumPaintValue('circle-radius', this, circleBucket) + getMaximumPaintValue('circle-stroke-width', this, circleBucket) + translateDistance(this.paint.get('circle-translate')); } - queryIntersectsFeature(queryGeometry: Array, - feature: VectorTileFeature, - featureState: FeatureState, - geometry: Array>, - zoom: number, - transform: Transform, - pixelsToTileUnits: number, - pixelPosMatrix: Float32Array): boolean { + queryIntersectsFeature = ( + queryGeometry: Array, + feature: VectorTileFeature, + featureState: FeatureState, + geometry: Array>, + zoom: number, + transform: Transform, + pixelsToTileUnits: number, + pixelPosMatrix: mat4 + ): boolean => { const translatedPolygon = translate(queryGeometry, this.paint.get('circle-translate'), this.paint.get('circle-translate-anchor'), @@ -69,7 +68,7 @@ class CircleStyleLayer extends StyleLayer { const transformedPoint = alignWithMap ? point : projectPoint(point, pixelPosMatrix); let adjustedSize = transformedSize; - const projectedCenter = vec4.transformMat4([], [point.x, point.y, 0, 1], pixelPosMatrix); + const projectedCenter = vec4.transformMat4(vec4.create(), vec4.fromValues(point.x, point.y, 0, 1), pixelPosMatrix); if (this.paint.get('circle-pitch-scale') === 'viewport' && this.paint.get('circle-pitch-alignment') === 'map') { adjustedSize *= projectedCenter[3] / transform.cameraToCenterDistance; } else if (this.paint.get('circle-pitch-scale') === 'map' && this.paint.get('circle-pitch-alignment') === 'viewport') { @@ -84,12 +83,12 @@ class CircleStyleLayer extends StyleLayer { } } -function projectPoint(p: Point, pixelPosMatrix: Float32Array) { - const point = vec4.transformMat4([], [p.x, p.y, 0, 1], pixelPosMatrix); +function projectPoint(p: Point, pixelPosMatrix: mat4) { + const point = vec4.transformMat4(vec4.create(), vec4.fromValues(p.x, p.y, 0, 1), pixelPosMatrix); return new Point(point[0] / point[3], point[1] / point[3]); } -function projectQueryGeometry(queryGeometry: Array, pixelPosMatrix: Float32Array) { +function projectQueryGeometry(queryGeometry: Array, pixelPosMatrix: mat4) { return queryGeometry.map((p) => { return projectPoint(p, pixelPosMatrix); }); diff --git a/src/style/style_layer/circle_style_layer_properties.js b/src/style/style_layer/circle_style_layer_properties.js deleted file mode 100644 index 5b8224423b..0000000000 --- a/src/style/style_layer/circle_style_layer_properties.js +++ /dev/null @@ -1,63 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - -export type LayoutProps = {| - "circle-sort-key": DataDrivenProperty, -|}; - -const layout: Properties = new Properties({ - "circle-sort-key": new DataDrivenProperty(styleSpec["layout_circle"]["circle-sort-key"]), -}); - -export type PaintProps = {| - "circle-radius": DataDrivenProperty, - "circle-color": DataDrivenProperty, - "circle-blur": DataDrivenProperty, - "circle-opacity": DataDrivenProperty, - "circle-translate": DataConstantProperty<[number, number]>, - "circle-translate-anchor": DataConstantProperty<"map" | "viewport">, - "circle-pitch-scale": DataConstantProperty<"map" | "viewport">, - "circle-pitch-alignment": DataConstantProperty<"map" | "viewport">, - "circle-stroke-width": DataDrivenProperty, - "circle-stroke-color": DataDrivenProperty, - "circle-stroke-opacity": DataDrivenProperty, -|}; - -const paint: Properties = new Properties({ - "circle-radius": new DataDrivenProperty(styleSpec["paint_circle"]["circle-radius"]), - "circle-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-color"]), - "circle-blur": new DataDrivenProperty(styleSpec["paint_circle"]["circle-blur"]), - "circle-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-opacity"]), - "circle-translate": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate"]), - "circle-translate-anchor": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate-anchor"]), - "circle-pitch-scale": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-scale"]), - "circle-pitch-alignment": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-alignment"]), - "circle-stroke-width": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-width"]), - "circle-stroke-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-color"]), - "circle-stroke-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-opacity"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint, layout }: $Exact<{ - paint: Properties, layout: Properties -}>); diff --git a/src/style/style_layer/circle_style_layer_properties.ts b/src/style/style_layer/circle_style_layer_properties.ts new file mode 100644 index 0000000000..43673a75bb --- /dev/null +++ b/src/style/style_layer/circle_style_layer_properties.ts @@ -0,0 +1,80 @@ +// This file was generated. Edit build/generate-style-code.js, , see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + +export type LayoutProps = { + "circle-sort-key": DataDrivenProperty +}; + +export type LayoutPropsPossiblyEvaluated = { + "circle-sort-key": PossiblyEvaluatedPropertyValue +}; + +const layout: Properties = new Properties({ + "circle-sort-key": new DataDrivenProperty(styleSpec["layout_circle"]["circle-sort-key"] as any as StylePropertySpecification), +}); + +export type PaintProps = { + "circle-radius": DataDrivenProperty, + "circle-color": DataDrivenProperty, + "circle-blur": DataDrivenProperty, + "circle-opacity": DataDrivenProperty, + "circle-translate": DataConstantProperty<[number, number]>, + "circle-translate-anchor": DataConstantProperty<"map" | "viewport">, + "circle-pitch-scale": DataConstantProperty<"map" | "viewport">, + "circle-pitch-alignment": DataConstantProperty<"map" | "viewport">, + "circle-stroke-width": DataDrivenProperty, + "circle-stroke-color": DataDrivenProperty, + "circle-stroke-opacity": DataDrivenProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "circle-radius": PossiblyEvaluatedPropertyValue, + "circle-color": PossiblyEvaluatedPropertyValue, + "circle-blur": PossiblyEvaluatedPropertyValue, + "circle-opacity": PossiblyEvaluatedPropertyValue, + "circle-translate": [number, number], + "circle-translate-anchor": "map" | "viewport", + "circle-pitch-scale": "map" | "viewport", + "circle-pitch-alignment": "map" | "viewport", + "circle-stroke-width": PossiblyEvaluatedPropertyValue, + "circle-stroke-color": PossiblyEvaluatedPropertyValue, + "circle-stroke-opacity": PossiblyEvaluatedPropertyValue +}; + +const paint: Properties = new Properties({ + "circle-radius": new DataDrivenProperty(styleSpec["paint_circle"]["circle-radius"] as any as StylePropertySpecification), + "circle-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-color"] as any as StylePropertySpecification), + "circle-blur": new DataDrivenProperty(styleSpec["paint_circle"]["circle-blur"] as any as StylePropertySpecification), + "circle-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-opacity"] as any as StylePropertySpecification), + "circle-translate": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate"] as any as StylePropertySpecification), + "circle-translate-anchor": new DataConstantProperty(styleSpec["paint_circle"]["circle-translate-anchor"] as any as StylePropertySpecification), + "circle-pitch-scale": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-scale"] as any as StylePropertySpecification), + "circle-pitch-alignment": new DataConstantProperty(styleSpec["paint_circle"]["circle-pitch-alignment"] as any as StylePropertySpecification), + "circle-stroke-width": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-width"] as any as StylePropertySpecification), + "circle-stroke-color": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-color"] as any as StylePropertySpecification), + "circle-stroke-opacity": new DataDrivenProperty(styleSpec["paint_circle"]["circle-stroke-opacity"] as any as StylePropertySpecification), +}); + +export default ({ paint, layout } as { + paint: Properties, + layout: Properties +}); diff --git a/src/style/style_layer/custom_style_layer.js b/src/style/style_layer/custom_style_layer.ts similarity index 92% rename from src/style/style_layer/custom_style_layer.js rename to src/style/style_layer/custom_style_layer.ts index 87afc2af22..64aafef0ba 100644 --- a/src/style/style_layer/custom_style_layer.js +++ b/src/style/style_layer/custom_style_layer.ts @@ -1,10 +1,9 @@ -// @flow - import StyleLayer from '../style_layer'; import type Map from '../../ui/map'; import assert from 'assert'; +import {mat4} from 'gl-matrix'; -type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => void; +type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: mat4) => void; /** * Interface for custom style layers. This is a specification for @@ -109,7 +108,7 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * @instance * @name prerender * @param {WebGLRenderingContext} gl The map's gl context. - * @param {Array} matrix The map's camera matrix. It projects spherical mercator + * @param {mat4} matrix The map's camera matrix. It projects spherical mercator * coordinates to gl coordinates. The mercator coordinate `[0, 0]` represents the * top left corner of the mercator world and `[1, 1]` represents the bottom right corner. When * the `renderingMode` is `"3d"`, the z coordinate is conformal. A box with identical x, y, and z @@ -146,14 +145,14 @@ type CustomRenderMethod = (gl: WebGLRenderingContext, matrix: Array) => * can be used to project a `LngLat` to a mercator coordinate. */ export type CustomLayerInterface = { - id: string, - type: "custom", - renderingMode: "2d" | "3d", - render: CustomRenderMethod, - prerender: ?CustomRenderMethod, - onAdd: ?(map: Map, gl: WebGLRenderingContext) => void, - onRemove: ?(map: Map, gl: WebGLRenderingContext) => void -} + id: string; + type: 'custom'; + renderingMode: '2d' | '3d'; + render: CustomRenderMethod; + prerender: CustomRenderMethod | undefined | null; + onAdd: ((map: Map, gl: WebGLRenderingContext) => void) | undefined | null; + onRemove: ((map: Map, gl: WebGLRenderingContext) => void) | undefined | null; +}; export function validateCustomStyleLayer(layerObject: CustomLayerInterface) { const errors = []; @@ -201,19 +200,19 @@ class CustomStyleLayer extends StyleLayer { recalculate() {} updateTransitions() {} - hasTransition() {} + hasTransition() { return false; } serialize() { - assert(false, "Custom layers cannot be serialized"); + assert(false, 'Custom layers cannot be serialized'); } - onAdd(map: Map) { + onAdd = (map: Map) => { if (this.implementation.onAdd) { this.implementation.onAdd(map, map.painter.context.gl); } } - onRemove(map: Map) { + onRemove = (map: Map) => { if (this.implementation.onRemove) { this.implementation.onRemove(map, map.painter.context.gl); } diff --git a/src/style/style_layer/fill_extrusion_style_layer.js b/src/style/style_layer/fill_extrusion_style_layer.ts similarity index 84% rename from src/style/style_layer/fill_extrusion_style_layer.js rename to src/style/style_layer/fill_extrusion_style_layer.ts index 900879b811..c1d65a8c4e 100644 --- a/src/style/style_layer/fill_extrusion_style_layer.js +++ b/src/style/style_layer/fill_extrusion_style_layer.ts @@ -1,25 +1,24 @@ -// @flow - import StyleLayer from '../style_layer'; import FillExtrusionBucket from '../../data/bucket/fill_extrusion_bucket'; import {polygonIntersectsPolygon, polygonIntersectsMultiPolygon} from '../../util/intersection_tests'; import {translateDistance, translate} from '../query_utils'; -import properties from './fill_extrusion_style_layer_properties'; +import properties, {PaintPropsPossiblyEvaluated} from './fill_extrusion_style_layer_properties'; import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties'; -import {vec4} from 'gl-matrix'; -import Point from '@mapbox/point-geometry'; - +import {mat4, vec4} from 'gl-matrix'; +import Point from '../../util/point'; import type {FeatureState} from '../../style-spec/expression'; import type {BucketParameters} from '../../data/bucket'; import type {PaintProps} from './fill_extrusion_style_layer_properties'; import type Transform from '../../geo/transform'; import type {LayerSpecification} from '../../style-spec/types'; +type Point3D = Point & { z: number } + class FillExtrusionStyleLayer extends StyleLayer { _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); @@ -29,7 +28,7 @@ class FillExtrusionStyleLayer extends StyleLayer { return new FillExtrusionBucket(parameters); } - queryRadius(): number { + queryRadius = (): number => { return translateDistance(this.paint.get('fill-extrusion-translate')); } @@ -37,14 +36,16 @@ class FillExtrusionStyleLayer extends StyleLayer { return true; } - queryIntersectsFeature(queryGeometry: Array, - feature: VectorTileFeature, - featureState: FeatureState, - geometry: Array>, - zoom: number, - transform: Transform, - pixelsToTileUnits: number, - pixelPosMatrix: Float32Array): boolean | number { + queryIntersectsFeature = ( + queryGeometry: Array, + feature: VectorTileFeature, + featureState: FeatureState, + geometry: Array>, + zoom: number, + transform: Transform, + pixelsToTileUnits: number, + pixelPosMatrix: mat4 + ): boolean | number => { const translatedPolygon = translate(queryGeometry, this.paint.get('fill-extrusion-translate'), @@ -67,7 +68,7 @@ function dot(a, b) { return a.x * b.x + a.y * b.y; } -export function getIntersectionDistance(projectedQueryGeometry: Array, projectedFace: Array) { +export function getIntersectionDistance(projectedQueryGeometry: Array, projectedFace: Array) { if (projectedQueryGeometry.length === 1) { // For point queries calculate the z at which the point intersects the face @@ -130,7 +131,7 @@ export function getIntersectionDistance(projectedQueryGeometry: Array, pr } } -function checkIntersection(projectedBase: Array, projectedTop: Array, projectedQueryGeometry: Array) { +function checkIntersection(projectedBase: Array>, projectedTop: Array>, projectedQueryGeometry: Array) { let closestDistance = Infinity; if (polygonIntersectsMultiPolygon(projectedQueryGeometry, projectedTop)) { @@ -162,10 +163,9 @@ function checkIntersection(projectedBase: Array, projectedTop: Array>, zBase: number, zTop: number, m: Float32Array) { - const projectedBase = []; - const projectedTop = []; - +function projectExtrusion(geometry: Array>, zBase: number, zTop: number, m: mat4): [Array>, Array>] { + const projectedBase = [] as Array>; + const projectedTop = [] as Array>; const baseXZ = m[8] * zBase; const baseYZ = m[9] * zBase; const baseZZ = m[10] * zBase; @@ -176,8 +176,8 @@ function projectExtrusion(geometry: Array>, zBase: number, zTop: nu const topWZ = m[11] * zTop; for (const r of geometry) { - const ringBase = []; - const ringTop = []; + const ringBase = [] as Array; + const ringTop = [] as Array; for (const p of r) { const x = p.x; const y = p.y; @@ -197,11 +197,11 @@ function projectExtrusion(geometry: Array>, zBase: number, zTop: nu const topZ = sZ + topZZ; const topW = sW + topWZ; - const b = new Point(baseX / baseW, baseY / baseW); + const b = new Point(baseX / baseW, baseY / baseW) as Point3D; b.z = baseZ / baseW; ringBase.push(b); - const t = new Point(topX / topW, topY / topW); + const t = new Point(topX / topW, topY / topW) as Point3D; t.z = topZ / topW; ringTop.push(t); } @@ -211,10 +211,10 @@ function projectExtrusion(geometry: Array>, zBase: number, zTop: nu return [projectedBase, projectedTop]; } -function projectQueryGeometry(queryGeometry: Array, pixelPosMatrix: Float32Array, transform: Transform, z: number) { +function projectQueryGeometry(queryGeometry: Array, pixelPosMatrix: mat4, transform: Transform, z: number) { const projectedQueryGeometry = []; for (const p of queryGeometry) { - const v = [p.x, p.y, z, 1]; + const v = vec4.fromValues(p.x, p.y, z, 1); vec4.transformMat4(v, v, pixelPosMatrix); projectedQueryGeometry.push(new Point(v[0] / v[3], v[1] / v[3])); } diff --git a/src/style/style_layer/fill_extrusion_style_layer_properties.js b/src/style/style_layer/fill_extrusion_style_layer_properties.js deleted file mode 100644 index 7118f90633..0000000000 --- a/src/style/style_layer/fill_extrusion_style_layer_properties.js +++ /dev/null @@ -1,50 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - - -export type PaintProps = {| - "fill-extrusion-opacity": DataConstantProperty, - "fill-extrusion-color": DataDrivenProperty, - "fill-extrusion-translate": DataConstantProperty<[number, number]>, - "fill-extrusion-translate-anchor": DataConstantProperty<"map" | "viewport">, - "fill-extrusion-pattern": CrossFadedDataDrivenProperty, - "fill-extrusion-height": DataDrivenProperty, - "fill-extrusion-base": DataDrivenProperty, - "fill-extrusion-vertical-gradient": DataConstantProperty, -|}; - -const paint: Properties = new Properties({ - "fill-extrusion-opacity": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-opacity"]), - "fill-extrusion-color": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-color"]), - "fill-extrusion-translate": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-translate"]), - "fill-extrusion-translate-anchor": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-translate-anchor"]), - "fill-extrusion-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-pattern"]), - "fill-extrusion-height": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-height"]), - "fill-extrusion-base": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-base"]), - "fill-extrusion-vertical-gradient": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint }: $Exact<{ - paint: Properties -}>); diff --git a/src/style/style_layer/fill_extrusion_style_layer_properties.ts b/src/style/style_layer/fill_extrusion_style_layer_properties.ts new file mode 100644 index 0000000000..14c27d2bec --- /dev/null +++ b/src/style/style_layer/fill_extrusion_style_layer_properties.ts @@ -0,0 +1,59 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + + +export type PaintProps = { + "fill-extrusion-opacity": DataConstantProperty, + "fill-extrusion-color": DataDrivenProperty, + "fill-extrusion-translate": DataConstantProperty<[number, number]>, + "fill-extrusion-translate-anchor": DataConstantProperty<"map" | "viewport">, + "fill-extrusion-pattern": CrossFadedDataDrivenProperty, + "fill-extrusion-height": DataDrivenProperty, + "fill-extrusion-base": DataDrivenProperty, + "fill-extrusion-vertical-gradient": DataConstantProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "fill-extrusion-opacity": number, + "fill-extrusion-color": PossiblyEvaluatedPropertyValue, + "fill-extrusion-translate": [number, number], + "fill-extrusion-translate-anchor": "map" | "viewport", + "fill-extrusion-pattern": PossiblyEvaluatedPropertyValue, + "fill-extrusion-height": PossiblyEvaluatedPropertyValue, + "fill-extrusion-base": PossiblyEvaluatedPropertyValue, + "fill-extrusion-vertical-gradient": boolean +}; + +const paint: Properties = new Properties({ + "fill-extrusion-opacity": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-opacity"] as any as StylePropertySpecification), + "fill-extrusion-color": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-color"] as any as StylePropertySpecification), + "fill-extrusion-translate": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-translate"] as any as StylePropertySpecification), + "fill-extrusion-translate-anchor": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-translate-anchor"] as any as StylePropertySpecification), + "fill-extrusion-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-pattern"] as any as StylePropertySpecification), + "fill-extrusion-height": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-height"] as any as StylePropertySpecification), + "fill-extrusion-base": new DataDrivenProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-base"] as any as StylePropertySpecification), + "fill-extrusion-vertical-gradient": new DataConstantProperty(styleSpec["paint_fill-extrusion"]["fill-extrusion-vertical-gradient"] as any as StylePropertySpecification), +}); + +export default ({ paint } as { + paint: Properties +}); diff --git a/src/style/style_layer/fill_style_layer.js b/src/style/style_layer/fill_style_layer.ts similarity index 74% rename from src/style/style_layer/fill_style_layer.js rename to src/style/style_layer/fill_style_layer.ts index 7afb6bca33..b7abc87392 100644 --- a/src/style/style_layer/fill_style_layer.js +++ b/src/style/style_layer/fill_style_layer.ts @@ -1,16 +1,14 @@ -// @flow - import StyleLayer from '../style_layer'; import FillBucket from '../../data/bucket/fill_bucket'; import {polygonIntersectsMultiPolygon} from '../../util/intersection_tests'; import {translateDistance, translate} from '../query_utils'; -import properties from './fill_style_layer_properties'; +import properties, {LayoutPropsPossiblyEvaluated, PaintPropsPossiblyEvaluated} from './fill_style_layer_properties'; import {Transitionable, Transitioning, Layout, PossiblyEvaluated} from '../properties'; import type {FeatureState} from '../../style-spec/expression'; import type {BucketParameters} from '../../data/bucket'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type {LayoutProps, PaintProps} from './fill_style_layer_properties'; import type EvaluationParameters from '../evaluation_parameters'; import type Transform from '../../geo/transform'; @@ -18,11 +16,11 @@ import type {LayerSpecification} from '../../style-spec/types'; class FillStyleLayer extends StyleLayer { _unevaluatedLayout: Layout; - layout: PossiblyEvaluated; + layout: PossiblyEvaluated; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); @@ -37,21 +35,23 @@ class FillStyleLayer extends StyleLayer { } } - createBucket(parameters: BucketParameters<*>) { + createBucket(parameters: BucketParameters) { return new FillBucket(parameters); } - queryRadius(): number { + queryRadius = (): number => { return translateDistance(this.paint.get('fill-translate')); } - queryIntersectsFeature(queryGeometry: Array, - feature: VectorTileFeature, - featureState: FeatureState, - geometry: Array>, - zoom: number, - transform: Transform, - pixelsToTileUnits: number): boolean { + queryIntersectsFeature = ( + queryGeometry: Array, + feature: VectorTileFeature, + featureState: FeatureState, + geometry: Array>, + zoom: number, + transform: Transform, + pixelsToTileUnits: number + ): boolean => { const translatedPolygon = translate(queryGeometry, this.paint.get('fill-translate'), this.paint.get('fill-translate-anchor'), diff --git a/src/style/style_layer/fill_style_layer_properties.js b/src/style/style_layer/fill_style_layer_properties.js deleted file mode 100644 index 55ff413208..0000000000 --- a/src/style/style_layer/fill_style_layer_properties.js +++ /dev/null @@ -1,55 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - -export type LayoutProps = {| - "fill-sort-key": DataDrivenProperty, -|}; - -const layout: Properties = new Properties({ - "fill-sort-key": new DataDrivenProperty(styleSpec["layout_fill"]["fill-sort-key"]), -}); - -export type PaintProps = {| - "fill-antialias": DataConstantProperty, - "fill-opacity": DataDrivenProperty, - "fill-color": DataDrivenProperty, - "fill-outline-color": DataDrivenProperty, - "fill-translate": DataConstantProperty<[number, number]>, - "fill-translate-anchor": DataConstantProperty<"map" | "viewport">, - "fill-pattern": CrossFadedDataDrivenProperty, -|}; - -const paint: Properties = new Properties({ - "fill-antialias": new DataConstantProperty(styleSpec["paint_fill"]["fill-antialias"]), - "fill-opacity": new DataDrivenProperty(styleSpec["paint_fill"]["fill-opacity"]), - "fill-color": new DataDrivenProperty(styleSpec["paint_fill"]["fill-color"]), - "fill-outline-color": new DataDrivenProperty(styleSpec["paint_fill"]["fill-outline-color"]), - "fill-translate": new DataConstantProperty(styleSpec["paint_fill"]["fill-translate"]), - "fill-translate-anchor": new DataConstantProperty(styleSpec["paint_fill"]["fill-translate-anchor"]), - "fill-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_fill"]["fill-pattern"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint, layout }: $Exact<{ - paint: Properties, layout: Properties -}>); diff --git a/src/style/style_layer/fill_style_layer_properties.ts b/src/style/style_layer/fill_style_layer_properties.ts new file mode 100644 index 0000000000..4759b163be --- /dev/null +++ b/src/style/style_layer/fill_style_layer_properties.ts @@ -0,0 +1,68 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + +export type LayoutProps = { + "fill-sort-key": DataDrivenProperty +}; + +export type LayoutPropsPossiblyEvaluated = { + "fill-sort-key": PossiblyEvaluatedPropertyValue +}; + +const layout: Properties = new Properties({ + "fill-sort-key": new DataDrivenProperty(styleSpec["layout_fill"]["fill-sort-key"] as any as StylePropertySpecification), +}); + +export type PaintProps = { + "fill-antialias": DataConstantProperty, + "fill-opacity": DataDrivenProperty, + "fill-color": DataDrivenProperty, + "fill-outline-color": DataDrivenProperty, + "fill-translate": DataConstantProperty<[number, number]>, + "fill-translate-anchor": DataConstantProperty<"map" | "viewport">, + "fill-pattern": CrossFadedDataDrivenProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "fill-antialias": PossiblyEvaluatedPropertyValue, + "fill-opacity": PossiblyEvaluatedPropertyValue, + "fill-color": PossiblyEvaluatedPropertyValue, + "fill-outline-color": PossiblyEvaluatedPropertyValue, + "fill-translate": [number, number], + "fill-translate-anchor": "map" | "viewport", + "fill-pattern": PossiblyEvaluatedPropertyValue +}; + +const paint: Properties = new Properties({ + "fill-antialias": new DataConstantProperty(styleSpec["paint_fill"]["fill-antialias"] as any as StylePropertySpecification), + "fill-opacity": new DataDrivenProperty(styleSpec["paint_fill"]["fill-opacity"] as any as StylePropertySpecification), + "fill-color": new DataDrivenProperty(styleSpec["paint_fill"]["fill-color"] as any as StylePropertySpecification), + "fill-outline-color": new DataDrivenProperty(styleSpec["paint_fill"]["fill-outline-color"] as any as StylePropertySpecification), + "fill-translate": new DataConstantProperty(styleSpec["paint_fill"]["fill-translate"] as any as StylePropertySpecification), + "fill-translate-anchor": new DataConstantProperty(styleSpec["paint_fill"]["fill-translate-anchor"] as any as StylePropertySpecification), + "fill-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_fill"]["fill-pattern"] as any as StylePropertySpecification), +}); + +export default ({ paint, layout } as { + paint: Properties, + layout: Properties +}); diff --git a/src/style/style_layer/heatmap_style_layer.js b/src/style/style_layer/heatmap_style_layer.ts similarity index 84% rename from src/style/style_layer/heatmap_style_layer.js rename to src/style/style_layer/heatmap_style_layer.ts index a8f115c798..23a247b266 100644 --- a/src/style/style_layer/heatmap_style_layer.js +++ b/src/style/style_layer/heatmap_style_layer.ts @@ -1,10 +1,8 @@ -// @flow - import StyleLayer from '../style_layer'; import HeatmapBucket from '../../data/bucket/heatmap_bucket'; import {RGBAImage} from '../../util/image'; -import properties from './heatmap_style_layer_properties'; +import properties, {PaintPropsPossiblyEvaluated} from './heatmap_style_layer_properties'; import {renderColorRamp} from '../../util/color_ramp'; import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties'; @@ -15,13 +13,13 @@ import type {LayerSpecification} from '../../style-spec/types'; class HeatmapStyleLayer extends StyleLayer { - heatmapFbo: ?Framebuffer; + heatmapFbo: Framebuffer | undefined | null; colorRamp: RGBAImage; - colorRampTexture: ?Texture; + colorRampTexture: Texture | undefined | null; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; createBucket(options: any) { return new HeatmapBucket(options); @@ -57,11 +55,11 @@ class HeatmapStyleLayer extends StyleLayer { } } - queryRadius(): number { + queryRadius = (): number => { return 0; } - queryIntersectsFeature(): boolean { + queryIntersectsFeature = (): boolean => { return false; } diff --git a/src/style/style_layer/heatmap_style_layer_properties.js b/src/style/style_layer/heatmap_style_layer_properties.js deleted file mode 100644 index 53bdaf3baa..0000000000 --- a/src/style/style_layer/heatmap_style_layer_properties.js +++ /dev/null @@ -1,44 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - - -export type PaintProps = {| - "heatmap-radius": DataDrivenProperty, - "heatmap-weight": DataDrivenProperty, - "heatmap-intensity": DataConstantProperty, - "heatmap-color": ColorRampProperty, - "heatmap-opacity": DataConstantProperty, -|}; - -const paint: Properties = new Properties({ - "heatmap-radius": new DataDrivenProperty(styleSpec["paint_heatmap"]["heatmap-radius"]), - "heatmap-weight": new DataDrivenProperty(styleSpec["paint_heatmap"]["heatmap-weight"]), - "heatmap-intensity": new DataConstantProperty(styleSpec["paint_heatmap"]["heatmap-intensity"]), - "heatmap-color": new ColorRampProperty(styleSpec["paint_heatmap"]["heatmap-color"]), - "heatmap-opacity": new DataConstantProperty(styleSpec["paint_heatmap"]["heatmap-opacity"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint }: $Exact<{ - paint: Properties -}>); diff --git a/src/style/style_layer/heatmap_style_layer_properties.ts b/src/style/style_layer/heatmap_style_layer_properties.ts new file mode 100644 index 0000000000..372354c344 --- /dev/null +++ b/src/style/style_layer/heatmap_style_layer_properties.ts @@ -0,0 +1,53 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + + +export type PaintProps = { + "heatmap-radius": DataDrivenProperty, + "heatmap-weight": DataDrivenProperty, + "heatmap-intensity": DataConstantProperty, + "heatmap-color": ColorRampProperty, + "heatmap-opacity": DataConstantProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "heatmap-radius": PossiblyEvaluatedPropertyValue, + "heatmap-weight": PossiblyEvaluatedPropertyValue, + "heatmap-intensity": number, + "heatmap-color": ColorRampProperty, + "heatmap-opacity": number +}; + +const paint: Properties = new Properties({ + "heatmap-radius": new DataDrivenProperty(styleSpec["paint_heatmap"]["heatmap-radius"] as any as StylePropertySpecification), + "heatmap-weight": new DataDrivenProperty(styleSpec["paint_heatmap"]["heatmap-weight"] as any as StylePropertySpecification), + "heatmap-intensity": new DataConstantProperty(styleSpec["paint_heatmap"]["heatmap-intensity"] as any as StylePropertySpecification), + "heatmap-color": new ColorRampProperty(styleSpec["paint_heatmap"]["heatmap-color"] as any as StylePropertySpecification), + "heatmap-opacity": new DataConstantProperty(styleSpec["paint_heatmap"]["heatmap-opacity"] as any as StylePropertySpecification), +}); + +// Note: without adding the explicit type annotation, Flow infers weaker types +// for these objects from their use in the constructor to StyleLayer, as +// {layout?: Properties<...>, paint: Properties<...>} +export default ({ paint } as { + paint: Properties +}); diff --git a/src/style/style_layer/hillshade_style_layer.js b/src/style/style_layer/hillshade_style_layer.ts similarity index 80% rename from src/style/style_layer/hillshade_style_layer.js rename to src/style/style_layer/hillshade_style_layer.ts index 782ebe3d56..949c222b25 100644 --- a/src/style/style_layer/hillshade_style_layer.js +++ b/src/style/style_layer/hillshade_style_layer.ts @@ -1,8 +1,6 @@ -// @flow - import StyleLayer from '../style_layer'; -import properties from './hillshade_style_layer_properties'; +import properties, {PaintPropsPossiblyEvaluated} from './hillshade_style_layer_properties'; import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties'; import type {PaintProps} from './hillshade_style_layer_properties'; @@ -11,7 +9,7 @@ import type {LayerSpecification} from '../../style-spec/types'; class HillshadeStyleLayer extends StyleLayer { _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); diff --git a/src/style/style_layer/hillshade_style_layer_properties.js b/src/style/style_layer/hillshade_style_layer_properties.js deleted file mode 100644 index 7a82d3e36a..0000000000 --- a/src/style/style_layer/hillshade_style_layer_properties.js +++ /dev/null @@ -1,46 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - - -export type PaintProps = {| - "hillshade-illumination-direction": DataConstantProperty, - "hillshade-illumination-anchor": DataConstantProperty<"map" | "viewport">, - "hillshade-exaggeration": DataConstantProperty, - "hillshade-shadow-color": DataConstantProperty, - "hillshade-highlight-color": DataConstantProperty, - "hillshade-accent-color": DataConstantProperty, -|}; - -const paint: Properties = new Properties({ - "hillshade-illumination-direction": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-illumination-direction"]), - "hillshade-illumination-anchor": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-illumination-anchor"]), - "hillshade-exaggeration": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-exaggeration"]), - "hillshade-shadow-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-shadow-color"]), - "hillshade-highlight-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-highlight-color"]), - "hillshade-accent-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-accent-color"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint }: $Exact<{ - paint: Properties -}>); diff --git a/src/style/style_layer/hillshade_style_layer_properties.ts b/src/style/style_layer/hillshade_style_layer_properties.ts new file mode 100644 index 0000000000..019376f946 --- /dev/null +++ b/src/style/style_layer/hillshade_style_layer_properties.ts @@ -0,0 +1,55 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + + +export type PaintProps = { + "hillshade-illumination-direction": DataConstantProperty, + "hillshade-illumination-anchor": DataConstantProperty<"map" | "viewport">, + "hillshade-exaggeration": DataConstantProperty, + "hillshade-shadow-color": DataConstantProperty, + "hillshade-highlight-color": DataConstantProperty, + "hillshade-accent-color": DataConstantProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "hillshade-illumination-direction": number, + "hillshade-illumination-anchor": "map" | "viewport", + "hillshade-exaggeration": number, + "hillshade-shadow-color": Color, + "hillshade-highlight-color": Color, + "hillshade-accent-color": Color +}; + +const paint: Properties = new Properties({ + "hillshade-illumination-direction": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-illumination-direction"] as any as StylePropertySpecification), + "hillshade-illumination-anchor": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-illumination-anchor"] as any as StylePropertySpecification), + "hillshade-exaggeration": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-exaggeration"] as any as StylePropertySpecification), + "hillshade-shadow-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-shadow-color"] as any as StylePropertySpecification), + "hillshade-highlight-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-highlight-color"] as any as StylePropertySpecification), + "hillshade-accent-color": new DataConstantProperty(styleSpec["paint_hillshade"]["hillshade-accent-color"] as any as StylePropertySpecification), +}); + +// Note: without adding the explicit type annotation, Flow infers weaker types +// for these objects from their use in the constructor to StyleLayer, as +// {layout?: Properties<...>, paint: Properties<...>} +export default ({ paint } as { + paint: Properties +}); diff --git a/src/style/style_layer/line_style_layer.js b/src/style/style_layer/line_style_layer.ts similarity index 84% rename from src/style/style_layer/line_style_layer.js rename to src/style/style_layer/line_style_layer.ts index 480975c742..8b0c7a3cc2 100644 --- a/src/style/style_layer/line_style_layer.js +++ b/src/style/style_layer/line_style_layer.ts @@ -1,13 +1,11 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../../util/point'; import StyleLayer from '../style_layer'; import LineBucket from '../../data/bucket/line_bucket'; import {polygonIntersectsBufferedMultiLine} from '../../util/intersection_tests'; import {getMaximumPaintValue, translateDistance, translate} from '../query_utils'; -import properties from './line_style_layer_properties'; -import {extend, MAX_SAFE_INTEGER} from '../../util/util'; +import properties, {LayoutPropsPossiblyEvaluated, PaintPropsPossiblyEvaluated} from './line_style_layer_properties'; +import {extend} from '../../util/util'; import EvaluationParameters from '../evaluation_parameters'; import {Transitionable, Transitioning, Layout, PossiblyEvaluated, DataDrivenProperty} from '../properties'; @@ -42,14 +40,14 @@ lineFloorwidthProperty.useIntegerZoom = true; class LineStyleLayer extends StyleLayer { _unevaluatedLayout: Layout; - layout: PossiblyEvaluated; + layout: PossiblyEvaluated; gradientVersion: number; stepInterpolant: boolean; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); @@ -58,9 +56,9 @@ class LineStyleLayer extends StyleLayer { _handleSpecialPaintPropertyUpdate(name: string) { if (name === 'line-gradient') { - const expression: ZoomConstantExpression<'source'> = ((this._transitionablePaint._values['line-gradient'].value.expression): any); + const expression: ZoomConstantExpression<'source'> = (this._transitionablePaint._values['line-gradient'].value.expression as any); this.stepInterpolant = expression._styleExpression.expression instanceof Step; - this.gradientVersion = (this.gradientVersion + 1) % MAX_SAFE_INTEGER; + this.gradientVersion = (this.gradientVersion + 1) % Number.MAX_SAFE_INTEGER; } } @@ -71,16 +69,16 @@ class LineStyleLayer extends StyleLayer { recalculate(parameters: EvaluationParameters, availableImages: Array) { super.recalculate(parameters, availableImages); - (this.paint._values: any)['line-floorwidth'] = + (this.paint._values as any)['line-floorwidth'] = lineFloorwidthProperty.possiblyEvaluate(this._transitioningPaint._values['line-width'].value, parameters); } - createBucket(parameters: BucketParameters<*>) { + createBucket(parameters: BucketParameters) { return new LineBucket(parameters); } - queryRadius(bucket: Bucket): number { - const lineBucket: LineBucket = (bucket: any); + queryRadius = (bucket: Bucket): number => { + const lineBucket: LineBucket = (bucket as any); const width = getLineWidth( getMaximumPaintValue('line-width', this, lineBucket), getMaximumPaintValue('line-gap-width', this, lineBucket)); @@ -88,13 +86,15 @@ class LineStyleLayer extends StyleLayer { return width / 2 + Math.abs(offset) + translateDistance(this.paint.get('line-translate')); } - queryIntersectsFeature(queryGeometry: Array, - feature: VectorTileFeature, - featureState: FeatureState, - geometry: Array>, - zoom: number, - transform: Transform, - pixelsToTileUnits: number): boolean { + queryIntersectsFeature = ( + queryGeometry: Array, + feature: VectorTileFeature, + featureState: FeatureState, + geometry: Array>, + zoom: number, + transform: Transform, + pixelsToTileUnits: number + ): boolean => { const translatedPolygon = translate(queryGeometry, this.paint.get('line-translate'), this.paint.get('line-translate-anchor'), diff --git a/src/style/style_layer/line_style_layer_properties.js b/src/style/style_layer/line_style_layer_properties.js deleted file mode 100644 index 55c635f71e..0000000000 --- a/src/style/style_layer/line_style_layer_properties.js +++ /dev/null @@ -1,71 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - -export type LayoutProps = {| - "line-cap": DataConstantProperty<"butt" | "round" | "square">, - "line-join": DataDrivenProperty<"bevel" | "round" | "miter">, - "line-miter-limit": DataConstantProperty, - "line-round-limit": DataConstantProperty, - "line-sort-key": DataDrivenProperty, -|}; - -const layout: Properties = new Properties({ - "line-cap": new DataConstantProperty(styleSpec["layout_line"]["line-cap"]), - "line-join": new DataDrivenProperty(styleSpec["layout_line"]["line-join"]), - "line-miter-limit": new DataConstantProperty(styleSpec["layout_line"]["line-miter-limit"]), - "line-round-limit": new DataConstantProperty(styleSpec["layout_line"]["line-round-limit"]), - "line-sort-key": new DataDrivenProperty(styleSpec["layout_line"]["line-sort-key"]), -}); - -export type PaintProps = {| - "line-opacity": DataDrivenProperty, - "line-color": DataDrivenProperty, - "line-translate": DataConstantProperty<[number, number]>, - "line-translate-anchor": DataConstantProperty<"map" | "viewport">, - "line-width": DataDrivenProperty, - "line-gap-width": DataDrivenProperty, - "line-offset": DataDrivenProperty, - "line-blur": DataDrivenProperty, - "line-dasharray": CrossFadedProperty>, - "line-pattern": CrossFadedDataDrivenProperty, - "line-gradient": ColorRampProperty, -|}; - -const paint: Properties = new Properties({ - "line-opacity": new DataDrivenProperty(styleSpec["paint_line"]["line-opacity"]), - "line-color": new DataDrivenProperty(styleSpec["paint_line"]["line-color"]), - "line-translate": new DataConstantProperty(styleSpec["paint_line"]["line-translate"]), - "line-translate-anchor": new DataConstantProperty(styleSpec["paint_line"]["line-translate-anchor"]), - "line-width": new DataDrivenProperty(styleSpec["paint_line"]["line-width"]), - "line-gap-width": new DataDrivenProperty(styleSpec["paint_line"]["line-gap-width"]), - "line-offset": new DataDrivenProperty(styleSpec["paint_line"]["line-offset"]), - "line-blur": new DataDrivenProperty(styleSpec["paint_line"]["line-blur"]), - "line-dasharray": new CrossFadedProperty(styleSpec["paint_line"]["line-dasharray"]), - "line-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_line"]["line-pattern"]), - "line-gradient": new ColorRampProperty(styleSpec["paint_line"]["line-gradient"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint, layout }: $Exact<{ - paint: Properties, layout: Properties -}>); diff --git a/src/style/style_layer/line_style_layer_properties.ts b/src/style/style_layer/line_style_layer_properties.ts new file mode 100644 index 0000000000..713bbc7000 --- /dev/null +++ b/src/style/style_layer/line_style_layer_properties.ts @@ -0,0 +1,93 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue, + CrossFaded +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + +export type LayoutProps = { + "line-cap": DataConstantProperty<"butt" | "round" | "square">, + "line-join": DataDrivenProperty<"bevel" | "round" | "miter">, + "line-miter-limit": DataConstantProperty, + "line-round-limit": DataConstantProperty, + "line-sort-key": DataDrivenProperty +}; + +export type LayoutPropsPossiblyEvaluated = { + "line-cap": "butt" | "round" | "square", + "line-join": PossiblyEvaluatedPropertyValue<"bevel" | "round" | "miter">, + "line-miter-limit": number, + "line-round-limit": number, + "line-sort-key": PossiblyEvaluatedPropertyValue +}; + +const layout: Properties = new Properties({ + "line-cap": new DataConstantProperty(styleSpec["layout_line"]["line-cap"] as any as StylePropertySpecification), + "line-join": new DataDrivenProperty(styleSpec["layout_line"]["line-join"] as any as StylePropertySpecification), + "line-miter-limit": new DataConstantProperty(styleSpec["layout_line"]["line-miter-limit"] as any as StylePropertySpecification), + "line-round-limit": new DataConstantProperty(styleSpec["layout_line"]["line-round-limit"] as any as StylePropertySpecification), + "line-sort-key": new DataDrivenProperty(styleSpec["layout_line"]["line-sort-key"] as any as StylePropertySpecification), +}); + +export type PaintProps = { + "line-opacity": DataDrivenProperty, + "line-color": DataDrivenProperty, + "line-translate": DataConstantProperty<[number, number]>, + "line-translate-anchor": DataConstantProperty<"map" | "viewport">, + "line-width": DataDrivenProperty, + "line-gap-width": DataDrivenProperty, + "line-offset": DataDrivenProperty, + "line-blur": DataDrivenProperty, + "line-dasharray": CrossFadedProperty>, + "line-pattern": CrossFadedDataDrivenProperty, + "line-gradient": ColorRampProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "line-opacity": PossiblyEvaluatedPropertyValue, + "line-color": PossiblyEvaluatedPropertyValue, + "line-translate": [number, number], + "line-translate-anchor": "map" | "viewport", + "line-width": PossiblyEvaluatedPropertyValue, + "line-gap-width": PossiblyEvaluatedPropertyValue, + "line-offset": PossiblyEvaluatedPropertyValue, + "line-blur": PossiblyEvaluatedPropertyValue, + "line-dasharray": CrossFaded>, + "line-pattern": PossiblyEvaluatedPropertyValue>, + "line-gradient": ColorRampProperty +}; + +const paint: Properties = new Properties({ + "line-opacity": new DataDrivenProperty(styleSpec["paint_line"]["line-opacity"] as any as StylePropertySpecification), + "line-color": new DataDrivenProperty(styleSpec["paint_line"]["line-color"] as any as StylePropertySpecification), + "line-translate": new DataConstantProperty(styleSpec["paint_line"]["line-translate"] as any as StylePropertySpecification), + "line-translate-anchor": new DataConstantProperty(styleSpec["paint_line"]["line-translate-anchor"] as any as StylePropertySpecification), + "line-width": new DataDrivenProperty(styleSpec["paint_line"]["line-width"] as any as StylePropertySpecification), + "line-gap-width": new DataDrivenProperty(styleSpec["paint_line"]["line-gap-width"] as any as StylePropertySpecification), + "line-offset": new DataDrivenProperty(styleSpec["paint_line"]["line-offset"] as any as StylePropertySpecification), + "line-blur": new DataDrivenProperty(styleSpec["paint_line"]["line-blur"] as any as StylePropertySpecification), + "line-dasharray": new CrossFadedProperty(styleSpec["paint_line"]["line-dasharray"] as any as StylePropertySpecification), + "line-pattern": new CrossFadedDataDrivenProperty(styleSpec["paint_line"]["line-pattern"] as any as StylePropertySpecification), + "line-gradient": new ColorRampProperty(styleSpec["paint_line"]["line-gradient"] as any as StylePropertySpecification), +}); + +export default ({ paint, layout } as { + paint: Properties, + layout: Properties +}); diff --git a/src/style/style_layer/raster_style_layer.js b/src/style/style_layer/raster_style_layer.ts similarity index 76% rename from src/style/style_layer/raster_style_layer.js rename to src/style/style_layer/raster_style_layer.ts index 33033909cb..56ca3e3342 100644 --- a/src/style/style_layer/raster_style_layer.js +++ b/src/style/style_layer/raster_style_layer.ts @@ -1,8 +1,6 @@ -// @flow - import StyleLayer from '../style_layer'; -import properties from './raster_style_layer_properties'; +import properties, {PaintPropsPossiblyEvaluated} from './raster_style_layer_properties'; import {Transitionable, Transitioning, PossiblyEvaluated} from '../properties'; import type {PaintProps} from './raster_style_layer_properties'; @@ -11,7 +9,7 @@ import type {LayerSpecification} from '../../style-spec/types'; class RasterStyleLayer extends StyleLayer { _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); diff --git a/src/style/style_layer/raster_style_layer_properties.js b/src/style/style_layer/raster_style_layer_properties.js deleted file mode 100644 index 1535616830..0000000000 --- a/src/style/style_layer/raster_style_layer_properties.js +++ /dev/null @@ -1,50 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - - -export type PaintProps = {| - "raster-opacity": DataConstantProperty, - "raster-hue-rotate": DataConstantProperty, - "raster-brightness-min": DataConstantProperty, - "raster-brightness-max": DataConstantProperty, - "raster-saturation": DataConstantProperty, - "raster-contrast": DataConstantProperty, - "raster-resampling": DataConstantProperty<"linear" | "nearest">, - "raster-fade-duration": DataConstantProperty, -|}; - -const paint: Properties = new Properties({ - "raster-opacity": new DataConstantProperty(styleSpec["paint_raster"]["raster-opacity"]), - "raster-hue-rotate": new DataConstantProperty(styleSpec["paint_raster"]["raster-hue-rotate"]), - "raster-brightness-min": new DataConstantProperty(styleSpec["paint_raster"]["raster-brightness-min"]), - "raster-brightness-max": new DataConstantProperty(styleSpec["paint_raster"]["raster-brightness-max"]), - "raster-saturation": new DataConstantProperty(styleSpec["paint_raster"]["raster-saturation"]), - "raster-contrast": new DataConstantProperty(styleSpec["paint_raster"]["raster-contrast"]), - "raster-resampling": new DataConstantProperty(styleSpec["paint_raster"]["raster-resampling"]), - "raster-fade-duration": new DataConstantProperty(styleSpec["paint_raster"]["raster-fade-duration"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint }: $Exact<{ - paint: Properties -}>); diff --git a/src/style/style_layer/raster_style_layer_properties.ts b/src/style/style_layer/raster_style_layer_properties.ts new file mode 100644 index 0000000000..9ec0cd517c --- /dev/null +++ b/src/style/style_layer/raster_style_layer_properties.ts @@ -0,0 +1,58 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + + +export type PaintProps = { + "raster-opacity": DataConstantProperty, + "raster-hue-rotate": DataConstantProperty, + "raster-brightness-min": DataConstantProperty, + "raster-brightness-max": DataConstantProperty, + "raster-saturation": DataConstantProperty, + "raster-contrast": DataConstantProperty, + "raster-resampling": DataConstantProperty<"linear" | "nearest">, + "raster-fade-duration": DataConstantProperty +}; + +export type PaintPropsPossiblyEvaluated = { + "raster-opacity": number, + "raster-hue-rotate": number, + "raster-brightness-min": number, + "raster-brightness-max": number, + "raster-saturation": number, + "raster-contrast": number, + "raster-resampling": "linear" | "nearest", + "raster-fade-duration": number +}; + +const paint: Properties = new Properties({ + "raster-opacity": new DataConstantProperty(styleSpec["paint_raster"]["raster-opacity"] as any as StylePropertySpecification), + "raster-hue-rotate": new DataConstantProperty(styleSpec["paint_raster"]["raster-hue-rotate"] as any as StylePropertySpecification), + "raster-brightness-min": new DataConstantProperty(styleSpec["paint_raster"]["raster-brightness-min"] as any as StylePropertySpecification), + "raster-brightness-max": new DataConstantProperty(styleSpec["paint_raster"]["raster-brightness-max"] as any as StylePropertySpecification), + "raster-saturation": new DataConstantProperty(styleSpec["paint_raster"]["raster-saturation"] as any as StylePropertySpecification), + "raster-contrast": new DataConstantProperty(styleSpec["paint_raster"]["raster-contrast"] as any as StylePropertySpecification), + "raster-resampling": new DataConstantProperty(styleSpec["paint_raster"]["raster-resampling"] as any as StylePropertySpecification), + "raster-fade-duration": new DataConstantProperty(styleSpec["paint_raster"]["raster-fade-duration"] as any as StylePropertySpecification), +}); + +export default ({ paint } as { + paint: Properties +}); diff --git a/src/style/style_layer/symbol_style_layer.js b/src/style/style_layer/symbol_style_layer.ts similarity index 86% rename from src/style/style_layer/symbol_style_layer.js rename to src/style/style_layer/symbol_style_layer.ts index 3725426450..2dea5aa1c6 100644 --- a/src/style/style_layer/symbol_style_layer.js +++ b/src/style/style_layer/symbol_style_layer.ts @@ -1,11 +1,9 @@ -// @flow - import StyleLayer from '../style_layer'; import assert from 'assert'; import SymbolBucket from '../../data/bucket/symbol_bucket'; import resolveTokens from '../../util/resolve_tokens'; -import properties from './symbol_style_layer_properties'; +import properties, {LayoutPropsPossiblyEvaluated, PaintPropsPossiblyEvaluated} from './symbol_style_layer_properties'; import { Transitionable, @@ -39,11 +37,11 @@ import Literal from '../../style-spec/expression/definitions/literal'; class SymbolStyleLayer extends StyleLayer { _unevaluatedLayout: Layout; - layout: PossiblyEvaluated; + layout: PossiblyEvaluated; _transitionablePaint: Transitionable; _transitioningPaint: Transitioning; - paint: PossiblyEvaluated; + paint: PossiblyEvaluated; constructor(layer: LayerSpecification) { super(layer, properties); @@ -93,7 +91,7 @@ class SymbolStyleLayer extends StyleLayer { this._setPaintOverrides(); } - getValueAndResolveTokens(name: *, feature: Feature, canonical: CanonicalTileID, availableImages: Array) { + getValueAndResolveTokens(name: any, feature: Feature, canonical: CanonicalTileID, availableImages: Array) { const value = this.layout.get(name).evaluate(feature, {}, canonical, availableImages); const unevaluated = this._unevaluatedLayout._values[name]; if (!unevaluated.isDataDriven() && !isExpression(unevaluated.value) && value) { @@ -103,15 +101,15 @@ class SymbolStyleLayer extends StyleLayer { return value; } - createBucket(parameters: BucketParameters<*>) { + createBucket(parameters: BucketParameters) { return new SymbolBucket(parameters); } - queryRadius(): number { + queryRadius = (): number => { return 0; } - queryIntersectsFeature(): boolean { + queryIntersectsFeature= (): boolean => { assert(false); // Should take a different path in FeatureIndex return false; } @@ -121,17 +119,17 @@ class SymbolStyleLayer extends StyleLayer { if (!SymbolStyleLayer.hasPaintOverride(this.layout, overridable)) { continue; } - const overriden = this.paint.get(overridable); + const overriden = this.paint.get(overridable as keyof PaintPropsPossiblyEvaluated) as PossiblyEvaluatedPropertyValue; const override = new FormatSectionOverride(overriden); const styleExpression = new StyleExpression(override, overriden.property.specification); let expression = null; if (overriden.value.kind === 'constant' || overriden.value.kind === 'source') { - expression = (new ZoomConstantExpression('source', styleExpression): SourceExpression); + expression = (new ZoomConstantExpression('source', styleExpression) as SourceExpression); } else { expression = (new ZoomDependentExpression('composite', styleExpression, overriden.value.zoomStops, - overriden.value._interpolationType): CompositeExpression); + (overriden.value as any)._interpolationType) as CompositeExpression); } this.paint._values[overridable] = new PossiblyEvaluatedPropertyValue(overriden.property, expression, @@ -146,7 +144,7 @@ class SymbolStyleLayer extends StyleLayer { return SymbolStyleLayer.hasPaintOverride(this.layout, name); } - static hasPaintOverride(layout: PossiblyEvaluated, propertyName: string): boolean { + static hasPaintOverride(layout: PossiblyEvaluated, propertyName: string): boolean { const textField = layout.get('text-field'); const property = properties.paint.properties[propertyName]; let hasOverrides = false; @@ -168,7 +166,7 @@ class SymbolStyleLayer extends StyleLayer { if (hasOverrides) return; if (expression instanceof Literal && typeOf(expression.value) === FormattedType) { - const formatted: Formatted = ((expression.value): any); + const formatted: Formatted = (expression.value as any); checkSections(formatted.sections); } else if (expression instanceof FormatExpression) { checkSections(expression.sections); @@ -177,7 +175,7 @@ class SymbolStyleLayer extends StyleLayer { } }; - const expr: ZoomConstantExpression<'source'> = ((textField.value): any); + const expr: ZoomConstantExpression<'source'> = (textField.value as any); if (expr._styleExpression) { checkExpression(expr._styleExpression.expression); } diff --git a/src/style/style_layer/symbol_style_layer_properties.js b/src/style/style_layer/symbol_style_layer_properties.js deleted file mode 100644 index d6df3d9974..0000000000 --- a/src/style/style_layer/symbol_style_layer_properties.js +++ /dev/null @@ -1,153 +0,0 @@ -// This file is generated. Edit build/generate-style-code.js, then run `yarn run codegen`. -// @flow -/* eslint-disable */ - -import styleSpec from '../../style-spec/reference/latest'; - -import { - Properties, - DataConstantProperty, - DataDrivenProperty, - CrossFadedDataDrivenProperty, - CrossFadedProperty, - ColorRampProperty -} from '../properties'; - -import type Color from '../../style-spec/util/color'; - -import type Formatted from '../../style-spec/expression/types/formatted'; - -import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; - -import { - ColorType -} from '../../style-spec/expression/types'; - -export type LayoutProps = {| - "symbol-placement": DataConstantProperty<"point" | "line" | "line-center">, - "symbol-spacing": DataConstantProperty, - "symbol-avoid-edges": DataConstantProperty, - "symbol-sort-key": DataDrivenProperty, - "symbol-z-order": DataConstantProperty<"auto" | "viewport-y" | "source">, - "icon-allow-overlap": DataConstantProperty, - "icon-ignore-placement": DataConstantProperty, - "icon-optional": DataConstantProperty, - "icon-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">, - "icon-size": DataDrivenProperty, - "icon-text-fit": DataConstantProperty<"none" | "width" | "height" | "both">, - "icon-text-fit-padding": DataConstantProperty<[number, number, number, number]>, - "icon-image": DataDrivenProperty, - "icon-rotate": DataDrivenProperty, - "icon-padding": DataConstantProperty, - "icon-keep-upright": DataConstantProperty, - "icon-offset": DataDrivenProperty<[number, number]>, - "icon-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, - "icon-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">, - "text-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">, - "text-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">, - "text-field": DataDrivenProperty, - "text-font": DataDrivenProperty>, - "text-size": DataDrivenProperty, - "text-max-width": DataDrivenProperty, - "text-line-height": DataConstantProperty, - "text-letter-spacing": DataDrivenProperty, - "text-justify": DataDrivenProperty<"auto" | "left" | "center" | "right">, - "text-radial-offset": DataDrivenProperty, - "text-variable-anchor": DataConstantProperty>, - "text-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, - "text-max-angle": DataConstantProperty, - "text-writing-mode": DataConstantProperty>, - "text-rotate": DataDrivenProperty, - "text-padding": DataConstantProperty, - "text-keep-upright": DataConstantProperty, - "text-transform": DataDrivenProperty<"none" | "uppercase" | "lowercase">, - "text-offset": DataDrivenProperty<[number, number]>, - "text-allow-overlap": DataConstantProperty, - "text-ignore-placement": DataConstantProperty, - "text-optional": DataConstantProperty, -|}; - -const layout: Properties = new Properties({ - "symbol-placement": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-placement"]), - "symbol-spacing": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-spacing"]), - "symbol-avoid-edges": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-avoid-edges"]), - "symbol-sort-key": new DataDrivenProperty(styleSpec["layout_symbol"]["symbol-sort-key"]), - "symbol-z-order": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-z-order"]), - "icon-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-allow-overlap"]), - "icon-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["icon-ignore-placement"]), - "icon-optional": new DataConstantProperty(styleSpec["layout_symbol"]["icon-optional"]), - "icon-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-rotation-alignment"]), - "icon-size": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-size"]), - "icon-text-fit": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit"]), - "icon-text-fit-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit-padding"]), - "icon-image": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-image"]), - "icon-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-rotate"]), - "icon-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-padding"]), - "icon-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["icon-keep-upright"]), - "icon-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-offset"]), - "icon-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-anchor"]), - "icon-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-pitch-alignment"]), - "text-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-pitch-alignment"]), - "text-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-rotation-alignment"]), - "text-field": new DataDrivenProperty(styleSpec["layout_symbol"]["text-field"]), - "text-font": new DataDrivenProperty(styleSpec["layout_symbol"]["text-font"]), - "text-size": new DataDrivenProperty(styleSpec["layout_symbol"]["text-size"]), - "text-max-width": new DataDrivenProperty(styleSpec["layout_symbol"]["text-max-width"]), - "text-line-height": new DataConstantProperty(styleSpec["layout_symbol"]["text-line-height"]), - "text-letter-spacing": new DataDrivenProperty(styleSpec["layout_symbol"]["text-letter-spacing"]), - "text-justify": new DataDrivenProperty(styleSpec["layout_symbol"]["text-justify"]), - "text-radial-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-radial-offset"]), - "text-variable-anchor": new DataConstantProperty(styleSpec["layout_symbol"]["text-variable-anchor"]), - "text-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["text-anchor"]), - "text-max-angle": new DataConstantProperty(styleSpec["layout_symbol"]["text-max-angle"]), - "text-writing-mode": new DataConstantProperty(styleSpec["layout_symbol"]["text-writing-mode"]), - "text-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["text-rotate"]), - "text-padding": new DataConstantProperty(styleSpec["layout_symbol"]["text-padding"]), - "text-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["text-keep-upright"]), - "text-transform": new DataDrivenProperty(styleSpec["layout_symbol"]["text-transform"]), - "text-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-offset"]), - "text-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-allow-overlap"]), - "text-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["text-ignore-placement"]), - "text-optional": new DataConstantProperty(styleSpec["layout_symbol"]["text-optional"]), -}); - -export type PaintProps = {| - "icon-opacity": DataDrivenProperty, - "icon-color": DataDrivenProperty, - "icon-halo-color": DataDrivenProperty, - "icon-halo-width": DataDrivenProperty, - "icon-halo-blur": DataDrivenProperty, - "icon-translate": DataConstantProperty<[number, number]>, - "icon-translate-anchor": DataConstantProperty<"map" | "viewport">, - "text-opacity": DataDrivenProperty, - "text-color": DataDrivenProperty, - "text-halo-color": DataDrivenProperty, - "text-halo-width": DataDrivenProperty, - "text-halo-blur": DataDrivenProperty, - "text-translate": DataConstantProperty<[number, number]>, - "text-translate-anchor": DataConstantProperty<"map" | "viewport">, -|}; - -const paint: Properties = new Properties({ - "icon-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-opacity"]), - "icon-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-color"]), - "icon-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-color"]), - "icon-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-width"]), - "icon-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-blur"]), - "icon-translate": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate"]), - "icon-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate-anchor"]), - "text-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["text-opacity"]), - "text-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-color"], { runtimeType: ColorType, getOverride: (o) => o.textColor, hasOverride: (o) => !!o.textColor }), - "text-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-color"]), - "text-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-width"]), - "text-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-blur"]), - "text-translate": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate"]), - "text-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate-anchor"]), -}); - -// Note: without adding the explicit type annotation, Flow infers weaker types -// for these objects from their use in the constructor to StyleLayer, as -// {layout?: Properties<...>, paint: Properties<...>} -export default ({ paint, layout }: $Exact<{ - paint: Properties, layout: Properties -}>); diff --git a/src/style/style_layer/symbol_style_layer_properties.ts b/src/style/style_layer/symbol_style_layer_properties.ts new file mode 100644 index 0000000000..c04efd99d9 --- /dev/null +++ b/src/style/style_layer/symbol_style_layer_properties.ts @@ -0,0 +1,214 @@ +// This file was generated. Edit build/generate-style-code.js, see https://github.com/maplibre/maplibre-gl-js/issues/266. +/* eslint-disable */ + +import styleSpec from '../../style-spec/reference/latest'; + +import { + Properties, + DataConstantProperty, + DataDrivenProperty, + CrossFadedDataDrivenProperty, + CrossFadedProperty, + ColorRampProperty, + PossiblyEvaluatedPropertyValue +} from '../properties'; + +import type Color from '../../style-spec/util/color'; + +import type Formatted from '../../style-spec/expression/types/formatted'; + +import type ResolvedImage from '../../style-spec/expression/types/resolved_image'; + +import { + ColorType +} from '../../style-spec/expression/types'; +import { StylePropertySpecification } from '../../style-spec/style-spec'; + +export type LayoutProps = { + "symbol-placement": DataConstantProperty<"point" | "line" | "line-center">, + "symbol-spacing": DataConstantProperty, + "symbol-avoid-edges": DataConstantProperty, + "symbol-sort-key": DataDrivenProperty, + "symbol-z-order": DataConstantProperty<"auto" | "viewport-y" | "source">, + "icon-allow-overlap": DataConstantProperty, + "icon-ignore-placement": DataConstantProperty, + "icon-optional": DataConstantProperty, + "icon-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">, + "icon-size": DataDrivenProperty, + "icon-text-fit": DataConstantProperty<"none" | "width" | "height" | "both">, + "icon-text-fit-padding": DataConstantProperty<[number, number, number, number]>, + "icon-image": DataDrivenProperty, + "icon-rotate": DataDrivenProperty, + "icon-padding": DataConstantProperty, + "icon-keep-upright": DataConstantProperty, + "icon-offset": DataDrivenProperty<[number, number]>, + "icon-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "icon-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">, + "text-pitch-alignment": DataConstantProperty<"map" | "viewport" | "auto">, + "text-rotation-alignment": DataConstantProperty<"map" | "viewport" | "auto">, + "text-field": DataDrivenProperty, + "text-font": DataDrivenProperty>, + "text-size": DataDrivenProperty, + "text-max-width": DataDrivenProperty, + "text-line-height": DataConstantProperty, + "text-letter-spacing": DataDrivenProperty, + "text-justify": DataDrivenProperty<"auto" | "left" | "center" | "right">, + "text-radial-offset": DataDrivenProperty, + "text-variable-anchor": DataConstantProperty>, + "text-anchor": DataDrivenProperty<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "text-max-angle": DataConstantProperty, + "text-writing-mode": DataConstantProperty>, + "text-rotate": DataDrivenProperty, + "text-padding": DataConstantProperty, + "text-keep-upright": DataConstantProperty, + "text-transform": DataDrivenProperty<"none" | "uppercase" | "lowercase">, + "text-offset": DataDrivenProperty<[number, number]>, + "text-allow-overlap": DataConstantProperty, + "text-ignore-placement": DataConstantProperty, + "text-optional": DataConstantProperty +}; + +export type LayoutPropsPossiblyEvaluated = { + "symbol-placement": "point" | "line" | "line-center", + "symbol-spacing": number, + "symbol-avoid-edges": boolean, + "symbol-sort-key": PossiblyEvaluatedPropertyValue, + "symbol-z-order": "auto" | "viewport-y" | "source", + "icon-allow-overlap": boolean, + "icon-ignore-placement": boolean, + "icon-optional": boolean, + "icon-rotation-alignment": "map" | "viewport" | "auto", + "icon-size": PossiblyEvaluatedPropertyValue, + "icon-text-fit": "none" | "width" | "height" | "both", + "icon-text-fit-padding": [number, number, number, number], + "icon-image": PossiblyEvaluatedPropertyValue, + "icon-rotate": PossiblyEvaluatedPropertyValue, + "icon-padding": number, + "icon-keep-upright": boolean, + "icon-offset": PossiblyEvaluatedPropertyValue<[number, number]>, + "icon-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "icon-pitch-alignment": "map" | "viewport" | "auto", + "text-pitch-alignment": "map" | "viewport" | "auto", + "text-rotation-alignment": "map" | "viewport" | "auto", + "text-field": PossiblyEvaluatedPropertyValue, + "text-font": PossiblyEvaluatedPropertyValue>, + "text-size": PossiblyEvaluatedPropertyValue, + "text-max-width": PossiblyEvaluatedPropertyValue, + "text-line-height": number, + "text-letter-spacing": PossiblyEvaluatedPropertyValue, + "text-justify": PossiblyEvaluatedPropertyValue<"auto" | "left" | "center" | "right">, + "text-radial-offset": PossiblyEvaluatedPropertyValue, + "text-variable-anchor": Array<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "text-anchor": PossiblyEvaluatedPropertyValue<"center" | "left" | "right" | "top" | "bottom" | "top-left" | "top-right" | "bottom-left" | "bottom-right">, + "text-max-angle": number, + "text-writing-mode": Array<"horizontal" | "vertical">, + "text-rotate": PossiblyEvaluatedPropertyValue, + "text-padding": number, + "text-keep-upright": boolean, + "text-transform": PossiblyEvaluatedPropertyValue<"none" | "uppercase" | "lowercase">, + "text-offset": PossiblyEvaluatedPropertyValue<[number, number]>, + "text-allow-overlap": boolean, + "text-ignore-placement": boolean, + "text-optional": boolean +}; + +const layout: Properties = new Properties({ + "symbol-placement": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-placement"] as any as StylePropertySpecification), + "symbol-spacing": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-spacing"] as any as StylePropertySpecification), + "symbol-avoid-edges": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-avoid-edges"] as any as StylePropertySpecification), + "symbol-sort-key": new DataDrivenProperty(styleSpec["layout_symbol"]["symbol-sort-key"] as any as StylePropertySpecification), + "symbol-z-order": new DataConstantProperty(styleSpec["layout_symbol"]["symbol-z-order"] as any as StylePropertySpecification), + "icon-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["icon-allow-overlap"] as any as StylePropertySpecification), + "icon-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["icon-ignore-placement"] as any as StylePropertySpecification), + "icon-optional": new DataConstantProperty(styleSpec["layout_symbol"]["icon-optional"] as any as StylePropertySpecification), + "icon-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-rotation-alignment"] as any as StylePropertySpecification), + "icon-size": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-size"] as any as StylePropertySpecification), + "icon-text-fit": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit"] as any as StylePropertySpecification), + "icon-text-fit-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-text-fit-padding"] as any as StylePropertySpecification), + "icon-image": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-image"] as any as StylePropertySpecification), + "icon-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-rotate"] as any as StylePropertySpecification), + "icon-padding": new DataConstantProperty(styleSpec["layout_symbol"]["icon-padding"] as any as StylePropertySpecification), + "icon-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["icon-keep-upright"] as any as StylePropertySpecification), + "icon-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-offset"] as any as StylePropertySpecification), + "icon-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["icon-anchor"] as any as StylePropertySpecification), + "icon-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["icon-pitch-alignment"] as any as StylePropertySpecification), + "text-pitch-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-pitch-alignment"] as any as StylePropertySpecification), + "text-rotation-alignment": new DataConstantProperty(styleSpec["layout_symbol"]["text-rotation-alignment"] as any as StylePropertySpecification), + "text-field": new DataDrivenProperty(styleSpec["layout_symbol"]["text-field"] as any as StylePropertySpecification), + "text-font": new DataDrivenProperty(styleSpec["layout_symbol"]["text-font"] as any as StylePropertySpecification), + "text-size": new DataDrivenProperty(styleSpec["layout_symbol"]["text-size"] as any as StylePropertySpecification), + "text-max-width": new DataDrivenProperty(styleSpec["layout_symbol"]["text-max-width"] as any as StylePropertySpecification), + "text-line-height": new DataConstantProperty(styleSpec["layout_symbol"]["text-line-height"] as any as StylePropertySpecification), + "text-letter-spacing": new DataDrivenProperty(styleSpec["layout_symbol"]["text-letter-spacing"] as any as StylePropertySpecification), + "text-justify": new DataDrivenProperty(styleSpec["layout_symbol"]["text-justify"] as any as StylePropertySpecification), + "text-radial-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-radial-offset"] as any as StylePropertySpecification), + "text-variable-anchor": new DataConstantProperty(styleSpec["layout_symbol"]["text-variable-anchor"] as any as StylePropertySpecification), + "text-anchor": new DataDrivenProperty(styleSpec["layout_symbol"]["text-anchor"] as any as StylePropertySpecification), + "text-max-angle": new DataConstantProperty(styleSpec["layout_symbol"]["text-max-angle"] as any as StylePropertySpecification), + "text-writing-mode": new DataConstantProperty(styleSpec["layout_symbol"]["text-writing-mode"] as any as StylePropertySpecification), + "text-rotate": new DataDrivenProperty(styleSpec["layout_symbol"]["text-rotate"] as any as StylePropertySpecification), + "text-padding": new DataConstantProperty(styleSpec["layout_symbol"]["text-padding"] as any as StylePropertySpecification), + "text-keep-upright": new DataConstantProperty(styleSpec["layout_symbol"]["text-keep-upright"] as any as StylePropertySpecification), + "text-transform": new DataDrivenProperty(styleSpec["layout_symbol"]["text-transform"] as any as StylePropertySpecification), + "text-offset": new DataDrivenProperty(styleSpec["layout_symbol"]["text-offset"] as any as StylePropertySpecification), + "text-allow-overlap": new DataConstantProperty(styleSpec["layout_symbol"]["text-allow-overlap"] as any as StylePropertySpecification), + "text-ignore-placement": new DataConstantProperty(styleSpec["layout_symbol"]["text-ignore-placement"] as any as StylePropertySpecification), + "text-optional": new DataConstantProperty(styleSpec["layout_symbol"]["text-optional"] as any as StylePropertySpecification) +}); + +export type PaintProps = { + "icon-opacity": DataDrivenProperty, + "icon-color": DataDrivenProperty, + "icon-halo-color": DataDrivenProperty, + "icon-halo-width": DataDrivenProperty, + "icon-halo-blur": DataDrivenProperty, + "icon-translate": DataConstantProperty<[number, number]>, + "icon-translate-anchor": DataConstantProperty<"map" | "viewport">, + "text-opacity": DataDrivenProperty, + "text-color": DataDrivenProperty, + "text-halo-color": DataDrivenProperty, + "text-halo-width": DataDrivenProperty, + "text-halo-blur": DataDrivenProperty, + "text-translate": DataConstantProperty<[number, number]>, + "text-translate-anchor": DataConstantProperty<"map" | "viewport"> +}; + +export type PaintPropsPossiblyEvaluated = { + "icon-opacity": PossiblyEvaluatedPropertyValue, + "icon-color": PossiblyEvaluatedPropertyValue, + "icon-halo-color": PossiblyEvaluatedPropertyValue, + "icon-halo-width": PossiblyEvaluatedPropertyValue, + "icon-halo-blur": PossiblyEvaluatedPropertyValue, + "icon-translate": [number, number], + "icon-translate-anchor": "map" | "viewport", + "text-opacity": PossiblyEvaluatedPropertyValue, + "text-color": PossiblyEvaluatedPropertyValue, + "text-halo-color": PossiblyEvaluatedPropertyValue, + "text-halo-width": PossiblyEvaluatedPropertyValue, + "text-halo-blur": PossiblyEvaluatedPropertyValue, + "text-translate": [number, number], + "text-translate-anchor": "map" | "viewport" +}; + + +const paint: Properties = new Properties({ + "icon-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-opacity"] as any as StylePropertySpecification), + "icon-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-color"] as any as StylePropertySpecification), + "icon-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-color"] as any as StylePropertySpecification), + "icon-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-width"] as any as StylePropertySpecification), + "icon-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["icon-halo-blur"] as any as StylePropertySpecification), + "icon-translate": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate"] as any as StylePropertySpecification), + "icon-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["icon-translate-anchor"] as any as StylePropertySpecification), + "text-opacity": new DataDrivenProperty(styleSpec["paint_symbol"]["text-opacity"] as any as StylePropertySpecification), + "text-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-color"] as any as StylePropertySpecification, { runtimeType: ColorType, getOverride: (o) => o.textColor, hasOverride: (o) => !!o.textColor }), + "text-halo-color": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-color"] as any as StylePropertySpecification), + "text-halo-width": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-width"] as any as StylePropertySpecification), + "text-halo-blur": new DataDrivenProperty(styleSpec["paint_symbol"]["text-halo-blur"] as any as StylePropertySpecification), + "text-translate": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate"] as any as StylePropertySpecification), + "text-translate-anchor": new DataConstantProperty(styleSpec["paint_symbol"]["text-translate-anchor"] as any as StylePropertySpecification), +}); + +export default ({ paint, layout } as { + paint: Properties, + layout: Properties +}); diff --git a/src/style/style_layer/typed_style_layer.js b/src/style/style_layer/typed_style_layer.ts similarity index 67% rename from src/style/style_layer/typed_style_layer.js rename to src/style/style_layer/typed_style_layer.ts index 51cd3a8691..d883465da3 100644 --- a/src/style/style_layer/typed_style_layer.js +++ b/src/style/style_layer/typed_style_layer.ts @@ -1,5 +1,3 @@ -// @flow - import type CircleStyleLayer from './circle_style_layer'; import type FillStyleLayer from './fill_style_layer'; import type FillExtrusionStyleLayer from './fill_extrusion_style_layer'; @@ -8,10 +6,4 @@ import type HillshadeStyleLayer from './hillshade_style_layer'; import type LineStyleLayer from './line_style_layer'; import type SymbolStyleLayer from './symbol_style_layer'; -export type TypedStyleLayer = CircleStyleLayer | - FillStyleLayer | - FillExtrusionStyleLayer | - HeatmapStyleLayer | - HillshadeStyleLayer | - LineStyleLayer | - SymbolStyleLayer; +export type TypedStyleLayer = CircleStyleLayer | FillStyleLayer | FillExtrusionStyleLayer | HeatmapStyleLayer | HillshadeStyleLayer | LineStyleLayer | SymbolStyleLayer; diff --git a/src/style/style_layer_index.js b/src/style/style_layer_index.ts similarity index 81% rename from src/style/style_layer_index.js rename to src/style/style_layer_index.ts index 555c0993dc..7e1159c310 100644 --- a/src/style/style_layer_index.js +++ b/src/style/style_layer_index.ts @@ -1,26 +1,27 @@ -// @flow - import StyleLayer from './style_layer'; import createStyleLayer from './create_style_layer'; -import {values} from '../util/util'; import featureFilter from '../style-spec/feature_filter'; import groupByLayout from '../style-spec/group_by_layout'; import type {TypedStyleLayer} from './style_layer/typed_style_layer'; import type {LayerSpecification} from '../style-spec/types'; -export type LayerConfigs = {[_: string]: LayerSpecification }; -export type Family = Array; +export type LayerConfigs = {[_: string]: LayerSpecification}; +export type Family = Array; class StyleLayerIndex { - familiesBySource: { [source: string]: { [sourceLayer: string]: Array> } }; - keyCache: { [source: string]: string }; + familiesBySource: { + [source: string]: { + [sourceLayer: string]: Array>; + }; + }; + keyCache: {[source: string]: string}; _layerConfigs: LayerConfigs; - _layers: {[_: string]: StyleLayer }; + _layers: {[_: string]: StyleLayer}; - constructor(layerConfigs: ?Array) { + constructor(layerConfigs?: Array | null) { this.keyCache = {}; if (layerConfigs) { this.replace(layerConfigs); @@ -50,7 +51,7 @@ class StyleLayerIndex { this.familiesBySource = {}; - const groups = groupByLayout(values(this._layerConfigs), this.keyCache); + const groups = groupByLayout(Object.values(this._layerConfigs), this.keyCache); for (const layerConfigs of groups) { const layers = layerConfigs.map((layerConfig) => this._layers[layerConfig.id]); diff --git a/src/style/validate_style.js b/src/style/validate_style.ts similarity index 57% rename from src/style/validate_style.js rename to src/style/validate_style.ts index a84a38de69..8dbc81aa46 100644 --- a/src/style/validate_style.js +++ b/src/style/validate_style.ts @@ -1,28 +1,27 @@ -// @flow import validateStyleMin from '../style-spec/validate_style.min'; import {ErrorEvent} from '../util/evented'; import type {Evented} from '../util/evented'; type ValidationError = { - message: string, - line: number, - identifier?: string + message: string; + line: number; + identifier?: string; }; -export type Validator = (Object) => $ReadOnlyArray; +export type Validator = (a: any) => ReadonlyArray; type ValidateStyle = { - (Object, ?Object): $ReadOnlyArray, - source: Validator, - layer: Validator, - light: Validator, - filter: Validator, - paintProperty: Validator, - layoutProperty: Validator + source: Validator; + layer: Validator; + light: Validator; + filter: Validator; + paintProperty: Validator; + layoutProperty: Validator; + (b: any, a?: any | null): ReadonlyArray; }; -export const validateStyle = (validateStyleMin: ValidateStyle); +export const validateStyle = (validateStyleMin as ValidateStyle); export const validateSource = validateStyle.source; export const validateLight = validateStyle.light; @@ -30,7 +29,13 @@ export const validateFilter = validateStyle.filter; export const validatePaintProperty = validateStyle.paintProperty; export const validateLayoutProperty = validateStyle.layoutProperty; -export function emitValidationErrors(emitter: Evented, errors: ?$ReadOnlyArray<{message: string, identifier?: string}>): boolean { +export function emitValidationErrors( + emitter: Evented, + errors?: ReadonlyArray<{ + message: string; + identifier?: string; + }> | null +): boolean { let hasErrors = false; if (errors && errors.length) { for (const error of errors) { diff --git a/src/style/zoom_history.js b/src/style/zoom_history.ts similarity index 99% rename from src/style/zoom_history.js rename to src/style/zoom_history.ts index b2f684e2a6..b05aeece18 100644 --- a/src/style/zoom_history.js +++ b/src/style/zoom_history.ts @@ -1,5 +1,3 @@ -// @flow - class ZoomHistory { lastZoom: number; lastFloorZoom: number; diff --git a/src/symbol/anchor.js b/src/symbol/anchor.ts similarity index 84% rename from src/symbol/anchor.js rename to src/symbol/anchor.ts index cd756cc72f..c7a16a4048 100644 --- a/src/symbol/anchor.js +++ b/src/symbol/anchor.ts @@ -1,12 +1,10 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import {register} from '../util/web_worker_transfer'; class Anchor extends Point { angle: any; - segment: number | void; + segment?: number; constructor(x: number, y: number, angle: number, segment?: number) { super(x, y); diff --git a/src/symbol/check_max_angle.js b/src/symbol/check_max_angle.ts similarity index 96% rename from src/symbol/check_max_angle.js rename to src/symbol/check_max_angle.ts index f6eddf0949..d439d58669 100644 --- a/src/symbol/check_max_angle.js +++ b/src/symbol/check_max_angle.ts @@ -1,8 +1,6 @@ -// @flow - export default checkMaxAngle; -import type Point from '@mapbox/point-geometry'; +import type Point from '../util/point'; import type Anchor from './anchor'; /** @@ -24,7 +22,7 @@ function checkMaxAngle(line: Array, anchor: Anchor, labelLength: number, if (anchor.segment === undefined) return true; let p = anchor; - let index = anchor.segment + 1; + let index = Number(anchor.segment) + 1; let anchorDistance = 0; // move backwards along the line to the first segment the label appears on diff --git a/src/symbol/clip_line.js b/src/symbol/clip_line.ts similarity index 97% rename from src/symbol/clip_line.js rename to src/symbol/clip_line.ts index 1abfea4841..cc1fe57c1b 100644 --- a/src/symbol/clip_line.js +++ b/src/symbol/clip_line.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; export default clipLine; diff --git a/src/symbol/collision_feature.js b/src/symbol/collision_feature.ts similarity index 97% rename from src/symbol/collision_feature.js rename to src/symbol/collision_feature.ts index faf3eb48a5..f28b77bb85 100644 --- a/src/symbol/collision_feature.js +++ b/src/symbol/collision_feature.ts @@ -1,7 +1,5 @@ -// @flow - import type {CollisionBoxArray} from '../data/array_types'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import type Anchor from './anchor'; /** @@ -15,7 +13,7 @@ import type Anchor from './anchor'; class CollisionFeature { boxStartIndex: number; boxEndIndex: number; - circleDiameter: ?number; + circleDiameter: number | undefined | null; /** * Create a CollisionFeature, adding its collision box data to the given collisionBoxArray in the process. @@ -33,7 +31,7 @@ class CollisionFeature { featureIndex: number, sourceLayerIndex: number, bucketIndex: number, - shaped: Object, + shaped: any, boxScale: number, padding: number, alignLine: boolean, diff --git a/src/symbol/collision_index.js b/src/symbol/collision_index.ts similarity index 93% rename from src/symbol/collision_index.js rename to src/symbol/collision_index.ts index f553e61076..ad6c403c48 100644 --- a/src/symbol/collision_index.js +++ b/src/symbol/collision_index.ts @@ -1,12 +1,10 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import clipLine from './clip_line'; import PathInterpolator from './path_interpolator'; import * as intersectionTests from '../util/intersection_tests'; import Grid from './grid_index'; -import {mat4} from 'gl-matrix'; +import {mat4, vec4} from 'gl-matrix'; import ONE_EM from '../symbol/one_em'; import assert from 'assert'; @@ -66,7 +64,16 @@ class CollisionIndex { this.gridBottomBoundary = transform.height + 2 * viewportPadding; } - placeCollisionBox(collisionBox: SingleCollisionBox, allowOverlap: boolean, textPixelRatio: number, posMatrix: mat4, collisionGroupPredicate?: any): { box: Array, offscreen: boolean } { + placeCollisionBox( + collisionBox: SingleCollisionBox, + allowOverlap: boolean, + textPixelRatio: number, + posMatrix: mat4, + collisionGroupPredicate?: any + ): { + box: Array; + offscreen: boolean; + } { const projectedPoint = this.projectAndGetPerspectiveRatio(posMatrix, collisionBox.anchorPointX, collisionBox.anchorPointY); const tileToViewport = textPixelRatio * projectedPoint.perspectiveRatio; const tlX = collisionBox.x1 * tileToViewport + projectedPoint.point.x; @@ -88,19 +95,25 @@ class CollisionIndex { }; } - placeCollisionCircles(allowOverlap: boolean, - symbol: any, - lineVertexArray: SymbolLineVertexArray, - glyphOffsetArray: GlyphOffsetArray, - fontSize: number, - posMatrix: mat4, - labelPlaneMatrix: mat4, - labelToScreenMatrix?: mat4, - showCollisionCircles: boolean, - pitchWithMap: boolean, - collisionGroupPredicate?: any, - circlePixelDiameter: number, - textPixelPadding: number): { circles: Array, offscreen: boolean, collisionDetected: boolean } { + placeCollisionCircles( + allowOverlap: boolean, + symbol: any, + lineVertexArray: SymbolLineVertexArray, + glyphOffsetArray: GlyphOffsetArray, + fontSize: number, + posMatrix: mat4, + labelPlaneMatrix: mat4, + labelToScreenMatrix: mat4 | undefined | null, + showCollisionCircles: boolean, + pitchWithMap: boolean, + collisionGroupPredicate: any | undefined | null, + circlePixelDiameter: number, + textPixelPadding: number + ): { + circles: Array; + offscreen: boolean; + collisionDetected: boolean; + } { const placedCollisionCircles = []; const tileUnitAnchorPoint = new Point(symbol.anchorX, symbol.anchorY); @@ -335,7 +348,7 @@ class CollisionIndex { } projectAndGetPerspectiveRatio(posMatrix: mat4, x: number, y: number) { - const p = [x, y, 0, 1]; + const p = vec4.fromValues(x, y, 0, 1); projection.xyTransformMat4(p, p, posMatrix); const a = new Point( (((p[0] / p[3] + 1) / 2) * this.transform.width) + viewportPadding, @@ -363,8 +376,8 @@ class CollisionIndex { * Use this function to render e.g. collision circles on the screen. * example transformation: clipPos = glCoordMatrix * viewportMatrix * circle_pos */ - getViewportMatrix(): mat4 { - const m = mat4.identity([]); + getViewportMatrix() { + const m = mat4.create(); // creates identity matrix mat4.translate(m, m, [-viewportPadding, -viewportPadding, 0.0]); return m; } diff --git a/src/symbol/cross_tile_symbol_index.js b/src/symbol/cross_tile_symbol_index.ts similarity index 94% rename from src/symbol/cross_tile_symbol_index.js rename to src/symbol/cross_tile_symbol_index.ts index 103d839961..de63151cab 100644 --- a/src/symbol/cross_tile_symbol_index.js +++ b/src/symbol/cross_tile_symbol_index.ts @@ -1,5 +1,3 @@ -// @flow - import EXTENT from '../data/extent'; import {SymbolInstanceArray} from '../data/array_types'; @@ -29,13 +27,15 @@ const roundingFactor = 512 / EXTENT / 2; class TileLayerIndex { tileID: OverscaledTileID; - indexedSymbolInstances: {[_: number]: Array<{ - crossTileID: number, + indexedSymbolInstances: { + [_: number]: Array<{ + crossTileID: number; coord: { - x: number, - y: number - } - }>}; + x: number; + y: number; + }; + }>; + }; bucketInstanceId: number; constructor(tileID: OverscaledTileID, symbolInstances: SymbolInstanceArray, bucketInstanceId: number) { @@ -73,7 +73,9 @@ class TileLayerIndex { }; } - findMatches(symbolInstances: SymbolInstanceArray, newTileID: OverscaledTileID, zoomCrossTileIDs: {[crossTileID: number]: boolean}) { + findMatches(symbolInstances: SymbolInstanceArray, newTileID: OverscaledTileID, zoomCrossTileIDs: { + [crossTileID: number]: boolean; + }) { const tolerance = this.tileID.canonical.z < newTileID.canonical.z ? 1 : Math.pow(2, this.tileID.canonical.z - newTileID.canonical.z); for (let i = 0; i < symbolInstances.length; i++) { @@ -120,8 +122,16 @@ class CrossTileIDs { } class CrossTileSymbolLayerIndex { - indexes: {[zoom: string | number]: {[tileId: string | number]: TileLayerIndex}}; - usedCrossTileIDs: {[zoom: string | number]: {[crossTileID: number]: boolean}}; + indexes: { + [zoom in string | number]: { + [tileId in string | number]: TileLayerIndex; + }; + }; + usedCrossTileIDs: { + [zoom in string | number]: { + [crossTileID: number]: boolean; + }; + }; lng: number; constructor() { @@ -217,13 +227,15 @@ class CrossTileSymbolLayerIndex { removeBucketCrossTileIDs(zoom: string | number, removedBucket: TileLayerIndex) { for (const key in removedBucket.indexedSymbolInstances) { - for (const symbolInstance of removedBucket.indexedSymbolInstances[(key: any)]) { + for (const symbolInstance of removedBucket.indexedSymbolInstances[(key as any)]) { delete this.usedCrossTileIDs[zoom][symbolInstance.crossTileID]; } } } - removeStaleBuckets(currentIDs: { [string | number]: boolean }) { + removeStaleBuckets(currentIDs: { + [k in string | number]: boolean; + }) { let tilesChanged = false; for (const z in this.indexes) { const zoomIndexes = this.indexes[z]; @@ -264,7 +276,7 @@ class CrossTileSymbolIndex { layerIndex.handleWrapJump(lng); for (const tile of tiles) { - const symbolBucket = ((tile.getBucket(styleLayer): any): SymbolBucket); + const symbolBucket = (tile.getBucket(styleLayer) as any as SymbolBucket); if (!symbolBucket || styleLayer.id !== symbolBucket.layerIds[0]) continue; diff --git a/src/symbol/get_anchors.js b/src/symbol/get_anchors.ts similarity index 91% rename from src/symbol/get_anchors.js rename to src/symbol/get_anchors.ts index 9b034b4bc8..9d38c38f44 100644 --- a/src/symbol/get_anchors.js +++ b/src/symbol/get_anchors.ts @@ -1,11 +1,9 @@ -// @flow - import {number as interpolate} from '../style-spec/util/interpolate'; import Anchor from '../symbol/anchor'; import checkMaxAngle from './check_max_angle'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../util/point'; import type {Shaping, PositionedIcon} from './shaping'; export {getAnchors, getCenterAnchor}; @@ -18,15 +16,17 @@ function getLineLength(line: Array): number { return lineLength; } -function getAngleWindowSize(shapedText: ?Shaping, - glyphSize: number, - boxScale: number): number { +function getAngleWindowSize( + shapedText: Shaping | undefined | null, + glyphSize: number, + boxScale: number +): number { return shapedText ? 3 / 5 * glyphSize * boxScale : 0; } -function getShapedLabelLength(shapedText: ?Shaping, shapedIcon: ?PositionedIcon): number { +function getShapedLabelLength(shapedText?: Shaping | null, shapedIcon?: PositionedIcon | null): number { return Math.max( shapedText ? shapedText.right - shapedText.left : 0, shapedIcon ? shapedIcon.right - shapedIcon.left : 0); @@ -34,8 +34,8 @@ function getShapedLabelLength(shapedText: ?Shaping, shapedIcon: ?PositionedIcon) function getCenterAnchor(line: Array, maxAngle: number, - shapedText: ?Shaping, - shapedIcon: ?PositionedIcon, + shapedText: Shaping | undefined | null, + shapedIcon: PositionedIcon | undefined | null, glyphSize: number, boxScale: number) { const angleWindowSize = getAngleWindowSize(shapedText, glyphSize, boxScale); @@ -73,8 +73,8 @@ function getCenterAnchor(line: Array, function getAnchors(line: Array, spacing: number, maxAngle: number, - shapedText: ?Shaping, - shapedIcon: ?PositionedIcon, + shapedText: Shaping | undefined | null, + shapedIcon: PositionedIcon | undefined | null, glyphSize: number, boxScale: number, overscaling: number, diff --git a/src/symbol/grid_index.js b/src/symbol/grid_index.ts similarity index 96% rename from src/symbol/grid_index.js rename to src/symbol/grid_index.ts index fa1dc10343..ba23bc8cd6 100644 --- a/src/symbol/grid_index.js +++ b/src/symbol/grid_index.ts @@ -1,5 +1,3 @@ -// @flow - /** * GridIndex is a data structure for testing the intersection of * circles and rectangles in a 2d plane. @@ -153,15 +151,15 @@ class GridIndex { } query(x1: number, y1: number, x2: number, y2: number, predicate?: any): Array { - return (this._query(x1, y1, x2, y2, false, predicate): any); + return this._query(x1, y1, x2, y2, false, predicate) as any; } - hitTest(x1: number, y1: number, x2: number, y2: number, predicate?: any): boolean { - return (this._query(x1, y1, x2, y2, true, predicate): any); + hitTest(x1: number, y1: number, x2: number, y2: number, predicate?: any): boolean { + return this._query(x1, y1, x2, y2, true, predicate) as any; } hitTestCircle(x: number, y: number, radius: number, predicate?: any): boolean { - return (this._queryCircle(x, y, radius, true, predicate): any); + return this._queryCircle(x, y, radius, true, predicate) as any; } _queryCell(x1: number, y1: number, x2: number, y2: number, cellIndex: number, result: any, queryArgs: any, predicate?: any) { @@ -309,7 +307,15 @@ class GridIndex { return (bothRadii * bothRadii) > (dx * dx + dy * dy); } - _circleAndRectCollide(circleX: number, circleY: number, radius: number, x1: number, y1: number, x2: number, y2: number): boolean { + _circleAndRectCollide( + circleX: number, + circleY: number, + radius: number, + x1: number, + y1: number, + x2: number, + y2: number + ): boolean { const halfRectWidth = (x2 - x1) / 2; const distX = Math.abs(circleX - (x1 + halfRectWidth)); if (distX > (halfRectWidth + radius)) { diff --git a/src/symbol/mergelines.js b/src/symbol/mergelines.ts similarity index 93% rename from src/symbol/mergelines.js rename to src/symbol/mergelines.ts index 34b5d38349..cceb8a6864 100644 --- a/src/symbol/mergelines.js +++ b/src/symbol/mergelines.ts @@ -1,8 +1,6 @@ -// @flow - import type {SymbolFeature} from '../data/bucket/symbol_bucket'; -export default function (features: Array): Array { +export default function(features: Array): Array { const leftIndex: {[_: string]: number} = {}; const rightIndex: {[_: string]: number} = {}; const mergedFeatures = []; @@ -33,7 +31,7 @@ export default function (features: Array): Array { return i; } - function getKey(text, geom, onRight) { + function getKey(text, geom, onRight?) { const point = onRight ? geom[0][geom[0].length - 1] : geom[0][0]; return `${text}:${point.x}:${point.y}`; } @@ -60,7 +58,7 @@ export default function (features: Array): Array { delete rightIndex[rightKey]; rightIndex[getKey(text, mergedFeatures[i].geometry, true)] = i; - mergedFeatures[j].geometry = (null: any); + mergedFeatures[j].geometry = null; } else if (leftKey in rightIndex) { // found mergeable line adjacent to the start of the current line, merge diff --git a/src/symbol/one_em.js b/src/symbol/one_em.ts similarity index 93% rename from src/symbol/one_em.js rename to src/symbol/one_em.ts index 7e20115bd9..d66d5e838d 100644 --- a/src/symbol/one_em.js +++ b/src/symbol/one_em.ts @@ -1,4 +1,3 @@ -// @flow // ONE_EM constant used to go between "em" units used in style spec and "points" used internally for layout export default 24; diff --git a/src/symbol/opacity_state.js b/src/symbol/opacity_state.ts similarity index 94% rename from src/symbol/opacity_state.js rename to src/symbol/opacity_state.ts index 1649b2c2a0..caef016fc5 100644 --- a/src/symbol/opacity_state.js +++ b/src/symbol/opacity_state.ts @@ -1,11 +1,9 @@ -// @flow - import {register} from '../util/web_worker_transfer'; class OpacityState { opacity: number; targetOpacity: number; - time: number + time: number; constructor() { this.opacity = 0; diff --git a/src/symbol/path_interpolator.js b/src/symbol/path_interpolator.ts similarity index 91% rename from src/symbol/path_interpolator.js rename to src/symbol/path_interpolator.ts index f64467a5a9..66a0c5b587 100644 --- a/src/symbol/path_interpolator.js +++ b/src/symbol/path_interpolator.ts @@ -1,7 +1,5 @@ -// @flow - import {clamp} from '../util/util'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import assert from 'assert'; class PathInterpolator { @@ -11,11 +9,11 @@ class PathInterpolator { padding: number; _distances: Array; - constructor(points_: ?Array, padding_: ?number) { + constructor(points_?: Array | null, padding_?: number | null) { this.reset(points_, padding_); } - reset(points_: ?Array, padding_: ?number) { + reset(points_?: Array | null, padding_?: number | null) { this.points = points_ || []; // Compute cumulative distance from first point to every other point in the segment. diff --git a/src/symbol/placement.js b/src/symbol/placement.ts similarity index 93% rename from src/symbol/placement.js rename to src/symbol/placement.ts index b7e06fb865..9ebec7dbec 100644 --- a/src/symbol/placement.js +++ b/src/symbol/placement.ts @@ -1,5 +1,3 @@ -// @flow - import CollisionIndex from './collision_index'; import EXTENT from '../data/extent'; import * as symbolSize from './symbol_size'; @@ -9,12 +7,13 @@ import {getAnchorAlignment, WritingMode} from './shaping'; import {mat4} from 'gl-matrix'; import assert from 'assert'; import pixelsToTileUnits from '../source/pixels_to_tile_units'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import type Transform from '../geo/transform'; import type StyleLayer from '../style/style_layer'; import type Tile from '../source/tile'; -import type SymbolBucket, {CollisionArrays, SingleCollisionBox} from '../data/bucket/symbol_bucket'; +import SymbolBucket, {CollisionArrays, SingleCollisionBox} from '../data/bucket/symbol_bucket'; + import type {CollisionBoxArray, CollisionVertexArray, SymbolInstance} from '../data/array_types'; import type FeatureIndex from '../data/feature_index'; import type {OverscaledTileID} from '../source/tile_id'; @@ -23,7 +22,7 @@ import type {TextAnchor} from './symbol_layout'; class OpacityState { opacity: number; placed: boolean; - constructor(prevState: ?OpacityState, increment: number, placed: boolean, skipFade: ?boolean) { + constructor(prevState: OpacityState | undefined | null, increment: number, placed: boolean, skipFade?: boolean | null) { if (prevState) { this.opacity = Math.max(0, Math.min(1, prevState.opacity + (prevState.placed ? increment : -increment))); } else { @@ -39,7 +38,7 @@ class OpacityState { class JointOpacityState { text: OpacityState; icon: OpacityState; - constructor(prevState: ?JointOpacityState, increment: number, placedText: boolean, placedIcon: boolean, skipFade: ?boolean) { + constructor(prevState: JointOpacityState | undefined | null, increment: number, placedText: boolean, placedIcon: boolean, skipFade?: boolean | null) { this.text = new OpacityState(prevState ? prevState.text : null, increment, placedText, skipFade); this.icon = new OpacityState(prevState ? prevState.icon : null, increment, placedIcon, skipFade); } @@ -82,7 +81,7 @@ export class RetainedQueryData { sourceLayerIndex: number; bucketIndex: number; tileID: OverscaledTileID; - featureSortOrder: ?Array + featureSortOrder: Array | undefined | null; constructor(bucketInstanceId: number, featureIndex: FeatureIndex, sourceLayerIndex: number, @@ -96,7 +95,10 @@ export class RetainedQueryData { } } -type CollisionGroup = { ID: number, predicate?: any }; +type CollisionGroup = { + ID: number; + predicate?: any; +}; class CollisionGroups { collisionGroups: {[groupName: string]: CollisionGroup}; @@ -130,7 +132,13 @@ class CollisionGroups { } } -function calculateVariableLayoutShift(anchor: TextAnchor, width: number, height: number, textOffset: [number, number], textBoxScale: number): Point { +function calculateVariableLayoutShift( + anchor: TextAnchor, + width: number, + height: number, + textOffset: [number, number], + textBoxScale: number +): Point { const {horizontalAlign, verticalAlign} = getAnchorAlignment(anchor); const shiftX = -(horizontalAlign - 0.5) * width; const shiftY = -(verticalAlign - 0.5) * height; @@ -162,33 +170,33 @@ function shiftVariableCollisionBox(collisionBox: SingleCollisionBox, } export type VariableOffset = { - textOffset: [number, number], - width: number, - height: number, - anchor: TextAnchor, - textBoxScale: number, - prevAnchor?: TextAnchor + textOffset: [number, number]; + width: number; + height: number; + anchor: TextAnchor; + textBoxScale: number; + prevAnchor?: TextAnchor; }; type TileLayerParameters = { - bucket: SymbolBucket, - layout: any, - posMatrix: mat4, - textLabelPlaneMatrix: mat4, - labelToScreenMatrix: mat4, - scale: number, - textPixelRatio: number, - holdingForFade: boolean, - collisionBoxArray: ?CollisionBoxArray, - partiallyEvaluatedTextSize: any, - collisionGroup: any + bucket: SymbolBucket; + layout: any; + posMatrix: mat4; + textLabelPlaneMatrix: mat4; + labelToScreenMatrix: mat4; + scale: number; + textPixelRatio: number; + holdingForFade: boolean; + collisionBoxArray: CollisionBoxArray | undefined | null; + partiallyEvaluatedTextSize: any; + collisionGroup: any; }; export type BucketPart = { - sortKey?: number | void, - symbolInstanceStart: number, - symbolInstanceEnd: number, - parameters: TileLayerParameters + sortKey?: number | void; + symbolInstanceStart: number; + symbolInstanceEnd: number; + parameters: TileLayerParameters; }; export type CrossTileID = string | number; @@ -196,20 +204,32 @@ export type CrossTileID = string | number; export class Placement { transform: Transform; collisionIndex: CollisionIndex; - placements: { [_: CrossTileID]: JointPlacement }; - opacities: { [_: CrossTileID]: JointOpacityState }; - variableOffsets: {[_: CrossTileID]: VariableOffset }; - placedOrientations: {[_: CrossTileID]: number }; + placements: { + [_ in CrossTileID]: JointPlacement; + }; + opacities: { + [_ in CrossTileID]: JointOpacityState; + }; + variableOffsets: { + [_ in CrossTileID]: VariableOffset; + }; + placedOrientations: { + [_ in CrossTileID]: number; + }; commitTime: number; prevZoomAdjustment: number; lastPlacementChangeTime: number; stale: boolean; fadeDuration: number; - retainedQueryData: {[_: number]: RetainedQueryData}; + retainedQueryData: { + [_: number]: RetainedQueryData; + }; collisionGroups: CollisionGroups; - prevPlacement: ?Placement; + prevPlacement: Placement | undefined | null; zoomAtLastRecencyCheck: number; - collisionCircleArrays: {[any]: CollisionCircleArray}; + collisionCircleArrays: { + [k in any]: CollisionCircleArray; + }; constructor(transform: Transform, fadeDuration: number, crossSourceCollisions: boolean, prevPlacement?: Placement) { this.transform = transform.clone(); @@ -233,7 +253,7 @@ export class Placement { } getBucketParts(results: Array, styleLayer: StyleLayer, tile: Tile, sortAcrossTiles: boolean) { - const symbolBucket = ((tile.getBucket(styleLayer): any): SymbolBucket); + const symbolBucket = (tile.getBucket(styleLayer) as any as SymbolBucket); const bucketFeatureIndex = tile.latestFeatureIndex; if (!symbolBucket || !bucketFeatureIndex || styleLayer.id !== symbolBucket.layerIds[0]) return; @@ -267,7 +287,7 @@ export class Placement { this.transform, pixelsToTiles); - labelToScreenMatrix = mat4.multiply([], this.transform.labelPlaneMatrix, glMatrix); + labelToScreenMatrix = mat4.multiply(mat4.create(), this.transform.labelPlaneMatrix, glMatrix); } // As long as this placement lives, we have to hold onto this bucket's @@ -308,12 +328,31 @@ export class Placement { } } - attemptAnchorPlacement(anchor: TextAnchor, textBox: SingleCollisionBox, width: number, height: number, - textBoxScale: number, rotateWithMap: boolean, - pitchWithMap: boolean, textPixelRatio: number, posMatrix: mat4, collisionGroup: CollisionGroup, - textAllowOverlap: boolean, symbolInstance: SymbolInstance, bucket: SymbolBucket, orientation: number, iconBox: ?SingleCollisionBox): ?{ shift: Point, placedGlyphBoxes: { box: Array, offscreen: boolean } } { - - const textOffset = [symbolInstance.textOffset0, symbolInstance.textOffset1]; + attemptAnchorPlacement( + anchor: TextAnchor, + textBox: SingleCollisionBox, + width: number, + height: number, + textBoxScale: number, + rotateWithMap: boolean, + pitchWithMap: boolean, + textPixelRatio: number, + posMatrix: mat4, + collisionGroup: CollisionGroup, + textAllowOverlap: boolean, + symbolInstance: SymbolInstance, + bucket: SymbolBucket, + orientation: number, + iconBox?: SingleCollisionBox | null + ): { + shift: Point; + placedGlyphBoxes: { + box: Array; + offscreen: boolean; + }; + } | undefined | null { + + const textOffset = [symbolInstance.textOffset0, symbolInstance.textOffset1] as [number, number]; const shift = calculateVariableLayoutShift(anchor, width, height, textOffset, textBoxScale); const placedGlyphBoxes = this.collisionIndex.placeCollisionBox( @@ -361,7 +400,9 @@ export class Placement { } } - placeLayerBucketPart(bucketPart: Object, seenCrossTileIDs: { [string | number]: boolean }, showCollisionBoxes: boolean) { + placeLayerBucketPart(bucketPart: any, seenCrossTileIDs: { + [k in string | number]: boolean; + }, showCollisionBoxes: boolean) { const { bucket, @@ -518,7 +559,10 @@ export class Placement { const variableIconBox = hasIconTextFit && !iconAllowOverlap ? collisionIconBox : null; - let placedBox: ?{ box: Array, offscreen: boolean } = {box: [], offscreen: false}; + let placedBox: { + box: Array; + offscreen: boolean; + } | undefined | null = {box: [], offscreen: false}; const placementAttempts = textAllowOverlap ? anchors.length * 2 : anchors.length; for (let i = 0; i < placementAttempts; ++i) { const anchor = anchors[i % anchors.length]; @@ -721,9 +765,9 @@ export class Placement { markUsedJustification(bucket: SymbolBucket, placedAnchor: TextAnchor, symbolInstance: SymbolInstance, orientation: number) { const justifications = { - "left": symbolInstance.leftJustifiedTextSymbolIndex, - "center": symbolInstance.centerJustifiedTextSymbolIndex, - "right": symbolInstance.rightJustifiedTextSymbolIndex + 'left': symbolInstance.leftJustifiedTextSymbolIndex, + 'center': symbolInstance.centerJustifiedTextSymbolIndex, + 'right': symbolInstance.rightJustifiedTextSymbolIndex }; let autoIndex; @@ -838,14 +882,16 @@ export class Placement { updateLayerOpacities(styleLayer: StyleLayer, tiles: Array) { const seenCrossTileIDs = {}; for (const tile of tiles) { - const symbolBucket = ((tile.getBucket(styleLayer): any): SymbolBucket); + const symbolBucket = (tile.getBucket(styleLayer) as any as SymbolBucket); if (symbolBucket && tile.latestFeatureIndex && styleLayer.id === symbolBucket.layerIds[0]) { this.updateBucketOpacities(symbolBucket, seenCrossTileIDs, tile.collisionBoxArray); } } } - updateBucketOpacities(bucket: SymbolBucket, seenCrossTileIDs: { [string | number]: boolean }, collisionBoxArray: ?CollisionBoxArray) { + updateBucketOpacities(bucket: SymbolBucket, seenCrossTileIDs: { + [k in string | number]: boolean; + }, collisionBoxArray?: CollisionBoxArray | null) { if (bucket.hasTextData()) bucket.text.opacityVertexArray.clear(); if (bucket.hasIconData()) bucket.icon.opacityVertexArray.clear(); if (bucket.hasIconCollisionBoxData()) bucket.iconCollisionBox.collisionVertexArray.clear(); @@ -955,14 +1001,14 @@ export class Placement { const horizontalOpacity = useHorizontal ? packedOpacity : PACKED_HIDDEN_OPACITY; addOpacities(bucket.icon, symbolInstance.numIconVertices, horizontalOpacity); bucket.icon.placedSymbolArray.get(symbolInstance.placedIconSymbolIndex).hidden = - (opacityState.icon.isHidden(): any); + (opacityState.icon.isHidden() as any); } if (symbolInstance.verticalPlacedIconSymbolIndex >= 0) { const verticalOpacity = !useHorizontal ? packedOpacity : PACKED_HIDDEN_OPACITY; addOpacities(bucket.icon, symbolInstance.numVerticalIconVertices, verticalOpacity); bucket.icon.placedSymbolArray.get(symbolInstance.verticalPlacedIconSymbolIndex).hidden = - (opacityState.icon.isHidden(): any); + (opacityState.icon.isHidden() as any); } } diff --git a/src/symbol/projection.js b/src/symbol/projection.ts similarity index 96% rename from src/symbol/projection.js rename to src/symbol/projection.ts index e0c1614298..a92464ae97 100644 --- a/src/symbol/projection.js +++ b/src/symbol/projection.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import {mat4, vec4} from 'gl-matrix'; import * as symbolSize from './symbol_size'; @@ -104,7 +102,7 @@ function getGlCoordMatrix(posMatrix: mat4, } function project(point: Point, matrix: mat4) { - const pos = [point.x, point.y, 0, 1]; + const pos = vec4.fromValues(point.x, point.y, 0, 1); xyTransformMat4(pos, pos, matrix); const w = pos[3]; return { @@ -117,7 +115,7 @@ function getPerspectiveRatio(cameraToCenterDistance: number, signedDistanceFromC return 0.5 + 0.5 * (cameraToCenterDistance / signedDistanceFromCamera); } -function isVisible(anchorPos: [number, number, number, number], +function isVisible(anchorPos: vec4, clippingBuffer: [number, number]) { const x = anchorPos[0] / anchorPos[3]; const y = anchorPos[1] / anchorPos[3]; @@ -145,7 +143,7 @@ function updateLineLabels(bucket: SymbolBucket, const sizeData = isText ? bucket.textSizeData : bucket.iconSizeData; const partiallyEvaluatedSize = symbolSize.evaluateSizeForZoom(sizeData, painter.transform.zoom); - const clippingBuffer = [256 / painter.width * 2 + 1, 256 / painter.height * 2 + 1]; + const clippingBuffer: [number, number] = [256 / painter.width * 2 + 1, 256 / painter.height * 2 + 1]; const dynamicLayoutVertexArray = isText ? bucket.text.dynamicLayoutVertexArray : @@ -160,7 +158,7 @@ function updateLineLabels(bucket: SymbolBucket, let useVertical = false; for (let s = 0; s < placedSymbols.length; s++) { - const symbol: any = placedSymbols.get(s); + const symbol = placedSymbols.get(s); // Don't do calculations for vertical glyphs unless the previous symbol was horizontal // and we determined that vertical glyphs were necessary. @@ -172,7 +170,7 @@ function updateLineLabels(bucket: SymbolBucket, // Awkward... but we're counting on the paired "vertical" symbol coming immediately after its horizontal counterpart useVertical = false; - const anchorPos = [symbol.anchorX, symbol.anchorY, 0, 1]; + const anchorPos = vec4.fromValues(symbol.anchorX, symbol.anchorY, 0, 1); vec4.transformMat4(anchorPos, anchorPos, posMatrix); // Don't bother calculating the correct point for invisible labels. @@ -198,8 +196,8 @@ function updateLineLabels(bucket: SymbolBucket, if (placeUnflipped.notEnoughRoom || useVertical || (placeUnflipped.needsFlipping && - placeGlyphsAlongLine(symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, labelPlaneMatrix, glCoordMatrix, - bucket.glyphOffsetArray, lineVertexArray, dynamicLayoutVertexArray, anchorPoint, tileAnchorPoint, projectionCache, aspectRatio).notEnoughRoom)) { + (placeGlyphsAlongLine(symbol, pitchScaledFontSize, true /*flipped*/, keepUpright, posMatrix, labelPlaneMatrix, glCoordMatrix, + bucket.glyphOffsetArray, lineVertexArray, dynamicLayoutVertexArray, anchorPoint, tileAnchorPoint, projectionCache, aspectRatio) as any).notEnoughRoom)) { hideGlyphs(symbol.numGlyphs, dynamicLayoutVertexArray); } } @@ -318,7 +316,7 @@ function placeGlyphsAlongLine(symbol, fontSize, flip, keepUpright, posMatrix, la placedGlyphs = [singleGlyph]; } - for (const glyph: any of placedGlyphs) { + for (const glyph of placedGlyphs) { addDynamicAttributes(dynamicLayoutVertexArray, glyph.point, glyph.angle); } return {}; @@ -346,7 +344,9 @@ function placeGlyphAlongLine(offsetX: number, lineEndIndex: number, lineVertexArray: SymbolLineVertexArray, labelPlaneMatrix: mat4, - projectionCache: {[_: number]: Point}) { + projectionCache: { + [_: number]: Point; + }) { const combinedOffsetX = flip ? offsetX - lineOffsetX : diff --git a/src/symbol/quads.js b/src/symbol/quads.ts similarity index 91% rename from src/symbol/quads.js rename to src/symbol/quads.ts index 9b1c100620..24523244ec 100644 --- a/src/symbol/quads.js +++ b/src/symbol/quads.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import {GLYPH_PBF_BORDER} from '../style/parse_glyph_pbf'; @@ -12,6 +10,7 @@ import type SymbolStyleLayer from '../style/style_layer/symbol_style_layer'; import type {Feature} from '../style-spec/expression'; import type {StyleImage} from '../style/style_image'; import ONE_EM from './one_em'; +import {Rect} from '../render/glyph_atlas'; /** * A textured quad for rendering a single icon or glyph. @@ -27,24 +26,24 @@ import ONE_EM from './one_em'; * @private */ export type SymbolQuad = { - tl: Point, - tr: Point, - bl: Point, - br: Point, - tex: { - x: number, - y: number, - w: number, - h: number - }, - pixelOffsetTL: Point, - pixelOffsetBR: Point, - writingMode: any | void, - glyphOffset: [number, number], - sectionIndex: number, - isSDF: boolean, - minFontScaleX: number, - minFontScaleY: number + tl: Point; + tr: Point; + bl: Point; + br: Point; + tex: { + x: number; + y: number; + w: number; + h: number; + }; + pixelOffsetTL: Point; + pixelOffsetBR: Point; + writingMode: any | void; + glyphOffset: [number, number]; + sectionIndex: number; + isSDF: boolean; + minFontScaleX: number; + minFontScaleY: number; }; // If you have a 10px icon that isn't perfectly aligned to the pixel grid it will cover 11 actual @@ -57,10 +56,11 @@ const border = IMAGE_PADDING; * @private */ export function getIconQuads( - shapedIcon: PositionedIcon, - iconRotate: number, - isSDFIcon: boolean, - hasIconTextFit: boolean): Array { + shapedIcon: PositionedIcon, + iconRotate: number, + isSDFIcon: boolean, + hasIconTextFit: boolean +): Array { const quads = []; const image = shapedIcon.image; @@ -219,14 +219,16 @@ function getPxOffset(fixedOffset, fixedSize, stretchOffset, stretchSize) { * Create the quads used for rendering a text label. * @private */ -export function getGlyphQuads(anchor: Anchor, - shaping: Shaping, - textOffset: [number, number], - layer: SymbolStyleLayer, - alongLine: boolean, - feature: Feature, - imageMap: {[_: string]: StyleImage}, - allowVerticalPlacement: boolean): Array { +export function getGlyphQuads( + anchor: Anchor, + shaping: Shaping, + textOffset: [number, number], + layer: SymbolStyleLayer, + alongLine: boolean, + feature: Feature, + imageMap: {[_: string]: StyleImage}, + allowVerticalPlacement: boolean +): Array { const textRotate = layer.layout.get('text-rotate').evaluate(feature, {}) * Math.PI / 180; const quads = []; @@ -234,7 +236,7 @@ export function getGlyphQuads(anchor: Anchor, for (const line of shaping.positionedLines) { for (const positionedGlyph of line.positionedGlyphs) { if (!positionedGlyph.rect) continue; - const textureRect = positionedGlyph.rect || {}; + const textureRect: Rect = positionedGlyph.rect || {} as Rect; // The rects have an additional buffer that is not included in their size. const glyphPadding = 1.0; @@ -264,11 +266,11 @@ export function getGlyphQuads(anchor: Anchor, [positionedGlyph.x + halfAdvance, positionedGlyph.y] : [0, 0]; - let builtInOffset = alongLine ? + let builtInOffset: [number, number] = alongLine ? [0, 0] : [positionedGlyph.x + halfAdvance + textOffset[0], positionedGlyph.y + textOffset[1] - lineOffset]; - let verticalizedLabelOffset = [0, 0]; + let verticalizedLabelOffset = [0, 0] as [number, number]; if (rotateVerticalGlyph) { // Vertical POI labels that are rotated 90deg CW and whose glyphs must preserve upright orientation // need to be rotated 90deg CCW. After a quad is rotated, it is translated to the original built-in offset. diff --git a/src/symbol/shaping.js b/src/symbol/shaping.ts similarity index 86% rename from src/symbol/shaping.js rename to src/symbol/shaping.ts index dafdd6ecfa..f404704841 100644 --- a/src/symbol/shaping.js +++ b/src/symbol/shaping.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import { charHasUprightVerticalOrientation, @@ -18,45 +16,51 @@ import {IMAGE_PADDING} from '../render/image_atlas'; import type {Rect, GlyphPosition} from '../render/glyph_atlas'; import Formatted, {FormattedSection} from '../style-spec/expression/types/formatted'; -const WritingMode = { - horizontal: 1, - vertical: 2, - horizontalOnly: 3 -}; +enum WritingMode { + horizontal = 1, + vertical = 2, + horizontalOnly = 3 +} + +export class WriteModeMap { + 'horizontal': WritingMode.horizontal; + 'vertical': WritingMode.vertical; + 'horizontalOnly': WritingMode.horizontalOnly; +} const SHAPING_DEFAULT_OFFSET = -17; export {shapeText, shapeIcon, fitIconToText, getAnchorAlignment, WritingMode, SHAPING_DEFAULT_OFFSET}; // The position of a glyph relative to the text's anchor point. export type PositionedGlyph = { - glyph: number, - imageName: string | null, - x: number, - y: number, - vertical: boolean, - scale: number, - fontStack: string, - sectionIndex: number, - metrics: GlyphMetrics, - rect: Rect | null + glyph: number; + imageName: string | null; + x: number; + y: number; + vertical: boolean; + scale: number; + fontStack: string; + sectionIndex: number; + metrics: GlyphMetrics; + rect: Rect | null; }; export type PositionedLine = { - positionedGlyphs: Array, - lineOffset: number + positionedGlyphs: Array; + lineOffset: number; }; // A collection of positioned glyphs and some metadata export type Shaping = { - positionedLines: Array, - top: number, - bottom: number, - left: number, - right: number, - writingMode: 1 | 2, - text: string, - iconsInText: boolean, - verticalizable: boolean + positionedLines: Array; + top: number; + bottom: number; + left: number; + right: number; + writingMode: WritingMode.horizontal | WritingMode.vertical; + text: string; + iconsInText: boolean; + verticalizable: boolean; }; function isEmpty(positionedLines: Array) { @@ -85,7 +89,7 @@ class SectionOptions { constructor() { this.scale = 1.0; - this.fontStack = ""; + this.fontStack = ''; this.imageName = null; } @@ -106,12 +110,12 @@ class SectionOptions { class TaggedString { text: string; - sectionIndex: Array // maps each character in 'text' to its corresponding entry in 'sections' - sections: Array + sectionIndex: Array; // maps each character in 'text' to its corresponding entry in 'sections' + sections: Array; imageSectionID: number | null; constructor() { - this.text = ""; + this.text = ''; this.sectionIndex = []; this.sections = []; this.imageSectionID = null; @@ -195,7 +199,7 @@ class TaggedString { addImageSection(section: FormattedSection) { const imageName = section.image ? section.image.name : ''; if (imageName.length === 0) { - warnOnce(`Can't add FormattedSection with an empty image.`); + warnOnce('Can\'t add FormattedSection with an empty image.'); return; } @@ -236,22 +240,32 @@ function breakLines(input: TaggedString, lineBreakPoints: Array): Array< return lines; } -function shapeText(text: Formatted, - glyphMap: {[_: string]: {[_: number]: ?StyleGlyph}}, - glyphPositions: {[_: string]: {[_: number]: GlyphPosition}}, - imagePositions: {[_: string]: ImagePosition}, - defaultFontStack: string, - maxWidth: number, - lineHeight: number, - textAnchor: SymbolAnchor, - textJustify: TextJustify, - spacing: number, - translate: [number, number], - writingMode: 1 | 2, - allowVerticalPlacement: boolean, - symbolPlacement: string, - layoutTextSize: number, - layoutTextSizeThisZoom: number): Shaping | false { +function shapeText( + text: Formatted, + glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }, + glyphPositions: { + [_: string]: { + [_: number]: GlyphPosition; + }; + }, + imagePositions: {[_: string]: ImagePosition}, + defaultFontStack: string, + maxWidth: number, + lineHeight: number, + textAnchor: SymbolAnchor, + textJustify: TextJustify, + spacing: number, + translate: [number, number], + writingMode: WritingMode.horizontal | WritingMode.vertical, + allowVerticalPlacement: boolean, + symbolPlacement: string, + layoutTextSize: number, + layoutTextSizeThisZoom: number +): Shaping | false { const logicalInput = TaggedString.fromFeature(text, defaultFontStack); if (writingMode === WritingMode.vertical) { @@ -317,7 +331,9 @@ function shapeText(text: Formatted, // using computed properties due to https://github.com/facebook/flow/issues/380 /* eslint no-useless-computed-key: 0 */ -const whitespace: {[_: number]: boolean} = { +const whitespace: { + [_: number]: boolean; +} = { [0x09]: true, // tab [0x0a]: true, // newline [0x0b]: true, // vertical tab @@ -326,7 +342,9 @@ const whitespace: {[_: number]: boolean} = { [0x20]: true, // space }; -const breakable: {[_: number]: boolean} = { +const breakable: { + [_: number]: boolean; +} = { [0x0a]: true, // newline [0x20]: true, // space [0x26]: true, // ampersand @@ -346,12 +364,18 @@ const breakable: {[_: number]: boolean} = { // See https://github.com/mapbox/mapbox-gl-js/issues/3658 }; -function getGlyphAdvance(codePoint: number, - section: SectionOptions, - glyphMap: {[_: string]: {[_: number]: ?StyleGlyph}}, - imagePositions: {[_: string]: ImagePosition}, - spacing: number, - layoutTextSize: number): number { +function getGlyphAdvance( + codePoint: number, + section: SectionOptions, + glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }, + imagePositions: {[_: string]: ImagePosition}, + spacing: number, + layoutTextSize: number +): number { if (!section.imageName) { const positions = glyphMap[section.fontStack]; const glyph = positions && positions[codePoint]; @@ -367,7 +391,11 @@ function getGlyphAdvance(codePoint: number, function determineAverageLineWidth(logicalInput: TaggedString, spacing: number, maxWidth: number, - glyphMap: {[_: string]: {[_: number]: ?StyleGlyph}}, + glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }, imagePositions: {[_: string]: ImagePosition}, layoutTextSize: number) { let totalWidth = 0; @@ -423,24 +451,26 @@ function calculatePenalty(codePoint: number, nextCodePoint: number, penalizableI } type Break = { - index: number, - x: number, - priorBreak: ?Break, - badness: number + index: number; + x: number; + priorBreak: Break | undefined | null; + badness: number; }; -function evaluateBreak(breakIndex: number, - breakX: number, - targetWidth: number, - potentialBreaks: Array, - penalty: number, - isLastBreak: boolean): Break { +function evaluateBreak( + breakIndex: number, + breakX: number, + targetWidth: number, + potentialBreaks: Array, + penalty: number, + isLastBreak: boolean +): Break { // We could skip evaluating breaks where the line length (breakX - priorBreak.x) > maxWidth // ...but in fact we allow lines longer than maxWidth (if there's no break points) // ...and when targetWidth and maxWidth are close, strictly enforcing maxWidth can give // more lopsided results. - let bestPriorBreak: ?Break = null; + let bestPriorBreak: Break | undefined | null = null; let bestBreakBadness = calculateBadness(breakX, targetWidth, penalty, isLastBreak); for (const potentialBreak of potentialBreaks) { @@ -461,20 +491,26 @@ function evaluateBreak(breakIndex: number, }; } -function leastBadBreaks(lastLineBreak: ?Break): Array { +function leastBadBreaks(lastLineBreak?: Break | null): Array { if (!lastLineBreak) { return []; } return leastBadBreaks(lastLineBreak.priorBreak).concat(lastLineBreak.index); } -function determineLineBreaks(logicalInput: TaggedString, - spacing: number, - maxWidth: number, - glyphMap: {[_: string]: {[_: number]: ?StyleGlyph}}, - imagePositions: {[_: string]: ImagePosition}, - symbolPlacement: string, - layoutTextSize: number): Array { +function determineLineBreaks( + logicalInput: TaggedString, + spacing: number, + maxWidth: number, + glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }, + imagePositions: {[_: string]: ImagePosition}, + symbolPlacement: string, + layoutTextSize: number +): Array { if (symbolPlacement !== 'point') return []; @@ -484,7 +520,7 @@ function determineLineBreaks(logicalInput: TaggedString, const potentialLineBreaks = []; const targetWidth = determineAverageLineWidth(logicalInput, spacing, maxWidth, glyphMap, imagePositions, layoutTextSize); - const hasServerSuggestedBreakpoints = logicalInput.text.indexOf("\u200b") >= 0; + const hasServerSuggestedBreakpoints = logicalInput.text.indexOf('\u200b') >= 0; let currentX = 0; @@ -554,14 +590,22 @@ function getAnchorAlignment(anchor: SymbolAnchor) { } function shapeLines(shaping: Shaping, - glyphMap: {[_: string]: {[_: number]: ?StyleGlyph}}, - glyphPositions: {[_: string]: {[_: number]: GlyphPosition}}, + glyphMap: { + [_: string]: { + [_: number]: StyleGlyph | undefined | null; + }; + }, + glyphPositions: { + [_: string]: { + [_: number]: GlyphPosition; + }; + }, imagePositions: {[_: string]: ImagePosition}, lines: Array, lineHeight: number, textAnchor: SymbolAnchor, textJustify: TextJustify, - writingMode: 1 | 2, + writingMode: WritingMode.horizontal | WritingMode.vertical, spacing: number, allowVerticalPlacement: boolean, layoutTextSizeThisZoom: number) { @@ -741,15 +785,19 @@ function align(positionedLines: Array, } export type PositionedIcon = { - image: ImagePosition, - top: number, - bottom: number, - left: number, - right: number, - collisionPadding?: [number, number, number, number] + image: ImagePosition; + top: number; + bottom: number; + left: number; + right: number; + collisionPadding?: [number, number, number, number]; }; -function shapeIcon(image: ImagePosition, iconOffset: [number, number], iconAnchor: SymbolAnchor): PositionedIcon { +function shapeIcon( + image: ImagePosition, + iconOffset: [number, number], + iconAnchor: SymbolAnchor +): PositionedIcon { const {horizontalAlign, verticalAlign} = getAnchorAlignment(iconAnchor); const dx = iconOffset[0]; const dy = iconOffset[1]; @@ -760,10 +808,14 @@ function shapeIcon(image: ImagePosition, iconOffset: [number, number], iconAncho return {image, top: y1, bottom: y2, left: x1, right: x2}; } -function fitIconToText(shapedIcon: PositionedIcon, shapedText: Shaping, - textFit: string, - padding: [ number, number, number, number ], - iconOffset: [ number, number ], fontScale: number): PositionedIcon { +function fitIconToText( + shapedIcon: PositionedIcon, + shapedText: Shaping, + textFit: string, + padding: [number, number, number, number], + iconOffset: [number, number], + fontScale: number +): PositionedIcon { assert(textFit !== 'none'); assert(Array.isArray(padding) && padding.length === 4); assert(Array.isArray(iconOffset) && iconOffset.length === 2); diff --git a/src/symbol/symbol_layout.js b/src/symbol/symbol_layout.ts similarity index 93% rename from src/symbol/symbol_layout.js rename to src/symbol/symbol_layout.ts index 990c841728..e80ad53c82 100644 --- a/src/symbol/symbol_layout.js +++ b/src/symbol/symbol_layout.ts @@ -1,5 +1,3 @@ -// @flow - import Anchor from './anchor'; import {getAnchors, getCenterAnchor} from './get_anchors'; @@ -30,7 +28,7 @@ import type {ImagePosition} from '../render/image_atlas'; import type {GlyphPosition} from '../render/glyph_atlas'; import type {PossiblyEvaluatedPropertyValue} from '../style/properties'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import murmur3 from 'murmurhash-js'; // The symbol layout process needs `text-size` evaluated at up to five different zoom levels, and @@ -48,11 +46,11 @@ import murmur3 from 'murmurhash-js'; // (1) and (2) are stored in `bucket.layers[0].layout`. The remainder are below. // type Sizes = { - layoutTextSize: PossiblyEvaluatedPropertyValue, // (3) - layoutIconSize: PossiblyEvaluatedPropertyValue, // (3) - textMaxSize: PossiblyEvaluatedPropertyValue, // (4) - compositeTextSizes: [PossiblyEvaluatedPropertyValue, PossiblyEvaluatedPropertyValue], // (5) - compositeIconSizes: [PossiblyEvaluatedPropertyValue, PossiblyEvaluatedPropertyValue], // (5) + layoutTextSize: PossiblyEvaluatedPropertyValue; // (3), + layoutIconSize: PossiblyEvaluatedPropertyValue; // (3), + textMaxSize: PossiblyEvaluatedPropertyValue; // (4), + compositeTextSizes: [PossiblyEvaluatedPropertyValue, PossiblyEvaluatedPropertyValue]; // (5), + compositeIconSizes: [PossiblyEvaluatedPropertyValue, PossiblyEvaluatedPropertyValue]; // (5) }; export type TextAnchor = 'center' | 'left' | 'right' | 'top' | 'bottom' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; @@ -147,13 +145,23 @@ export function evaluateVariableOffset(anchor: TextAnchor, offset: [number, numb return (offset[1] !== INVALID_TEXT_OFFSET) ? fromTextOffset(anchor, offset[0], offset[1]) : fromRadialOffset(anchor, offset[0]); } -export function performSymbolLayout(bucket: SymbolBucket, - glyphMap: {[_: string]: {[number]: ?StyleGlyph}}, - glyphPositions: {[_: string]: {[number]: GlyphPosition}}, - imageMap: {[_: string]: StyleImage}, - imagePositions: {[_: string]: ImagePosition}, - showCollisionBoxes: boolean, - canonical: CanonicalTileID) { +export function performSymbolLayout( + bucket: SymbolBucket, + glyphMap: { + [_: string]: { + [x: number]: StyleGlyph | undefined | null; + }; + }, + glyphPositions: { + [_: string]: { + [x: number]: GlyphPosition; + }; + }, + imageMap: {[_: string]: StyleImage}, + imagePositions: {[_: string]: ImagePosition}, + showCollisionBoxes: boolean, + canonical: CanonicalTileID +) { bucket.createArrays(); const tileSize = 512 * bucket.overscaling; @@ -164,7 +172,7 @@ export function performSymbolLayout(bucket: SymbolBucket, const layout = bucket.layers[0].layout; const unevaluatedLayoutValues = bucket.layers[0]._unevaluatedLayout._values; - const sizes = {}; + const sizes: {[k: string]: any} = {}; if (bucket.textSizeData.kind === 'composite') { const {minZoom, maxZoom} = bucket.textSizeData; @@ -197,7 +205,7 @@ export function performSymbolLayout(bucket: SymbolBucket, const layoutTextSize = sizes.layoutTextSize.evaluate(feature, {}, canonical); const layoutIconSize = sizes.layoutIconSize.evaluate(feature, {}, canonical); - const shapedTextOrientations = { + const shapedTextOrientations: {[k: string]: any} = { horizontal: {}, vertical: undefined }; @@ -218,14 +226,14 @@ export function performSymbolLayout(bucket: SymbolBucket, if (radialOffset) { // The style spec says don't use `text-offset` and `text-radial-offset` together // but doesn't actually specify what happens if you use both. We go with the radial offset. - textOffset = evaluateVariableOffset(textAnchor, [radialOffset * ONE_EM, INVALID_TEXT_OFFSET]); + textOffset = evaluateVariableOffset(textAnchor, [radialOffset * ONE_EM, INVALID_TEXT_OFFSET]) as [number, number]; } else { - textOffset = (layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM): any); + textOffset = (layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM) as any); } } let textJustify = textAlongLine ? - "center" : + 'center' : layout.get('text-justify').evaluate(feature, {}, canonical); const symbolPlacement = layout.get('symbol-placement'); @@ -245,7 +253,7 @@ export function performSymbolLayout(bucket: SymbolBucket, // If this layer uses text-variable-anchor, generate shapings for all justification possibilities. if (!textAlongLine && variableTextAnchor) { - const justifications = textJustify === "auto" ? + const justifications = textJustify === 'auto' ? variableTextAnchor.map(a => getAnchorJustification(a)) : [textJustify]; @@ -271,7 +279,7 @@ export function performSymbolLayout(bucket: SymbolBucket, addVerticalShapingForPointLabelIfNeeded(); } else { - if (textJustify === "auto") { + if (textJustify === 'auto') { textJustify = getAnchorJustification(textAnchor); } @@ -317,7 +325,7 @@ export function performSymbolLayout(bucket: SymbolBucket, const shapedText = getDefaultHorizontalShaping(shapedTextOrientations.horizontal) || shapedTextOrientations.vertical; bucket.iconsInText = shapedText ? shapedText.iconsInText : false; if (shapedText || shapedIcon) { - addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, canonical); + addFeature(bucket, feature, shapedTextOrientations, shapedIcon, imageMap, sizes as Sizes, layoutTextSize, layoutIconSize, textOffset, isSDFIcon, canonical); } } @@ -327,7 +335,7 @@ export function performSymbolLayout(bucket: SymbolBucket, } // Choose the justification that matches the direction of the TextAnchor -export function getAnchorJustification(anchor: TextAnchor): TextJustify { +export function getAnchorJustification(anchor: TextAnchor): TextJustify { switch (anchor) { case 'right': case 'top-right': @@ -351,7 +359,7 @@ export function getAnchorJustification(anchor: TextAnchor): TextJustify { function addFeature(bucket: SymbolBucket, feature: SymbolFeature, shapedTextOrientations: any, - shapedIcon: PositionedIcon | void, + shapedIcon: PositionedIcon, imageMap: {[_: string]: StyleImage}, sizes: Sizes, layoutTextSize: number, @@ -481,7 +489,10 @@ function addTextVertices(bucket: SymbolBucket, textAlongLine: boolean, feature: SymbolFeature, textOffset: [number, number], - lineArray: {lineStartIndex: number, lineLength: number}, + lineArray: { + lineStartIndex: number; + lineLength: number; + }, writingMode: number, placementTypes: Array<'vertical' | 'center' | 'left' | 'right'>, placedTextSymbolIndices: {[_: string]: number}, @@ -534,10 +545,14 @@ function addTextVertices(bucket: SymbolBucket, return glyphQuads.length * 4; } -function getDefaultHorizontalShaping(horizontalShaping: {[_: TextJustify]: Shaping}): Shaping | null { +function getDefaultHorizontalShaping( + horizontalShaping: { + [_ in TextJustify]: Shaping; + } +): Shaping | null { // We don't care which shaping we get because this is used for collision purposes // and all the justifications have the same collision box - for (const justification: any in horizontalShaping) { + for (const justification in horizontalShaping) { return horizontalShaping[justification]; } return null; @@ -583,13 +598,13 @@ function addSymbol(bucket: SymbolBucket, let numVerticalGlyphVertices = 0; let placedIconSymbolIndex = -1; let verticalPlacedIconSymbolIndex = -1; - const placedTextSymbolIndices = {}; + const placedTextSymbolIndices: {[k: string]: any} = {}; let key = murmur3(''); let textOffset0 = 0; let textOffset1 = 0; if (layer._unevaluatedLayout.getValue('text-radial-offset') === undefined) { - [textOffset0, textOffset1] = (layer.layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM): any); + [textOffset0, textOffset1] = (layer.layout.get('text-offset').evaluate(feature, {}, canonical).map(t => t * ONE_EM) as any); } else { textOffset0 = layer.layout.get('text-radial-offset').evaluate(feature, {}, canonical) * ONE_EM; textOffset1 = INVALID_TEXT_OFFSET; @@ -646,7 +661,7 @@ function addSymbol(bucket: SymbolBucket, iconOffset, iconAlongLine, feature, - false, + false as unknown as WritingMode, anchor, lineArray.lineStartIndex, lineArray.lineLength, @@ -676,7 +691,7 @@ function addSymbol(bucket: SymbolBucket, } } - for (const justification: any in shapedTextOrientations.horizontal) { + for (const justification in shapedTextOrientations.horizontal) { const shaping = shapedTextOrientations.horizontal[justification]; if (!textCollisionFeature) { @@ -691,7 +706,7 @@ function addSymbol(bucket: SymbolBucket, numHorizontalGlyphVertices += addTextVertices( bucket, anchor, shaping, imageMap, layer, textAlongLine, feature, textOffset, lineArray, shapedTextOrientations.vertical ? WritingMode.horizontal : WritingMode.horizontalOnly, - singleLine ? (Object.keys(shapedTextOrientations.horizontal): any) : [justification], + singleLine ? (Object.keys(shapedTextOrientations.horizontal) as any) : [justification], placedTextSymbolIndices, placedIconSymbolIndex, sizes, canonical); if (singleLine) { @@ -722,7 +737,7 @@ function addSymbol(bucket: SymbolBucket, // All measurements are in glyph metrics and later converted into pixels using proper font size "layoutTextSize" let collisionCircleDiameter = -1; - const getCollisionCircleHeight = (feature: ?CollisionFeature, prevHeight: number): number => { + const getCollisionCircleHeight = (feature: CollisionFeature | undefined | null, prevHeight: number): number => { if (feature && feature.circleDiameter) return Math.max(feature.circleDiameter, prevHeight); return prevHeight; @@ -739,11 +754,11 @@ function addSymbol(bucket: SymbolBucket, collisionCircleDiameter *= layoutTextSize / ONE_EM; if (bucket.glyphOffsetArray.length >= SymbolBucket.MAX_GLYPHS) warnOnce( - "Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907" + 'Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907' ); if (feature.sortKey !== undefined) { - bucket.addToSortKeyRanges(bucket.symbolInstances.length, feature.sortKey); + bucket.addToSortKeyRanges(bucket.symbolInstances.length, feature.sortKey as number); } bucket.symbolInstances.emplaceBack( diff --git a/src/symbol/symbol_size.js b/src/symbol/symbol_size.ts similarity index 77% rename from src/symbol/symbol_size.js rename to src/symbol/symbol_size.ts index dab8f4b898..416909d6b7 100644 --- a/src/symbol/symbol_size.js +++ b/src/symbol/symbol_size.ts @@ -1,5 +1,3 @@ -// @flow - import {number as interpolate} from '../style-spec/util/interpolate'; import Interpolate from '../style-spec/expression/definitions/interpolate'; import {clamp} from '../util/util'; @@ -13,27 +11,30 @@ const SIZE_PACK_FACTOR = 128; export {getSizeData, evaluateSizeForFeature, evaluateSizeForZoom, SIZE_PACK_FACTOR}; export type SizeData = { - kind: 'constant', - layoutSize: number + kind: 'constant'; + layoutSize: number; } | { - kind: 'source' + kind: 'source'; } | { - kind: 'camera', - minZoom: number, - maxZoom: number, - minSize: number, - maxSize: number, - interpolationType: ?InterpolationType + kind: 'camera'; + minZoom: number; + maxZoom: number; + minSize: number; + maxSize: number; + interpolationType: InterpolationType | undefined | null; } | { - kind: 'composite', - minZoom: number, - maxZoom: number, - interpolationType: ?InterpolationType + kind: 'composite'; + minZoom: number; + maxZoom: number; + interpolationType: InterpolationType | undefined | null; }; // For {text,icon}-size, get the bucket-level data that will be needed by // the painter to set symbol-size-related uniforms -function getSizeData(tileZoom: number, value: PropertyValue>): SizeData { +function getSizeData( + tileZoom: number, + value: PropertyValue> +): SizeData { const {expression} = value; if (expression.kind === 'constant') { @@ -74,8 +75,20 @@ function getSizeData(tileZoom: number, value: PropertyValue = (error: ?Error, result: ?T) => void; +export type Callback = (error?: Error | null, result?: T | null) => void; diff --git a/src/types/cancelable.js b/src/types/cancelable.js deleted file mode 100644 index e155168ac0..0000000000 --- a/src/types/cancelable.js +++ /dev/null @@ -1,3 +0,0 @@ -// @flow strict - -export type Cancelable = { cancel: () => void }; diff --git a/src/types/cancelable.ts b/src/types/cancelable.ts new file mode 100644 index 0000000000..ad681a68d8 --- /dev/null +++ b/src/types/cancelable.ts @@ -0,0 +1,3 @@ +export type Cancelable = { + cancel: () => void; +}; diff --git a/src/types/glsl.d.ts b/src/types/glsl.d.ts new file mode 100644 index 0000000000..d15c624d3c --- /dev/null +++ b/src/types/glsl.d.ts @@ -0,0 +1,4 @@ +declare module '*.glsl' { + const value: string; + export default value; +} diff --git a/src/types/non-typed-modules.d.ts b/src/types/non-typed-modules.d.ts new file mode 100644 index 0000000000..55963c0295 --- /dev/null +++ b/src/types/non-typed-modules.d.ts @@ -0,0 +1,124 @@ +import type Pbf from 'pbf'; + +declare module '@mapbox/mapbox-gl-supported' { + type isSupported = { + webGLContextAttributes: WebGLContextAttributes; + ( + options?: { + failIfMajorPerformanceCaveat: boolean; + } + ): boolean; + }; + + let __exports: isSupported; + export = __exports +} + +declare module '@mapbox/unitbezier' { + class UnitBezier { + constructor(p1x: number, p1y: number, p2x: number, p2y: number); + sampleCurveX(t: number): number; + sampleCurveY(t: number): number; + sampleCurveDerivativeX(t: number): number; + solveCurveX(x: number, epsilon: number | void): number; + solve(x: number, epsilon: number | void): number; + } + + let __exports: typeof UnitBezier; + export = __exports +} +declare module 'potpack' { + type Bin = { + x: number; + y: number; + w: number; + h: number; + }; + + function potpack(bins: Array): { + w: number; + h: number; + fill: number; + } + + let __exports: typeof potpack; + export = __exports +} + +declare module 'sinon' { + type SpyCall = { + args: Array; + }; + + type Spy = { + calledOnce: number; + getCall(i: number): SpyCall; + (): any; + }; + + type Stub = { + callsFake(fn: unknown): Spy; + }; + + class FakeServer { + xhr: XMLHttpRequest; + } + + type Sandbox = { + xhr: { + supportsCORS: boolean; + }; + fakeServer: { + create: () => FakeServer; + }; + createSandbox(options: unknown): Sandbox; + stub(obj?: unknown, prop?: string): Stub; + spy(obj?: unknown, prop?: string): Spy; + restore(): void; + }; + + let __exports: Sandbox; + export = __exports +} + +declare global { + declare interface VectorTile { + layers: {[_: string]: VectorTileLayer}; + } + + declare interface VectorTileLayer { + version?: number; + name: string; + extent: number; + length: number; + feature(i: number): VectorTileFeature; + } + + declare interface VectorTileFeature { + extent: number; + type: 1 | 2 | 3; + id: number; + properties: {[_: string]: string | number | boolean}; + loadGeometry(): Array>; + toGeoJSON(x: number, y: number, z: number): GeoJSON.Feature; + } +} + +declare module '@mapbox/vector-tile' { + import '@mapbox/vector-tile'; + class VectorTileImpl { + constructor(pbf: Pbf); + } + + class VectorTileFeatureImpl { + static types: ['Unknown', 'Point', 'LineString', 'Polygon']; + toGeoJSON(x: number, y: number, z: number): GeoJSON.Feature; + } + + let __exports: { + VectorTile: typeof VectorTileImpl; + VectorTileFeature: typeof VectorTileFeatureImpl; + }; + + export = __exports +} diff --git a/src/types/tilejson.js b/src/types/tilejson.js deleted file mode 100644 index 328f378e2a..0000000000 --- a/src/types/tilejson.js +++ /dev/null @@ -1,17 +0,0 @@ -// @flow - -export type TileJSON = {| - tilejson: '2.2.0' | '2.1.0' | '2.0.1' | '2.0.0' | '1.0.0', - name?: string, - description?: string, - version?: string, - attribution?: string, - template?: string, - tiles: Array, - grids?: Array, - data?: Array, - minzoom?: number, - maxzoom?: number, - bounds?: [number, number, number, number], - center?: [number, number, number] -|}; diff --git a/src/types/tilejson.ts b/src/types/tilejson.ts new file mode 100644 index 0000000000..e65a213f1f --- /dev/null +++ b/src/types/tilejson.ts @@ -0,0 +1,15 @@ +export type TileJSON = { + tilejson: '2.2.0' | '2.1.0' | '2.0.1' | '2.0.0' | '1.0.0'; + name?: string; + description?: string; + version?: string; + attribution?: string; + template?: string; + tiles: Array; + grids?: Array; + data?: Array; + minzoom?: number; + maxzoom?: number; + bounds?: [number, number, number, number]; + center?: [number, number, number]; +}; diff --git a/src/types/transferable.js b/src/types/transferable.ts similarity index 87% rename from src/types/transferable.js rename to src/types/transferable.ts index 0d57cc4c50..a680473f25 100644 --- a/src/types/transferable.js +++ b/src/types/transferable.ts @@ -1,3 +1 @@ -// @flow - export type Transferable = ArrayBuffer | MessagePort | ImageBitmap; diff --git a/src/types/window.js b/src/types/window.js deleted file mode 100644 index 8957156fcc..0000000000 --- a/src/types/window.js +++ /dev/null @@ -1,172 +0,0 @@ -// @flow strict - -/* global EventTarget, IDBEnvironment */ - -export interface Window extends EventTarget, IDBEnvironment { - +caches: CacheStorage; - +clientInformation: Navigator; - +closed: boolean; - defaultStatus: string; - +devicePixelRatio: number; - +document: Document; - +doNotTrack: string; - +frameElement: Element; - +frames: Window; - +history: History; - +innerHeight: number; - +innerWidth: number; - +isSecureContext: boolean; - +length: number; - +location: Location; - +origin: string; - name: string; - +navigator: Navigator; - offscreenBuffering: string | boolean; - onabort: (ev: UIEvent) => ?boolean; - onafterprint: (ev: Event) => ?boolean; - onbeforeprint: (ev: Event) => ?boolean; - onbeforeunload: (ev: Event) => ?boolean; - onblur: (ev: FocusEvent) => ?boolean; - oncanplay: (ev: Event) => ?boolean; - oncanplaythrough: (ev: Event) => ?boolean; - onchange: (ev: Event) => ?boolean; - onclick: (ev: MouseEvent) => ?boolean; - oncompassneedscalibration: (ev: Event) => ?boolean; - oncontextmenu: (ev: Event) => ?boolean; - ondblclick: (ev: MouseEvent) => ?boolean; - ondevicelight: (ev: Event) => ?boolean; - ondevicemotion: (ev: Event) => ?boolean; - ondeviceorientation: (ev: Event) => ?boolean; - ondrag: (ev: DragEvent) => ?boolean; - ondragend: (ev: DragEvent) => ?boolean; - ondragenter: (ev: DragEvent) => ?boolean; - ondragleave: (ev: DragEvent) => ?boolean; - ondragover: (ev: DragEvent) => ?boolean; - ondragstart: (ev: DragEvent) => ?boolean; - ondrop: (ev: DragEvent) => ?boolean; - ondurationchange: (ev: Event) => ?boolean; - onemptied: (ev: Event) => ?boolean; - onended: (ev: Event) => ?boolean; - onerror: (ev: Event) => ?boolean; - onfocus: (ev: FocusEvent) => ?boolean; - onhashchange: (ev: Event) => ?boolean; - oninput: (ev: Event) => ?boolean; - oninvalid: (ev: Event) => ?boolean; - onkeydown: (ev: KeyboardEvent) => ?boolean; - onkeypress: (ev: KeyboardEvent) => ?boolean; - onkeyup: (ev: KeyboardEvent) => ?boolean; - onload: (ev: Event) => ?boolean; - onloadeddata: (ev: Event) => ?boolean; - onloadedmetadata: (ev: Event) => ?boolean; - onloadstart: (ev: Event) => ?boolean; - onmessage: (ev: MessageEvent) => ?boolean; - onmousedown: (ev: MouseEvent) => ?boolean; - onmouseenter: (ev: MouseEvent) => ?boolean; - onmouseleave: (ev: MouseEvent) => ?boolean; - onmousemove: (ev: MouseEvent) => ?boolean; - onmouseout: (ev: MouseEvent) => ?boolean; - onmouseover: (ev: MouseEvent) => ?boolean; - onmouseup: (ev: MouseEvent) => ?boolean; - onmousewheel: (ev: WheelEvent) => ?boolean; - onoffline: (ev: Event) => ?boolean; - ononline: (ev: Event) => ?boolean; - onorientationchange: (ev: Event) => ?boolean; - onpagehide: (ev: Event) => ?boolean; - onpageshow: (ev: Event) => ?boolean; - onpause: (ev: Event) => ?boolean; - onplay: (ev: Event) => ?boolean; - onplaying: (ev: Event) => ?boolean; - onpopstate: (ev: Event) => ?boolean; - onprogress: (ev: ProgressEvent) => ?boolean; - onratechange: (ev: Event) => ?boolean; - onreadystatechange: (ev: ProgressEvent) => ?boolean; - onreset: (ev: Event) => ?boolean; - onresize: (ev: UIEvent) => ?boolean; - onscroll: (ev: UIEvent) => ?boolean; - onseeked: (ev: Event) => ?boolean; - onseeking: (ev: Event) => ?boolean; - onselect: (ev: UIEvent) => ?boolean; - onstalled: (ev: Event) => ?boolean; - onstorage: (ev: Event) => ?boolean; - onsubmit: (ev: Event) => ?boolean; - onsuspend: (ev: Event) => ?boolean; - ontimeupdate: (ev: Event) => ?boolean; - ontouchcancel: (ev: TouchEvent) => ?boolean; - ontouchend: (ev: TouchEvent) => ?boolean; - ontouchmove: (ev: TouchEvent) => ?boolean; - ontouchstart: (ev: TouchEvent) => ?boolean; - onunload: (ev: Event) => ?boolean; - onvolumechange: (ev: Event) => ?boolean; - onwaiting: (ev: Event) => ?boolean; - opener: Window; - orientation: string | number; - +outerHeight: number; - +outerWidth: number; - +pageXOffset: number; - +pageYOffset: number; - +parent: Window; - +performance: Performance; - +screen: Screen; - +screenLeft: number; - +screenTop: number; - +screenX: number; - +screenY: number; - +scrollX: number; - +scrollY: number; - +self: Window; - status: string; - +top: Window; - +window: Window; - - Blob: typeof Blob; - HTMLImageElement: typeof HTMLImageElement; - HTMLElement: typeof HTMLElement; - HTMLVideoElement: typeof HTMLVideoElement; - HTMLCanvasElement: typeof HTMLCanvasElement; - Image: typeof Image; - ImageData: typeof ImageData; - URL: typeof URL; - URLSearchParams: typeof URLSearchParams; - WebGLFramebuffer: typeof WebGLFramebuffer; - WheelEvent: typeof WheelEvent; - Worker: typeof Worker; - XMLHttpRequest: typeof XMLHttpRequest; - Request: typeof Request; - AbortController: typeof AbortController; - - alert(message?: string): void; - blur(): void; - captureEvents(): void; - close(): void; - confirm(message?: string): boolean; - focus(): void; - getComputedStyle(elt: Element, pseudoElt?: string): CSSStyleDeclaration; - getMatchedCSSRules(elt: Element, pseudoElt?: string): CSSRuleList; - getSelection(): Selection; - moveBy(x?: number, y?: number): void; - moveTo(x?: number, y?: number): void; - msWriteProfilerMark(profilerMarkName: string): void; - open(url?: string, target?: string, features?: string, replace?: boolean): Window; - postMessage(message: mixed, targetOrigin: string, transfer?: ArrayBuffer[]): void; - print(): void; - prompt(message?: string, _default?: string): string | null; - releaseEvents(): void; - resizeBy(x?: number, y?: number): void; - resizeTo(x?: number, y?: number): void; - scroll(x?: number, y?: number): void; - scrollBy(x?: number, y?: number): void; - scrollTo(x?: number, y?: number): void; - stop(): void; - - clearInterval(intervalId?: number): void; - clearTimeout(timeoutId?: number): void; - setTimeout(callback: () => void, ms?: number): number; - setInterval(callback: () => void, ms?: number): number; - - requestAnimationFrame(callback: (timestamp: number) => void): number; - cancelAnimationFrame(handle: number): void; - msRequestAnimationFrame(callback: (timestamp: number) => void): number; - msCancelAnimationFrame(handle: number): void; - webkitRequestAnimationFrame(callback: (timestamp: number) => void): number; - webkitCancelAnimationFrame(handle: number): void; -} diff --git a/src/ui/anchor.js b/src/ui/anchor.ts similarity index 75% rename from src/ui/anchor.js rename to src/ui/anchor.ts index 251b0904c5..613d468b72 100644 --- a/src/ui/anchor.js +++ b/src/ui/anchor.ts @@ -1,17 +1,8 @@ -// @flow +export type Anchor = 'center' | 'top' | 'bottom' | 'left' | 'right' | 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; -export type Anchor = - | 'center' - | 'top' - | 'bottom' - | 'left' - | 'right' - | 'top-left' - | 'top-right' - | 'bottom-left' - | 'bottom-right'; - -export const anchorTranslate: {[_: Anchor]: string} = { +export const anchorTranslate: { + [_ in Anchor]: string; +} = { 'center': 'translate(-50%,-50%)', 'top': 'translate(-50%,0)', 'top-left': 'translate(0,0)', diff --git a/src/ui/camera.js b/src/ui/camera.ts similarity index 94% rename from src/ui/camera.js rename to src/ui/camera.ts index c23adb61aa..515b4bd70f 100644 --- a/src/ui/camera.js +++ b/src/ui/camera.ts @@ -1,19 +1,9 @@ -// @flow - -import { - bindAll, - extend, - warnOnce, - clamp, - wrap, - ease as defaultEasing, - pick -} from '../util/util'; +import {bindAll, extend, warnOnce, clamp, wrap, ease as defaultEasing, pick} from '../util/util'; import {number as interpolate} from '../style-spec/util/interpolate'; import browser from '../util/browser'; import LngLat from '../geo/lng_lat'; import LngLatBounds from '../geo/lng_lat_bounds'; -import Point from '@mapbox/point-geometry'; +import Point, {PointLike} from '../util/point'; import {Event, Evented} from '../util/evented'; import assert from 'assert'; import {Debug} from '../util/debug'; @@ -22,7 +12,6 @@ import type Transform from '../geo/transform'; import type {LngLatLike} from '../geo/lng_lat'; import type {LngLatBoundsLike} from '../geo/lng_lat_bounds'; import type {TaskID} from '../util/task_queue'; -import type {PointLike} from '@mapbox/point-geometry'; import type {PaddingOptions} from '../geo/edge_insets'; /** @@ -57,12 +46,14 @@ import type {PaddingOptions} from '../geo/edge_insets'; * @see [Display buildings in 3D](https://maplibre.org/maplibre-gl-js-docs/example/3d-buildings/) */ export type CameraOptions = { - center?: LngLatLike, - zoom?: number, - bearing?: number, - pitch?: number, - around?: LngLatLike, - padding?: PaddingOptions + center?: LngLatLike; + zoom?: number; + bearing?: number; + pitch?: number; + around?: LngLatLike; + padding?: PaddingOptions; + maxZoom?: number; + offset?: PointLike; }; /** @@ -80,11 +71,11 @@ export type CameraOptions = { * [`prefers-reduced-motion`](https://developer.mozilla.org/en-US/docs/Web/CSS/@media/prefers-reduced-motion). */ export type AnimationOptions = { - duration?: number, - easing?: (_: number) => number, - offset?: PointLike, - animate?: boolean, - essential?: boolean + duration?: number; + easing?: (_: number) => number; + offset?: PointLike; + animate?: boolean; + essential?: boolean; }; /** @@ -112,7 +103,7 @@ export type AnimationOptions = { * @see [Fit a map to a bounding box](https://maplibre.org/maplibre-gl-js-docs/example/fitbounds/) */ -class Camera extends Evented { +abstract class Camera extends Evented { transform: Transform; _moving: boolean; _zooming: boolean; @@ -122,17 +113,22 @@ class Camera extends Evented { _bearingSnap: number; _easeStart: number; - _easeOptions: {duration: number, easing: (_: number) => number}; + _easeOptions: { + duration: number; + easing: (_: number) => number; + }; _easeId: string | void; _onEaseFrame: (_: number) => void; _onEaseEnd: (easeId?: string) => void; - _easeFrameId: ?TaskID; + _easeFrameId: TaskID | undefined | null; - +_requestRenderFrame: (() => void) => TaskID; - +_cancelRenderFrame: (_: TaskID) => void; + abstract _requestRenderFrame(a: () => void): TaskID; + abstract _cancelRenderFrame(_: TaskID): void; - constructor(transform: Transform, options: {bearingSnap: number}) { + constructor(transform: Transform, options: { + bearingSnap: number; + }) { super(); this._moving = false; this._zooming = false; @@ -170,7 +166,7 @@ class Camera extends Evented { * @example * map.setCenter([-74, 38]); */ - setCenter(center: LngLatLike, eventData?: Object) { + setCenter(center: LngLatLike, eventData?: any) { return this.jumpTo({center}, eventData); } @@ -186,7 +182,7 @@ class Camera extends Evented { * @returns {Map} `this` * @see [Navigate the map with game-like controls](https://maplibre.org/maplibre-gl-js-docs/example/game-controls/) */ - panBy(offset: PointLike, options?: AnimationOptions, eventData?: Object) { + panBy(offset: PointLike, options?: AnimationOptions, eventData?: any) { offset = Point.convert(offset).mult(-1); return this.panTo(this.transform.center, extend({offset}, options), eventData); } @@ -208,7 +204,7 @@ class Camera extends Evented { * map.panTo([-74, 38], {duration: 5000}); * @see [Update a feature in realtime](https://maplibre.org/maplibre-gl-js-docs/example/live-update-feature/) */ - panTo(lnglat: LngLatLike, options?: AnimationOptions, eventData?: Object) { + panTo(lnglat: LngLatLike, options?: AnimationOptions, eventData?: any) { return this.easeTo(extend({ center: lnglat }, options), eventData); @@ -241,7 +237,7 @@ class Camera extends Evented { * // Zoom to the zoom level 5 without an animated transition * map.setZoom(5); */ - setZoom(zoom: number, eventData?: Object) { + setZoom(zoom: number, eventData?: any) { this.jumpTo({zoom}, eventData); return this; } @@ -269,7 +265,7 @@ class Camera extends Evented { * offset: [100, 50] * }); */ - zoomTo(zoom: number, options: ? AnimationOptions, eventData?: Object) { + zoomTo(zoom: number, options?: AnimationOptions | null, eventData?: any) { return this.easeTo(extend({ zoom }, options), eventData); @@ -292,7 +288,7 @@ class Camera extends Evented { * // zoom the map in one level with a custom animation duration * map.zoomIn({duration: 1000}); */ - zoomIn(options?: AnimationOptions, eventData?: Object) { + zoomIn(options?: AnimationOptions, eventData?: any) { this.zoomTo(this.getZoom() + 1, options, eventData); return this; } @@ -314,7 +310,7 @@ class Camera extends Evented { * // zoom the map out one level with a custom animation offset * map.zoomOut({offset: [80, 60]}); */ - zoomOut(options?: AnimationOptions, eventData?: Object) { + zoomOut(options?: AnimationOptions, eventData?: any) { this.zoomTo(this.getZoom() - 1, options, eventData); return this; } @@ -345,7 +341,7 @@ class Camera extends Evented { * // rotate the map to 90 degrees * map.setBearing(90); */ - setBearing(bearing: number, eventData?: Object) { + setBearing(bearing: number, eventData?: any) { this.jumpTo({bearing}, eventData); return this; } @@ -373,7 +369,7 @@ class Camera extends Evented { * // Sets a left padding of 300px, and a top padding of 50px * map.setPadding({ left: 300, top: 50 }); */ - setPadding(padding: PaddingOptions, eventData?: Object) { + setPadding(padding: PaddingOptions, eventData?: any) { this.jumpTo({padding}, eventData); return this; } @@ -390,7 +386,7 @@ class Camera extends Evented { * @fires moveend * @returns {Map} `this` */ - rotateTo(bearing: number, options?: AnimationOptions, eventData?: Object) { + rotateTo(bearing: number, options?: AnimationOptions, eventData?: any) { return this.easeTo(extend({ bearing }, options), eventData); @@ -406,7 +402,7 @@ class Camera extends Evented { * @fires moveend * @returns {Map} `this` */ - resetNorth(options?: AnimationOptions, eventData?: Object) { + resetNorth(options?: AnimationOptions, eventData?: any) { this.rotateTo(0, extend({duration: 1000}, options), eventData); return this; } @@ -421,7 +417,7 @@ class Camera extends Evented { * @fires moveend * @returns {Map} `this` */ - resetNorthPitch(options?: AnimationOptions, eventData?: Object) { + resetNorthPitch(options?: AnimationOptions, eventData?: any) { this.easeTo(extend({ bearing: 0, pitch: 0, @@ -441,7 +437,7 @@ class Camera extends Evented { * @fires moveend * @returns {Map} `this` */ - snapToNorth(options?: AnimationOptions, eventData?: Object) { + snapToNorth(options?: AnimationOptions, eventData?: any) { if (Math.abs(this.getBearing()) < this._bearingSnap) { return this.resetNorth(options, eventData); } @@ -467,7 +463,7 @@ class Camera extends Evented { * @fires moveend * @returns {Map} `this` */ - setPitch(pitch: number, eventData?: Object) { + setPitch(pitch: number, eventData?: any) { this.jumpTo({pitch}, eventData); return this; } @@ -571,7 +567,7 @@ class Camera extends Evented { const zoom = Math.min(tr.scaleZoom(tr.scale * Math.min(scaleX, scaleY)), options.maxZoom); // Calculate center: apply the zoom, the configured offset, as well as offset that exists as a result of padding. - const offset = (typeof options.offset.x === 'number') ? new Point(options.offset.x, options.offset.y) : Point.convert(options.offset); + const offset = Point.convert(options.offset); const paddingOffsetX = (options.padding.left - options.padding.right) / 2; const paddingOffsetY = (options.padding.top - options.padding.bottom) / 2; const paddingOffset = new Point(paddingOffsetX, paddingOffsetY); @@ -614,9 +610,9 @@ class Camera extends Evented { * }); * @see [Fit a map to a bounding box](https://maplibre.org/maplibre-gl-js-docs/example/fitbounds/) */ - fitBounds(bounds: LngLatBoundsLike, options?: AnimationOptions & CameraOptions, eventData?: Object) { + fitBounds(bounds: LngLatBoundsLike, options?: AnimationOptions & CameraOptions & { linear: boolean }, eventData?: any) { return this._fitInternal( - this.cameraForBounds(bounds, options), + this.cameraForBounds(bounds, options) as AnimationOptions & CameraOptions, options, eventData); } @@ -650,18 +646,18 @@ class Camera extends Evented { * }); * @see Used by {@link BoxZoomHandler} */ - fitScreenCoordinates(p0: PointLike, p1: PointLike, bearing: number, options?: AnimationOptions & CameraOptions, eventData?: Object) { + fitScreenCoordinates(p0: PointLike, p1: PointLike, bearing: number, options?: AnimationOptions & CameraOptions & { linear: boolean }, eventData?: any) { return this._fitInternal( this._cameraForBoxAndBearing( this.transform.pointLocation(Point.convert(p0)), this.transform.pointLocation(Point.convert(p1)), bearing, - options), + options) as CameraOptions & AnimationOptions, options, eventData); } - _fitInternal(calculatedOptions?: CameraOptions & AnimationOptions, options?: AnimationOptions & CameraOptions, eventData?: Object) { + _fitInternal(calculatedOptions?: CameraOptions & AnimationOptions, options?: AnimationOptions & CameraOptions & { linear: boolean }, eventData?: any) { // cameraForBounds warns + returns undefined if unable to fit: if (!calculatedOptions) return this; @@ -706,7 +702,7 @@ class Camera extends Evented { * @see [Jump to a series of locations](https://maplibre.org/maplibre-gl-js-docs/example/jump-to/) * @see [Update a feature in realtime](https://maplibre.org/maplibre-gl-js-docs/example/live-update-feature/) */ - jumpTo(options: CameraOptions, eventData?: Object) { + jumpTo(options: CameraOptions, eventData?: any) { this.stop(); const tr = this.transform; @@ -787,7 +783,10 @@ class Camera extends Evented { * @returns {Map} `this` * @see [Navigate the map with game-like controls](https://maplibre.org/maplibre-gl-js-docs/example/game-controls/) */ - easeTo(options: CameraOptions & AnimationOptions & {easeId?: string}, eventData?: Object) { + easeTo(options: CameraOptions & AnimationOptions & { + easeId?: string; + noMoveStart?: boolean; + }, eventData?: any) { this._stop(false, options.easeId); options = extend({ @@ -874,12 +873,12 @@ class Camera extends Evented { }, (interruptingEaseId?: string) => { this._afterEase(eventData, interruptingEaseId); - }, options); + }, options as any); return this; } - _prepareEase(eventData?: Object, noMoveStart: boolean, currently: Object = {}) { + _prepareEase(eventData: any | undefined | null, noMoveStart: boolean, currently: any = {}) { this._moving = true; if (!noMoveStart && !currently.moving) { @@ -896,7 +895,7 @@ class Camera extends Evented { } } - _fireMoveEvents(eventData?: Object) { + _fireMoveEvents(eventData?: any) { this.fire(new Event('move', eventData)); if (this._zooming) { this.fire(new Event('zoom', eventData)); @@ -909,7 +908,7 @@ class Camera extends Evented { } } - _afterEase(eventData?: Object, easeId?: string) { + _afterEase(eventData?: any, easeId?: string) { // if this easing is being stopped to start another easing with // the same id then don't fire any events to avoid extra start/stop events if (this._easeId && easeId && this._easeId === easeId) { @@ -997,10 +996,10 @@ class Camera extends Evented { * @see [Slowly fly to a location](https://maplibre.org/maplibre-gl-js-docs/example/flyto-options/) * @see [Fly to a location based on scroll position](https://maplibre.org/maplibre-gl-js-docs/example/scroll-fly-to/) */ - flyTo(options: Object, eventData?: Object) { + flyTo(options: any, eventData?: any) { // Fall through to jumpTo if user has set prefers-reduced-motion if (!options.essential && browser.prefersReducedMotion) { - const coercedOptions = (pick(options, ['center', 'zoom', 'bearing', 'pitch', 'around']): CameraOptions); + const coercedOptions = (pick(options, ['center', 'zoom', 'bearing', 'pitch', 'around']) as CameraOptions); return this.jumpTo(coercedOptions, eventData); } @@ -1185,7 +1184,7 @@ class Camera extends Evented { onEaseEnd.call(this, easeId); } if (!allowGestures) { - const handlers = (this: any).handlers; + const handlers = (this as any).handlers; if (handlers) handlers.stop(false); } return this; @@ -1193,7 +1192,11 @@ class Camera extends Evented { _ease(frame: (_: number) => void, finish: () => void, - options: {animate: boolean, duration: number, easing: (_: number) => number}) { + options: { + animate: boolean; + duration: number; + easing: (_: number) => number; + }) { if (options.animate === false || options.duration === 0) { frame(1); finish(); @@ -1244,7 +1247,7 @@ class Camera extends Evented { // - another ___start event can't be fired before a ___end event has been fired for the previous one function addAssertions(camera: Camera) { //eslint-disable-line Debug.run(() => { - const inProgress = {}; + const inProgress = {} as any; ['drag', 'zoom', 'rotate', 'pitch', 'move'].forEach(name => { inProgress[name] = false; @@ -1268,10 +1271,10 @@ function addAssertions(camera: Camera) { //eslint-disable-line }); // Canary used to test whether this function is stripped in prod build - canary = 'canary debug run'; + canary = 'canary debug run'; // eslint-disable-line }); } -let canary; //eslint-disable-line +let canary; // eslint-disable-line export default Camera; diff --git a/src/ui/control/attribution_control.js b/src/ui/control/attribution_control.ts similarity index 94% rename from src/ui/control/attribution_control.js rename to src/ui/control/attribution_control.ts index a8dea88e48..98fd7c4cbe 100644 --- a/src/ui/control/attribution_control.js +++ b/src/ui/control/attribution_control.ts @@ -1,14 +1,13 @@ -// @flow - import DOM from '../../util/dom'; import {bindAll} from '../../util/util'; import config from '../../util/config'; import type Map from '../map'; +import type {ControlPosition, IControl} from './control'; type Options = { - compact?: boolean, - customAttribution?: string | Array + compact?: boolean; + customAttribution?: string | Array; }; /** @@ -24,13 +23,13 @@ type Options = { * compact: true * })); */ -class AttributionControl { +class AttributionControl implements IControl { options: Options; _map: Map; _container: HTMLElement; _innerContainer: HTMLElement; _compactButton: HTMLButtonElement; - _editLink: ?HTMLAnchorElement; + _editLink: HTMLAnchorElement | undefined | null; _attribHTML: string; styleId: string; styleOwner: string; @@ -46,7 +45,7 @@ class AttributionControl { ], this); } - getDefaultPosition() { + getDefaultPosition(): ControlPosition { return 'bottom-right'; } @@ -55,7 +54,7 @@ class AttributionControl { this._map = map; this._container = DOM.create('div', 'maplibregl-ctrl maplibregl-ctrl-attrib mapboxgl-ctrl mapboxgl-ctrl-attrib'); - this._compactButton = DOM.create('button', 'maplibregl-ctrl-attrib-button mapboxgl-ctrl-attrib-button', this._container); + this._compactButton = DOM.create('button', 'maplibregl-ctrl-attrib-button mapboxgl-ctrl-attrib-button', this._container) as HTMLButtonElement; this._compactButton.addEventListener('click', this._toggleAttribution); this._compactButton.type = 'button'; this._setElementTitle(this._compactButton, 'ToggleAttribution'); @@ -89,8 +88,8 @@ class AttributionControl { this._map.off('moveend', this._updateEditLink); this._map.off('resize', this._updateCompact); - this._map = (undefined: any); - this._attribHTML = (undefined: any); + this._map = undefined; + this._attribHTML = undefined; } _setElementTitle(element: HTMLElement, title: string) { @@ -112,7 +111,7 @@ class AttributionControl { _updateEditLink() { let editLink = this._editLink; if (!editLink) { - editLink = this._editLink = (this._container.querySelector('.mapbox-improve-map'): any); + editLink = this._editLink = (this._container.querySelector('.mapbox-improve-map') as any); } const params = [ @@ -127,7 +126,7 @@ class AttributionControl { acc += `${next.key}=${next.value}${i < params.length - 1 ? '&' : ''}`; } return acc; - }, `?`); + }, '?'); editLink.href = `${config.FEEDBACK_URL}/${paramString}${this._map._hash ? this._map._hash.getHashString(true) : ''}`; editLink.rel = 'noopener nofollow'; this._setElementTitle(editLink, 'MapFeedback'); diff --git a/src/ui/control/control.d.ts b/src/ui/control/control.d.ts new file mode 100644 index 0000000000..ba64b15a09 --- /dev/null +++ b/src/ui/control/control.d.ts @@ -0,0 +1,8 @@ +export type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; + +/* eslint-disable no-use-before-define */ +export type IControl = { + onAdd(map: Map): HTMLElement; + onRemove(map: Map): void; + readonly getDefaultPosition?: () => ControlPosition; +}; diff --git a/src/ui/control/fullscreen_control.js b/src/ui/control/fullscreen_control.ts similarity index 58% rename from src/ui/control/fullscreen_control.js rename to src/ui/control/fullscreen_control.ts index 3cad78b8b1..89d7d24c08 100644 --- a/src/ui/control/fullscreen_control.js +++ b/src/ui/control/fullscreen_control.ts @@ -1,14 +1,12 @@ -// @flow - import DOM from '../../util/dom'; import {bindAll, warnOnce} from '../../util/util'; -import window from '../../util/window'; import type Map from '../map'; +import type {IControl} from './control'; type Options = { - container?: HTMLElement + container?: HTMLElement; }; /** @@ -23,18 +21,18 @@ type Options = { * @see [View a fullscreen map](https://maplibre.org/maplibre-gl-js-docs/example/fullscreen/) */ -class FullscreenControl { +class FullscreenControl implements IControl { _map: Map; _controlContainer: HTMLElement; _fullscreen: boolean; _fullscreenchange: string; - _fullscreenButton: HTMLElement; + _fullscreenButton: HTMLButtonElement; _container: HTMLElement; constructor(options: Options) { this._fullscreen = false; if (options && options.container) { - if (options.container instanceof window.HTMLElement) { + if (options.container instanceof HTMLElement) { this._container = options.container; } else { warnOnce('Full screen control \'container\' must be a DOM element.'); @@ -44,13 +42,13 @@ class FullscreenControl { '_onClickFullscreen', '_changeIcon' ], this); - if ('onfullscreenchange' in window.document) { + if ('onfullscreenchange' in document) { this._fullscreenchange = 'fullscreenchange'; - } else if ('onmozfullscreenchange' in window.document) { + } else if ('onmozfullscreenchange' in document) { this._fullscreenchange = 'mozfullscreenchange'; - } else if ('onwebkitfullscreenchange' in window.document) { + } else if ('onwebkitfullscreenchange' in document) { this._fullscreenchange = 'webkitfullscreenchange'; - } else if ('onmsfullscreenchange' in window.document) { + } else if ('onmsfullscreenchange' in document) { this._fullscreenchange = 'MSFullscreenChange'; } } @@ -58,7 +56,7 @@ class FullscreenControl { onAdd(map: Map) { this._map = map; if (!this._container) this._container = this._map.getContainer(); - this._controlContainer = DOM.create('div', `maplibregl-ctrl maplibregl-ctrl-group mapboxgl-ctrl mapboxgl-ctrl-group`); + this._controlContainer = DOM.create('div', 'maplibregl-ctrl maplibregl-ctrl-group mapboxgl-ctrl mapboxgl-ctrl-group'); if (this._checkFullscreenSupport()) { this._setupUI(); } else { @@ -70,22 +68,22 @@ class FullscreenControl { onRemove() { DOM.remove(this._controlContainer); - this._map = (null: any); + this._map = null; window.document.removeEventListener(this._fullscreenchange, this._changeIcon); } _checkFullscreenSupport() { return !!( - window.document.fullscreenEnabled || - (window.document: any).mozFullScreenEnabled || - (window.document: any).msFullscreenEnabled || - (window.document: any).webkitFullscreenEnabled + document.fullscreenEnabled || + (document as any).mozFullScreenEnabled || + (document as any).msFullscreenEnabled || + (document as any).webkitFullscreenEnabled ); } _setupUI() { - const button = this._fullscreenButton = DOM.create('button', (`maplibregl-ctrl-fullscreen mapboxgl-ctrl-fullscreen`), this._controlContainer); - DOM.create('span', `maplibregl-ctrl-icon mapboxgl-ctrl-icon`, button).setAttribute('aria-hidden', true); + const button = this._fullscreenButton = DOM.create('button', (('maplibregl-ctrl-fullscreen mapboxgl-ctrl-fullscreen')), this._controlContainer) as HTMLButtonElement; + DOM.create('span', 'maplibregl-ctrl-icon mapboxgl-ctrl-icon', button).setAttribute('aria-hidden', 'true'); button.type = 'button'; this._updateTitle(); this._fullscreenButton.addEventListener('click', this._onClickFullscreen); @@ -94,7 +92,7 @@ class FullscreenControl { _updateTitle() { const title = this._getTitle(); - this._fullscreenButton.setAttribute("aria-label", title); + this._fullscreenButton.setAttribute('aria-label', title); this._fullscreenButton.title = title; } @@ -109,16 +107,16 @@ class FullscreenControl { _changeIcon() { const fullscreenElement = window.document.fullscreenElement || - (window.document: any).mozFullScreenElement || - (window.document: any).webkitFullscreenElement || - (window.document: any).msFullscreenElement; + (window.document as any).mozFullScreenElement || + (window.document as any).webkitFullscreenElement || + (window.document as any).msFullscreenElement; if ((fullscreenElement === this._container) !== this._fullscreen) { this._fullscreen = !this._fullscreen; - this._fullscreenButton.classList.toggle(`maplibregl-ctrl-shrink`); - this._fullscreenButton.classList.toggle(`mapboxgl-ctrl-shrink`); - this._fullscreenButton.classList.toggle(`maplibregl-ctrl-fullscreen`); - this._fullscreenButton.classList.toggle(`mapboxgl-ctrl-fullscreen`); + this._fullscreenButton.classList.toggle('maplibregl-ctrl-shrink'); + this._fullscreenButton.classList.toggle('mapboxgl-ctrl-shrink'); + this._fullscreenButton.classList.toggle('maplibregl-ctrl-fullscreen'); + this._fullscreenButton.classList.toggle('mapboxgl-ctrl-fullscreen'); this._updateTitle(); } } @@ -126,22 +124,22 @@ class FullscreenControl { _onClickFullscreen() { if (this._isFullscreen()) { if (window.document.exitFullscreen) { - (window.document: any).exitFullscreen(); - } else if (window.document.mozCancelFullScreen) { - (window.document: any).mozCancelFullScreen(); - } else if (window.document.msExitFullscreen) { - (window.document: any).msExitFullscreen(); - } else if (window.document.webkitCancelFullScreen) { - (window.document: any).webkitCancelFullScreen(); + (window.document as any).exitFullscreen(); + } else if ((window.document as any).mozCancelFullScreen) { + (window.document as any).mozCancelFullScreen(); + } else if ((window.document as any).msExitFullscreen) { + (window.document as any).msExitFullscreen(); + } else if ((window.document as any).webkitCancelFullScreen) { + (window.document as any).webkitCancelFullScreen(); } } else if (this._container.requestFullscreen) { this._container.requestFullscreen(); - } else if ((this._container: any).mozRequestFullScreen) { - (this._container: any).mozRequestFullScreen(); - } else if ((this._container: any).msRequestFullscreen) { - (this._container: any).msRequestFullscreen(); - } else if ((this._container: any).webkitRequestFullscreen) { - (this._container: any).webkitRequestFullscreen(); + } else if ((this._container as any).mozRequestFullScreen) { + (this._container as any).mozRequestFullScreen(); + } else if ((this._container as any).msRequestFullscreen) { + (this._container as any).msRequestFullscreen(); + } else if ((this._container as any).webkitRequestFullscreen) { + (this._container as any).webkitRequestFullscreen(); } } } diff --git a/src/ui/control/geolocate_control.js b/src/ui/control/geolocate_control.ts similarity index 94% rename from src/ui/control/geolocate_control.js rename to src/ui/control/geolocate_control.ts index f9adf876f2..dd200581e9 100644 --- a/src/ui/control/geolocate_control.js +++ b/src/ui/control/geolocate_control.ts @@ -1,8 +1,5 @@ -// @flow - import {Event, Evented} from '../../util/evented'; import DOM from '../../util/dom'; -import window from '../../util/window'; import {extend, bindAll, warnOnce} from '../../util/util'; import assert from 'assert'; import LngLat from '../../geo/lng_lat'; @@ -10,13 +7,14 @@ import Marker from '../marker'; import type Map from '../map'; import type {AnimationOptions, CameraOptions} from '../camera'; +import type {IControl} from './control'; type Options = { - positionOptions?: PositionOptions, - fitBoundsOptions?: AnimationOptions & CameraOptions, - trackUserLocation?: boolean, - showAccuracyCircle?: boolean, - showUserLocation?: boolean + positionOptions?: PositionOptions; + fitBoundsOptions?: AnimationOptions & CameraOptions; + trackUserLocation?: boolean; + showAccuracyCircle?: boolean; + showUserLocation?: boolean; }; const defaultOptions: Options = { @@ -94,7 +92,7 @@ let noTimeout = false; * })); * @see [Locate the user](https://maplibre.org/maplibre-gl-js-docs/example/locate-user/) */ -class GeolocateControl extends Evented { +class GeolocateControl extends Evented implements IControl { _map: Map; options: Options; _container: HTMLElement; @@ -102,7 +100,7 @@ class GeolocateControl extends Evented { _circleElement: HTMLElement; _geolocateButton: HTMLButtonElement; _geolocationWatchID: number; - _timeoutId: ?TimeoutID; + _timeoutId: ReturnType | undefined | null; _watchState: 'OFF' | 'ACTIVE_LOCK' | 'WAITING_ACTIVE' | 'ACTIVE_ERROR' | 'BACKGROUND' | 'BACKGROUND_ERROR'; _lastKnownPosition: any; _userLocationDotMarker: Marker; @@ -127,7 +125,7 @@ class GeolocateControl extends Evented { onAdd(map: Map) { this._map = map; - this._container = DOM.create('div', `maplibregl-ctrl maplibregl-ctrl-group mapboxgl-ctrl mapboxgl-ctrl-group`); + this._container = DOM.create('div', 'maplibregl-ctrl maplibregl-ctrl-group mapboxgl-ctrl mapboxgl-ctrl-group'); checkGeolocationSupport(this._setupUI); return this._container; } @@ -136,7 +134,7 @@ class GeolocateControl extends Evented { // clear the geolocation watch if exists if (this._geolocationWatchID !== undefined) { window.navigator.geolocation.clearWatch(this._geolocationWatchID); - this._geolocationWatchID = (undefined: any); + this._geolocationWatchID = undefined; } // clear the markers from the map @@ -149,7 +147,7 @@ class GeolocateControl extends Evented { DOM.remove(this._container); this._map.off('zoom', this._onZoom); - this._map = (undefined: any); + this._map = undefined; numberOfWatches = 0; noTimeout = false; } @@ -161,7 +159,7 @@ class GeolocateControl extends Evented { * @returns {boolean} Returns `true` if position is outside the map's maxbounds, otherwise returns `false`. * @private */ - _isOutOfMapMaxBounds(position: Position) { + _isOutOfMapMaxBounds(position: GeolocationPosition) { const bounds = this._map.getMaxBounds(); const coordinates = position.coords; @@ -207,7 +205,7 @@ class GeolocateControl extends Evented { * @param {Position} position the Geolocation API Position * @private */ - _onSuccess(position: Position) { + _onSuccess(position: GeolocationPosition) { if (!this._map) { // control has since been removed return; @@ -275,7 +273,7 @@ class GeolocateControl extends Evented { * @param {Position} position the Geolocation API Position * @private */ - _updateCamera(position: Position) { + _updateCamera(position: GeolocationPosition) { const center = new LngLat(position.coords.longitude, position.coords.latitude); const radius = position.coords.accuracy; const bearing = this._map.getBearing(); @@ -292,7 +290,7 @@ class GeolocateControl extends Evented { * @param {Position} [position] the Geolocation API Position * @private */ - _updateMarker(position: ?Position) { + _updateMarker(position?: GeolocationPosition | null) { if (position) { const center = new LngLat(position.coords.longitude, position.coords.latitude); this._accuracyCircleMarker.setLngLat(center).addTo(this._map); @@ -324,7 +322,7 @@ class GeolocateControl extends Evented { } } - _onError(error: PositionError) { + _onError(error: GeolocationPositionError) { if (!this._map) { // control has since been removed return; @@ -374,8 +372,8 @@ class GeolocateControl extends Evented { _setupUI(supported: boolean) { this._container.addEventListener('contextmenu', (e: MouseEvent) => e.preventDefault()); - this._geolocateButton = DOM.create('button', `maplibregl-ctrl-geolocate mapboxgl-ctrl-geolocate`, this._container); - DOM.create('span', `maplibregl-ctrl-icon mapboxgl-ctrl-icon`, this._geolocateButton).setAttribute('aria-hidden', true); + this._geolocateButton = DOM.create('button', 'maplibregl-ctrl-geolocate mapboxgl-ctrl-geolocate', this._container) as HTMLButtonElement; + DOM.create('span', 'maplibregl-ctrl-icon mapboxgl-ctrl-icon', this._geolocateButton).setAttribute('aria-hidden', 'true'); this._geolocateButton.type = 'button'; if (supported === false) { @@ -499,17 +497,6 @@ class GeolocateControl extends Evented { case 'ACTIVE_LOCK': this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-active', 'mapboxgl-ctrl-geolocate-active'); break; - case 'ACTIVE_ERROR': - this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-waiting', 'mapboxgl-ctrl-geolocate-waiting'); - this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-active-error', 'mapboxgl-ctrl-geolocate-active-error'); - break; - case 'BACKGROUND': - this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-background', 'mapboxgl-ctrl-geolocate-background'); - break; - case 'BACKGROUND_ERROR': - this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-waiting', 'mapboxgl-ctrl-geolocate-waiting'); - this._geolocateButton.classList.add('maplibregl-ctrl-geolocate-background-error', 'mapboxgl-ctrl-geolocate-background-error'); - break; case 'OFF': break; default: @@ -554,7 +541,7 @@ class GeolocateControl extends Evented { _clearWatch() { window.navigator.geolocation.clearWatch(this._geolocationWatchID); - this._geolocationWatchID = (undefined: any); + this._geolocationWatchID = undefined; this._geolocateButton.classList.remove('maplibregl-ctrl-geolocate-waiting', 'mapboxgl-ctrl-geolocate-waiting'); this._geolocateButton.setAttribute('aria-pressed', 'false'); diff --git a/src/ui/control/logo_control.js b/src/ui/control/logo_control.ts similarity index 80% rename from src/ui/control/logo_control.js rename to src/ui/control/logo_control.ts index 709ae48aa2..5872a27eed 100644 --- a/src/ui/control/logo_control.js +++ b/src/ui/control/logo_control.ts @@ -1,10 +1,9 @@ -// @flow - import DOM from '../../util/dom'; import {bindAll} from '../../util/util'; import type Map from '../map'; +import type {ControlPosition, IControl} from './control'; /** * A `LogoControl` is a control that adds the watermark. @@ -13,7 +12,7 @@ import type Map from '../map'; * @private **/ -class LogoControl { +class LogoControl implements IControl { _map: Map; _container: HTMLElement; @@ -25,17 +24,17 @@ class LogoControl { onAdd(map: Map) { this._map = map; this._container = DOM.create('div', 'maplibregl-ctrl mapboxgl-ctrl'); - const anchor = DOM.create('a', 'maplibregl-ctrl-logo mapboxgl-ctrl-logo'); - anchor.target = "_blank"; - anchor.rel = "noopener nofollow"; - anchor.href = "https://maplibre.org/"; - anchor.setAttribute("aria-label", this._map._getUIString('LogoControl.Title')); - anchor.setAttribute("rel", "noopener nofollow"); + const anchor = DOM.create('a', 'maplibregl-ctrl-logo mapboxgl-ctrl-logo') as HTMLAnchorElement; + anchor.target = '_blank'; + anchor.rel = 'noopener nofollow'; + anchor.href = 'https://maplibre.org/'; + anchor.setAttribute('aria-label', this._map._getUIString('LogoControl.Title')); + anchor.setAttribute('rel', 'noopener nofollow'); this._container.appendChild(anchor); this._container.style.display = 'none'; this._map.on('sourcedata', this._updateLogo); - this._updateLogo(); + this._updateLogo(undefined); this._map.on('resize', this._updateCompact); this._updateCompact(); @@ -49,7 +48,7 @@ class LogoControl { this._map.off('resize', this._updateCompact); } - getDefaultPosition() { + getDefaultPosition(): ControlPosition { return 'bottom-left'; } @@ -65,7 +64,7 @@ class LogoControl { const sourceCaches = this._map.style.sourceCaches; for (const id in sourceCaches) { const source = sourceCaches[id].getSource(); - if (source.mapbox_logo) { + if (source.maplibreLogo) { return true; } } diff --git a/src/ui/control/navigation_control.js b/src/ui/control/navigation_control.ts similarity index 90% rename from src/ui/control/navigation_control.js rename to src/ui/control/navigation_control.ts index 3f762ae926..5f99d418ab 100644 --- a/src/ui/control/navigation_control.js +++ b/src/ui/control/navigation_control.ts @@ -1,16 +1,16 @@ -// @flow +import Point from '../../util/point'; import DOM from '../../util/dom'; import {extend, bindAll} from '../../util/util'; import {MouseRotateHandler, MousePitchHandler} from '../handler/mouse'; -import window from '../../util/window'; import type Map from '../map'; +import type {IControl} from './control'; type Options = { - showCompass?: boolean, - showZoom?: boolean, - visualizePitch?: boolean + showCompass?: boolean; + showZoom?: boolean; + visualizePitch?: boolean; }; const defaultOptions: Options = { @@ -33,7 +33,7 @@ const defaultOptions: Options = { * @see [Display map navigation controls](https://maplibre.org/maplibre-gl-js-docs/example/navigation/) * @see [Add a third party vector tile source](https://maplibre.org/maplibre-gl-js-docs/example/third-party/) */ -class NavigationControl { +class NavigationControl implements IControl { _map: Map; options: Options; _container: HTMLElement; @@ -55,9 +55,9 @@ class NavigationControl { '_updateZoomButtons' ], this); this._zoomInButton = this._createButton('maplibregl-ctrl-zoom-in mapboxgl-ctrl-zoom-in', (e) => this._map.zoomIn({}, {originalEvent: e})); - DOM.create('span', `maplibregl-ctrl-icon mapboxgl-ctrl-icon`, this._zoomInButton).setAttribute('aria-hidden', true); + DOM.create('span', 'maplibregl-ctrl-icon mapboxgl-ctrl-icon', this._zoomInButton).setAttribute('aria-hidden', 'true'); this._zoomOutButton = this._createButton('maplibregl-ctrl-zoom-out mapboxgl-ctrl-zoom-out', (e) => this._map.zoomOut({}, {originalEvent: e})); - DOM.create('span', `maplibregl-ctrl-icon mapboxgl-ctrl-icon`, this._zoomOutButton).setAttribute('aria-hidden', true); + DOM.create('span', 'maplibregl-ctrl-icon mapboxgl-ctrl-icon', this._zoomOutButton).setAttribute('aria-hidden', 'true'); } if (this.options.showCompass) { bindAll([ @@ -71,7 +71,7 @@ class NavigationControl { } }); this._compassIcon = DOM.create('span', 'maplibregl-ctrl-icon mapboxgl-ctrl-icon', this._compass); - this._compassIcon.setAttribute('aria-hidden', true); + this._compassIcon.setAttribute('aria-hidden', 'true'); } } @@ -130,8 +130,8 @@ class NavigationControl { delete this._map; } - _createButton(className: string, fn: () => mixed) { - const a = DOM.create('button', className, this._container); + _createButton(className: string, fn: (e?: any) => unknown) { + const a = DOM.create('button', className, this._container) as HTMLButtonElement; a.type = 'button'; a.addEventListener('click', fn); return a; @@ -154,7 +154,7 @@ class MouseRotateWrapper { _startPos: Point; _lastPos: Point; - constructor(map: Map, element: HTMLElement, pitch?: boolean = false) { + constructor(map: Map, element: HTMLElement, pitch: boolean = false) { this._clickTolerance = 10; this.element = element; this.mouseRotate = new MouseRotateHandler({clickTolerance: map.dragRotate._mouseRotate._clickTolerance}); @@ -177,10 +177,10 @@ class MouseRotateWrapper { move(e: MouseEvent, point: Point) { const map = this.map; - const r = this.mouseRotate.mousemoveWindow(e, point); + const r = this.mouseRotate.mousemoveWindow(e, point) as any; if (r && r.bearingDelta) map.setBearing(map.getBearing() + r.bearingDelta); if (this.mousePitch) { - const p = this.mousePitch.mousemoveWindow(e, point); + const p = this.mousePitch.mousemoveWindow(e, point) as any; if (p && p.pitchDelta) map.setPitch(map.getPitch() + p.pitchDelta); } } @@ -222,7 +222,7 @@ class MouseRotateWrapper { this.reset(); } else { this._startPos = this._lastPos = DOM.touchPos(this.element, e.targetTouches)[0]; - this.down((({type: 'mousedown', button: 0, ctrlKey: true, preventDefault: () => e.preventDefault()}: any): MouseEvent), this._startPos); + this.down((({type: 'mousedown', button: 0, ctrlKey: true, preventDefault: () => e.preventDefault()} as any as MouseEvent)), this._startPos); } } @@ -231,7 +231,7 @@ class MouseRotateWrapper { this.reset(); } else { this._lastPos = DOM.touchPos(this.element, e.targetTouches)[0]; - this.move((({preventDefault: () => e.preventDefault()}: any): MouseEvent), this._lastPos); + this.move((({preventDefault: () => e.preventDefault()} as any as MouseEvent)), this._lastPos); } } diff --git a/src/ui/control/scale_control.js b/src/ui/control/scale_control.ts similarity index 95% rename from src/ui/control/scale_control.js rename to src/ui/control/scale_control.ts index 9bfef57cd1..4cdd7474c8 100644 --- a/src/ui/control/scale_control.js +++ b/src/ui/control/scale_control.ts @@ -1,15 +1,14 @@ -// @flow - import DOM from '../../util/dom'; import {extend, bindAll} from '../../util/util'; import type Map from '../map'; +import type {ControlPosition, IControl} from './control'; type Unit = 'imperial' | 'metric' | 'nautical'; type Options = { - maxWidth?: number, - unit?: Unit; + maxWidth?: number; + unit?: Unit; }; const defaultOptions: Options = { @@ -33,7 +32,7 @@ const defaultOptions: Options = { * * scale.setUnit('metric'); */ -class ScaleControl { +class ScaleControl implements IControl { _map: Map; _container: HTMLElement; options: Options; @@ -47,7 +46,7 @@ class ScaleControl { ], this); } - getDefaultPosition() { + getDefaultPosition(): ControlPosition { return 'bottom-left'; } @@ -68,7 +67,7 @@ class ScaleControl { onRemove() { DOM.remove(this._container); this._map.off('move', this._onMove); - this._map = (undefined: any); + this._map = undefined; } /** diff --git a/src/ui/default_locale.js b/src/ui/default_locale.ts similarity index 98% rename from src/ui/default_locale.js rename to src/ui/default_locale.ts index 92c548d450..3c29809a92 100644 --- a/src/ui/default_locale.js +++ b/src/ui/default_locale.ts @@ -1,5 +1,3 @@ -// @flow - const defaultLocale = { 'AttributionControl.ToggleAttribution': 'Toggle attribution', 'AttributionControl.MapFeedback': 'Map feedback', diff --git a/src/ui/events.js b/src/ui/events.ts similarity index 94% rename from src/ui/events.js rename to src/ui/events.ts index 60e53031d9..d1781d564a 100644 --- a/src/ui/events.js +++ b/src/ui/events.ts @@ -1,9 +1,7 @@ -// @flow - import {Event} from '../util/evented'; import DOM from '../util/dom'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import {extend} from '../util/util'; import type Map from './map'; @@ -34,16 +32,7 @@ export class MapMouseEvent extends Event { * {@link Map.event:mouseout}, * {@link Map.event:contextmenu}). */ - type: 'mousedown' - | 'mouseup' - | 'click' - | 'dblclick' - | 'mousemove' - | 'mouseover' - | 'mouseenter' - | 'mouseleave' - | 'mouseout' - | 'contextmenu'; + type: 'mousedown' | 'mouseup' | 'click' | 'dblclick' | 'mousemove' | 'mouseover' | 'mouseenter' | 'mouseleave' | 'mouseout' | 'contextmenu'; /** * The `Map` object that fired the event. @@ -93,7 +82,7 @@ export class MapMouseEvent extends Event { /** * @private */ - constructor(type: string, map: Map, originalEvent: MouseEvent, data: Object = {}) { + constructor(type: string, map: Map, originalEvent: MouseEvent, data: any = {}) { const point = DOM.mousePos(map.getCanvasContainer(), originalEvent); const lngLat = map.unproject(point); super(type, extend({point, lngLat, originalEvent}, data)); @@ -110,9 +99,7 @@ export class MapTouchEvent extends Event { /** * The event type. */ - type: 'touchstart' - | 'touchend' - | 'touchcancel'; + type: 'touchstart' | 'touchend' | 'touchcancel'; /** * The `Map` object that fired the event. @@ -174,7 +161,7 @@ export class MapTouchEvent extends Event { * @private */ constructor(type: string, map: Map, originalEvent: TouchEvent) { - const touches = type === "touchend" ? originalEvent.changedTouches : originalEvent.touches; + const touches = type === 'touchend' ? originalEvent.changedTouches : originalEvent.touches; const points = DOM.touchPos(map.getCanvasContainer(), touches); const lngLats = points.map((t) => map.unproject(t)); const point = points.reduce((prev, curr, i, arr) => { @@ -243,11 +230,9 @@ export class MapWheelEvent extends Event { * @property {Map} target The `Map` instance that triggerred the event */ export type MapBoxZoomEvent = { - type: 'boxzoomstart' - | 'boxzoomend' - | 'boxzoomcancel', - target: Map, - originalEvent: MouseEvent + type: 'boxzoomstart' | 'boxzoomend' | 'boxzoomcancel'; + target: Map; + originalEvent: MouseEvent; }; /** @@ -279,17 +264,16 @@ export type MapBoxZoomEvent = { * }); */ export type MapDataEvent = { - type: string, - dataType: string + type: string; + dataType: string; }; export type MapContextEvent = { - type: 'webglcontextlost' | 'webglcontextrestored', - originalEvent: WebGLContextEvent -} + type: 'webglcontextlost' | 'webglcontextrestored'; + originalEvent: WebGLContextEvent; +}; -export type MapEvent = - /** +export type MapEvent = /** * Fired when a pointing device (usually a mouse) is pressed within the map. * * **Note:** This event is compatible with the optional `layerId` parameter. @@ -316,9 +300,9 @@ export type MapEvent = * }); * @see [Create a draggable point](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) */ - | 'mousedown' +'mousedown' - /** +/** * Fired when a pointing device (usually a mouse) is released within the map. * * **Note:** This event is compatible with the optional `layerId` parameter. @@ -344,10 +328,9 @@ export type MapEvent = * console.log('A mouseup event has occurred on a visible portion of the poi-label layer.'); * }); * @see [Create a draggable point](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) - */ - | 'mouseup' + */ | 'mouseup' - /** +/** * Fired when a pointing device (usually a mouse) is moved within the map. * As you move the cursor across a web page containing a map, * the event will fire each time it enters the map or any child elements. @@ -377,10 +360,9 @@ export type MapEvent = * @see [Get coordinates of the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/mouse-position/) * @see [Highlight features under the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/hover-styles/) * @see [Display a popup on hover](https://maplibre.org/maplibre-gl-js-docs/example/popup-on-hover/) - */ - | 'mouseover' + */ | 'mouseover' - /** +/** * Fired when a pointing device (usually a mouse) is moved while the cursor is inside the map. * As you move the cursor across the map, the event will fire every time the cursor changes position within the map. * @@ -409,10 +391,9 @@ export type MapEvent = * @see [Get coordinates of the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/mouse-position/) * @see [Highlight features under the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/hover-styles/) * @see [Display a popup on over](https://maplibre.org/maplibre-gl-js-docs/example/popup-on-hover/) - */ - | 'mousemove' + */ | 'mousemove' - /** +/** * Fired when a pointing device (usually a mouse) is pressed and released at the same point on the map. * * **Note:** This event is compatible with the optional `layerId` parameter. @@ -439,10 +420,9 @@ export type MapEvent = * }); * @see [Measure distances](https://maplibre.org/maplibre-gl-js-docs/example/measure/) * @see [Center the map on a clicked symbol](https://maplibre.org/maplibre-gl-js-docs/example/center-on-symbol/) - */ - | 'click' + */ | 'click' - /** +/** * Fired when a pointing device (usually a mouse) is pressed and released twice at the same point on * the map in rapid succession. * @@ -468,10 +448,9 @@ export type MapEvent = * map.on('dblclick', 'poi-label', function(e) { * console.log('A dblclick event has occurred on a visible portion of the poi-label layer at ' + e.lngLat); * }); - */ - | 'dblclick' + */ | 'dblclick' - /** +/** * Fired when a pointing device (usually a mouse) enters a visible portion of a specified layer from * outside that layer or outside the map canvas. * @@ -491,10 +470,9 @@ export type MapEvent = * }); * @see [Center the map on a clicked symbol](https://maplibre.org/maplibre-gl-js-docs/example/center-on-symbol/) * @see [Display a popup on click](https://maplibre.org/maplibre-gl-js-docs/example/popup-on-click/) - */ - | 'mouseenter' + */ | 'mouseenter' - /** +/** * Fired when a pointing device (usually a mouse) leaves a visible portion of a specified layer, or leaves * the map canvas. * @@ -516,10 +494,9 @@ export type MapEvent = * }); * @see [Highlight features under the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/hover-styles/) * @see [Display a popup on click](https://maplibre.org/maplibre-gl-js-docs/example/popup-on-click/) - */ - | 'mouseleave' + */ | 'mouseleave' - /** +/** * Fired when a point device (usually a mouse) leaves the map's canvas. * * @event mouseout @@ -535,10 +512,9 @@ export type MapEvent = * map.on('mouseout', function() { * console.log('A mouseout event occurred.'); * }); - */ - | 'mouseout' + */ | 'mouseout' - /** +/** * Fired when the right button of the mouse is clicked or the context menu key is pressed within the map. * * @event contextmenu @@ -554,10 +530,9 @@ export type MapEvent = * map.on('contextmenu', function() { * console.log('A contextmenu event occurred.'); * }); - */ - | 'contextmenu' + */ | 'contextmenu' - /** +/** * Fired when a [`wheel`](https://developer.mozilla.org/en-US/docs/Web/Events/wheel) event occurs within the map. * * @event wheel @@ -572,10 +547,9 @@ export type MapEvent = * map.on('wheel', function() { * console.log('A wheel event occurred.'); * }); - */ - | 'wheel' + */ | 'wheel' - /** +/** * Fired when a [`touchstart`](https://developer.mozilla.org/en-US/docs/Web/Events/touchstart) event occurs within the map. * * @event touchstart @@ -590,10 +564,9 @@ export type MapEvent = * console.log('A touchstart event occurred.'); * }); * @see [Create a draggable point](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) - */ - | 'touchstart' + */ | 'touchstart' - /** +/** * Fired when a [`touchend`](https://developer.mozilla.org/en-US/docs/Web/Events/touchend) event occurs within the map. * * @event touchend @@ -609,10 +582,9 @@ export type MapEvent = * console.log('A touchstart event occurred.'); * }); * @see [Create a draggable point](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) - */ - | 'touchend' + */ | 'touchend' - /** +/** * Fired when a [`touchmove`](https://developer.mozilla.org/en-US/docs/Web/Events/touchmove) event occurs within the map. * * @event touchmove @@ -628,10 +600,9 @@ export type MapEvent = * console.log('A touchmove event occurred.'); * }); * @see [Create a draggable point](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) - */ - | 'touchmove' + */ | 'touchmove' - /** +/** * Fired when a [`touchcancel`](https://developer.mozilla.org/en-US/docs/Web/Events/touchcancel) event occurs within the map. * * @event touchcancel @@ -646,10 +617,9 @@ export type MapEvent = * map.on('touchcancel', function() { * console.log('A touchcancel event occurred.'); * }); - */ - | 'touchcancel' + */ | 'touchcancel' - /** +/** * Fired just before the map begins a transition from one * view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. * @@ -666,10 +636,9 @@ export type MapEvent = * map.on('movestart', function() { * console.log('A movestart` event occurred.'); * }); - */ - | 'movestart' + */ | 'movestart' - /** +/** * Fired repeatedly during an animated transition from one view to * another, as the result of either user interaction or methods such as {@link Map#flyTo}. * @@ -686,10 +655,9 @@ export type MapEvent = * console.log('A move event occurred.'); * }); * @see [Display HTML clusters with custom properties](https://maplibre.org/maplibre-gl-js-docs/example/cluster-html/) - */ - | 'move' + */ | 'move' - /** +/** * Fired just after the map completes a transition from one * view to another, as the result of either user interaction or methods such as {@link Map#jumpTo}. * @@ -706,10 +674,9 @@ export type MapEvent = * console.log('A moveend event occurred.'); * }); * @see [Display HTML clusters with custom properties](https://maplibre.org/maplibre-gl-js-docs/example/cluster-html/) - */ - | 'moveend' + */ | 'moveend' - /** +/** * Fired when a "drag to pan" interaction starts. See {@link DragPanHandler}. * * @event dragstart @@ -724,10 +691,9 @@ export type MapEvent = * map.on('dragstart', function() { * console.log('A dragstart event occurred.'); * }); - */ - | 'dragstart' + */ | 'dragstart' - /** +/** * Fired repeatedly during a "drag to pan" interaction. See {@link DragPanHandler}. * * @event drag @@ -742,10 +708,9 @@ export type MapEvent = * map.on('drag', function() { * console.log('A drag event occurred.'); * }); - */ - | 'drag' + */ | 'drag' - /** +/** * Fired when a "drag to pan" interaction ends. See {@link DragPanHandler}. * * @event dragend @@ -761,10 +726,9 @@ export type MapEvent = * console.log('A dragend event occurred.'); * }); * @see [Create a draggable marker](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-marker/) - */ - | 'dragend' + */ | 'dragend' - /** +/** * Fired just before the map begins a transition from one zoom level to another, * as the result of either user interaction or methods such as {@link Map#flyTo}. * @@ -780,10 +744,9 @@ export type MapEvent = * map.on('zoomstart', function() { * console.log('A zoomstart event occurred.'); * }); - */ - | 'zoomstart' + */ | 'zoomstart' - /** +/** * Fired repeatedly during an animated transition from one zoom level to another, * as the result of either user interaction or methods such as {@link Map#flyTo}. * @@ -799,10 +762,9 @@ export type MapEvent = * map.on('zoom', function() { * console.log('A zoom event occurred.'); * }); - */ - | 'zoom' + */ | 'zoom' - /** +/** * Fired just after the map completes a transition from one zoom level to another, * as the result of either user interaction or methods such as {@link Map#flyTo}. * @@ -818,10 +780,9 @@ export type MapEvent = * map.on('zoomend', function() { * console.log('A zoomend event occurred.'); * }); - */ - | 'zoomend' + */ | 'zoomend' - /** +/** * Fired when a "drag to rotate" interaction starts. See {@link DragRotateHandler}. * * @event rotatestart @@ -836,10 +797,9 @@ export type MapEvent = * map.on('rotatestart', function() { * console.log('A rotatestart event occurred.'); * }); - */ - | 'rotatestart' + */ | 'rotatestart' - /** +/** * Fired repeatedly during a "drag to rotate" interaction. See {@link DragRotateHandler}. * * @event rotate @@ -854,10 +814,9 @@ export type MapEvent = * map.on('rotate', function() { * console.log('A rotate event occurred.'); * }); - */ - | 'rotate' + */ | 'rotate' - /** +/** * Fired when a "drag to rotate" interaction ends. See {@link DragRotateHandler}. * * @event rotateend @@ -872,10 +831,9 @@ export type MapEvent = * map.on('rotateend', function() { * console.log('A rotateend event occurred.'); * }); - */ - | 'rotateend' + */ | 'rotateend' - /** +/** * Fired whenever the map's pitch (tilt) begins a change as * the result of either user interaction or methods such as {@link Map#flyTo} . * @@ -891,10 +849,9 @@ export type MapEvent = * map.on('pitchstart', function() { * console.log('A pitchstart event occurred.'); * }); - */ - | 'pitchstart' + */ | 'pitchstart' - /** +/** * Fired repeatedly during the map's pitch (tilt) animation between * one state and another as the result of either user interaction * or methods such as {@link Map#flyTo}. @@ -911,10 +868,9 @@ export type MapEvent = * map.on('pitch', function() { * console.log('A pitch event occurred.'); * }); - */ - | 'pitch' + */ | 'pitch' - /** +/** * Fired immediately after the map's pitch (tilt) finishes changing as * the result of either user interaction or methods such as {@link Map#flyTo}. * @@ -930,10 +886,9 @@ export type MapEvent = * map.on('pitchend', function() { * console.log('A pitchend event occurred.'); * }); - */ - | 'pitchend' + */ | 'pitchend' - /** +/** * Fired when a "box zoom" interaction starts. See {@link BoxZoomHandler}. * * @event boxzoomstart @@ -948,10 +903,9 @@ export type MapEvent = * map.on('boxzoomstart', function() { * console.log('A boxzoomstart event occurred.'); * }); - */ - | 'boxzoomstart' + */ | 'boxzoomstart' - /** +/** * Fired when a "box zoom" interaction ends. See {@link BoxZoomHandler}. * * @event boxzoomend @@ -967,10 +921,9 @@ export type MapEvent = * map.on('boxzoomend', function() { * console.log('A boxzoomend event occurred.'); * }); - */ - | 'boxzoomend' + */ | 'boxzoomend' - /** +/** * Fired when the user cancels a "box zoom" interaction, or when the bounding box does not meet the minimum size threshold. * See {@link BoxZoomHandler}. * @@ -986,10 +939,9 @@ export type MapEvent = * map.on('boxzoomcancel', function() { * console.log('A boxzoomcancel event occurred.'); * }); - */ - | 'boxzoomcancel' + */ | 'boxzoomcancel' - /** +/** * Fired immediately after the map has been resized. * * @event resize @@ -1003,10 +955,9 @@ export type MapEvent = * map.on('resize', function() { * console.log('A resize event occurred.'); * }); - */ - | 'resize' + */ | 'resize' - /** +/** * Fired when the WebGL context is lost. * * @event webglcontextlost @@ -1020,10 +971,9 @@ export type MapEvent = * map.on('webglcontextlost', function() { * console.log('A webglcontextlost event occurred.'); * }); - */ - | 'webglcontextlost' + */ | 'webglcontextlost' - /** +/** * Fired when the WebGL context is restored. * * @event webglcontextrestored @@ -1037,10 +987,9 @@ export type MapEvent = * map.on('webglcontextrestored', function() { * console.log('A webglcontextrestored event occurred.'); * }); - */ - | 'webglcontextrestored' + */ | 'webglcontextrestored' - /** +/** * Fired immediately after all necessary resources have been downloaded * and the first visually complete rendering of the map has occurred. * @@ -1059,10 +1008,9 @@ export type MapEvent = * @see [Draw GeoJSON points](https://maplibre.org/maplibre-gl-js-docs/example/geojson-markers/) * @see [Add live realtime data](https://maplibre.org/maplibre-gl-js-docs/example/live-geojson/) * @see [Animate a point](https://maplibre.org/maplibre-gl-js-docs/example/animate-point-along-line/) - */ - | 'load' + */ | 'load' - /** +/** * Fired whenever the map is drawn to the screen, as the result of * * - a change to the map's position, zoom, pitch, or bearing @@ -1081,10 +1029,9 @@ export type MapEvent = * map.on('render', function() { * console.log('A render event occurred.'); * }); - */ - | 'render' + */ | 'render' - /** +/** * Fired after the last frame rendered before the map enters an * "idle" state: * @@ -1103,10 +1050,9 @@ export type MapEvent = * map.on('idle', function() { * console.log('A idle event occurred.'); * }); - */ - | 'idle' + */ | 'idle' - /** +/** * Fired immediately after the map has been removed with {@link Map.event:remove}. * * @event remove @@ -1120,10 +1066,9 @@ export type MapEvent = * map.on('remove', function() { * console.log('A remove event occurred.'); * }); - */ - | 'remove' + */ | 'remove' - /** +/** * Fired when an error occurs. This is GL JS's primary error reporting * mechanism. We use an event instead of `throw` to better accommodate * asyncronous operations. If no listeners are bound to the `error` event, the @@ -1141,10 +1086,9 @@ export type MapEvent = * map.on('error', function() { * console.log('A error event occurred.'); * }); - */ - | 'error' + */ | 'error' - /** +/** * Fired when any map data loads or changes. See {@link MapDataEvent} * for more information. * @@ -1161,10 +1105,9 @@ export type MapEvent = * console.log('A data event occurred.'); * }); * @see [Display HTML clusters with custom properties](https://maplibre.org/maplibre-gl-js-docs/example/cluster-html/) - */ - | 'data' + */ | 'data' - /** +/** * Fired when the map's style loads or changes. See * {@link MapDataEvent} for more information. * @@ -1180,10 +1123,9 @@ export type MapEvent = * map.on('styledata', function() { * console.log('A styledata event occurred.'); * }); - */ - | 'styledata' + */ | 'styledata' - /** +/** * Fired when one of the map's sources loads or changes, including if a tile belonging * to a source loads or changes. See {@link MapDataEvent} for more information. * @@ -1199,10 +1141,9 @@ export type MapEvent = * map.on('sourcedata', function() { * console.log('A sourcedata event occurred.'); * }); - */ - | 'sourcedata' + */ | 'sourcedata' - /** +/** * Fired when any map data (style, source, tile, etc) begins loading or * changing asyncronously. All `dataloading` events are followed by a `data` * or `error` event. See {@link MapDataEvent} for more information. @@ -1220,10 +1161,9 @@ export type MapEvent = * map.on('dataloading', function() { * console.log('A dataloading event occurred.'); * }); - */ - | 'dataloading' + */ | 'dataloading' - /** +/** * Fired when the map's style begins loading or changing asyncronously. * All `styledataloading` events are followed by a `styledata` * or `error` event. See {@link MapDataEvent} for more information. @@ -1241,10 +1181,9 @@ export type MapEvent = * map.on('styledataloading', function() { * console.log('A styledataloading event occurred.'); * }); - */ - | 'styledataloading' + */ | 'styledataloading' - /** +/** * Fired when one of the map's sources begins loading or changing asyncronously. * All `sourcedataloading` events are followed by a `sourcedata` or `error` event. * See {@link MapDataEvent} for more information. @@ -1262,10 +1201,9 @@ export type MapEvent = * map.on('sourcedataloading', function() { * console.log('A sourcedataloading event occurred.'); * }); - */ - | 'sourcedataloading' + */ | 'sourcedataloading' - /** +/** * Fired when an icon or pattern needed by the style is missing. The missing image can * be added with {@link Map#addImage} within this event listener callback to prevent the image from * being skipped. This event can be used to dynamically generate icons and patterns. @@ -1283,13 +1221,11 @@ export type MapEvent = * console.log('A styleimagemissing event occurred.'); * }); * @see [Generate and add a missing icon to the map](https://mapbox.com/mapbox-gl-js/example/add-image-missing-generated/) - */ - | 'styleimagemissing' + */ | 'styleimagemissing' - /** +/** * @event style.load * @memberof Map * @instance * @private - */ - | 'style.load'; + */ | 'style.load'; diff --git a/src/ui/handler/box_zoom.js b/src/ui/handler/box_zoom.ts similarity index 96% rename from src/ui/handler/box_zoom.js rename to src/ui/handler/box_zoom.ts index a7f1357c01..2de9fa1328 100644 --- a/src/ui/handler/box_zoom.js +++ b/src/ui/handler/box_zoom.ts @@ -1,10 +1,9 @@ -// @flow - import DOM from '../../util/dom'; import {Event} from '../../util/evented'; import type Map from '../map'; +import type Point from '../../util/point'; /** * The `BoxZoomHandler` allows the user to zoom the map to fit within a bounding box. @@ -25,7 +24,7 @@ class BoxZoomHandler { * @private */ constructor(map: Map, options: { - clickTolerance: number + clickTolerance: number; }) { this._map = map; this._el = map.getCanvasContainer(); @@ -149,7 +148,7 @@ class BoxZoomHandler { if (this._box) { DOM.remove(this._box); - this._box = (null: any); + this._box = null; } DOM.enableDrag(); @@ -158,7 +157,7 @@ class BoxZoomHandler { delete this._lastPos; } - _fireEvent(type: string, e: *) { + _fireEvent(type: string, e: any) { return this._map.fire(new Event(type, {originalEvent: e})); } } diff --git a/src/ui/handler/click_zoom.js b/src/ui/handler/click_zoom.ts similarity index 93% rename from src/ui/handler/click_zoom.js rename to src/ui/handler/click_zoom.ts index 822de90939..563a23bba5 100644 --- a/src/ui/handler/click_zoom.js +++ b/src/ui/handler/click_zoom.ts @@ -1,6 +1,4 @@ -// @flow - -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type Map from '../map'; export default class ClickZoomHandler { diff --git a/src/ui/handler/handler_util.js b/src/ui/handler/handler_util.ts similarity index 88% rename from src/ui/handler/handler_util.js rename to src/ui/handler/handler_util.ts index 493f93d626..cb23cbf67b 100644 --- a/src/ui/handler/handler_util.js +++ b/src/ui/handler/handler_util.ts @@ -1,6 +1,5 @@ -// @flow - import assert from 'assert'; +import Point from '../../util/point'; export function indexTouches(touches: Array, points: Array) { assert(touches.length === points.length); diff --git a/src/ui/handler/keyboard.js b/src/ui/handler/keyboard.ts similarity index 99% rename from src/ui/handler/keyboard.js rename to src/ui/handler/keyboard.ts index faf22a172d..d574d6ecbb 100644 --- a/src/ui/handler/keyboard.js +++ b/src/ui/handler/keyboard.ts @@ -1,5 +1,3 @@ -// @flow - import type Map from '../map'; const defaultOptions = { diff --git a/src/ui/handler/map_event.js b/src/ui/handler/map_event.ts similarity index 97% rename from src/ui/handler/map_event.js rename to src/ui/handler/map_event.ts index 31b46e5ba2..5faf1e3456 100644 --- a/src/ui/handler/map_event.js +++ b/src/ui/handler/map_event.ts @@ -1,15 +1,15 @@ -// @flow - import {MapMouseEvent, MapTouchEvent, MapWheelEvent} from '../events'; import type Map from '../map'; - +import type Point from '../../util/point'; export class MapEventHandler { _mousedownPos: Point; _clickTolerance: number; _map: Map; - constructor(map: Map, options: { clickTolerance: number }) { + constructor(map: Map, options: { + clickTolerance: number; + }) { this._map = map; this._clickTolerance = options.clickTolerance; } diff --git a/src/ui/handler/mouse.js b/src/ui/handler/mouse.ts similarity index 97% rename from src/ui/handler/mouse.js rename to src/ui/handler/mouse.ts index 3cf5c53281..0562096fba 100644 --- a/src/ui/handler/mouse.js +++ b/src/ui/handler/mouse.ts @@ -1,7 +1,5 @@ -// @flow - import DOM from '../../util/dom'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; const LEFT_BUTTON = 0; const RIGHT_BUTTON = 2; @@ -26,7 +24,9 @@ class MouseHandler { _moved: boolean; _clickTolerance: number; - constructor(options: { clickTolerance: number }) { + constructor(options: { + clickTolerance: number; + }) { this.reset(); this._clickTolerance = options.clickTolerance || 1; } diff --git a/src/ui/handler/scroll_zoom.js b/src/ui/handler/scroll_zoom.ts similarity index 93% rename from src/ui/handler/scroll_zoom.js rename to src/ui/handler/scroll_zoom.ts index 1ae4553487..37cdc93ffe 100644 --- a/src/ui/handler/scroll_zoom.js +++ b/src/ui/handler/scroll_zoom.ts @@ -1,17 +1,14 @@ -// @flow - import assert from 'assert'; import DOM from '../../util/dom'; import {ease as _ease, bindAll, bezier} from '../../util/util'; import browser from '../../util/browser'; -import window from '../../util/window'; import {number as interpolate} from '../../style-spec/util/interpolate'; import LngLat from '../../geo/lng_lat'; import type Map from '../map'; import type HandlerManager from '../handler_manager'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; // deltaY value for mouse scroll wheel identification const wheelZoomDelta = 4.000244140625; @@ -35,23 +32,27 @@ class ScrollZoomHandler { _active: boolean; _zooming: boolean; _aroundCenter: boolean; - _around: Point; + _around: LngLat; _aroundPoint: Point; _type: 'wheel' | 'trackpad' | null; _lastValue: number; - _timeout: ?TimeoutID; // used for delayed-handling of a single wheel movement - _finishTimeout: ?TimeoutID; // used to delay final '{move,zoom}end' events + _timeout: ReturnType | undefined | null; // used for delayed-handling of a single wheel movement + _finishTimeout: ReturnType | undefined | null; // used to delay final '{move,zoom}end' events _lastWheelEvent: any; _lastWheelEventTime: number; - _startZoom: ?number; - _targetZoom: ?number; + _startZoom: number | undefined | null; + _targetZoom: number | undefined | null; _delta: number; - _easing: ?((number) => number); - _prevEase: ?{start: number, duration: number, easing: (_: number) => number}; - - _frameId: ?boolean; + _easing: ((a: number) => number) | undefined | null; + _prevEase: { + start: number; + duration: number; + easing: (_: number) => number; + } | undefined | null; + + _frameId: boolean | undefined | null; _handler: HandlerManager; _defaultZoomRate: number; @@ -128,7 +129,7 @@ class ScrollZoomHandler { * @example * map.scrollZoom.enable({ around: 'center' }) */ - enable(options: any) { + enable(options?: any) { if (this.isEnabled()) return; this._enabled = true; this._aroundCenter = options && options.around === 'center'; @@ -147,9 +148,7 @@ class ScrollZoomHandler { wheel(e: WheelEvent) { if (!this.isEnabled()) return; - - // Remove `any` cast when https://github.com/facebook/flow/issues/4879 is fixed. - let value = e.deltaMode === (window.WheelEvent: any).DOM_DELTA_LINE ? e.deltaY * 40 : e.deltaY; + let value = e.deltaMode === WheelEvent.DOM_DELTA_LINE ? e.deltaY * 40 : e.deltaY; const now = browser.now(), timeDelta = now - (this._lastWheelEventTime || 0); diff --git a/src/ui/handler/shim/dblclick_zoom.js b/src/ui/handler/shim/dblclick_zoom.ts similarity index 99% rename from src/ui/handler/shim/dblclick_zoom.js rename to src/ui/handler/shim/dblclick_zoom.ts index b63cfbada6..a3916f1774 100644 --- a/src/ui/handler/shim/dblclick_zoom.js +++ b/src/ui/handler/shim/dblclick_zoom.ts @@ -1,5 +1,3 @@ -// @flow - import type ClickZoomHandler from '../click_zoom'; import type TapZoomHandler from './../tap_zoom'; diff --git a/src/ui/handler/shim/drag_pan.js b/src/ui/handler/shim/drag_pan.ts similarity index 94% rename from src/ui/handler/shim/drag_pan.js rename to src/ui/handler/shim/drag_pan.ts index 4cfbf85f03..8ca237420d 100644 --- a/src/ui/handler/shim/drag_pan.js +++ b/src/ui/handler/shim/drag_pan.ts @@ -1,13 +1,11 @@ -// @flow - import type {MousePanHandler} from '../mouse'; import type TouchPanHandler from './../touch_pan'; export type DragPanOptions = { - linearity?: number; - easing?: (t: number) => number; - deceleration?: number; - maxSpeed?: number; + linearity?: number; + easing?: (t: number) => number; + deceleration?: number; + maxSpeed?: number; }; /** @@ -19,7 +17,7 @@ export default class DragPanHandler { _el: HTMLElement; _mousePan: MousePanHandler; _touchPan: TouchPanHandler; - _inertiaOptions: DragPanOptions + _inertiaOptions: DragPanOptions; /** * @private diff --git a/src/ui/handler/shim/drag_rotate.js b/src/ui/handler/shim/drag_rotate.ts similarity index 93% rename from src/ui/handler/shim/drag_rotate.js rename to src/ui/handler/shim/drag_rotate.ts index 22141fa511..525fa363eb 100644 --- a/src/ui/handler/shim/drag_rotate.js +++ b/src/ui/handler/shim/drag_rotate.ts @@ -1,5 +1,3 @@ -// @flow - import type {MouseRotateHandler, MousePitchHandler} from '../mouse'; /** @@ -19,7 +17,9 @@ export default class DragRotateHandler { * @param {bool} [options.pitchWithRotate=true] Control the map pitch in addition to the bearing * @private */ - constructor(options: {pitchWithRotate: boolean}, mouseRotate: MouseRotateHandler, mousePitch: MousePitchHandler) { + constructor(options: { + pitchWithRotate: boolean; + }, mouseRotate: MouseRotateHandler, mousePitch: MousePitchHandler) { this._pitchWithRotate = options.pitchWithRotate; this._mouseRotate = mouseRotate; this._mousePitch = mousePitch; diff --git a/src/ui/handler/shim/touch_zoom_rotate.js b/src/ui/handler/shim/touch_zoom_rotate.ts similarity index 98% rename from src/ui/handler/shim/touch_zoom_rotate.js rename to src/ui/handler/shim/touch_zoom_rotate.ts index 61b6e47f79..7af8401597 100644 --- a/src/ui/handler/shim/touch_zoom_rotate.js +++ b/src/ui/handler/shim/touch_zoom_rotate.ts @@ -1,5 +1,3 @@ -// @flow - import type {TouchZoomHandler, TouchRotateHandler} from '../touch_zoom_rotate'; import type TapDragZoomHandler from '../tap_drag_zoom'; @@ -42,7 +40,9 @@ export default class TouchZoomRotateHandler { * @example * map.touchZoomRotate.enable({ around: 'center' }); */ - enable(options: ?{around?: 'center'}) { + enable(options?: { + around?: 'center'; + } | null) { this._touchZoom.enable(options); if (!this._rotationDisabled) this._touchRotate.enable(options); this._tapDragZoom.enable(); diff --git a/src/ui/handler/tap_drag_zoom.js b/src/ui/handler/tap_drag_zoom.ts similarity index 97% rename from src/ui/handler/tap_drag_zoom.js rename to src/ui/handler/tap_drag_zoom.ts index d8bf435a2c..1367fa7242 100644 --- a/src/ui/handler/tap_drag_zoom.js +++ b/src/ui/handler/tap_drag_zoom.ts @@ -1,7 +1,5 @@ -// @flow - import {TapRecognizer, MAX_TAP_INTERVAL} from './tap_recognizer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; export default class TapDragZoomHandler { diff --git a/src/ui/handler/tap_recognizer.js b/src/ui/handler/tap_recognizer.ts similarity index 93% rename from src/ui/handler/tap_recognizer.js rename to src/ui/handler/tap_recognizer.ts index 01e9dee629..1a5403e681 100644 --- a/src/ui/handler/tap_recognizer.js +++ b/src/ui/handler/tap_recognizer.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../../util/point'; import {indexTouches} from './handler_util'; function getCentroid(points: Array) { @@ -21,9 +19,13 @@ export class SingleTapRecognizer { centroid: Point; startTime: number; aborted: boolean; - touches: { [number | string]: Point }; + touches: { + [k in number | string]: Point; + }; - constructor(options: { numTouches: number }) { + constructor(options: { + numTouches: number; + }) { this.reset(); this.numTouches = options.numTouches; } @@ -89,7 +91,10 @@ export class TapRecognizer { lastTap: Point; count: number; - constructor(options: { numTaps: number, numTouches: number }) { + constructor(options: { + numTaps: number; + numTouches: number; + }) { this.singleTap = new SingleTapRecognizer(options); this.numTaps = options.numTaps; this.reset(); diff --git a/src/ui/handler/tap_zoom.js b/src/ui/handler/tap_zoom.ts similarity index 97% rename from src/ui/handler/tap_zoom.js rename to src/ui/handler/tap_zoom.ts index 1aee59d1e8..ab56b3ead6 100644 --- a/src/ui/handler/tap_zoom.js +++ b/src/ui/handler/tap_zoom.ts @@ -1,7 +1,5 @@ -// @flow - import {TapRecognizer} from './tap_recognizer'; -import type Point from '@mapbox/point-geometry'; +import type Point from '../../util/point'; import type Map from '../map'; export default class TapZoomHandler { diff --git a/src/ui/handler/touch_pan.js b/src/ui/handler/touch_pan.ts similarity index 93% rename from src/ui/handler/touch_pan.js rename to src/ui/handler/touch_pan.ts index 6a879efb82..f6226d6666 100644 --- a/src/ui/handler/touch_pan.js +++ b/src/ui/handler/touch_pan.ts @@ -1,18 +1,20 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../../util/point'; import {indexTouches} from './handler_util'; export default class TouchPanHandler { _enabled: boolean; _active: boolean; - _touches: { [string | number]: Point }; + _touches: { + [k in string | number]: Point; + }; _minTouches: number; _clickTolerance: number; _sum: Point; - constructor(options: { clickTolerance: number }) { + constructor(options: { + clickTolerance: number; + }) { this._minTouches = 1; this._clickTolerance = options.clickTolerance || 1; this.reset(); diff --git a/src/ui/handler/touch_zoom_rotate.js b/src/ui/handler/touch_zoom_rotate.ts similarity index 98% rename from src/ui/handler/touch_zoom_rotate.js rename to src/ui/handler/touch_zoom_rotate.ts index 8e7b910c20..5d6b836625 100644 --- a/src/ui/handler/touch_zoom_rotate.js +++ b/src/ui/handler/touch_zoom_rotate.ts @@ -1,6 +1,4 @@ -// @flow - -import Point from '@mapbox/point-geometry'; +import Point from '../../util/point'; import DOM from '../../util/dom'; class TwoTouchHandler { @@ -71,7 +69,9 @@ class TwoTouchHandler { this.reset(); } - enable(options: ?{around?: 'center'}) { + enable(options?: { + around?: 'center'; + } | null) { this._enabled = true; this._aroundCenter = !!options && options.around === 'center'; } diff --git a/src/ui/handler_inertia.js b/src/ui/handler_inertia.ts similarity index 94% rename from src/ui/handler_inertia.js rename to src/ui/handler_inertia.ts index 7c3fc13dfc..f64fccf3af 100644 --- a/src/ui/handler_inertia.js +++ b/src/ui/handler_inertia.ts @@ -1,9 +1,7 @@ -// @flow - import browser from '../util/browser'; import type Map from './map'; import {bezier, clamp, extend} from '../util/util'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import type {DragPanOptions} from './handler/shim/drag_pan'; const defaultInertiaOptions = { @@ -32,17 +30,20 @@ const defaultPitchInertiaOptions = extend({ }, defaultInertiaOptions); export type InertiaOptions = { - linearity: number; - easing: (t: number) => number; - deceleration: number; - maxSpeed: number; + linearity: number; + easing: (t: number) => number; + deceleration: number; + maxSpeed: number; }; export type InputEvent = MouseEvent | TouchEvent | KeyboardEvent | WheelEvent; export default class HandlerInertia { _map: Map; - _inertiaBuffer: Array<{ time: number, settings: Object }>; + _inertiaBuffer: Array<{ + time: number; + settings: any; + }>; constructor(map: Map) { this._map = map; @@ -94,7 +95,7 @@ export default class HandlerInertia { const lastEntry = this._inertiaBuffer[this._inertiaBuffer.length - 1]; const duration = (lastEntry.time - this._inertiaBuffer[0].time); - const easeOptions = {}; + const easeOptions = {} as any; if (deltas.pan.mag()) { const result = calculateEasing(deltas.pan.mag(), duration, extend({}, defaultPanInertiaOptions, panInertiaOptions || {})); diff --git a/src/ui/handler_manager.js b/src/ui/handler_manager.ts similarity index 79% rename from src/ui/handler_manager.js rename to src/ui/handler_manager.ts index 56d538443c..b41b3effe4 100644 --- a/src/ui/handler_manager.js +++ b/src/ui/handler_manager.ts @@ -1,8 +1,6 @@ -// @flow - import {Event} from '../util/evented'; import DOM from '../util/dom'; -import type Map from './map'; +import Map, {CompleteMapOptions} from './map'; import HandlerInertia from './handler_inertia'; import {MapEventHandler, BlockableMapEventHandler} from './handler/map_event'; import BoxZoomHandler from './handler/box_zoom'; @@ -19,8 +17,7 @@ import DragPanHandler from './handler/shim/drag_pan'; import DragRotateHandler from './handler/shim/drag_rotate'; import TouchZoomRotateHandler from './handler/shim/touch_zoom_rotate'; import {bindAll, extend} from '../util/util'; -import window from '../util/window'; -import Point from '@mapbox/point-geometry'; +import Point from '../util/point'; import assert from 'assert'; export type InputEvent = MouseEvent | TouchEvent | KeyboardEvent | WheelEvent; @@ -39,54 +36,50 @@ class RenderFrameEvent extends Event { // For example, if there is a mousedown and mousemove, the mousePan handler // would return a `panDelta` on the mousemove. export interface Handler { - enable(): void; - disable(): void; - isEnabled(): boolean; - isActive(): boolean; - - // `reset` can be called by the manager at any time and must reset everything to it's original state - reset(): void; - - // Handlers can optionally implement these methods. - // They are called with dom events whenever those dom evens are received. - +touchstart?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; - +touchmove?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; - +touchend?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; - +touchcancel?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; - +mousedown?: (e: MouseEvent, point: Point) => HandlerResult | void; - +mousemove?: (e: MouseEvent, point: Point) => HandlerResult | void; - +mouseup?: (e: MouseEvent, point: Point) => HandlerResult | void; - +dblclick?: (e: MouseEvent, point: Point) => HandlerResult | void; - +wheel?: (e: WheelEvent, point: Point) => HandlerResult | void; - +keydown?: (e: KeyboardEvent) => HandlerResult | void; - +keyup?: (e: KeyboardEvent) => HandlerResult | void; - - // `renderFrame` is the only non-dom event. It is called during render - // frames and can be used to smooth camera changes (see scroll handler). - +renderFrame?: () => HandlerResult | void; + enable(): void; + disable(): void; + isEnabled(): boolean; + isActive(): boolean; + // `reset` can be called by the manager at any time and must reset everything to it's original state + reset(): void; + // Handlers can optionally implement these methods. + // They are called with dom events whenever those dom evens are received. + readonly touchstart?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; + readonly touchmove?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; + readonly touchend?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; + readonly touchcancel?: (e: TouchEvent, points: Array, mapTouches: Array) => HandlerResult | void; + readonly mousedown?: (e: MouseEvent, point: Point) => HandlerResult | void; + readonly mousemove?: (e: MouseEvent, point: Point) => HandlerResult | void; + readonly mouseup?: (e: MouseEvent, point: Point) => HandlerResult | void; + readonly dblclick?: (e: MouseEvent, point: Point) => HandlerResult | void; + readonly wheel?: (e: WheelEvent, point: Point) => HandlerResult | void; + readonly keydown?: (e: KeyboardEvent) => HandlerResult | void; + readonly keyup?: (e: KeyboardEvent) => HandlerResult | void; + // `renderFrame` is the only non-dom event. It is called during render + // frames and can be used to smooth camera changes (see scroll handler). + readonly renderFrame?: () => HandlerResult | void; } // All handler methods that are called with events can optionally return a `HandlerResult`. -export type HandlerResult = {| - panDelta?: Point, - zoomDelta?: number, - bearingDelta?: number, - pitchDelta?: number, - // the point to not move when changing the camera - around?: Point | null, - // same as above, except for pinch actions, which are given higher priority - pinchAround?: Point | null, - // A method that can fire a one-off easing by directly changing the map's camera. - cameraAnimation?: (map: Map) => any; - - // The last three properties are needed by only one handler: scrollzoom. - // The DOM event to be used as the `originalEvent` on any camera change events. - originalEvent?: any, - // Makes the manager trigger a frame, allowing the handler to return multiple results over time (see scrollzoom). - needsRenderFrame?: boolean, - // The camera changes won't get recorded for inertial zooming. - noInertia?: boolean -|}; +export type HandlerResult = { + panDelta?: Point; + zoomDelta?: number; + bearingDelta?: number; + pitchDelta?: number; + // the point to not move when changing the camera + around?: Point | null; + // same as above, except for pinch actions, which are given higher priority + pinchAround?: Point | null; + // A method that can fire a one-off easing by directly changing the map's camera. + cameraAnimation?: (map: Map) => any; + // The last three properties are needed by only one handler: scrollzoom. + // The DOM event to be used as the `originalEvent` on any camera change events. + originalEvent?: any; + // Makes the manager trigger a frame, allowing the handler to return multiple results over time (see scrollzoom). + needsRenderFrame?: boolean; + // The camera changes won't get recorded for inertial zooming. + noInertia?: boolean; +}; function hasChange(result: HandlerResult) { return (result.panDelta && result.panDelta.mag()) || result.zoomDelta || result.bearingDelta || result.pitchDelta; @@ -95,18 +88,25 @@ function hasChange(result: HandlerResult) { class HandlerManager { _map: Map; _el: HTMLElement; - _handlers: Array<{ handlerName: string, handler: Handler, allowed: any }>; - _eventsInProgress: Object; + _handlers: Array<{ + handlerName: string; + handler: Handler; + allowed: any; + }>; + _eventsInProgress: any; _frameId: number; _inertia: HandlerInertia; _bearingSnap: number; - _handlersById: { [string]: Handler }; + _handlersById: {[x: string]: Handler}; _updatingCamera: boolean; - _changes: Array<[HandlerResult, Object, any]>; - _previousActiveHandlers: { [string]: Handler }; - _listeners: Array<[HTMLElement, string, void | {passive?: boolean, capture?: boolean}]>; - - constructor(map: Map, options: { interactive: boolean, pitchWithRotate: boolean, clickTolerance: number, bearingSnap: number}) { + _changes: Array<[HandlerResult, any, any]>; + _previousActiveHandlers: {[x: string]: Handler}; + _listeners: Array<[Window | Document | HTMLElement, string, { + passive?: boolean; + capture?: boolean; + } | undefined]>; + + constructor(map: Map, options: CompleteMapOptions) { this._map = map; this._el = this._map.getCanvasContainer(); this._handlers = []; @@ -148,8 +148,8 @@ class HandlerManager { // window-level event listeners give us the best shot at capturing events that // fall outside the map canvas element. Use `{capture: true}` for the move event // to prevent map move events from being fired during a drag. - [window.document, 'mousemove', {capture: true}], - [window.document, 'mouseup', undefined], + [document, 'mousemove', {capture: true}], + [document, 'mouseup', undefined], [el, 'mouseover', undefined], [el, 'mouseout', undefined], @@ -166,17 +166,17 @@ class HandlerManager { ]; for (const [target, type, listenerOptions] of this._listeners) { - DOM.addEventListener(target, type, target === window.document ? this.handleWindowEvent : this.handleEvent, listenerOptions); + DOM.addEventListener(target, type, target === document ? this.handleWindowEvent : this.handleEvent, listenerOptions); } } destroy() { for (const [target, type, listenerOptions] of this._listeners) { - DOM.removeEventListener(target, type, target === window.document ? this.handleWindowEvent : this.handleEvent, listenerOptions); + DOM.removeEventListener(target, type, target === document ? this.handleWindowEvent : this.handleEvent, listenerOptions); } } - _addDefaultHandlers(options: { interactive: boolean, pitchWithRotate: boolean, clickTolerance: number }) { + _addDefaultHandlers(options: CompleteMapOptions) { const map = this._map; const el = map.getCanvasContainer(); this._add('mapEvent', new MapEventHandler(map, options)); @@ -223,8 +223,8 @@ class HandlerManager { this._add('blockableMapEvent', new BlockableMapEventHandler(map)); for (const name of ['boxZoom', 'doubleClickZoom', 'tapDragZoom', 'touchPitch', 'dragRotate', 'dragPan', 'touchZoomRotate', 'scrollZoom', 'keyboard']) { - if (options.interactive && (options: any)[name]) { - (map: any)[name].enable((options: any)[name]); + if (options.interactive && options[name]) { + map[name].enable(options[name]); } } } @@ -264,7 +264,7 @@ class HandlerManager { return Boolean(isMoving(this._eventsInProgress)) || this.isZooming(); } - _blockedByActive(activeHandlers: { [string]: Handler }, allowed: Array, myName: string) { + _blockedByActive(activeHandlers: {[x: string]: Handler}, allowed: Array, myName: string) { for (const name in activeHandlers) { if (name === myName) continue; if (!allowed || allowed.indexOf(name) < 0) { @@ -281,12 +281,12 @@ class HandlerManager { _getMapTouches(touches: TouchList) { const mapTouches = []; for (const t of touches) { - const target = ((t.target: any): Node); + const target = (t.target as any as Node); if (this._el.contains(target)) { mapTouches.push(t); } } - return ((mapTouches: any): TouchList); + return mapTouches as any as TouchList; } handleEvent(e: InputEvent | RenderFrameEvent, eventName?: string) { @@ -299,7 +299,7 @@ class HandlerManager { this._updatingCamera = true; assert(e.timeStamp !== undefined); - const inputEvent = e.type === 'renderFrame' ? undefined : ((e: any): InputEvent); + const inputEvent = e.type === 'renderFrame' ? undefined : (e as any as InputEvent); /* * We don't call e.preventDefault() for any events by default. @@ -309,20 +309,21 @@ class HandlerManager { const mergedHandlerResult: HandlerResult = {needsRenderFrame: false}; const eventsInProgress = {}; const activeHandlers = {}; + const eventTouches = (e as any as TouchEvent).touches; - const mapTouches = e.touches ? this._getMapTouches(((e: any): TouchEvent).touches) : undefined; - const points = mapTouches ? DOM.touchPos(this._el, mapTouches) : DOM.mousePos(this._el, ((e: any): MouseEvent)); + const mapTouches = eventTouches ? this._getMapTouches(eventTouches) : undefined; + const points = mapTouches ? DOM.touchPos(this._el, mapTouches) : DOM.mousePos(this._el, ((e as any as MouseEvent))); for (const {handlerName, handler, allowed} of this._handlers) { if (!handler.isEnabled()) continue; - let data: HandlerResult | void; + let data: HandlerResult; if (this._blockedByActive(activeHandlers, allowed, handlerName)) { handler.reset(); } else { - if ((handler: any)[eventName || e.type]) { - data = (handler: any)[eventName || e.type](e, points, mapTouches); + if ((handler as any)[eventName || e.type]) { + data = (handler as any)[eventName || e.type](e, points, mapTouches); this.mergeHandlerResult(mergedHandlerResult, eventsInProgress, data, handlerName, inputEvent); if (data && data.needsRenderFrame) { this._triggerRenderFrame(); @@ -363,7 +364,7 @@ class HandlerManager { } } - mergeHandlerResult(mergedHandlerResult: HandlerResult, eventsInProgress: Object, handlerResult: HandlerResult, name: string, e?: InputEvent) { + mergeHandlerResult(mergedHandlerResult: HandlerResult, eventsInProgress: any, handlerResult: HandlerResult, name: string, e?: InputEvent) { if (!handlerResult) return; extend(mergedHandlerResult, handlerResult); @@ -387,7 +388,7 @@ class HandlerManager { } _applyChanges() { - const combined = {}; + const combined: {[k: string]: any} = {}; const combinedEventsInProgress = {}; const combinedDeactivatedHandlers = {}; @@ -409,7 +410,7 @@ class HandlerManager { this._changes = []; } - _updateMapTransform(combinedResult: any, combinedEventsInProgress: Object, deactivatedHandlers: Object) { + _updateMapTransform(combinedResult: any, combinedEventsInProgress: any, deactivatedHandlers: any) { const map = this._map; const tr = map.transform; @@ -440,7 +441,7 @@ class HandlerManager { } - _fireEvents(newEventsInProgress: { [string]: Object }, deactivatedHandlers: Object, allowEndAnimation: boolean) { + _fireEvents(newEventsInProgress: {[x: string]: any}, deactivatedHandlers: any, allowEndAnimation: boolean) { const wasMoving = isMoving(this._eventsInProgress); const nowMoving = isMoving(newEventsInProgress); @@ -512,7 +513,7 @@ class HandlerManager { } - _fireEvent(type: string, e: *) { + _fireEvent(type: string, e: any) { this._map.fire(new Event(type, e ? {originalEvent: e} : {})); } diff --git a/src/ui/hash.js b/src/ui/hash.ts similarity index 93% rename from src/ui/hash.js rename to src/ui/hash.ts index 82d98153b5..ce6784e290 100644 --- a/src/ui/hash.js +++ b/src/ui/hash.ts @@ -1,7 +1,4 @@ -// @flow - import {bindAll} from '../util/util'; -import window from '../util/window'; import throttle from '../util/throttle'; import type Map from './map'; @@ -14,10 +11,10 @@ import type Map from './map'; */ class Hash { _map: Map; - _updateHash: () => ?TimeoutID; - _hashName: ?string; + _updateHash: () => ReturnType | undefined | null; + _hashName: string | undefined | null; - constructor(hashName: ?string) { + constructor(hashName?: string | null) { this._hashName = hashName && encodeURIComponent(hashName); bindAll([ '_getCurrentHash', @@ -37,7 +34,7 @@ class Hash { */ addTo(map: Map) { this._map = map; - window.addEventListener('hashchange', this._onHashChange, false); + addEventListener('hashchange', this._onHashChange, false); this._map.on('moveend', this._updateHash); return this; } @@ -48,7 +45,7 @@ class Hash { * @returns {Popup} `this` */ remove() { - window.removeEventListener('hashchange', this._onHashChange, false); + removeEventListener('hashchange', this._onHashChange, false); this._map.off('moveend', this._updateHash); clearTimeout(this._updateHash()); diff --git a/src/ui/map.js b/src/ui/map.ts similarity index 93% rename from src/ui/map.js rename to src/ui/map.ts index 70a056176e..4377ae357c 100755 --- a/src/ui/map.js +++ b/src/ui/map.ts @@ -1,10 +1,5 @@ -// @flow - -import {version} from '../../package.json'; import {extend, bindAll, warnOnce, uniqueId} from '../util/util'; import browser from '../util/browser'; -import window from '../util/window'; -const {HTMLImageElement, HTMLElement, ImageBitmap} = window; import DOM from '../util/dom'; import {getImage, getJSON, ResourceType} from '../util/ajax'; import {RequestManager} from '../util/mapbox'; @@ -17,12 +12,12 @@ import HandlerManager from './handler_manager'; import Camera from './camera'; import LngLat from '../geo/lng_lat'; import LngLatBounds from '../geo/lng_lat_bounds'; -import Point from '@mapbox/point-geometry'; +import Point, {PointLike} from '../util/point'; import AttributionControl from './control/attribution_control'; import LogoControl from './control/logo_control'; import isSupported from '@mapbox/mapbox-gl-supported'; import {RGBAImage} from '../util/image'; -import {Event, ErrorEvent} from '../util/evented'; +import {Event, ErrorEvent, Listener} from '../util/evented'; import {MapMouseEvent} from './events'; import TaskQueue from '../util/task_queue'; import webpSupported from '../util/webp_supported'; @@ -30,7 +25,6 @@ import {PerformanceMarkers, PerformanceUtils} from '../util/performance'; import {setCacheLimits} from '../util/tile_request_cache'; -import type {PointLike} from '@mapbox/point-geometry'; import type {RequestTransformFunction} from '../util/mapbox'; import type {LngLatLike} from '../geo/lng_lat'; import type {LngLatBoundsLike} from '../geo/lng_lat_bounds'; @@ -43,7 +37,8 @@ import type ScrollZoomHandler from './handler/scroll_zoom'; import type BoxZoomHandler from './handler/box_zoom'; import type {TouchPitchHandler} from './handler/touch_zoom_rotate'; import type DragRotateHandler from './handler/shim/drag_rotate'; -import type DragPanHandler, {DragPanOptions} from './handler/shim/drag_pan'; +import DragPanHandler, {DragPanOptions} from './handler/shim/drag_pan'; + import type KeyboardHandler from './handler/keyboard'; import type DoubleClickZoomHandler from './handler/shim/dblclick_zoom'; import type TouchZoomRotateHandler from './handler/shim/touch_zoom_rotate'; @@ -57,54 +52,65 @@ import type { LightSpecification, SourceSpecification } from '../style-spec/types'; +import {Callback} from '../types/callback'; +import type {ControlPosition, IControl} from './control/control'; -type ControlPosition = 'top-left' | 'top-right' | 'bottom-left' | 'bottom-right'; -/* eslint-disable no-use-before-define */ -type IControl = { - onAdd(map: Map): HTMLElement; - onRemove(map: Map): void; - - +getDefaultPosition?: () => ControlPosition; -} /* eslint-enable no-use-before-define */ -type MapOptions = { - hash?: boolean | string, - interactive?: boolean, - container: HTMLElement | string, - bearingSnap?: number, - attributionControl?: boolean, - customAttribution?: string | Array, - logoPosition?: ControlPosition, - failIfMajorPerformanceCaveat?: boolean, - preserveDrawingBuffer?: boolean, - antialias?: boolean, - refreshExpiredTiles?: boolean, - maxBounds?: LngLatBoundsLike, - scrollZoom?: boolean, - minZoom?: ?number, - maxZoom?: ?number, - minPitch?: ?number, - maxPitch?: ?number, - boxZoom?: boolean, - dragRotate?: boolean, - dragPan?: DragPanOptions, - keyboard?: boolean, - doubleClickZoom?: boolean, - touchZoomRotate?: boolean, - touchPitch?: boolean, - trackResize?: boolean, - center?: LngLatLike, - zoom?: number, - bearing?: number, - pitch?: number, - renderWorldCopies?: boolean, - maxTileCacheSize?: number, - transformRequest?: RequestTransformFunction, - accessToken: string, - locale?: Object +export type MapOptions = { + hash?: boolean | string; + interactive?: boolean; + container: HTMLElement | string; + bearingSnap?: number; + attributionControl?: boolean; + customAttribution?: string | Array; + logoPosition?: ControlPosition; + failIfMajorPerformanceCaveat?: boolean; + preserveDrawingBuffer?: boolean; + antialias?: boolean; + refreshExpiredTiles?: boolean; + maxBounds?: LngLatBoundsLike; + scrollZoom?: boolean; + minZoom?: number | null; + maxZoom?: number | null; + minPitch?: number | null; + maxPitch?: number | null; + boxZoom?: boolean; + dragRotate?: boolean; + dragPan?: DragPanOptions | boolean; + keyboard?: boolean; + doubleClickZoom?: boolean; + touchZoomRotate?: boolean; + touchPitch?: boolean; + trackResize?: boolean; + center?: LngLatLike; + zoom?: number; + bearing?: number; + pitch?: number; + renderWorldCopies?: boolean; + maxTileCacheSize?: number; + transformRequest?: RequestTransformFunction; + accessToken: string; + locale?: any; + fadeDuration?: number; + crossSourceCollisions?: boolean; + collectResourceTiming?: boolean; + clickTolerance?: number; + bounds?: LngLatBoundsLike; + fitBoundsOptions?: Object; + localIdeographFontFamily?: string; + style: StyleSpecification | string; + pitchWithRotate?: boolean; }; +// See article here: https://medium.com/terria/typescript-transforming-optional-properties-to-required-properties-that-may-be-undefined-7482cb4e1585 +type Complete = { + [P in keyof Required]: Pick extends Required> ? T[P] : (T[P] | undefined); +} + +// This type is used inside map since all properties are assigned a default value. +export type CompleteMapOptions = Complete; + const defaultMinZoom = -2; const defaultMaxZoom = 22; @@ -152,7 +158,7 @@ const defaultOptions = { accessToken: null, fadeDuration: 300, crossSourceCollisions: true -}; +} as CompleteMapOptions; /** * The `Map` object represents the map on your page. It exposes methods @@ -221,7 +227,7 @@ const defaultOptions = { * @param {boolean|Object} [options.touchZoomRotate=true] If `true`, the "pinch to rotate and zoom" interaction is enabled. An `Object` value is passed as options to {@link TouchZoomRotateHandler#enable}. * @param {boolean|Object} [options.touchPitch=true] If `true`, the "drag to pitch" interaction is enabled. An `Object` value is passed as options to {@link TouchPitchHandler#enable}. * @param {boolean} [options.trackResize=true] If `true`, the map will automatically resize when the browser window resizes. - * @param {LngLatLike} [options.center=[0, 0]] The inital geographical centerpoint of the map. If `center` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `[0, 0]` Note: Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON. + * @param {LngLatLike} [options.center=[0, 0]] The initial geographical centerpoint of the map. If `center` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `[0, 0]` Note: Mapbox GL uses longitude, latitude coordinate order (as opposed to latitude, longitude) to match GeoJSON. * @param {number} [options.zoom=0] The initial zoom level of the map. If `zoom` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. * @param {number} [options.bearing=0] The initial bearing (rotation) of the map, measured in degrees counter-clockwise from north. If `bearing` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. * @param {number} [options.pitch=0] The initial pitch (tilt) of the map, measured in degrees away from the plane of the screen (0-60). If `pitch` is not specified in the constructor options, Mapbox GL JS will look for it in the map's style object. If it is not specified in the style, either, it will default to `0`. @@ -273,19 +279,19 @@ class Map extends Camera { _canvasContainer: HTMLElement; _controlContainer: HTMLElement; _controlPositions: {[_: string]: HTMLElement}; - _interactive: ?boolean; - _showTileBoundaries: ?boolean; - _showCollisionBoxes: ?boolean; - _showPadding: ?boolean; + _interactive: boolean | undefined | null; + _showTileBoundaries: boolean | undefined | null; + _showCollisionBoxes: boolean | undefined | null; + _showPadding: boolean | undefined | null; _showOverdrawInspector: boolean; - _repaint: ?boolean; - _vertices: ?boolean; + _repaint: boolean | undefined | null; + _vertices: boolean | undefined | null; _canvas: HTMLCanvasElement; _maxTileCacheSize: number; - _frame: ?Cancelable; - _styleDirty: ?boolean; - _sourcesDirty: ?boolean; - _placementDirty: ?boolean; + _frame: Cancelable | undefined | null; + _styleDirty: boolean | undefined | null; + _sourcesDirty: boolean | undefined | null; + _placementDirty: boolean | undefined | null; _loaded: boolean; // accounts for placement finishing as well _fullyLoaded: boolean; @@ -305,7 +311,7 @@ class Map extends Camera { _mapId: number; _localIdeographFontFamily: string; _requestManager: RequestManager; - _locale: Object; + _locale: any; _removed: boolean; _clickTolerance: number; @@ -364,11 +370,11 @@ class Map extends Camera { options = extend({}, defaultOptions, options); if (options.minZoom != null && options.maxZoom != null && options.minZoom > options.maxZoom) { - throw new Error(`maxZoom must be greater than or equal to minZoom`); + throw new Error('maxZoom must be greater than or equal to minZoom'); } if (options.minPitch != null && options.maxPitch != null && options.minPitch > options.maxPitch) { - throw new Error(`maxPitch must be greater than or equal to minPitch`); + throw new Error('maxPitch must be greater than or equal to minPitch'); } if (options.minPitch != null && options.minPitch < defaultMinPitch) { @@ -380,7 +386,7 @@ class Map extends Camera { } const transform = new Transform(options.minZoom, options.maxZoom, options.minPitch, options.maxPitch, options.renderWorldCopies); - super(transform, options); + super(transform, {bearingSnap: options.bearingSnap}); this._interactive = options.interactive; this._maxTileCacheSize = options.maxTileCacheSize; @@ -403,14 +409,14 @@ class Map extends Camera { this._requestManager = new RequestManager(options.transformRequest, options.accessToken); if (typeof options.container === 'string') { - this._container = window.document.getElementById(options.container); + this._container = document.getElementById(options.container); if (!this._container) { throw new Error(`Container '${options.container}' not found.`); } } else if (options.container instanceof HTMLElement) { this._container = options.container; } else { - throw new Error(`Invalid type: 'container' must be a String or HTMLElement.`); + throw new Error('Invalid type: \'container\' must be a String or HTMLElement.'); } if (options.maxBounds) { @@ -428,7 +434,7 @@ class Map extends Camera { this._setupContainer(); this._setupPainter(); if (this.painter === undefined) { - throw new Error(`Failed to initialize WebGL.`); + throw new Error('Failed to initialize WebGL.'); } this.on('move', () => this._update(false)); @@ -436,12 +442,12 @@ class Map extends Camera { this.on('zoom', () => this._update(true)); if (typeof window !== 'undefined') { - window.addEventListener('online', this._onWindowOnline, false); - window.addEventListener('resize', this._onWindowResize, false); - window.addEventListener('orientationchange', this._onWindowResize, false); + addEventListener('online', this._onWindowOnline, false); + addEventListener('resize', this._onWindowResize, false); + addEventListener('orientationchange', this._onWindowResize, false); } - this.handlers = new HandlerManager(this, options); + this.handlers = new HandlerManager(this, options as CompleteMapOptions); const hashName = (typeof options.hash === 'string' && options.hash) || undefined; this._hash = options.hash && (new Hash(hashName)).addTo(this); @@ -472,7 +478,7 @@ class Map extends Camera { this.on('style.load', () => { if (this.transform.unmodified) { - this.jumpTo((this.style.stylesheet: any)); + this.jumpTo(this.style.stylesheet as any); } }); this.on('data', (event: MapDataEvent) => { @@ -589,7 +595,7 @@ class Map extends Camera { * var mapDiv = document.getElementById('map'); * if (mapDiv.style.visibility === true) map.resize(); */ - resize(eventData?: Object) { + resize(eventData?: any) { const dimensions = this._containerDimensions(); const width = dimensions[0]; const height = dimensions[1]; @@ -675,7 +681,7 @@ class Map extends Camera { * @example * map.setMinZoom(12.25); */ - setMinZoom(minZoom?: ?number) { + setMinZoom(minZoom?: number | null) { minZoom = minZoom === null || minZoom === undefined ? defaultMinZoom : minZoom; @@ -710,7 +716,7 @@ class Map extends Camera { * @example * map.setMaxZoom(18.75); */ - setMaxZoom(maxZoom?: ?number) { + setMaxZoom(maxZoom?: number | null) { maxZoom = maxZoom === null || maxZoom === undefined ? defaultMaxZoom : maxZoom; @@ -722,7 +728,7 @@ class Map extends Camera { return this; - } else throw new Error(`maxZoom must be greater than the current minZoom`); + } else throw new Error('maxZoom must be greater than the current minZoom'); } /** @@ -743,7 +749,7 @@ class Map extends Camera { * If `null` or `undefined` is provided, the function removes the current minimum pitch (i.e. sets it to 0). * @returns {Map} `this` */ - setMinPitch(minPitch?: ?number) { + setMinPitch(minPitch?: number | null) { minPitch = minPitch === null || minPitch === undefined ? defaultMinPitch : minPitch; @@ -778,7 +784,7 @@ class Map extends Camera { * If `null` or `undefined` is provided, the function removes the current maximum pitch (sets it to 60). * @returns {Map} `this` */ - setMaxPitch(maxPitch?: ?number) { + setMaxPitch(maxPitch?: number | null) { maxPitch = maxPitch === null || maxPitch === undefined ? defaultMaxPitch : maxPitch; @@ -794,7 +800,7 @@ class Map extends Camera { return this; - } else throw new Error(`maxPitch must be greater than the current minPitch`); + } else throw new Error('maxPitch must be greater than the current minPitch'); } /** @@ -832,7 +838,7 @@ class Map extends Camera { * map.setRenderWorldCopies(true); * @see [Render world copies](https://maplibre.org/maplibre-gl-js-docs/example/render-world-copies/) */ - setRenderWorldCopies(renderWorldCopies?: ?boolean) { + setRenderWorldCopies(renderWorldCopies?: boolean | null) { this.transform.renderWorldCopies = renderWorldCopies; return this._update(); } @@ -1044,7 +1050,8 @@ class Map extends Camera { * @see [Create a hover effect](https://maplibre.org/maplibre-gl-js-docs/example/hover-styles/) * @see [Create a draggable marker](https://maplibre.org/maplibre-gl-js-docs/example/drag-a-point/) */ - on(type: MapEvent, layerId: any, listener: any) { + on(type: MapEvent, listener: Listener): this; + on(type: MapEvent, layerId: any, listener?: Listener): this { if (listener === undefined) { return super.on(type, layerId); } @@ -1056,7 +1063,7 @@ class Map extends Camera { this._delegatedListeners[type].push(delegatedListener); for (const event in delegatedListener.delegates) { - this.on((event: any), delegatedListener.delegates[event]); + this.on(event as any, delegatedListener.delegates[event]); } return this; @@ -1091,8 +1098,8 @@ class Map extends Camera { * @param {Function} listener The function to be called when the event is fired. * @returns {Map} `this` */ - - once(type: MapEvent, layerId: any, listener: any) { + once(type: MapEvent, listener: Listener): this; + once(type: MapEvent, layerId: any, listener?: Listener): this { if (listener === undefined) { return super.once(type, layerId); @@ -1101,7 +1108,7 @@ class Map extends Camera { const delegatedListener = this._createDelegatedListener(type, layerId, listener); for (const event in delegatedListener.delegates) { - this.once((event: any), delegatedListener.delegates[event]); + this.once(event as any, delegatedListener.delegates[event]); } return this; @@ -1127,7 +1134,8 @@ class Map extends Camera { * @param {Function} listener The function previously installed as a listener. * @returns {Map} `this` */ - off(type: MapEvent, layerId: any, listener: any) { + off(type: MapEvent, listener: Listener): this; + off(type: MapEvent, layerId: any, listener?: Listener): this { if (listener === undefined) { return super.off(type, layerId); } @@ -1138,7 +1146,7 @@ class Map extends Camera { const delegatedListener = listeners[i]; if (delegatedListener.layer === layerId && delegatedListener.listener === listener) { for (const event in delegatedListener.delegates) { - this.off((event: any), delegatedListener.delegates[event]); + this.off(((event as any)), delegatedListener.delegates[event]); } listeners.splice(i, 1); return this; @@ -1230,7 +1238,7 @@ class Map extends Camera { * var features = map.queryRenderedFeatures({ layers: ['my-layer-name'] }); * @see [Get features under the mouse pointer](https://maplibre.org/maplibre-gl-js-docs/example/queryrenderedfeatures/) */ - queryRenderedFeatures(geometry?: PointLike | [PointLike, PointLike], options?: Object) { + queryRenderedFeatures(geometry?: PointLike | [PointLike, PointLike], options?: any) { // The first parameter can be omitted entirely, making this effectively an overloaded method // with two signatures: // @@ -1245,7 +1253,7 @@ class Map extends Camera { } if (options === undefined && geometry !== undefined && !(geometry instanceof Point) && !Array.isArray(geometry)) { - options = (geometry: Object); + options = geometry; geometry = undefined; } @@ -1254,10 +1262,10 @@ class Map extends Camera { let queryGeometry; if (geometry instanceof Point || typeof geometry[0] === 'number') { - queryGeometry = [Point.convert(geometry)]; + queryGeometry = [Point.convert(geometry as PointLike)]; } else { - const tl = Point.convert(geometry[0]); - const br = Point.convert(geometry[1]); + const tl = Point.convert(geometry[0] as PointLike); + const br = Point.convert(geometry[1] as PointLike); queryGeometry = [tl, new Point(br.x, tl.y), br, new Point(tl.x, br.y), tl]; } @@ -1300,7 +1308,11 @@ class Map extends Camera { * }); * */ - querySourceFeatures(sourceId: string, parameters: ?{sourceLayer: ?string, filter: ?Array, validate?: boolean}) { + querySourceFeatures(sourceId: string, parameters?: { + sourceLayer: string | undefined | null; + filter: Array | undefined | null; + validate?: boolean; + } | null) { return this.style.querySourceFeatures(sourceId, parameters); } @@ -1330,7 +1342,9 @@ class Map extends Camera { * map.setStyle("mapbox://styles/mapbox/streets-v11"); * */ - setStyle(style: StyleSpecification | string | null, options?: {diff?: boolean} & StyleOptions) { + setStyle(style: StyleSpecification | string | null, options?: { + diff?: boolean; + } & StyleOptions) { options = extend({}, {localIdeographFontFamily: this._localIdeographFontFamily}, options); if ((options.diff !== false && options.localIdeographFontFamily === this._localIdeographFontFamily) && this.style && style) { @@ -1367,7 +1381,9 @@ class Map extends Camera { return str; } - _updateStyle(style: StyleSpecification | string | null, options?: {diff?: boolean} & StyleOptions) { + _updateStyle(style: StyleSpecification | string | null, options?: { + diff?: boolean; + } & StyleOptions) { if (this.style) { this.style.setEventedParent(null); this.style._remove(); @@ -1399,11 +1415,13 @@ class Map extends Camera { } } - _diffStyle(style: StyleSpecification | string, options?: {diff?: boolean} & StyleOptions) { + _diffStyle(style: StyleSpecification | string, options?: { + diff?: boolean; + } & StyleOptions) { if (typeof style === 'string') { const url = this._requestManager.normalizeStyleURL(style); const request = this._requestManager.transformRequest(url, ResourceType.Style); - getJSON(request, (error: ?Error, json: ?Object) => { + getJSON(request, (error?: Error | null, json?: any | null) => { if (error) { this.fire(new ErrorEvent(error)); } else if (json) { @@ -1415,7 +1433,9 @@ class Map extends Camera { } } - _updateDiff(style: StyleSpecification, options?: {diff?: boolean} & StyleOptions) { + _updateDiff(style: StyleSpecification, options?: { + diff?: boolean; + } & StyleOptions) { try { if (this.style.setState(style)) { this._update(true); @@ -1539,9 +1559,9 @@ class Map extends Camera { * @private * @param {string} name The name of the source type; source definition objects use this name in the `{type: ...}` field. * @param {Function} SourceType A {@link Source} constructor. - * @param {Function} callback Called when the source type is ready or with an error argument if there is an error. + * @param {Callback} callback Called when the source type is ready or with an error argument if there is an error. */ - addSourceType(name: string, SourceType: any, callback: Function) { + addSourceType(name: string, SourceType: any, callback: Callback) { this._lazyInitEmptyStyle(); return this.style.addSourceType(name, SourceType, callback); } @@ -1630,21 +1650,31 @@ class Map extends Camera { * @see Use `ImageData`: [Add a generated icon to the map](https://maplibre.org/maplibre-gl-js-docs/example/add-image-generated/) */ addImage(id: string, - image: HTMLImageElement | ImageBitmap | ImageData | {width: number, height: number, data: Uint8Array | Uint8ClampedArray} | StyleImageInterface, - {pixelRatio = 1, sdf = false, stretchX, stretchY, content}: $Shape = {}) { + image: HTMLImageElement | ImageBitmap | ImageData | { + width: number; + height: number; + data: Uint8Array | Uint8ClampedArray; + } | StyleImageInterface, + { + pixelRatio = 1, + sdf = false, + stretchX, + stretchY, + content + }: Partial = {}) { this._lazyInitEmptyStyle(); const version = 0; if (image instanceof HTMLImageElement || (ImageBitmap && image instanceof ImageBitmap)) { - const {width, height, data} = browser.getImageData(image); + const {width, height, data} = browser.getImageData(image as HTMLImageElement | ImageBitmap); this.style.addImage(id, {data: new RGBAImage({width, height}, data), pixelRatio, stretchX, stretchY, content, sdf, version}); } else if (image.width === undefined || image.height === undefined) { return this.fire(new ErrorEvent(new Error( 'Invalid arguments to map.addImage(). The second argument must be an `HTMLImageElement`, `ImageData`, `ImageBitmap`, ' + 'or object with `width`, `height`, and `data` properties with the same format as `ImageData`'))); } else { - const {width, height, data} = image; - const userImage = ((image: any): StyleImageInterface); + const {width, height, data} = image as ImageData; + const userImage = (image as any as StyleImageInterface); this.style.addImage(id, { data: new RGBAImage({width, height}, new Uint8Array(data)), @@ -1682,14 +1712,20 @@ class Map extends Camera { * if (map.hasImage('cat')) map.updateImage('cat', './other-cat-icon.png'); */ updateImage(id: string, - image: HTMLImageElement | ImageBitmap | ImageData | {width: number, height: number, data: Uint8Array | Uint8ClampedArray} | StyleImageInterface) { + image: HTMLImageElement | ImageBitmap | ImageData | { + width: number; + height: number; + data: Uint8Array | Uint8ClampedArray; + } | StyleImageInterface) { const existingImage = this.style.getImage(id); if (!existingImage) { return this.fire(new ErrorEvent(new Error( 'The map has no image with that id. If you are adding a new image use `map.addImage(...)` instead.'))); } - const imageData = (image instanceof HTMLImageElement || (ImageBitmap && image instanceof ImageBitmap)) ? browser.getImageData(image) : image; + const imageData = (image instanceof HTMLImageElement || (ImageBitmap && image instanceof ImageBitmap)) ? + browser.getImageData(image as HTMLImageElement | ImageBitmap) : + image as ImageData; const {width, height, data} = imageData; if (width === undefined || height === undefined) { @@ -1752,7 +1788,7 @@ class Map extends Camera { * domains must support [CORS](https://developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS). * * @param {string} url The URL of the image file. Image file must be in png, webp, or jpg format. - * @param {Function} callback Expecting `callback(error, data)`. Called when the image has loaded or with an error argument if there is an error. + * @param {Callback} callback Expecting `callback(error, data)`. Called when the image has loaded or with an error argument if there is an error. * * @example * // Load an image from an external URL. @@ -1764,7 +1800,7 @@ class Map extends Camera { * * @see [Add an icon to the map](https://maplibre.org/maplibre-gl-js-docs/example/add-image/) */ - loadImage(url: string, callback: Function) { + loadImage(url: string, callback: Callback) { getImage(this._requestManager.transformRequest(url, ResourceType.Image), callback); } @@ -1793,7 +1829,7 @@ class Map extends Camera { * @param {Object | CustomLayerInterface} layer The layer to add, conforming to either the Mapbox Style Specification's [layer definition](https://docs.mapbox.com/mapbox-gl-js/style-spec/#layers) or, less commonly, the {@link CustomLayerInterface} specification. * The Mapbox Style Specification's layer definition is appropriate for most layers. * - * @param {string} layer.id A unique idenfier that you define. + * @param {string} layer.id A unique identifer that you define. * @param {string} layer.type The type of layer (for example `fill` or `symbol`). * A list of layer types is available in the [Mapbox Style Specification](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#type). * @@ -2005,7 +2041,7 @@ class Map extends Camera { * @see [Create a timeline animation](https://maplibre.org/maplibre-gl-js-docs/example/timeline-animation/) * @see Tutorial: [Show changes over time](https://docs.mapbox.com/help/tutorials/show-changes-over-time/) */ - setFilter(layerId: string, filter: ?FilterSpecification, options: StyleSetterOptions = {}) { + setFilter(layerId: string, filter?: FilterSpecification | null, options: StyleSetterOptions = {}) { this.style.setFilter(layerId, filter, options); return this._update(true); } @@ -2143,7 +2179,11 @@ class Map extends Camera { * @see [Create a hover effect](https://maplibre.org/maplibre-gl-js-docs/example/hover-styles/) * @see Tutorial: [Create interactive hover effects with Mapbox GL JS](https://docs.mapbox.com/help/tutorials/create-interactive-hover-effects-with-mapbox-gl-js/) */ - setFeatureState(feature: { source: string; sourceLayer?: string; id: string | number; }, state: Object) { + setFeatureState(feature: { + source: string; + sourceLayer?: string; + id: string | number; + }, state: any) { this.style.setFeatureState(feature, state); return this._update(); } @@ -2195,7 +2235,11 @@ class Map extends Camera { * }); * */ - removeFeatureState(target: { source: string; sourceLayer?: string; id?: string | number; }, key?: string) { + removeFeatureState(target: { + source: string; + sourceLayer?: string; + id?: string | number; + }, key?: string) { this.style.removeFeatureState(target, key); return this._update(); } @@ -2229,7 +2273,13 @@ class Map extends Camera { * }); * */ - getFeatureState(feature: { source: string; sourceLayer?: string; id: string | number; }): any { + getFeatureState( + feature: { + source: string; + sourceLayer?: string; + id: string | number; + } + ): any { return this.style.getFeatureState(feature); } @@ -2291,7 +2341,7 @@ class Map extends Camera { canvasContainer.classList.add('maplibregl-interactive', 'mapboxgl-interactive'); } - this._canvas = DOM.create('canvas', 'maplibregl-canvas mapboxgl-canvas', canvasContainer); + this._canvas = DOM.create('canvas', 'maplibregl-canvas mapboxgl-canvas', canvasContainer) as HTMLCanvasElement; this._canvas.addEventListener('webglcontextlost', this._contextLost, false); this._canvas.addEventListener('webglcontextrestored', this._contextRestored, false); this._canvas.setAttribute('tabindex', '0'); @@ -2311,7 +2361,7 @@ class Map extends Camera { } _resizeCanvas(width: number, height: number) { - const pixelRatio = browser.devicePixelRatio || 1; + const pixelRatio = devicePixelRatio || 1; // Request the required canvas size taking the pixelratio into account. this._canvas.width = pixelRatio * width; @@ -2337,12 +2387,12 @@ class Map extends Camera { return; } - this.painter = new Painter(gl, this.transform); + this.painter = new Painter(gl as WebGLRenderingContext, this.transform); - webpSupported.testSupport(gl); + webpSupported.testSupport(gl as WebGLRenderingContext); } - _contextLost(event: *) { + _contextLost(event: any) { event.preventDefault(); if (this._frame) { this._frame.cancel(); @@ -2351,14 +2401,14 @@ class Map extends Camera { this.fire(new Event('webglcontextlost', {originalEvent: event})); } - _contextRestored(event: *) { + _contextRestored(event: any) { this._setupPainter(); this.resize(); this._update(); this.fire(new Event('webglcontextrestored', {originalEvent: event})); } - _onMapScroll(event: *) { + _onMapScroll(event: any) { if (event.target !== this._container) return; // Revert any scroll which would move the canvas outside of the view @@ -2583,9 +2633,9 @@ class Map extends Camera { delete this.handlers; this.setStyle(null); if (typeof window !== 'undefined') { - window.removeEventListener('resize', this._onWindowResize, false); - window.removeEventListener('orientationchange', this._onWindowResize, false); - window.removeEventListener('online', this._onWindowOnline, false); + removeEventListener('resize', this._onWindowResize, false); + removeEventListener('orientationchange', this._onWindowResize, false); + removeEventListener('online', this._onWindowOnline, false); } const extension = this.painter.context.gl.getExtension('WEBGL_lose_context'); @@ -2735,17 +2785,6 @@ class Map extends Camera { _setCacheLimits(limit: number, checkThreshold: number) { setCacheLimits(limit, checkThreshold); } - - /** - * The version of Mapbox GL JS in use as specified in package.json, CHANGELOG.md, and the GitHub release. - * - * @name version - * @instance - * @memberof Map - * @var {string} version - */ - - get version(): string { return version; } } export default Map; diff --git a/src/ui/marker.js b/src/ui/marker.ts similarity index 94% rename from src/ui/marker.js rename to src/ui/marker.ts index 85e2fbe6be..c896be8c10 100644 --- a/src/ui/marker.js +++ b/src/ui/marker.ts @@ -1,30 +1,27 @@ -// @flow - import DOM from '../util/dom'; -import window from '../util/window'; import LngLat from '../geo/lng_lat'; -import Point from '@mapbox/point-geometry'; +import Point, {PointLike} from '../util/point'; import smartWrap from '../util/smart_wrap'; import {bindAll, extend} from '../util/util'; -import {type Anchor, anchorTranslate, applyAnchorClass} from './anchor'; +import {anchorTranslate, applyAnchorClass} from './anchor'; +import type {Anchor} from './anchor'; import {Event, Evented} from '../util/evented'; import type Map from './map'; -import type Popup from './popup'; -import type {LngLatLike} from "../geo/lng_lat"; +import Popup, {Offset} from './popup'; +import type {LngLatLike} from '../geo/lng_lat'; import type {MapMouseEvent, MapTouchEvent} from './events'; -import type {PointLike} from '@mapbox/point-geometry'; type Options = { - element?: HTMLElement, - offset?: PointLike, - anchor?: Anchor, - color?: string, - scale?: number, - draggable?: boolean, - clickTolerance?: number, - rotation?: number, - rotationAlignment?: string, - pitchAlignment?: string + element?: HTMLElement; + offset?: PointLike; + anchor?: Anchor; + color?: string; + scale?: number; + draggable?: boolean; + clickTolerance?: number; + rotation?: number; + rotationAlignment?: string; + pitchAlignment?: string; }; /** @@ -60,28 +57,28 @@ export default class Marker extends Evented { _anchor: Anchor; _offset: Point; _element: HTMLElement; - _popup: ?Popup; + _popup: Popup | undefined | null; _lngLat: LngLat; - _pos: ?Point; - _color: ?string; + _pos: Point | undefined | null; + _color: string | undefined | null; _scale: number; _defaultMarker: boolean; _draggable: boolean; _clickTolerance: number; _isDragging: boolean; _state: 'inactive' | 'pending' | 'active'; // used for handling drag events - _positionDelta: ?Point; - _pointerdownPos: ?Point; + _positionDelta: Point | undefined | null; + _pointerdownPos: Point | undefined | null; _rotation: number; _pitchAlignment: string; _rotationAlignment: string; - _originalTabIndex: ?string; // original tabindex of _element + _originalTabIndex: string | undefined | null; // original tabindex of _element constructor(options?: Options, legacyOptions?: Options) { super(); // For backward compatibility -- the constructor used to accept the element as a // required first argument, before it was made optional. - if (options instanceof window.HTMLElement || legacyOptions) { + if (options instanceof HTMLElement || legacyOptions) { options = extend({element: options}, legacyOptions); } @@ -342,7 +339,7 @@ export default class Marker extends Evented { * .addTo(map); * @see [Attach a popup to a marker instance](https://maplibre.org/maplibre-gl-js-docs/example/set-popup/) */ - setPopup(popup: ?Popup) { + setPopup(popup?: Popup | null) { if (this._popup) { this._popup.remove(); this._popup = null; @@ -367,7 +364,7 @@ export default class Marker extends Evented { 'bottom-right': [-linearOffset, (markerHeight - markerRadius + linearOffset) * -1], 'left': [markerRadius, (markerHeight - markerRadius) * -1], 'right': [-markerRadius, (markerHeight - markerRadius) * -1] - } : this._offset; + } as Offset : this._offset; } this._popup = popup; if (this._lngLat) this._popup.setLngLat(this._lngLat); @@ -398,7 +395,7 @@ export default class Marker extends Evented { const targetElement = e.originalEvent.target; const element = this._element; - if (this._popup && (targetElement === element || element.contains((targetElement: any)))) { + if (this._popup && (targetElement === element || element.contains(targetElement as any))) { this.togglePopup(); } } @@ -438,7 +435,9 @@ export default class Marker extends Evented { return this; } - _update(e?: {type: 'move' | 'moveend'}) { + _update(e?: { + type: 'move' | 'moveend'; + }) { if (!this._map) return; if (this._map.transform.renderWorldCopies) { @@ -447,24 +446,24 @@ export default class Marker extends Evented { this._pos = this._map.project(this._lngLat)._add(this._offset); - let rotation = ""; - if (this._rotationAlignment === "viewport" || this._rotationAlignment === "auto") { + let rotation = ''; + if (this._rotationAlignment === 'viewport' || this._rotationAlignment === 'auto') { rotation = `rotateZ(${this._rotation}deg)`; - } else if (this._rotationAlignment === "map") { + } else if (this._rotationAlignment === 'map') { rotation = `rotateZ(${this._rotation - this._map.getBearing()}deg)`; } - let pitch = ""; - if (this._pitchAlignment === "viewport" || this._pitchAlignment === "auto") { - pitch = "rotateX(0deg)"; - } else if (this._pitchAlignment === "map") { + let pitch = ''; + if (this._pitchAlignment === 'viewport' || this._pitchAlignment === 'auto') { + pitch = 'rotateX(0deg)'; + } else if (this._pitchAlignment === 'map') { pitch = `rotateX(${this._map.getPitch()}deg)`; } // because rounding the coordinates at every `move` event causes stuttered zooming // we only round them when _update is called with `moveend` or when its called with // no arguments (when the Marker is initialized or Marker#setLngLat is invoked). - if (!e || e.type === "moveend") { + if (!e || e.type === 'moveend') { this._pos = this._pos.round(); } @@ -560,7 +559,7 @@ export default class Marker extends Evented { } _addDragHandler(e: MapMouseEvent | MapTouchEvent) { - if (this._element.contains((e.originalEvent.target: any))) { + if (this._element.contains(e.originalEvent.target as any)) { e.preventDefault(); // We need to calculate the pixel distance between the click point diff --git a/src/ui/popup.js b/src/ui/popup.ts similarity index 94% rename from src/ui/popup.js rename to src/ui/popup.ts index 0dffa2dfba..1f728f4b4a 100644 --- a/src/ui/popup.js +++ b/src/ui/popup.ts @@ -1,49 +1,49 @@ -// @flow - import {extend, bindAll} from '../util/util'; import {Event, Evented} from '../util/evented'; import {MapMouseEvent} from '../ui/events'; import DOM from '../util/dom'; import LngLat from '../geo/lng_lat'; -import Point from '@mapbox/point-geometry'; -import window from '../util/window'; +import Point, {PointLike} from '../util/point'; import smartWrap from '../util/smart_wrap'; -import {type Anchor, anchorTranslate, applyAnchorClass} from './anchor'; +import {anchorTranslate, applyAnchorClass} from './anchor'; + +import type {Anchor} from './anchor'; import type Map from './map'; import type {LngLatLike} from '../geo/lng_lat'; -import type {PointLike} from '@mapbox/point-geometry'; const defaultOptions = { closeButton: true, closeOnClick: true, focusAfterOpen: true, className: '', - maxWidth: "240px" + maxWidth: '240px' }; -export type Offset = number | PointLike | {[_: Anchor]: PointLike}; +export type Offset = number | PointLike | { + [_ in Anchor]: PointLike; +}; export type PopupOptions = { - closeButton?: boolean, - closeOnClick?: boolean, - closeOnMove?: boolean, - focusAfterOpen?: boolean, - anchor?: Anchor, - offset?: Offset, - className?: string, - maxWidth?: string + closeButton?: boolean; + closeOnClick?: boolean; + closeOnMove?: boolean; + focusAfterOpen?: boolean; + anchor?: Anchor; + offset?: Offset; + className?: string; + maxWidth?: string; }; const focusQuerySelector = [ - "a[href]", - "[tabindex]:not([tabindex='-1'])", - "[contenteditable]:not([contenteditable='false'])", - "button:not([disabled])", - "input:not([disabled])", - "select:not([disabled])", - "textarea:not([disabled])", -].join(", "); + 'a[href]', + '[tabindex]:not([tabindex=\'-1\'])', + '[contenteditable]:not([contenteditable=\'false\'])', + 'button:not([disabled])', + 'input:not([disabled])', + 'select:not([disabled])', + 'textarea:not([disabled])', +].join(', '); /** * A popup component. @@ -101,11 +101,11 @@ export default class Popup extends Evented { options: PopupOptions; _content: HTMLElement; _container: HTMLElement; - _closeButton: HTMLElement; + _closeButton: HTMLButtonElement; _tip: HTMLElement; _lngLat: LngLat; _trackPointer: boolean; - _pos: ?Point; + _pos: Point | undefined | null; constructor(options: PopupOptions) { super(); @@ -338,7 +338,7 @@ export default class Popup extends Evented { * .addTo(map); */ setText(text: string) { - return this.setDOMContent(window.document.createTextNode(text)); + return this.setDOMContent(document.createTextNode(text)); } /** @@ -361,8 +361,8 @@ export default class Popup extends Evented { * @see [Attach a popup to a marker instance](https://maplibre.org/maplibre-gl-js-docs/example/set-popup/) */ setHTML(html: string) { - const frag = window.document.createDocumentFragment(); - const temp = window.document.createElement('body'); + const frag = document.createDocumentFragment(); + const temp = document.createElement('body'); let child; temp.innerHTML = html; while (true) { @@ -403,7 +403,7 @@ export default class Popup extends Evented { * @returns {Popup} `this` * @example * // create an element with the popup content - * var div = window.document.createElement('div'); + * var div = document.createElement('div'); * div.innerHTML = 'Hello, world!'; * var popup = new maplibregl.Popup() * .setLngLat(e.lngLat) @@ -491,7 +491,7 @@ export default class Popup extends Evented { _createCloseButton() { if (this.options.closeButton) { - this._closeButton = DOM.create('button', 'maplibregl-popup-close-button mapboxgl-popup-close-button', this._content); + this._closeButton = DOM.create('button', 'maplibregl-popup-close-button mapboxgl-popup-close-button', this._content) as HTMLButtonElement; this._closeButton.type = 'button'; this._closeButton.setAttribute('aria-label', 'Close popup'); this._closeButton.innerHTML = '×'; @@ -511,7 +511,7 @@ export default class Popup extends Evented { this._update(event.point); } - _update(cursor: ?PointLike) { + _update(cursor?: Point) { const hasPosition = this._lngLat || this._trackPointer; if (!this._map || !hasPosition || !this._content) { return; } @@ -542,7 +542,7 @@ export default class Popup extends Evented { const pos = this._pos = this._trackPointer && cursor ? cursor : this._map.project(this._lngLat); - let anchor: ?Anchor = this.options.anchor; + let anchor: Anchor | undefined | null = this.options.anchor; const offset = normalizeOffset(this.options.offset); if (!anchor) { @@ -567,7 +567,7 @@ export default class Popup extends Evented { if (anchorComponents.length === 0) { anchor = 'bottom'; } else { - anchor = (anchorComponents.join('-'): any); + anchor = (anchorComponents.join('-') as any); } } @@ -579,7 +579,7 @@ export default class Popup extends Evented { _focusFirstElement() { if (!this.options.focusAfterOpen || !this._container) return; - const firstFocusable = this._container.querySelector(focusQuerySelector); + const firstFocusable = this._container.querySelector(focusQuerySelector) as HTMLElement; if (firstFocusable) firstFocusable.focus(); } @@ -589,7 +589,7 @@ export default class Popup extends Evented { } } -function normalizeOffset(offset: ?Offset) { +function normalizeOffset(offset?: Offset | null) { if (!offset) { return normalizeOffset(new Point(0, 0)); diff --git a/src/util/actor.js b/src/util/actor.ts similarity index 87% rename from src/util/actor.js rename to src/util/actor.ts index ac441726c4..87d2f3314f 100644 --- a/src/util/actor.js +++ b/src/util/actor.ts @@ -1,7 +1,4 @@ -// @flow - import {bindAll, isWorker, isSafari} from './util'; -import window from './window'; import {serialize, deserialize} from './web_worker_transfer'; import ThrottledInvoker from './throttled_invoker'; @@ -22,23 +19,29 @@ import type {Cancelable} from '../types/cancelable'; class Actor { target: any; parent: any; - mapId: ?number; - callbacks: { number: any }; + mapId: number | undefined | null; + callbacks: { + number: any; + }; name: string; - tasks: { number: any }; + tasks: { + number: any; + }; taskQueue: Array; - cancelCallbacks: { number: Cancelable }; + cancelCallbacks: { + number: Cancelable; + }; invoker: ThrottledInvoker; globalScope: any; - constructor(target: any, parent: any, mapId: ?number) { + constructor(target: any, parent: any, mapId?: number | null) { this.target = target; this.parent = parent; this.mapId = mapId; - this.callbacks = {}; - this.tasks = {}; + this.callbacks = {} as { number: any }; + this.tasks = {} as { number: any }; this.taskQueue = []; - this.cancelCallbacks = {}; + this.cancelCallbacks = {} as { number: Cancelable }; bindAll(['receive', 'process'], this); this.invoker = new ThrottledInvoker(this.process); this.target.addEventListener('message', this.receive, false); @@ -53,7 +56,13 @@ class Actor { * @param targetMapId A particular mapId to which to send this message. * @private */ - send(type: string, data: mixed, callback: ?Function, targetMapId: ?string, mustQueue: boolean = false): ?Cancelable { + send( + type: string, + data: unknown, + callback?: Function | null, + targetMapId?: string | null, + mustQueue: boolean = false + ): Cancelable | undefined | null { // We're using a string ID instead of numbers because they are being used as object keys // anyway, and thus stringified implicitly. We use random IDs because an actor may receive // message from multiple other actors which could run in different execution context. A @@ -62,7 +71,7 @@ class Actor { if (callback) { this.callbacks[id] = callback; } - const buffers: ?Array = isSafari(this.globalScope) ? undefined : []; + const buffers: Array | undefined | null = isSafari(this.globalScope) ? undefined : []; this.target.postMessage({ id, type, @@ -88,7 +97,7 @@ class Actor { }; } - receive(message: Object) { + receive(message: any) { const data = message.data, id = data.id; @@ -166,8 +175,8 @@ class Actor { } } else { let completed = false; - const buffers: ?Array = isSafari(this.globalScope) ? undefined : []; - const done = task.hasCallback ? (err, data) => { + const buffers: Array | undefined | null = isSafari(this.globalScope) ? undefined : []; + const done = task.hasCallback ? (err: Error, data?: any) => { completed = true; delete this.cancelCallbacks[id]; this.target.postMessage({ @@ -182,14 +191,14 @@ class Actor { }; let callback = null; - const params = (deserialize(task.data): any); + const params = (deserialize(task.data) as any); if (this.parent[task.type]) { // task.type == 'loadTile', 'removeTile', etc. callback = this.parent[task.type](task.sourceMapId, params, done); } else if (this.parent.getWorkerSource) { // task.type == sourcetype.method const keys = task.type.split('.'); - const scope = (this.parent: any).getWorkerSource(task.sourceMapId, keys[0], params.source); + const scope = (this.parent as any).getWorkerSource(task.sourceMapId, keys[0], params.source); callback = scope[keys[1]](params, done); } else { // No function was found. diff --git a/src/util/ajax.js b/src/util/ajax.ts similarity index 83% rename from src/util/ajax.js rename to src/util/ajax.ts index 83f0431211..117a8f302d 100644 --- a/src/util/ajax.js +++ b/src/util/ajax.ts @@ -1,6 +1,3 @@ -// @flow - -import window from './window'; import {extend, warnOnce, isWorker} from './util'; import {isMapboxHTTPURL, hasCacheDefeatingSku} from './mapbox'; import config from './config'; @@ -12,6 +9,17 @@ import offscreenCanvasSupported from './offscreen_canvas_supported'; import type {Callback} from '../types/callback'; import type {Cancelable} from '../types/cancelable'; +export interface IResourceType { + Unknown: keyof this; + Style: keyof this; + Source: keyof this; + Tile: keyof this; + Glyphs: keyof this; + SpriteImage: keyof this; + SpriteJSON: keyof this; + Image: keyof this; +} + /** * The type of a resource. * @private @@ -27,7 +35,7 @@ const ResourceType = { SpriteImage: 'SpriteImage', SpriteJSON: 'SpriteJSON', Image: 'Image' -}; +} as IResourceType; export {ResourceType}; if (typeof Object.freeze == 'function') { @@ -58,16 +66,21 @@ if (typeof Object.freeze == 'function') { * */ export type RequestParameters = { - url: string, - headers?: Object, - method?: 'GET' | 'POST' | 'PUT', - body?: string, - type?: 'string' | 'json' | 'arrayBuffer', - credentials?: 'same-origin' | 'include', - collectResourceTiming?: boolean + url: string; + headers?: any; + method?: 'GET' | 'POST' | 'PUT'; + body?: string; + type?: 'string' | 'json' | 'arrayBuffer'; + credentials?: 'same-origin' | 'include'; + collectResourceTiming?: boolean; }; -export type ResponseCallback = (error: ?Error, data: ?T, cacheControl: ?string, expires: ?string) => void; +export type ResponseCallback = ( + error?: Error | null, + data?: T | null, + cacheControl?: string | null, + expires?: string | null +) => void; class AJAXError extends Error { status: number; @@ -96,7 +109,7 @@ class AJAXError extends Error { // and we will set an empty referrer. Otherwise, we're using the document's URL. /* global self */ export const getReferrer = isWorker() ? - () => self.worker && self.worker.referrer : + () => (self as any).worker && (self as any).worker.referrer : () => (window.location.protocol === 'blob:' ? window.parent : window).location.href; // Determines whether a URL is a file:// URL. This is obviously the case if it begins @@ -105,8 +118,8 @@ export const getReferrer = isWorker() ? const isFileURL = url => /^file:/.test(url) || (/^file:/.test(getReferrer()) && !/^\w+:/.test(url)); function makeFetchRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { - const controller = new window.AbortController(); - const request = new window.Request(requestParameters.url, { + const controller = new AbortController(); + const request = new Request(requestParameters.url, { method: requestParameters.method || 'GET', body: requestParameters.body, credentials: requestParameters.credentials, @@ -123,7 +136,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon request.headers.set('Accept', 'application/json'); } - const validateOrFetch = (err, cachedResponse, responseIsFresh) => { + const validateOrFetch = (err, cachedResponse?, responseIsFresh?) => { if (aborted) return; if (err) { @@ -145,7 +158,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon const requestTime = Date.now(); - window.fetch(request).then(response => { + fetch(request).then(response => { if (response.ok) { const cacheableResponse = cacheIgnoringSearch ? response.clone() : null; return finishRequest(response, cacheableResponse, requestTime); @@ -162,7 +175,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon }); }; - const finishRequest = (response, cacheableResponse, requestTime) => { + const finishRequest = (response, cacheableResponse?, requestTime?) => { ( requestParameters.type === 'arrayBuffer' ? response.arrayBuffer() : requestParameters.type === 'json' ? response.json() : @@ -197,7 +210,7 @@ function makeFetchRequest(requestParameters: RequestParameters, callback: Respon } function makeXMLHttpRequest(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { - const xhr: XMLHttpRequest = new window.XMLHttpRequest(); + const xhr: XMLHttpRequest = new XMLHttpRequest(); xhr.open(requestParameters.method || 'GET', requestParameters.url, true); if (requestParameters.type === 'arrayBuffer') { @@ -216,7 +229,7 @@ function makeXMLHttpRequest(requestParameters: RequestParameters, callback: Resp }; xhr.onload = () => { if (((xhr.status >= 200 && xhr.status < 300) || xhr.status === 0) && xhr.response !== null) { - let data: mixed = xhr.response; + let data: unknown = xhr.response; if (requestParameters.type === 'json') { // We're manually parsing JSON here to get better error messages. try { @@ -243,8 +256,8 @@ export const makeRequest = function(requestParameters: RequestParameters, callba // - Requests for resources with the file:// URI scheme don't work with the Fetch API either. In // this case we unconditionally use XHR on the current thread since referrers don't matter. if (/:\/\//.test(requestParameters.url) && !(/^https?:|^file:/.test(requestParameters.url))) { - if (isWorker() && self.worker && self.worker.actor) { - return self.worker.actor.send('getResource', requestParameters, callback); + if (isWorker() && (self as any).worker && (self as any).worker.actor) { + return (self as any).worker.actor.send('getResource', requestParameters, callback); } if (!isWorker()) { const protocol = requestParameters.url.substring(0, requestParameters.url.indexOf('://')); @@ -253,22 +266,25 @@ export const makeRequest = function(requestParameters: RequestParameters, callba } } if (!isFileURL(requestParameters.url)) { - if (window.fetch && window.Request && window.AbortController && window.Request.prototype.hasOwnProperty('signal')) { + if (fetch && Request && AbortController && Object.prototype.hasOwnProperty.call(Request.prototype, 'signal')) { return makeFetchRequest(requestParameters, callback); } - if (isWorker() && self.worker && self.worker.actor) { + if (isWorker() && (self as any).worker && (self as any).worker.actor) { const queueOnMainThread = true; - return self.worker.actor.send('getResource', requestParameters, callback, undefined, queueOnMainThread); + return (self as any).worker.actor.send('getResource', requestParameters, callback, undefined, queueOnMainThread); } } return makeXMLHttpRequest(requestParameters, callback); }; -export const getJSON = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { +export const getJSON = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { return makeRequest(extend(requestParameters, {type: 'json'}), callback); }; -export const getArrayBuffer = function(requestParameters: RequestParameters, callback: ResponseCallback): Cancelable { +export const getArrayBuffer = function( + requestParameters: RequestParameters, + callback: ResponseCallback +): Cancelable { return makeRequest(extend(requestParameters, {type: 'arrayBuffer'}), callback); }; @@ -284,9 +300,8 @@ function sameOrigin(url) { const transparentPngUrl = 'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAC0lEQVQYV2NgAAIAAAUAAarVyFEAAAAASUVORK5CYII='; -function arrayBufferToImage(data: ArrayBuffer, callback: (err: ?Error, image: ?HTMLImageElement) => void, cacheControl: ?string, expires: ?string) { - const img: HTMLImageElement = new window.Image(); - const URL = window.URL; +function arrayBufferToImage(data: ArrayBuffer, callback: (err?: Error | null, image?: HTMLImageElement | null) => void, cacheControl?: string | null, expires?: string | null) { + const img: HTMLImageElement = new Image(); img.onload = () => { callback(null, img); URL.revokeObjectURL(img.src); @@ -297,15 +312,15 @@ function arrayBufferToImage(data: ArrayBuffer, callback: (err: ?Error, image: ?H window.requestAnimationFrame(() => { img.src = transparentPngUrl; }); }; img.onerror = () => callback(new Error('Could not load image. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.')); - const blob: Blob = new window.Blob([new Uint8Array(data)], {type: 'image/png'}); - (img: any).cacheControl = cacheControl; - (img: any).expires = expires; + const blob: Blob = new Blob([new Uint8Array(data)], {type: 'image/png'}); + (img as any).cacheControl = cacheControl; + (img as any).expires = expires; img.src = data.byteLength ? URL.createObjectURL(blob) : transparentPngUrl; } -function arrayBufferToImageBitmap(data: ArrayBuffer, callback: (err: ?Error, image: ?ImageBitmap) => void) { - const blob: Blob = new window.Blob([new Uint8Array(data)], {type: 'image/png'}); - window.createImageBitmap(blob).then((imgBitmap) => { +function arrayBufferToImageBitmap(data: ArrayBuffer, callback: (err?: Error | null, image?: ImageBitmap | null) => void) { + const blob: Blob = new Blob([new Uint8Array(data)], {type: 'image/png'}); + createImageBitmap(blob).then((imgBitmap) => { callback(null, imgBitmap); }).catch((e) => { callback(new Error(`Could not load image because of ${e.message}. Please make sure to use a supported image type such as PNG or JPEG. Note that SVGs are not supported.`)); @@ -319,7 +334,10 @@ export const resetImageRequestQueue = () => { }; resetImageRequestQueue(); -export const getImage = function(requestParameters: RequestParameters, callback: Callback): Cancelable { +export const getImage = function( + requestParameters: RequestParameters, + callback: Callback +): Cancelable { if (webpSupported.supported) { if (!requestParameters.headers) { requestParameters.headers = {}; @@ -357,7 +375,7 @@ export const getImage = function(requestParameters: RequestParameters, callback: // request the image with XHR to work around caching issues // see https://github.com/mapbox/mapbox-gl-js/issues/1470 - const request = getArrayBuffer(requestParameters, (err: ?Error, data: ?ArrayBuffer, cacheControl: ?string, expires: ?string) => { + const request = getArrayBuffer(requestParameters, (err?: Error | null, data?: ArrayBuffer | null, cacheControl?: string | null, expires?: string | null) => { advanceImageRequestQueue(); diff --git a/src/util/browser.js b/src/util/browser.js deleted file mode 100755 index 808a6fcc5c..0000000000 --- a/src/util/browser.js +++ /dev/null @@ -1,70 +0,0 @@ -// @flow strict - -import window from './window'; -import type {Cancelable} from '../types/cancelable'; - -const now = window.performance && window.performance.now ? - window.performance.now.bind(window.performance) : - Date.now.bind(Date); - -const raf = window.requestAnimationFrame || - window.mozRequestAnimationFrame || - window.webkitRequestAnimationFrame || - window.msRequestAnimationFrame; - -const cancel = window.cancelAnimationFrame || - window.mozCancelAnimationFrame || - window.webkitCancelAnimationFrame || - window.msCancelAnimationFrame; - -let linkEl; - -let reducedMotionQuery: MediaQueryList; - -/** - * @private - */ -const exported = { - /** - * Provides a function that outputs milliseconds: either performance.now() - * or a fallback to Date.now() - */ - now, - - frame(fn: (paintStartTimestamp: number) => void): Cancelable { - const frame = raf(fn); - return {cancel: () => cancel(frame)}; - }, - - getImageData(img: CanvasImageSource, padding?: number = 0): ImageData { - const canvas = window.document.createElement('canvas'); - const context = canvas.getContext('2d'); - if (!context) { - throw new Error('failed to create canvas 2d context'); - } - canvas.width = img.width; - canvas.height = img.height; - context.drawImage(img, 0, 0, img.width, img.height); - return context.getImageData(-padding, -padding, img.width + 2 * padding, img.height + 2 * padding); - }, - - resolveURL(path: string) { - if (!linkEl) linkEl = window.document.createElement('a'); - linkEl.href = path; - return linkEl.href; - }, - - hardwareConcurrency: window.navigator && window.navigator.hardwareConcurrency || 4, - - get devicePixelRatio() { return window.devicePixelRatio; }, - get prefersReducedMotion(): boolean { - if (!window.matchMedia) return false; - //Lazily initialize media query - if (reducedMotionQuery == null) { - reducedMotionQuery = window.matchMedia('(prefers-reduced-motion: reduce)'); - } - return reducedMotionQuery.matches; - }, -}; - -export default exported; diff --git a/src/util/browser.ts b/src/util/browser.ts new file mode 100755 index 0000000000..0d060d3bd0 --- /dev/null +++ b/src/util/browser.ts @@ -0,0 +1,56 @@ +import type {Cancelable} from '../types/cancelable'; + +const now = performance && performance.now ? + performance.now.bind(performance) : + Date.now.bind(Date); + +let linkEl; + +let reducedMotionQuery: MediaQueryList; + +/** + * @private + */ +const exported = { + /** + * Provides a function that outputs milliseconds: either performance.now() + * or a fallback to Date.now() + */ + now, + + frame(fn: (paintStartTimestamp: number) => void): Cancelable { + const frame = requestAnimationFrame(fn); + return {cancel: () => cancelAnimationFrame(frame)}; + }, + + getImageData(img: CanvasImageSource, padding: number = 0): ImageData { + const canvas = window.document.createElement('canvas'); + const context = canvas.getContext('2d'); + if (!context) { + throw new Error('failed to create canvas 2d context'); + } + canvas.width = img.width as number; + canvas.height = img.height as number; + context.drawImage(img, 0, 0, img.width as number, img.height as number); + return context.getImageData(-padding, -padding, img.width as number + 2 * padding, img.height as number + 2 * padding); + }, + + resolveURL(path: string) { + if (!linkEl) linkEl = document.createElement('a'); + linkEl.href = path; + return linkEl.href; + }, + + hardwareConcurrency: navigator && navigator.hardwareConcurrency || 4, + + get prefersReducedMotion(): boolean { + if (!matchMedia) return false; + //Lazily initialize media query + if (reducedMotionQuery == null) { + reducedMotionQuery = matchMedia('(prefers-reduced-motion: reduce)'); + } + return reducedMotionQuery.matches; + }, +}; + +export default exported; diff --git a/src/util/browser/web_worker.js b/src/util/browser/web_worker.js deleted file mode 100644 index 3d1314da10..0000000000 --- a/src/util/browser/web_worker.js +++ /dev/null @@ -1,10 +0,0 @@ -// @flow - -import window from '../window'; -import mapboxgl from '../../'; - -import type {WorkerInterface} from '../web_worker'; - -export default function (): WorkerInterface { - return (new window.Worker(mapboxgl.workerUrl): any); -} diff --git a/src/util/browser/window.js b/src/util/browser/window.js deleted file mode 100644 index d2ceea5613..0000000000 --- a/src/util/browser/window.js +++ /dev/null @@ -1,6 +0,0 @@ -// @flow -/* eslint-env browser */ -import type {Window} from '../../types/window'; - -// shim window for the case of requiring the browser bundle in Node -export default typeof self !== 'undefined' ? (self: Window) : (({}: any): Window); diff --git a/src/util/classify_rings.js b/src/util/classify_rings.ts similarity index 89% rename from src/util/classify_rings.js rename to src/util/classify_rings.ts index 3d18b60fca..738ffb82b5 100644 --- a/src/util/classify_rings.js +++ b/src/util/classify_rings.ts @@ -1,10 +1,8 @@ -// @flow - import quickselect from 'quickselect'; import {calculateSignedArea} from './util'; -import type Point from '@mapbox/point-geometry'; +import type Point from './point'; // classifies an array of rings into polygons with outer rings and holes export default function classifyRings(rings: Array>, maxRings: number) { @@ -20,7 +18,7 @@ export default function classifyRings(rings: Array>, maxRings: numb const area = calculateSignedArea(rings[i]); if (area === 0) continue; - (rings[i]: any).area = Math.abs(area); + (rings[i] as any).area = Math.abs(area); if (ccw === undefined) ccw = area < 0; @@ -29,7 +27,7 @@ export default function classifyRings(rings: Array>, maxRings: numb polygon = [rings[i]]; } else { - (polygon: any).push(rings[i]); + (polygon as any).push(rings[i]); } } if (polygon) polygons.push(polygon); diff --git a/src/util/color_ramp.js b/src/util/color_ramp.ts similarity index 89% rename from src/util/color_ramp.js rename to src/util/color_ramp.ts index 24dc075869..37b14de3f8 100644 --- a/src/util/color_ramp.js +++ b/src/util/color_ramp.ts @@ -1,5 +1,3 @@ -// @flow - import {RGBAImage} from './image'; import {isPowerOfTwo} from './util'; import assert from 'assert'; @@ -7,12 +5,12 @@ import assert from 'assert'; import type {StylePropertyExpression} from '../style-spec/expression/index'; export type ColorRampParams = { - expression: StylePropertyExpression; - evaluationKey: string; - resolution?: number; - image?: RGBAImage; - clips?: Array; -} + expression: StylePropertyExpression; + evaluationKey: string; + resolution?: number; + image?: RGBAImage; + clips?: Array; +}; /** * Given an expression that should evaluate to a color ramp, @@ -30,7 +28,7 @@ export function renderColorRamp(params: ColorRampParams): RGBAImage { const renderPixel = (stride, index, progress) => { evaluationGlobals[params.evaluationKey] = progress; - const pxColor = params.expression.evaluate((evaluationGlobals: any)); + const pxColor = params.expression.evaluate(evaluationGlobals as any); // the colors are being unpremultiplied because Color uses // premultiplied values, and the Texture class expects unpremultiplied ones image.data[stride + index + 0] = Math.floor(pxColor.r * 255 / pxColor.a); diff --git a/src/util/config.js b/src/util/config.ts similarity index 71% rename from src/util/config.js rename to src/util/config.ts index 95d559d313..e23fcb053f 100644 --- a/src/util/config.js +++ b/src/util/config.ts @@ -1,14 +1,12 @@ -// @flow - -type Config = {| - API_URL: string, - EVENTS_URL: ?string, - FEEDBACK_URL: string, - REQUIRE_ACCESS_TOKEN: boolean, - ACCESS_TOKEN: ?string, - MAX_PARALLEL_IMAGE_REQUESTS: number, - REGISTERED_PROTOCOLS: { [string]: any }, -|}; +type Config = { + API_URL: string; + EVENTS_URL: string | undefined | null; + FEEDBACK_URL: string; + REQUIRE_ACCESS_TOKEN: boolean; + ACCESS_TOKEN: string | undefined | null; + MAX_PARALLEL_IMAGE_REQUESTS: number; + REGISTERED_PROTOCOLS: {[x: string]: any}; +}; const config: Config = { API_URL: 'https://api.mapbox.com', diff --git a/src/util/debug.js b/src/util/debug.ts similarity index 81% rename from src/util/debug.js rename to src/util/debug.ts index e26672e747..4788b07699 100644 --- a/src/util/debug.js +++ b/src/util/debug.ts @@ -1,6 +1,4 @@ -// @flow import {extend} from './util'; -import window from './window'; /** * This is a private namespace for utility functions that will get automatically stripped @@ -9,7 +7,7 @@ import window from './window'; * @private */ export const Debug = { - extend(dest: Object, ...sources: Array): Object { + extend(dest: any, ...sources: Array): any { return extend(dest, ...sources); }, @@ -17,7 +15,7 @@ export const Debug = { fn(); }, - logToElement(message: string, overwrite: boolean = false, id: string = "log") { + logToElement(message: string, overwrite: boolean = false, id: string = 'log') { const el = window.document.getElementById(id); if (el) { if (overwrite) el.innerHTML = ''; diff --git a/src/util/dictionary_coder.js b/src/util/dictionary_coder.ts similarity index 91% rename from src/util/dictionary_coder.js rename to src/util/dictionary_coder.ts index 320eb3548f..f38df1e14b 100644 --- a/src/util/dictionary_coder.js +++ b/src/util/dictionary_coder.ts @@ -1,9 +1,7 @@ -// @flow strict - import assert from 'assert'; class DictionaryCoder { - _stringToNumber: {[_: string]: number }; + _stringToNumber: {[_: string]: number}; _numberToString: Array; constructor(strings: Array) { diff --git a/src/util/dispatcher.js b/src/util/dispatcher.ts similarity index 93% rename from src/util/dispatcher.js rename to src/util/dispatcher.ts index 7a184f8489..87ce40f4f2 100644 --- a/src/util/dispatcher.js +++ b/src/util/dispatcher.ts @@ -1,5 +1,3 @@ -// @flow - import {uniqueId, asyncAll} from './util'; import Actor from './actor'; import assert from 'assert'; @@ -19,7 +17,9 @@ class Dispatcher { id: number; // exposed to allow stubbing in unit tests - static Actor: Class; + static Actor: { + new (...args: any): Actor; + }; constructor(workerPool: WorkerPool, parent: any) { this.workerPool = workerPool; @@ -40,7 +40,7 @@ class Dispatcher { * Broadcast a message to all Workers. * @private */ - broadcast(type: string, data: mixed, cb?: Function) { + broadcast(type: string, data: unknown, cb?: (...args: any[]) => any) { assert(this.actors.length); cb = cb || function () {}; asyncAll(this.actors, (actor, done) => { diff --git a/src/util/dom.js b/src/util/dom.ts similarity index 64% rename from src/util/dom.js rename to src/util/dom.ts index 34e2af64f8..989dbad04e 100644 --- a/src/util/dom.js +++ b/src/util/dom.ts @@ -1,14 +1,32 @@ -// @flow strict +import Point from './point'; -import Point from '@mapbox/point-geometry'; - -import window from './window'; import assert from 'assert'; -const DOM = {}; +interface DOMInterface { + create(tagName: string, className?: string | undefined | null, container?: HTMLElement): HTMLElement; + createNS(namespaceURI: string, tagName: string); + disableDrag(); + enableDrag(); + setTransform(el: HTMLElement, value: string); + addEventListener(target: any, type: any, callback: any, options?: void | { + passive?: boolean; + capture?: boolean; + }); + removeEventListener(target: any, type: any, callback: any, options?: void | { + passive?: boolean; + capture?: boolean; + }); + suppressClick(); + mousePos(el: HTMLElement, e: MouseEvent | Touch); + touchPos(el: HTMLElement, touches: TouchList); + mouseButton(e: MouseEvent); + remove(node: HTMLElement); +} + +const DOM = {} as DOMInterface; export default DOM; -DOM.create = function (tagName: string, className: ?string, container?: HTMLElement) { +DOM.create = function (tagName: string, className: string | undefined | null, container?: HTMLElement) { const el = window.document.createElement(tagName); if (className !== undefined) el.className = className; if (container) container.appendChild(el); @@ -56,33 +74,22 @@ DOM.setTransform = function(el: HTMLElement, value: string) { el.style[transformProp] = value; }; -// Feature detection for {passive: false} support in add/removeEventListener. -let passiveSupported = false; - -try { - // https://github.com/facebook/flow/issues/285 - // $FlowFixMe - const options = Object.defineProperty({}, "passive", { - get() { // eslint-disable-line - passiveSupported = true; - } - }); - window.addEventListener("test", options, options); - window.removeEventListener("test", options, options); -} catch (err) { - passiveSupported = false; -} - -DOM.addEventListener = function(target: *, type: *, callback: *, options: {passive?: boolean, capture?: boolean} = {}) { - if ('passive' in options && passiveSupported) { +DOM.addEventListener = function(target: any, type: any, callback: any, options: { + passive?: boolean; + capture?: boolean; +} = {}) { + if ('passive' in options) { target.addEventListener(type, callback, options); } else { target.addEventListener(type, callback, options.capture); } }; -DOM.removeEventListener = function(target: *, type: *, callback: *, options: {passive?: boolean, capture?: boolean} = {}) { - if ('passive' in options && passiveSupported) { +DOM.removeEventListener = function(target: any, type: any, callback: any, options: { + passive?: boolean; + capture?: boolean; +} = {}) { + if ('passive' in options) { target.removeEventListener(type, callback, options); } else { target.removeEventListener(type, callback, options.capture); @@ -90,7 +97,7 @@ DOM.removeEventListener = function(target: *, type: *, callback: *, options: {pa }; // Suppress the next click, but only if it's immediate. -const suppressClick: MouseEventListener = function (e) { +const suppressClick: EventListener = function (e) { e.preventDefault(); e.stopPropagation(); window.removeEventListener('click', suppressClick, true); @@ -103,7 +110,7 @@ DOM.suppressClick = function() { }, 0); }; -DOM.mousePos = function (el: HTMLElement, e: MouseEvent | window.TouchEvent | Touch) { +DOM.mousePos = function (el: HTMLElement, e: MouseEvent | Touch) { const rect = el.getBoundingClientRect(); return new Point( e.clientX - rect.left - el.clientLeft, @@ -125,13 +132,6 @@ DOM.touchPos = function (el: HTMLElement, touches: TouchList) { DOM.mouseButton = function (e: MouseEvent) { assert(e.type === 'mousedown' || e.type === 'mouseup'); - if (typeof window.InstallTrigger !== 'undefined' && e.button === 2 && e.ctrlKey && - window.navigator.platform.toUpperCase().indexOf('MAC') >= 0) { - // Fix for https://github.com/mapbox/mapbox-gl-js/issues/3131: - // Firefox (detected by InstallTrigger) on Mac determines e.button = 2 when - // using Control + left click - return 0; - } return e.button; }; diff --git a/src/util/evented.js b/src/util/evented.ts similarity index 88% rename from src/util/evented.js rename to src/util/evented.ts index de05d10921..615ebecc6a 100644 --- a/src/util/evented.js +++ b/src/util/evented.ts @@ -1,9 +1,8 @@ -// @flow - import {extend} from './util'; -type Listener = (Object) => any; -type Listeners = {[_: string]: Array }; +export type Listener = (a: any) => any; + +type Listeners = {[_: string]: Array}; function _addEventListener(type: string, listener: Listener, listenerList: Listeners) { const listenerExists = listenerList[type] && listenerList[type].indexOf(listener) !== -1; @@ -23,22 +22,22 @@ function _removeEventListener(type: string, listener: Listener, listenerList: Li } export class Event { - +type: string; + readonly type: string; - constructor(type: string, data: Object = {}) { + constructor(type: string, data: any = {}) { extend(this, data); this.type = type; } } interface ErrorLike { - message: string; + message: string; } export class ErrorEvent extends Event { error: ErrorLike; - constructor(error: ErrorLike, data: Object = {}) { + constructor(error: ErrorLike, data: any = {}) { super('error', extend({error}, data)); } } @@ -51,8 +50,8 @@ export class ErrorEvent extends Event { export class Evented { _listeners: Listeners; _oneTimeListeners: Listeners; - _eventedParent: ?Evented; - _eventedParentData: ?(Object | () => Object); + _eventedParent: Evented | undefined | null; + _eventedParentData: any | (() => any) | undefined | null; /** * Adds a listener to a specified event type. @@ -63,7 +62,7 @@ export class Evented { * extended with `target` and `type` properties. * @returns {Object} `this` */ - on(type: *, listener: Listener): this { + on(type: string, listener: Listener): this { this._listeners = this._listeners || {}; _addEventListener(type, listener, this._listeners); @@ -77,7 +76,7 @@ export class Evented { * @param {Function} listener The listener function to remove. * @returns {Object} `this` */ - off(type: *, listener: Listener) { + off(type: string, listener: Listener) { _removeEventListener(type, listener, this._listeners); _removeEventListener(type, listener, this._oneTimeListeners); @@ -93,14 +92,14 @@ export class Evented { * @param {Function} listener The function to be called when the event is fired the first time. * @returns {Object} `this` */ - once(type: *, listener: Listener) { + once(type: string, listener: Listener) { this._oneTimeListeners = this._oneTimeListeners || {}; _addEventListener(type, listener, this._oneTimeListeners); return this; } - fire(event: Event, properties?: Object) { + fire(event: Event, properties?: any) { // Compatibility with (type: string, properties: Object) signature from previous versions. // See https://github.com/mapbox/mapbox-gl-js/issues/6522, // https://github.com/mapbox/mapbox-gl-draw/issues/766 @@ -111,7 +110,7 @@ export class Evented { const type = event.type; if (this.listens(type)) { - (event: any).target = this; + (event as any).target = this; // make sure adding or removing listeners inside other listeners won't cause an infinite loop const listeners = this._listeners && this._listeners[type] ? this._listeners[type].slice() : []; @@ -165,7 +164,7 @@ export class Evented { * @returns {Object} `this` * @private */ - setEventedParent(parent: ?Evented, data?: Object | () => Object) { + setEventedParent(parent?: Evented | null, data?: any | (() => any)) { this._eventedParent = parent; this._eventedParentData = data; diff --git a/src/util/find_pole_of_inaccessibility.js b/src/util/find_pole_of_inaccessibility.ts similarity index 96% rename from src/util/find_pole_of_inaccessibility.js rename to src/util/find_pole_of_inaccessibility.ts index 5bf8c1c44c..d5a3392e1f 100644 --- a/src/util/find_pole_of_inaccessibility.js +++ b/src/util/find_pole_of_inaccessibility.ts @@ -1,8 +1,6 @@ -// @flow - import Queue from 'tinyqueue'; -import Point from '@mapbox/point-geometry'; +import Point from './point'; import {distToSegmentSquared} from './intersection_tests'; /** @@ -15,7 +13,11 @@ import {distToSegmentSquared} from './intersection_tests'; * @returns Pole of Inaccessibiliy. * @private */ -export default function (polygonRings: Array>, precision?: number = 1, debug?: boolean = false): Point { +export default function( + polygonRings: Array>, + precision: number = 1, + debug: boolean = false +): Point { // find the bounding box of the outer ring let minX = Infinity, minY = Infinity, maxX = -Infinity, maxY = -Infinity; const outerRing = polygonRings[0]; diff --git a/src/util/global_worker_pool.js b/src/util/global_worker_pool.ts similarity index 99% rename from src/util/global_worker_pool.js rename to src/util/global_worker_pool.ts index 3fb1d06258..9c814d47a9 100644 --- a/src/util/global_worker_pool.js +++ b/src/util/global_worker_pool.ts @@ -1,5 +1,3 @@ -// @flow - import WorkerPool, {PRELOAD_POOL_ID} from './worker_pool'; let globalWorkerPool; diff --git a/src/util/image.js b/src/util/image.ts similarity index 90% rename from src/util/image.js rename to src/util/image.ts index 2ef55d0139..f37fabf3e9 100644 --- a/src/util/image.js +++ b/src/util/image.ts @@ -1,20 +1,21 @@ -// @flow - import assert from 'assert'; import {register} from './web_worker_transfer'; export type Size = { - width: number, - height: number + width: number; + height: number; }; type Point = { - x: number, - y: number + x: number; + y: number; }; -function createImage(image: *, {width, height}: Size, channels: number, data?: Uint8Array | Uint8ClampedArray) { +function createImage(image: any, { + width, + height +}: Size, channels: number, data?: Uint8Array | Uint8ClampedArray) { if (!data) { data = new Uint8Array(width * height * channels); } else if (data instanceof Uint8ClampedArray) { @@ -28,7 +29,10 @@ function createImage(image: *, {width, height}: Size, channels: number, data?: U return image; } -function resizeImage(image: *, {width, height}: Size, channels: number) { +function resizeImage(image: any, { + width, + height +}: Size, channels: number) { if (width === image.width && height === image.height) { return; } @@ -45,7 +49,7 @@ function resizeImage(image: *, {width, height}: Size, channels: number) { image.data = newImage.data; } -function copyImage(srcImg: *, dstImg: *, srcPt: Point, dstPt: Point, size: Size, channels: number) { +function copyImage(srcImg: any, dstImg: any, srcPt: Point, dstPt: Point, size: Size, channels: number) { if (size.width === 0 || size.height === 0) { return dstImg; } diff --git a/src/util/intersection_tests.js b/src/util/intersection_tests.ts similarity index 99% rename from src/util/intersection_tests.js rename to src/util/intersection_tests.ts index d79f6f744b..c53f2b7043 100644 --- a/src/util/intersection_tests.js +++ b/src/util/intersection_tests.ts @@ -1,8 +1,6 @@ -// @flow - import {isCounterClockwise} from './util'; -import Point from '@mapbox/point-geometry'; +import Point from './point'; export {polygonIntersectsBufferedPoint, polygonIntersectsMultiPolygon, polygonIntersectsBufferedMultiLine, polygonIntersectsPolygon, distToSegmentSquared, polygonIntersectsBox}; diff --git a/src/util/is_char_in_unicode_block.js b/src/util/is_char_in_unicode_block.ts similarity index 99% rename from src/util/is_char_in_unicode_block.js rename to src/util/is_char_in_unicode_block.ts index 427f741d19..2a908a5429 100644 --- a/src/util/is_char_in_unicode_block.js +++ b/src/util/is_char_in_unicode_block.ts @@ -1,5 +1,3 @@ -// @flow - // The following table comes from . // Keep it synchronized with . diff --git a/src/util/mapbox.js b/src/util/mapbox.ts similarity index 91% rename from src/util/mapbox.js rename to src/util/mapbox.ts index 5af7453fff..5b71c7bce9 100644 --- a/src/util/mapbox.js +++ b/src/util/mapbox.ts @@ -1,5 +1,3 @@ -// @flow - /***** START WARNING - IF YOU USE THIS CODE WITH MAPBOX MAPPING APIS, REMOVAL OR * MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ****** * The following code is used to access Mapbox's Mapping APIs. Removal or modification @@ -15,33 +13,30 @@ import config from './config'; -import browser from './browser'; -import window from './window'; import webpSupported from './webp_supported'; import {createSkuToken, SKU_ID} from './sku_token'; -import {version as sdkVersion} from '../../package.json'; import {uuid, validateUuid, storageAvailable, b64DecodeUnicode, b64EncodeUnicode, warnOnce, extend} from './util'; -import {postData, ResourceType} from './ajax'; +import {postData, IResourceType} from './ajax'; import type {RequestParameters} from './ajax'; import type {Cancelable} from '../types/cancelable'; import type {TileJSON} from '../types/tilejson'; -type ResourceTypeEnum = $Keys; +type ResourceTypeEnum = keyof IResourceType; export type RequestTransformFunction = (url: string, resourceType?: ResourceTypeEnum) => RequestParameters; -type UrlObject = {| - protocol: string, - authority: string, - path: string, - params: Array -|}; +type UrlObject = { + protocol: string; + authority: string; + path: string; + params: Array; +}; export class RequestManager { _skuToken: string; _skuTokenExpiresAt: number; - _transformRequestFn: ?RequestTransformFunction; - _customAccessToken: ?string; + _transformRequestFn: RequestTransformFunction | undefined | null; + _customAccessToken: string | undefined | null; constructor(transformRequestFn?: RequestTransformFunction, customAccessToken?: string) { this._transformRequestFn = transformRequestFn; @@ -101,7 +96,7 @@ export class RequestManager { return this._makeAPIURL(urlObject, this._customAccessToken || accessToken); } - normalizeTileURL(tileURL: string, tileSize?: ?number): string { + normalizeTileURL(tileURL: string, tileSize?: number | null): string { if (this._isSkuTokenExpired()) { this._createSkuToken(); } @@ -115,7 +110,7 @@ export class RequestManager { // The v4 mapbox tile API supports 512x512 image tiles only when @2x // is appended to the tile URL. If `tileSize: 512` is specified for // a Mapbox raster source force the @2x suffix even if a non hidpi device. - const suffix = browser.devicePixelRatio >= 2 || tileSize === 512 ? '@2x' : ''; + const suffix = devicePixelRatio >= 2 || tileSize === 512 ? '@2x' : ''; const extension = webpSupported.supported ? '.webp' : '$1'; urlObject.path = urlObject.path.replace(imageExtensionRe, `${suffix}${extension}`); urlObject.path = urlObject.path.replace(tileURLAPIPrefixRe, '/'); @@ -130,7 +125,7 @@ export class RequestManager { } canonicalizeTileURL(url: string, removeAccessToken: boolean) { - const version = "/v4/"; + const version = '/v4/'; // matches any file extension specified by a dot and one or more alphanumeric characters const extensionRe = /\.[\w]+$/; @@ -142,7 +137,7 @@ export class RequestManager { return url; } // Reassemble the canonical URL from the parts we've parsed before. - let result = "mapbox://tiles/"; + let result = 'mapbox://tiles/'; result += urlObject.path.replace(version, ''); // Append the query string, minus the access token parameter. @@ -247,7 +242,7 @@ export {isMapboxURL, isMapboxHTTPURL, hasCacheDefeatingSku}; const telemEventKey = 'mapbox.eventData'; -function parseAccessToken(accessToken: ?string) { +function parseAccessToken(accessToken?: string | null) { if (!accessToken) { return null; } @@ -269,11 +264,11 @@ type TelemetryEventType = 'appUserTurnstile' | 'map.load'; class TelemetryEvent { eventData: any; - anonId: ?string; + anonId: string | undefined | null; queue: Array; type: TelemetryEventType; - pendingRequest: ?Cancelable; - _customAccessToken: ?string; + pendingRequest: Cancelable | undefined | null; + _customAccessToken: string | undefined | null; constructor(type: TelemetryEventType) { this.type = type; @@ -283,7 +278,7 @@ class TelemetryEvent { this.pendingRequest = null; } - getStorageKey(domain: ?string) { + getStorageKey(domain?: string | null) { const tokenData = parseAccessToken(config.ACCESS_TOKEN); let u = ''; if (tokenData && tokenData['u']) { @@ -334,23 +329,27 @@ class TelemetryEvent { } - processRequests(_: ?string) {} + processRequests(_?: string | null) {} /* * If any event data should be persisted after the POST request, the callback should modify eventData` * to the values that should be saved. For this reason, the callback should be invoked prior to the call * to TelemetryEvent#saveData */ - postEvent(timestamp: number, additionalPayload: {[_: string]: any}, callback: (err: ?Error) => void, customAccessToken?: ?string) { + postEvent( + timestamp: number, + additionalPayload: {[_: string]: any}, + callback: (err?: Error | null) => void, + customAccessToken?: string | null + ) { if (!config.EVENTS_URL) return; const eventsUrlObject: UrlObject = parseUrl(config.EVENTS_URL); eventsUrlObject.params.push(`access_token=${customAccessToken || config.ACCESS_TOKEN || ''}`); - const payload: Object = { + const payload: any = { event: this.type, created: new Date(timestamp).toISOString(), sdkIdentifier: 'mapbox-gl-js', - sdkVersion, skuId: SKU_ID, userId: this.anonId }; @@ -372,14 +371,19 @@ class TelemetryEvent { }); } - queueRequest(event: number | {id: number, timestamp: number}, customAccessToken?: ?string) { + queueRequest(event: number | { + id: number; + timestamp: number; + }, customAccessToken?: string | null) { this.queue.push(event); this.processRequests(customAccessToken); } } export class MapLoadEvent extends TelemetryEvent { - +success: {[_: number]: boolean}; + readonly success: { + [_: number]: boolean; + }; skuToken: string; constructor() { @@ -401,7 +405,7 @@ export class MapLoadEvent extends TelemetryEvent { } } - processRequests(customAccessToken?: ?string) { + processRequests(customAccessToken?: string | null) { if (this.pendingRequest || this.queue.length === 0) return; const {id, timestamp} = this.queue.shift(); @@ -425,12 +429,12 @@ export class MapLoadEvent extends TelemetryEvent { } export class TurnstileEvent extends TelemetryEvent { - constructor(customAccessToken?: ?string) { + constructor(customAccessToken?: string | null) { super('appUserTurnstile'); this._customAccessToken = customAccessToken; } - postTurnstileEvent(tileUrls: Array, customAccessToken?: ?string) { + postTurnstileEvent(tileUrls: Array, customAccessToken?: string | null) { //Enabled only when Mapbox Access Token is set and a source uses // mapbox tiles. if (config.EVENTS_URL && @@ -441,7 +445,7 @@ export class TurnstileEvent extends TelemetryEvent { } } - processRequests(customAccessToken?: ?string) { + processRequests(customAccessToken?: string | null) { if (this.pendingRequest || this.queue.length === 0) { return; } @@ -476,7 +480,7 @@ export class TurnstileEvent extends TelemetryEvent { return this.processRequests(); } - this.postEvent(nextUpdate, {"enabled.telemetry": false}, (err) => { + this.postEvent(nextUpdate, {'enabled.telemetry': false}, (err) => { if (!err) { this.eventData.lastSuccess = nextUpdate; this.eventData.tokenU = tokenU; diff --git a/src/util/offscreen_canvas_supported.js b/src/util/offscreen_canvas_supported.js deleted file mode 100644 index 4ec6b188d0..0000000000 --- a/src/util/offscreen_canvas_supported.js +++ /dev/null @@ -1,14 +0,0 @@ -// @flow -import window from './window'; - -let supportsOffscreenCanvas: ?boolean; - -export default function offscreenCanvasSupported(): boolean { - if (supportsOffscreenCanvas == null) { - supportsOffscreenCanvas = window.OffscreenCanvas && - new window.OffscreenCanvas(1, 1).getContext('2d') && - typeof window.createImageBitmap === 'function'; - } - - return supportsOffscreenCanvas; -} diff --git a/src/util/offscreen_canvas_supported.ts b/src/util/offscreen_canvas_supported.ts new file mode 100644 index 0000000000..44ddadc559 --- /dev/null +++ b/src/util/offscreen_canvas_supported.ts @@ -0,0 +1,11 @@ +let supportsOffscreenCanvas: boolean | undefined | null; + +export default function offscreenCanvasSupported(): boolean { + if (supportsOffscreenCanvas == null) { + supportsOffscreenCanvas = OffscreenCanvas && + new OffscreenCanvas(1, 1).getContext('2d') && + typeof createImageBitmap === 'function'; + } + + return supportsOffscreenCanvas; +} diff --git a/src/util/performance.js b/src/util/performance.ts similarity index 80% rename from src/util/performance.js rename to src/util/performance.ts index 0b6a26c377..be666d172e 100644 --- a/src/util/performance.js +++ b/src/util/performance.ts @@ -1,23 +1,18 @@ -// @flow - -import window from '../util/window'; import type {RequestParameters} from '../util/ajax'; -const performance = window.performance; - export type PerformanceMetrics = { - loadTime: number, - fullLoadTime: number, - fps: number, - percentDroppedFrames: number -} - -export const PerformanceMarkers = { - create: 'create', - load: 'load', - fullLoad: 'fullLoad' + loadTime: number; + fullLoadTime: number; + fps: number; + percentDroppedFrames: number; }; +export enum PerformanceMarkers { + create = 'create', + load = 'load', + fullLoad = 'fullLoad' +} + let lastFrameTime = null; let frameTimes = []; @@ -25,7 +20,7 @@ const minFramerateTarget = 30; const frameTimeTarget = 1000 / minFramerateTarget; export const PerformanceUtils = { - mark(marker: $Keys) { + mark(marker: PerformanceMarkers) { performance.mark(marker); }, frame(timestamp: number) { @@ -47,8 +42,10 @@ export const PerformanceUtils = { } }, getPerformanceMetrics(): PerformanceMetrics { - const loadTime = performance.measure('loadTime', PerformanceMarkers.create, PerformanceMarkers.load).duration; - const fullLoadTime = performance.measure('fullLoadTime', PerformanceMarkers.create, PerformanceMarkers.fullLoad).duration; + performance.measure('loadTime', PerformanceMarkers.create, PerformanceMarkers.load); + performance.measure('fullLoadTime', PerformanceMarkers.create, PerformanceMarkers.fullLoad); + const loadTime = performance.getEntriesByName('loadTime')[0].duration; + const fullLoadTime = performance.getEntriesByName('fullLoadTime')[0].duration; const totalFrames = frameTimes.length; const avgFrameTime = frameTimes.reduce((prev, curr) => prev + curr, 0) / totalFrames / 1000; @@ -78,7 +75,11 @@ export const PerformanceUtils = { * @private */ export class RequestPerformance { - _marks: {start: string, end: string, measure: string}; + _marks: { + start: string; + end: string; + measure: string; + }; constructor (request: RequestParameters) { this._marks = { diff --git a/src/util/point.ts b/src/util/point.ts new file mode 100644 index 0000000000..99347913a3 --- /dev/null +++ b/src/util/point.ts @@ -0,0 +1,342 @@ +// based on '@mapbox/point-geometry'; + +/* +Copyright (c) 2015, Mapbox <> + +Permission to use, copy, modify, and/or distribute this software for any +purpose with or without fee is hereby granted, provided that the above +copyright notice and this permission notice appear in all copies. + +THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. +*/ + +import {register} from './web_worker_transfer'; + +/** + * A standalone point geometry with useful accessor, comparison, and + * modification methods. + * + * @class Point + * @param {Number} x the x-coordinate. this could be longitude or screen + * pixels, or any other sort of unit. + * @param {Number} y the y-coordinate. this could be latitude or screen + * pixels, or any other sort of unit. + * @example + * var point = new Point(-77, 38); + */ + +export type PointLike = Point | [number, number]; + +class Point { + x: number; + y: number; + + constructor(x: number, y: number) { + this.x = x; + this.y = y; + } + + /** + * Clone this point, returning a new point that can be modified + * without affecting the old one. + * @returns {Point} the clone + */ + clone() { return new Point(this.x, this.y); } + + /** + * Add this point's x & y coordinates to another point, + * yielding a new point. + * @param {Point} p the other point + * @returns {Point} output point + */ + add(p) { return this.clone()._add(p); } + + /** + * Subtract this point's x & y coordinates to from point, + * yielding a new point. + * @param {Point} p the other point + * @returns {Point} output point + */ + sub(p) { return this.clone()._sub(p); } + + /** + * Multiply this point's x & y coordinates by point, + * yielding a new point. + * @param {Point} p the other point + * @returns {Point} output point + */ + multByPoint(p) { return this.clone()._multByPoint(p); } + + /** + * Divide this point's x & y coordinates by point, + * yielding a new point. + * @param {Point} p the other point + * @returns {Point} output point + */ + divByPoint(p) { return this.clone()._divByPoint(p); } + + /** + * Multiply this point's x & y coordinates by a factor, + * yielding a new point. + * @param {Point} k factor + * @returns {Point} output point + */ + mult(k) { return this.clone()._mult(k); } + + /** + * Divide this point's x & y coordinates by a factor, + * yielding a new point. + * @param {Point} k factor + * @returns {Point} output point + */ + div(k) { return this.clone()._div(k); } + + /** + * Rotate this point around the 0, 0 origin by an angle a, + * given in radians + * @param {Number} a angle to rotate around, in radians + * @returns {Point} output point + */ + rotate(a) { return this.clone()._rotate(a); } + + /** + * Rotate this point around p point by an angle a, + * given in radians + * @param {Number} a angle to rotate around, in radians + * @param {Point} p Point to rotate around + * @returns {Point} output point + */ + rotateAround(a, p) { return this.clone()._rotateAround(a, p); } + + /** + * Multiply this point by a 4x1 transformation matrix + * @param {Array} m transformation matrix + * @returns {Point} output point + */ + matMult(m) { return this.clone()._matMult(m); } + + /** + * Calculate this point but as a unit vector from 0, 0, meaning + * that the distance from the resulting point to the 0, 0 + * coordinate will be equal to 1 and the angle from the resulting + * point to the 0, 0 coordinate will be the same as before. + * @returns {Point} unit vector point + */ + unit() { return this.clone()._unit(); } + + /** + * Compute a perpendicular point, where the new y coordinate + * is the old x coordinate and the new x coordinate is the old y + * coordinate multiplied by -1 + * @returns {Point} perpendicular point + */ + perp() { return this.clone()._perp(); } + + /** + * Return a version of this point with the x & y coordinates + * rounded to integers. + * @returns {Point} rounded point + */ + round() { return this.clone()._round(); } + + /** + * Return the magitude of this point: this is the Euclidean + * distance from the 0, 0 coordinate to this point's x and y + * coordinates. + * @returns {Number} magnitude + */ + mag() { + return Math.sqrt(this.x * this.x + this.y * this.y); + } + + /** + * Judge whether this point is equal to another point, returning + * true or false. + * @param {Point} other the other point + * @returns {boolean} whether the points are equal + */ + equals(other) { + return this.x === other.x && + this.y === other.y; + } + + /** + * Calculate the distance from this point to another point + * @param {Point} p the other point + * @returns {Number} distance + */ + dist(p) { + return Math.sqrt(this.distSqr(p)); + } + + /** + * Calculate the distance from this point to another point, + * without the square root step. Useful if you're comparing + * relative distances. + * @param {Point} p the other point + * @returns {Number} distance + */ + distSqr(p) { + const dx = p.x - this.x; + const dy = p.y - this.y; + return dx * dx + dy * dy; + } + + /** + * Get the angle from the 0, 0 coordinate to this point, in radians + * coordinates. + * @returns {Number} angle + */ + angle() { + return Math.atan2(this.y, this.x); + } + + /** + * Get the angle from this point to another point, in radians + * @param {Point} b the other point + * @returns {Number} angle + */ + angleTo(b) { + return Math.atan2(this.y - b.y, this.x - b.x); + } + + /** + * Get the angle between this point and another point, in radians + * @param {Point} b the other point + * @returns {Number} angle + */ + angleWith(b) { + return this.angleWithSep(b.x, b.y); + } + + /* + * Find the angle of the two vectors, solving the formula for + * the cross product a x b = |a||b|sin(θ) for θ. + * @param {Number} x the x-coordinate + * @param {Number} y the y-coordinate + * @returns {Number} the angle in radians + */ + angleWithSep(x, y) { + return Math.atan2( + this.x * y - this.y * x, + this.x * x + this.y * y); + } + + _matMult(m) { + const x = m[0] * this.x + m[1] * this.y; + const y = m[2] * this.x + m[3] * this.y; + this.x = x; + this.y = y; + return this; + } + + _add(p) { + this.x += p.x; + this.y += p.y; + return this; + } + + _sub(p) { + this.x -= p.x; + this.y -= p.y; + return this; + } + + _mult(k) { + this.x *= k; + this.y *= k; + return this; + } + + _div(k) { + this.x /= k; + this.y /= k; + return this; + } + + _multByPoint(p) { + this.x *= p.x; + this.y *= p.y; + return this; + } + + _divByPoint(p) { + this.x /= p.x; + this.y /= p.y; + return this; + } + + _unit() { + this._div(this.mag()); + return this; + } + + _perp() { + const y = this.y; + this.y = this.x; + this.x = -y; + return this; + } + + _rotate(angle) { + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const x = cos * this.x - sin * this.y; + const y = sin * this.x + cos * this.y; + + this.x = x; + this.y = y; + return this; + } + + _rotateAround(angle, p) { + const cos = Math.cos(angle); + const sin = Math.sin(angle); + const x = p.x + cos * (this.x - p.x) - sin * (this.y - p.y); + const y = p.y + sin * (this.x - p.x) + cos * (this.y - p.y); + + this.x = x; + this.y = y; + return this; + } + + _round() { + this.x = Math.round(this.x); + this.y = Math.round(this.y); + return this; + } + + /** + * Construct a point from an array if necessary, otherwise if the input + * is already a Point, or an unknown type, return it unchanged + * @param {Array|Point|*} a any kind of input value + * @returns {Point} constructed point, or passed-through value. + * @example + * // this + * var point = Point.convert([0, 1]); + * // is equivalent to + * var point = new Point(0, 1); + */ + static convert(a: PointLike | {x: number; y: number}): Point { + if (a instanceof Point) { + return a; + } + if (Array.isArray(a)) { + return new Point(a[0], a[1]); + } + if (typeof a.x === 'number') { + return new Point(a.x, a.y); + } + throw new Error(`Unable to convert to point: ${JSON.stringify(a)}`); + } +} + +register('Point', Point); + +export default Point; diff --git a/src/util/primitives.js b/src/util/primitives.ts similarity index 65% rename from src/util/primitives.js rename to src/util/primitives.ts index b1cd69e6fe..80fff8b198 100644 --- a/src/util/primitives.js +++ b/src/util/primitives.ts @@ -1,35 +1,28 @@ -// @flow - -import {vec3, vec4} from 'gl-matrix'; +import {mat4, vec3, vec4} from 'gl-matrix'; import assert from 'assert'; class Frustum { - points: Array>; - planes: Array>; - constructor(points_: Array>, planes_: Array>) { - this.points = points_; - this.planes = planes_; - } + constructor(public points: vec4[], public planes: vec4[]) { } // eslint-disable-line - static fromInvProjectionMatrix(invProj: Float64Array, worldSize: number, zoom: number): Frustum { + public static fromInvProjectionMatrix(invProj: mat4, worldSize: number, zoom: number): Frustum { const clipSpaceCorners = [ - [-1, 1, -1, 1], - [ 1, 1, -1, 1], - [ 1, -1, -1, 1], - [-1, -1, -1, 1], - [-1, 1, 1, 1], - [ 1, 1, 1, 1], - [ 1, -1, 1, 1], - [-1, -1, 1, 1] + vec4.fromValues(-1, 1, -1, 1), + vec4.fromValues(1, 1, -1, 1), + vec4.fromValues(1, -1, -1, 1), + vec4.fromValues(-1, -1, -1, 1), + vec4.fromValues(-1, 1, 1, 1), + vec4.fromValues(1, 1, 1, 1), + vec4.fromValues(1, -1, 1, 1), + vec4.fromValues(-1, -1, 1, 1) ]; const scale = Math.pow(2, zoom); // Transform frustum corner points from clip space to tile space const frustumCoords = clipSpaceCorners - .map(v => vec4.transformMat4([], v, invProj)) - .map(v => vec4.scale([], v, 1.0 / v[3] / worldSize * scale)); + .map(v => vec4.transformMat4(vec4.create(), v, invProj)) + .map(v => vec4.scale([] as any, v, 1.0 / v[3] / worldSize * scale)); const frustumPlanePointIndices = [ [0, 1, 2], // near @@ -40,12 +33,12 @@ class Frustum { [0, 4, 5] // top ]; - const frustumPlanes = frustumPlanePointIndices.map((p: Array) => { - const a = vec3.sub([], frustumCoords[p[0]], frustumCoords[p[1]]); - const b = vec3.sub([], frustumCoords[p[2]], frustumCoords[p[1]]); - const n = vec3.normalize([], vec3.cross([], a, b)); - const d = -vec3.dot(n, frustumCoords[p[1]]); - return n.concat(d); + const frustumPlanes = frustumPlanePointIndices.map((p: number[]) => { + const a = vec3.sub(vec3.create(), frustumCoords[p[0]] as vec3, frustumCoords[p[1]] as vec3); + const b = vec3.sub(vec3.create(), frustumCoords[p[2]] as vec3, frustumCoords[p[1]] as vec3); + const n = vec3.normalize(vec3.create(), vec3.cross(vec3.create(), a, b)); + const d = -vec3.dot(n, frustumCoords[p[1]] as vec3); + return [n[0], n[1], n[2], d] as any as vec4; }); return new Frustum(frustumCoords, frustumPlanes); @@ -60,7 +53,7 @@ class Aabb { constructor(min_: vec3, max_: vec3) { this.min = min_; this.max = max_; - this.center = vec3.scale([], vec3.add([], this.min, this.max), 0.5); + this.center = vec3.scale(vec3.create(), vec3.add(vec3.create(), this.min, this.max), 0.5); } quadrant(index: number): Aabb { @@ -95,10 +88,10 @@ class Aabb { assert(this.min[2] === 0 && this.max[2] === 0); const aabbPoints = [ - [this.min[0], this.min[1], 0.0, 1], - [this.max[0], this.min[1], 0.0, 1], - [this.max[0], this.max[1], 0.0, 1], - [this.min[0], this.max[1], 0.0, 1] + vec4.fromValues(this.min[0], this.min[1], 0.0, 1), + vec4.fromValues(this.max[0], this.min[1], 0.0, 1), + vec4.fromValues(this.max[0], this.max[1], 0.0, 1), + vec4.fromValues(this.min[0], this.max[1], 0.0, 1) ]; let fullyInside = true; @@ -108,7 +101,9 @@ class Aabb { let pointsInside = 0; for (let i = 0; i < aabbPoints.length; i++) { - pointsInside += vec4.dot(plane, aabbPoints[i]) >= 0; + if (vec4.dot(plane, aabbPoints[i]) >= 0) { + pointsInside++; + } } if (pointsInside === 0) diff --git a/src/util/resolve_tokens.js b/src/util/resolve_tokens.ts similarity index 79% rename from src/util/resolve_tokens.js rename to src/util/resolve_tokens.ts index 3ca7c86055..aa7c0b9e38 100644 --- a/src/util/resolve_tokens.js +++ b/src/util/resolve_tokens.ts @@ -1,4 +1,3 @@ -// @flow export default resolveTokens; /** @@ -9,7 +8,12 @@ export default resolveTokens; * @returns the template with tokens replaced * @private */ -function resolveTokens(properties: {+[string]: mixed}, text: string): string { +function resolveTokens( + properties: { + readonly [x: string]: unknown; + }, + text: string +): string { return text.replace(/{([^{}]+)}/g, (match, key: string) => { return key in properties ? String(properties[key]) : ''; }); diff --git a/src/util/script_detection.js b/src/util/script_detection.ts similarity index 99% rename from src/util/script_detection.js rename to src/util/script_detection.ts index 985ae48300..a1c143f9b2 100644 --- a/src/util/script_detection.js +++ b/src/util/script_detection.ts @@ -1,5 +1,3 @@ -// @flow - /* eslint-disable new-cap */ import isChar from './is_char_in_unicode_block'; diff --git a/src/util/sku_token.js b/src/util/sku_token.ts similarity index 94% rename from src/util/sku_token.js rename to src/util/sku_token.ts index 990a1c60c1..4a9935e0ab 100644 --- a/src/util/sku_token.js +++ b/src/util/sku_token.ts @@ -1,5 +1,3 @@ -// @flow - /***** START WARNING - IF YOU USE THIS CODE WITH MAPBOX MAPPING APIS, REMOVAL OR * MODIFICATION OF THE FOLLOWING CODE VIOLATES THE MAPBOX TERMS OF SERVICE ****** * The following code is used to access Mapbox's Mapping APIs. Removal or modification @@ -13,10 +11,10 @@ * and the Mapbox Terms of Service are available at https://www.mapbox.com/tos/ ******************************************************************************/ -type SkuTokenObject = {| - token: string, - tokenExpiresAt: number -|}; +type SkuTokenObject = { + token: string; + tokenExpiresAt: number; +}; const SKU_ID = '01'; diff --git a/src/util/smart_wrap.js b/src/util/smart_wrap.ts similarity index 93% rename from src/util/smart_wrap.js rename to src/util/smart_wrap.ts index a713d1e2b9..2861da4e80 100644 --- a/src/util/smart_wrap.js +++ b/src/util/smart_wrap.ts @@ -1,8 +1,6 @@ -// @flow - import LngLat from '../geo/lng_lat'; -import type Point from '@mapbox/point-geometry'; +import type Point from './point'; import type Transform from '../geo/transform'; /** @@ -20,7 +18,7 @@ import type Transform from '../geo/transform'; * * @private */ -export default function(lngLat: LngLat, priorPos: ?Point, transform: Transform): LngLat { +export default function(lngLat: LngLat, priorPos: Point | undefined | null, transform: Transform): LngLat { lngLat = new LngLat(lngLat.lng, lngLat.lat); // First, try shifting one world in either direction, and see if either is closer to the diff --git a/src/util/struct_array.js b/src/util/struct_array.ts similarity index 91% rename from src/util/struct_array.js rename to src/util/struct_array.ts index f033270be4..53567eb092 100644 --- a/src/util/struct_array.js +++ b/src/util/struct_array.ts @@ -1,5 +1,3 @@ -// @flow - // Note: all "sizes" are measured in bytes import assert from 'assert'; @@ -16,7 +14,7 @@ const viewTypes = { 'Float32': Float32Array }; -export type ViewType = $Keys; +export type ViewType = keyof typeof viewTypes; /** * @private @@ -26,7 +24,7 @@ class Struct { _pos2: number; _pos4: number; _pos8: number; - +_structArray: StructArray; + readonly _structArray: StructArray; // The following properties are defined on the prototype of sub classes. size: number; @@ -37,7 +35,7 @@ class Struct { * @private */ constructor(structArray: StructArray, index: number) { - (this: any)._structArray = structArray; + (this as any)._structArray = structArray; this._pos1 = index * this.size; this._pos2 = this._pos1 / 2; this._pos4 = this._pos1 / 4; @@ -49,21 +47,21 @@ const DEFAULT_CAPACITY = 128; const RESIZE_MULTIPLIER = 5; export type StructArrayMember = { - name: string, - type: ViewType, - components: number, - offset: number + name: string; + type: ViewType; + components: number; + offset: number; }; export type StructArrayLayout = { - members: Array, - size: number, - alignment: ?number -} + members: Array; + size: number; + alignment: number | undefined | null; +}; export type SerializedStructArray = { - length: number, - arrayBuffer: ArrayBuffer + length: number; + arrayBuffer: ArrayBuffer; }; /** @@ -87,7 +85,7 @@ export type SerializedStructArray = { * * @private */ -class StructArray { +abstract class StructArray { capacity: number; length: number; isTransferred: boolean; @@ -97,8 +95,8 @@ class StructArray { // The following properties are defined on the prototype. members: Array; bytesPerElement: number; - +emplaceBack: Function; - +emplace: Function; + abstract emplaceBack(...v: number[]); + abstract emplace(i: number, ...v: number[]); constructor() { this.isTransferred = false; @@ -200,8 +198,12 @@ class StructArray { * @private */ function createLayout( - members: Array<{ name: string, type: ViewType, +components?: number, }>, - alignment: number = 1 + members: Array<{ + name: string; + type: ViewType; + readonly components?: number; + }>, + alignment: number = 1 ): StructArrayLayout { let offset = 0; diff --git a/src/util/task_queue.js b/src/util/task_queue.ts similarity index 94% rename from src/util/task_queue.js rename to src/util/task_queue.ts index 25b28d250f..5db445b639 100644 --- a/src/util/task_queue.js +++ b/src/util/task_queue.ts @@ -1,11 +1,11 @@ -// @flow strict import assert from 'assert'; export type TaskID = number; // can't mark opaque due to https://github.com/flowtype/flow-remove-types/pull/61 + type Task = { - callback: (timeStamp: number) => void; - id: TaskID; - cancelled: boolean; + callback: (timeStamp: number) => void; + id: TaskID; + cancelled: boolean; }; class TaskQueue { diff --git a/src/util/throttle.js b/src/util/throttle.ts similarity index 79% rename from src/util/throttle.js rename to src/util/throttle.ts index 79c7b6e709..0be8744acb 100644 --- a/src/util/throttle.js +++ b/src/util/throttle.ts @@ -1,12 +1,10 @@ -// @flow strict - /** * Throttle the given function to run at most every `period` milliseconds. * @private */ -export default function throttle(fn: () => void, time: number): () => ?TimeoutID { +export default function throttle(fn: () => void, time: number): () => ReturnType | undefined | null { let pending = false; - let timerId: ?TimeoutID = null; + let timerId: ReturnType | undefined | null = null; const later = () => { timerId = null; diff --git a/src/util/throttled_invoker.js b/src/util/throttled_invoker.ts similarity index 97% rename from src/util/throttled_invoker.js rename to src/util/throttled_invoker.ts index ca1b97bfce..0b44d9d276 100644 --- a/src/util/throttled_invoker.js +++ b/src/util/throttled_invoker.ts @@ -1,5 +1,3 @@ -// @flow - /** * Invokes the wrapped function in a non-blocking way when trigger() is called. Invocation requests * are ignored until the function was actually invoked. @@ -9,7 +7,7 @@ class ThrottledInvoker { _channel: MessageChannel; _triggered: boolean; - _callback: Function + _callback: Function; constructor(callback: Function) { this._callback = callback; diff --git a/src/util/tile_request_cache.js b/src/util/tile_request_cache.ts similarity index 90% rename from src/util/tile_request_cache.js rename to src/util/tile_request_cache.ts index 22b0178037..0f958ed446 100644 --- a/src/util/tile_request_cache.js +++ b/src/util/tile_request_cache.ts @@ -1,7 +1,4 @@ -// @flow - import {warnOnce, parseCacheControl} from './util'; -import window from './window'; import type Dispatcher from './dispatcher'; @@ -12,19 +9,19 @@ let cacheCheckThreshold = 50; const MIN_TIME_UNTIL_EXPIRY = 1000 * 60 * 7; // 7 minutes. Skip caching tiles with a short enough max age. export type ResponseOptions = { - status: number, - statusText: string, - headers: window.Headers + status: number; + statusText: string; + headers: Headers; }; // We're using a global shared cache object. Normally, requesting ad-hoc Cache objects is fine, but // Safari has a memory leak in which it fails to release memory when requesting keys() from a Cache // object. See https://bugs.webkit.org/show_bug.cgi?id=203991 for more information. -let sharedCache: ?Promise; +let sharedCache: Promise | undefined | null; function cacheOpen() { - if (window.caches && !sharedCache) { - sharedCache = window.caches.open(CACHE_NAME); + if (typeof caches !== 'undefined' && !sharedCache) { + sharedCache = caches.open(CACHE_NAME); } } @@ -60,7 +57,7 @@ export function cachePut(request: Request, response: Response, requestTime: numb const options: ResponseOptions = { status: response.status, statusText: response.statusText, - headers: new window.Headers() + headers: new Headers() }; response.headers.forEach((v, k) => options.headers.set(k, v)); @@ -76,7 +73,7 @@ export function cachePut(request: Request, response: Response, requestTime: numb if (timeUntilExpiry < MIN_TIME_UNTIL_EXPIRY) return; prepareBody(response, body => { - const clonedResponse = new window.Response(body, options); + const clonedResponse = new Response(body, options); cacheOpen(); if (!sharedCache) return; @@ -91,7 +88,7 @@ function stripQueryParameters(url: string) { return start < 0 ? url : url.slice(0, start); } -export function cacheGet(request: Request, callback: (error: ?any, response: ?Response, fresh: ?boolean) => void) { +export function cacheGet(request: Request, callback: (error?: any | null, response?: Response | null, fresh?: boolean | null) => void) { cacheOpen(); if (!sharedCache) return callback(null); @@ -122,7 +119,7 @@ export function cacheGet(request: Request, callback: (error: ?any, response: ?Re function isFresh(response) { if (!response) return false; - const expires = new Date(response.headers.get('Expires') || 0); + const expires = new Date(response.headers.get('Expires') || 0).getTime(); const cacheControl = parseCacheControl(response.headers.get('Cache-Control') || ''); return expires > Date.now() && !cacheControl['no-cache']; } @@ -159,8 +156,8 @@ export function enforceCacheSizeLimit(limit: number) { }); } -export function clearTileCache(callback?: (err: ?Error) => void) { - const promise = window.caches.delete(CACHE_NAME); +export function clearTileCache(callback?: (err?: Error | null) => void) { + const promise = caches.delete(CACHE_NAME); if (callback) { promise.catch(callback).then(() => callback()); } diff --git a/src/util/util.js b/src/util/util.ts similarity index 85% rename from src/util/util.js rename to src/util/util.ts index f5e3d55c58..62f6ab071b 100644 --- a/src/util/util.js +++ b/src/util/util.ts @@ -1,15 +1,9 @@ -// @flow - import UnitBezier from '@mapbox/unitbezier'; -import Point from '@mapbox/point-geometry'; -import window from './window'; +import Point from './point'; import type {Callback} from '../types/callback'; -// Number.MAX_SAFE_INTEGER not available in IE -export const MAX_SAFE_INTEGER = Math.pow(2, 53) - 1; - /** * @module util * @private @@ -94,9 +88,9 @@ export function wrap(n: number, min: number, max: number): number { * @private */ export function asyncAll( - array: Array, - fn: (item: Item, fnCallback: Callback) => void, - callback: Callback> + array: Array, + fn: (item: Item, fnCallback: Callback) => void, + callback: Callback> ) { if (!array.length) { return callback(null, []); } let remaining = array.length; @@ -105,26 +99,12 @@ export function asyncAll( array.forEach((item, i) => { fn(item, (err, result) => { if (err) error = err; - results[i] = ((result: any): Result); // https://github.com/facebook/flow/issues/2123 + results[i] = (result as any as Result); // https://github.com/facebook/flow/issues/2123 if (--remaining === 0) callback(error, results); }); }); } -/* - * Polyfill for Object.values. Not fully spec compliant, but we don't - * need it to be. - * - * @private - */ -export function values(obj: {[key: string]: T}): Array { - const result = []; - for (const k in obj) { - result.push(obj[k]); - } - return result; -} - /* * Compute the difference between the keys in one object and the keys * in another object. @@ -132,7 +112,10 @@ export function values(obj: {[key: string]: T}): Array { * @returns keys difference * @private */ -export function keysDifference(obj: {[key: string]: S}, other: {[key: string]: T}): Array { +export function keysDifference( + obj: {[key: string]: S}, + other: {[key: string]: T} +): Array { const difference = []; for (const i in obj) { if (!(i in other)) { @@ -152,7 +135,7 @@ export function keysDifference(obj: {[key: string]: S}, other: {[key: stri * @param sources sources from which properties are pulled * @private */ -export function extend(dest: Object, ...sources: Array): Object { +export function extend(dest: any, ...sources: Array): any { for (const src of sources) { for (const k in src) { dest[k] = src[k]; @@ -175,7 +158,7 @@ export function extend(dest: Object, ...sources: Array): Object { * // justName = { name: 'Charlie' } * @private */ -export function pick(src: Object, properties: Array): Object { +export function pick(src: any, properties: Array): any { const result = {}; for (let i = 0; i < properties.length; i++) { const k = properties[i]; @@ -204,10 +187,10 @@ export function uniqueId(): number { * @private */ export function uuid(): string { - function b(a) { - return a ? (a ^ Math.random() * 16 >> a / 4).toString(16) : - //$FlowFixMe: Flow doesn't like the implied array literal conversion here - ([1e7] + -[1e3] + -4e3 + -8e3 + -1e11).replace(/[018]/g, b); + function b(a?): string { + return a ? + (a ^ Math.random() * 16 >> a / 4).toString(16) : + '10000000-1000-4000-8000-100000000000'.replace(/[018]/g, b); } return b(); } @@ -235,7 +218,7 @@ export function nextPowerOfTwo(value: number): number { * @param str string to validate. * @private */ -export function validateUuid(str: ?string): boolean { +export function validateUuid(str?: string | null): boolean { return str ? /^[0-9a-f]{8}-[0-9a-f]{4}-[4][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(str) : false; } @@ -260,29 +243,20 @@ export function validateUuid(str: ?string): boolean { * setTimeout(myClass.ontimer, 100); * @private */ -export function bindAll(fns: Array, context: Object): void { +export function bindAll(fns: Array, context: any): void { fns.forEach((fn) => { if (!context[fn]) { return; } context[fn] = context[fn].bind(context); }); } -/** - * Determine if a string ends with a particular substring - * - * @private - */ -export function endsWith(string: string, suffix: string): boolean { - return string.indexOf(suffix, string.length - suffix.length) !== -1; -} - /** * Create an object by mapping all the values of an existing object while * preserving their keys. * * @private */ -export function mapObject(input: Object, iterator: Function, context?: Object): Object { +export function mapObject(input: any, iterator: Function, context?: any): any { const output = {}; for (const key in input) { output[key] = iterator.call(context || this, input[key], key, input); @@ -295,7 +269,7 @@ export function mapObject(input: Object, iterator: Function, context?: Object): * * @private */ -export function filterObject(input: Object, iterator: Function, context?: Object): Object { +export function filterObject(input: any, iterator: Function, context?: any): any { const output = {}; for (const key in input) { if (iterator.call(context || this, input[key], key, input)) { @@ -315,9 +289,9 @@ export {deepEqual}; */ export function clone(input: T): T { if (Array.isArray(input)) { - return input.map(clone); + return input.map(clone) as any as T; } else if (typeof input === 'object' && input) { - return ((mapObject(input, clone): any): T); + return mapObject(input, clone) as any as T; } else { return input; } @@ -346,7 +320,7 @@ const warnOnceHistory: {[key: string]: boolean} = {}; export function warnOnce(message: string): void { if (!warnOnceHistory[message]) { // console isn't defined in some WebWorkers, see #2558 - if (typeof console !== "undefined") console.warn(message); + if (typeof console !== 'undefined') console.warn(message); warnOnceHistory[message] = true; } } @@ -363,7 +337,7 @@ export function isCounterClockwise(a: Point, b: Point, c: Point): boolean { } /** - * Returns the signed area for the polygon ring. Postive areas are exterior rings and + * Returns the signed area for the polygon ring. Positive areas are exterior rings and * have a clockwise winding. Negative areas are interior rings and have a counter clockwise * ordering. * @@ -413,7 +387,11 @@ export function isClosedPolygon(points: Array): boolean { * @return cartesian coordinates in [x, y, z] */ -export function sphericalToCartesian([r, azimuthal, polar]: [number, number, number]): {x: number, y: number, z: number} { +export function sphericalToCartesian([r, azimuthal, polar]: [number, number, number]): { + x: number; + y: number; + z: number; +} { // We abstract "north"/"up" (compass-wise) to be 0° when really this is 90° (π/2): // correct for that here azimuthal += 90; @@ -431,7 +409,7 @@ export function sphericalToCartesian([r, azimuthal, polar]: [number, number, num /* global self, WorkerGlobalScope */ /** - * Retuns true if the when run in the web-worker context. + * Returns true if the when run in the web-worker context. * * @private * @returns {boolean} @@ -449,7 +427,7 @@ export function isWorker(): boolean { * @return object containing parsed header info. */ -export function parseCacheControl(cacheControl: string): Object { +export function parseCacheControl(cacheControl: string): any { // Taken from [Wreck](https://github.com/hapijs/wreck) const re = /(?:^|(?:\s*\,\s*))([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)(?:\=(?:([^\x00-\x20\(\)<>@\,;\:\\"\/\[\]\?\=\{\}\x7F]+)|(?:\"((?:[^"\\]|\\.)*)\")))?/g; @@ -507,7 +485,7 @@ export function storageAvailable(type: string): boolean { // The following methods are from https://developer.mozilla.org/en-US/docs/Web/API/WindowBase64/Base64_encoding_and_decoding#The_Unicode_Problem //Unicode compliant base64 encoder for strings export function b64EncodeUnicode(str: string) { - return window.btoa( + return btoa( encodeURIComponent(str).replace(/%([0-9A-F]{2})/g, (match, p1) => { return String.fromCharCode(Number('0x' + p1)); //eslint-disable-line @@ -518,7 +496,7 @@ export function b64EncodeUnicode(str: string) { // Unicode compliant decoder for base64-encoded strings export function b64DecodeUnicode(str: string) { - return decodeURIComponent(window.atob(str).split('').map((c) => { + return decodeURIComponent(atob(str).split('').map((c) => { return '%' + ('00' + c.charCodeAt(0).toString(16)).slice(-2); //eslint-disable-line }).join('')); } diff --git a/src/util/vectortile_to_geojson.js b/src/util/vectortile_to_geojson.js deleted file mode 100644 index 87df3344a4..0000000000 --- a/src/util/vectortile_to_geojson.js +++ /dev/null @@ -1,50 +0,0 @@ -// @flow -import type {GeoJSONGeometry} from '@mapbox/geojson-types'; - -class Feature { - type: 'Feature'; - _geometry: ?GeoJSONGeometry; - properties: {}; - id: number | string | void; - - _vectorTileFeature: VectorTileFeature; - - constructor(vectorTileFeature: VectorTileFeature, z: number, x: number, y: number, id: string | number | void) { - this.type = 'Feature'; - - this._vectorTileFeature = vectorTileFeature; - (vectorTileFeature: any)._z = z; - (vectorTileFeature: any)._x = x; - (vectorTileFeature: any)._y = y; - - this.properties = vectorTileFeature.properties; - this.id = id; - } - - get geometry(): ?GeoJSONGeometry { - if (this._geometry === undefined) { - this._geometry = this._vectorTileFeature.toGeoJSON( - (this._vectorTileFeature: any)._x, - (this._vectorTileFeature: any)._y, - (this._vectorTileFeature: any)._z).geometry; - } - return this._geometry; - } - - set geometry(g: ?GeoJSONGeometry) { - this._geometry = g; - } - - toJSON() { - const json = { - geometry: this.geometry - }; - for (const i in this) { - if (i === '_geometry' || i === '_vectorTileFeature') continue; - json[i] = (this: any)[i]; - } - return json; - } -} - -export default Feature; diff --git a/src/util/vectortile_to_geojson.ts b/src/util/vectortile_to_geojson.ts new file mode 100644 index 0000000000..45c63efd18 --- /dev/null +++ b/src/util/vectortile_to_geojson.ts @@ -0,0 +1,43 @@ +class Feature { + type: 'Feature'; + _geometry: GeoJSON.Geometry | undefined | null; + properties: {}; + id: number | string | void; + + _vectorTileFeature: VectorTileFeature; + + constructor(vectorTileFeature: VectorTileFeature, z: number, x: number, y: number, id: string | number | void) { + this.type = 'Feature'; + + this._vectorTileFeature = vectorTileFeature; + (vectorTileFeature as any)._z = z; + (vectorTileFeature as any)._x = x; + (vectorTileFeature as any)._y = y; + + this.properties = vectorTileFeature.properties; + this.id = id; + } + + get geometry(): GeoJSON.Geometry | undefined | null { + if (this._geometry === undefined) { + this._geometry = this._vectorTileFeature.toGeoJSON( + (this._vectorTileFeature as any)._x, + (this._vectorTileFeature as any)._y, + (this._vectorTileFeature as any)._z).geometry; + } + return this._geometry; + } + + set geometry(g: GeoJSON.Geometry | undefined | null) { + this._geometry = g; + } + + toJSON() { + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const {_geometry, _vectorTileFeature, ...json} = this; + json.geometry = this.geometry; + return json; + } +} + +export default Feature; diff --git a/src/util/verticalize_punctuation.js b/src/util/verticalize_punctuation.ts similarity index 96% rename from src/util/verticalize_punctuation.js rename to src/util/verticalize_punctuation.ts index 658ffdf631..f7d05d69c1 100644 --- a/src/util/verticalize_punctuation.js +++ b/src/util/verticalize_punctuation.ts @@ -1,8 +1,4 @@ -// @flow - -import { - charHasRotatedVerticalOrientation, -} from './script_detection'; +import {charHasRotatedVerticalOrientation} from './script_detection'; export const verticalizedCharacterMap = { '!': '︕', diff --git a/src/util/web_worker.js b/src/util/web_worker.ts similarity index 69% rename from src/util/web_worker.js rename to src/util/web_worker.ts index b08477c97b..2a9b5fa749 100644 --- a/src/util/web_worker.js +++ b/src/util/web_worker.ts @@ -1,16 +1,18 @@ -// @flow +// When Rollup builds the main bundle this file is replaced with ./build/web_worker_replacement.js +// See package.json 'browser' field and rollup documentation. +// This file is intended for use in the GL-JS test suite when they run on node since node doesn't support workers. +// It implements a MessageBus main thread interface -// This file is intended for use in the GL-JS test suite -// It implements a MessageBus main thread interface for use in Node environments -// In a browser environment, this file is replaced with ./src/util/browser/web_worker.js -// when Rollup builds the main bundle. -// See package.json#browser - -import Worker from '../source/worker'; +import MaplibreWorker from '../source/worker'; import type {WorkerSource} from '../source/worker_source'; -type MessageListener = ({data: Object}) => mixed; +type MessageListener = ( + a: { + data: any; + target: any; + } +) => unknown; // The main thread interface. Provided by Worker in a browser environment, // and MessageBus below in a node environment. @@ -23,17 +25,21 @@ export interface WorkerInterface { export interface WorkerGlobalScopeInterface { importScripts(...urls: Array): void; - - registerWorkerSource: (string, Class) => void, - registerRTLTextPlugin: (_: any) => void + registerWorkerSource: ( + b: string, + a: { + new(...args: any): WorkerSource; + } + ) => void; + registerRTLTextPlugin: (_: any) => void; } class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface { addListeners: Array; postListeners: Array; target: MessageBus; - registerWorkerSource: *; - registerRTLTextPlugin: *; + registerWorkerSource: any; + registerRTLTextPlugin: any; constructor(addListeners: Array, postListeners: Array) { this.addListeners = addListeners; @@ -53,7 +59,7 @@ class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface { } } - postMessage(data: Object) { + postMessage(data: any) { setImmediate(() => { try { for (const listener of this.postListeners) { @@ -70,10 +76,10 @@ class MessageBus implements WorkerInterface, WorkerGlobalScopeInterface { this.postListeners.splice(0, this.postListeners.length); } - importScripts() {} + importScripts() { } } -export default function WebWorker(): WorkerInterface { +export default function workerFactory(): WorkerInterface { const parentListeners = [], workerListeners = [], parentBus = new MessageBus(workerListeners, parentListeners), @@ -82,10 +88,10 @@ export default function WebWorker(): WorkerInterface { parentBus.target = workerBus; workerBus.target = parentBus; - new WebWorker.Worker(workerBus); + new workerFactory.Worker(workerBus); return parentBus; } // expose to allow stubbing in unit tests -WebWorker.Worker = Worker; +workerFactory.Worker = MaplibreWorker; diff --git a/src/util/web_worker_transfer.js b/src/util/web_worker_transfer.ts similarity index 74% rename from src/util/web_worker_transfer.js rename to src/util/web_worker_transfer.ts index a3625eccc4..9dd945aadd 100644 --- a/src/util/web_worker_transfer.js +++ b/src/util/web_worker_transfer.ts @@ -1,5 +1,3 @@ -// @flow - import assert from 'assert'; import Grid from 'grid-index'; @@ -8,41 +6,30 @@ import {StylePropertyFunction, StyleExpression, ZoomDependentExpression, ZoomCon import CompoundExpression from '../style-spec/expression/compound_expression'; import expressions from '../style-spec/expression/definitions'; import ResolvedImage from '../style-spec/expression/types/resolved_image'; -import window from './window'; -const {ImageData, ImageBitmap} = window; import type {Transferable} from '../types/transferable'; -type SerializedObject = {[_: string]: Serialized }; // eslint-disable-line -export type Serialized = - | null - | void - | boolean - | number - | string - | Boolean - | Number - | String - | Date - | RegExp - | ArrayBuffer - | $ArrayBufferView - | ImageData - | Array - | SerializedObject; +type SerializedObject = { + [_: string]: Serialized; +}; // eslint-disable-line + +export type Serialized = null | void | boolean | number | string | Boolean | Number | String | Date | RegExp | ArrayBuffer | ArrayBufferView | ImageData | Array | SerializedObject; type Registry = { - [_: string]: { - klass: Class, - omit: $ReadOnlyArray, - shallow: $ReadOnlyArray - } + [_: string]: { + klass: { + new (...args: any): any; + deserialize?: (input: Serialized) => unknown; + }; + omit: ReadonlyArray; + shallow: ReadonlyArray; + }; }; type RegisterOptions = { - omit?: $ReadOnlyArray<$Keys>, - shallow?: $ReadOnlyArray<$Keys> -} + omit?: ReadonlyArray; + shallow?: ReadonlyArray; +}; const registry: Registry = {}; @@ -55,22 +42,30 @@ const registry: Registry = {}; * * @private */ -export function register(name: string, klass: Class, options: RegisterOptions = {}) { +export function register( + name: string, + klass: { + new (...args: any): T; + }, + options: RegisterOptions = {} +) { assert(!registry[name], `${name} is already registered.`); - (Object.defineProperty: any)(klass, '_classRegistryKey', { + ((Object.defineProperty as any))(klass, '_classRegistryKey', { value: name, writeable: false }); registry[name] = { klass, - omit: options.omit || [], - shallow: options.shallow || [] + omit: options.omit as ReadonlyArray || [], + shallow: options.shallow as ReadonlyArray || [] }; } register('Object', Object); -type SerializedGrid = { buffer: ArrayBuffer }; +type SerializedGrid = { + buffer: ArrayBuffer; +}; Grid.serialize = function serialize(grid: Grid, transferables?: Array): SerializedGrid { const buffer = grid.toArrayBuffer(); @@ -96,7 +91,7 @@ register('ZoomDependentExpression', ZoomDependentExpression); register('ZoomConstantExpression', ZoomConstantExpression); register('CompoundExpression', CompoundExpression, {omit: ['_evaluate']}); for (const name in expressions) { - if ((expressions[name]: any)._classRegistryKey) continue; + if ((expressions[name] as any)._classRegistryKey) continue; register(`Expression_${name}`, expressions[name]); } @@ -124,7 +119,7 @@ function isImageBitmap(val: any): boolean { * * @private */ -export function serialize(input: mixed, transferables: ?Array): Serialized { +export function serialize(input: unknown, transferables?: Array | null): Serialized { if (input === null || input === undefined || typeof input === 'boolean' || @@ -138,19 +133,26 @@ export function serialize(input: mixed, transferables: ?Array): Se return input; } - if (isArrayBuffer(input) || isImageBitmap(input)) { + if (isArrayBuffer(input)) { if (transferables) { - transferables.push(((input: any): ArrayBuffer)); + transferables.push(((input as any as ArrayBuffer))); } - return input; + return input as Serialized; + } + + if (isImageBitmap(input)) { + if (transferables) { + transferables.push(((input as any as ImageBitmap))); + } + return input as Serialized; } if (ArrayBuffer.isView(input)) { - const view: $ArrayBufferView = (input: any); + const view = input; if (transferables) { transferables.push(view.buffer); } - return view; + return view as Serialized; } if (input instanceof ImageData) { @@ -169,10 +171,10 @@ export function serialize(input: mixed, transferables: ?Array): Se } if (typeof input === 'object') { - const klass = (input.constructor: any); + const klass = (input.constructor as any); const name = klass._classRegistryKey; if (!name) { - throw new Error(`can't serialize object of unregistered class`); + throw new Error('can\'t serialize object of unregistered class'); } assert(registry[name]); @@ -184,14 +186,14 @@ export function serialize(input: mixed, transferables: ?Array): Se // approach for objects whose members include instances of dynamic // StructArray types. Once we refactor StructArray to be static, // we can remove this complexity. - (klass.serialize(input, transferables): SerializedObject) : {}; + (klass.serialize(input, transferables) as SerializedObject) : {}; if (!klass.serialize) { for (const key in input) { // any cast due to https://github.com/facebook/flow/issues/5393 - if (!(input: any).hasOwnProperty(key)) continue; + if (!(input as any).hasOwnProperty(key)) continue; // eslint-disable-line no-prototype-builtins if (registry[name].omit.indexOf(key) >= 0) continue; - const property = (input: any)[key]; + const property = (input as any)[key]; properties[key] = registry[name].shallow.indexOf(key) >= 0 ? property : serialize(property, transferables); @@ -201,7 +203,7 @@ export function serialize(input: mixed, transferables: ?Array): Se } } else { // make sure statically serialized object survives transfer of $name property - assert(!transferables || properties !== transferables[transferables.length - 1]); + assert(!transferables || properties as any !== transferables[transferables.length - 1]); } if (properties.$name) { @@ -217,7 +219,7 @@ export function serialize(input: mixed, transferables: ?Array): Se throw new Error(`can't serialize object of type ${typeof input}`); } -export function deserialize(input: Serialized): mixed { +export function deserialize(input: Serialized): unknown { if (input === null || input === undefined || typeof input === 'boolean' || @@ -240,22 +242,24 @@ export function deserialize(input: Serialized): mixed { } if (typeof input === 'object') { - const name = (input: any).$name || 'Object'; - + const name = (input as any).$name || 'Object'; + if (!registry[name]) { + throw new Error(`can't deserialize unregistered class ${name}`); + } const {klass} = registry[name]; if (!klass) { throw new Error(`can't deserialize unregistered class ${name}`); } if (klass.deserialize) { - return (klass.deserialize: typeof deserialize)(input); + return klass.deserialize(input); } const result = Object.create(klass.prototype); for (const key of Object.keys(input)) { if (key === '$name') continue; - const value = (input: SerializedObject)[key]; + const value = (input as SerializedObject)[key]; result[key] = registry[name].shallow.indexOf(key) >= 0 ? value : deserialize(value); } diff --git a/src/util/webp_supported.js b/src/util/webp_supported.ts similarity index 94% rename from src/util/webp_supported.js rename to src/util/webp_supported.ts index 7c40c7c97b..c063500148 100755 --- a/src/util/webp_supported.js +++ b/src/util/webp_supported.ts @@ -1,7 +1,3 @@ -// @flow strict - -import window from './window'; - const exported = { supported: false, testSupport @@ -14,8 +10,8 @@ let webpCheckComplete = false; let webpImgTest; let webpImgTestOnloadComplete = false; -if (window.document) { - webpImgTest = window.document.createElement('img'); +if (typeof document !== 'undefined') { + webpImgTest = document.createElement('img'); webpImgTest.onload = function() { if (glForTesting) testWebpTextureUpload(glForTesting); glForTesting = null; diff --git a/src/util/window.js b/src/util/window.js deleted file mode 100644 index 0d465f163f..0000000000 --- a/src/util/window.js +++ /dev/null @@ -1,102 +0,0 @@ -// @flow strict - -// This file is intended for use in the GL-JS test suite -// It implements a JSDOM window object for use in Node environments -// In a browser environment, this file is replaced with ./src/util/browser/window.js -// when Rollup builds the main bundle -// See package.json#browser - -import jsdom from 'jsdom'; - -import gl from 'gl'; -import sinon from 'sinon'; - -import type {Window} from '../types/window'; - -const {window: _window} = new jsdom.JSDOM('', { - virtualConsole: new jsdom.VirtualConsole().sendTo(console) -}); - -restore(); - -export default _window; - -function restore(): Window { - // Remove previous window from exported object - const previousWindow = _window; - if (previousWindow.close) previousWindow.close(); - for (const key in previousWindow) { - if (previousWindow.hasOwnProperty(key)) { - delete previousWindow[key]; - } - } - - // Create new window and inject into exported object - const {window} = new jsdom.JSDOM('', { - // Send jsdom console output to the node console object. - virtualConsole: new jsdom.VirtualConsole().sendTo(console) - }); - - // Delete local and session storage from JSDOM and stub them out with a warning log - // Accessing these properties during extend() produces an error in Node environments - // See https://github.com/mapbox/mapbox-gl-js/pull/7455 for discussion - delete window.localStorage; - delete window.sessionStorage; - window.localStorage = window.sessionStorage = () => console.log('Local and session storage not available in Node. Use a stub implementation if needed for testing.'); - - window.devicePixelRatio = 1; - - window.requestAnimationFrame = function(callback) { - return setImmediate(callback, 0); - }; - window.cancelAnimationFrame = clearImmediate; - - // Add webgl context with the supplied GL - const originalGetContext = window.HTMLCanvasElement.prototype.getContext; - window.HTMLCanvasElement.prototype.getContext = function (type, attributes) { - if (type === 'webgl') { - if (!this._webGLContext) { - this._webGLContext = gl(this.width, this.height, attributes); - } - return this._webGLContext; - } - // Fallback to existing HTMLCanvasElement getContext behaviour - return originalGetContext.call(this, type, attributes); - }; - - window.useFakeHTMLCanvasGetContext = function() { - this.HTMLCanvasElement.prototype.getContext = function() { return '2d'; }; - }; - - window.useFakeXMLHttpRequest = function() { - sinon.xhr.supportsCORS = true; - this.server = sinon.fakeServer.create(); - this.XMLHttpRequest = this.server.xhr; - }; - - window.URL.revokeObjectURL = function () {}; - - window.fakeWorkerPresence = function() { - global.WorkerGlobalScope = function() {}; - global.self = new global.WorkerGlobalScope(); - }; - window.clearFakeWorkerPresence = function() { - global.WorkerGlobalScope = undefined; - global.self = undefined; - }; - - window.restore = restore; - - window.performance.getEntriesByName = function() {}; - window.performance.mark = function() {}; - window.performance.measure = function() {}; - window.performance.clearMarks = function() {}; - window.performance.clearMeasures = function() {}; - - window.ImageData = window.ImageData || function() { return false; }; - window.ImageBitmap = window.ImageBitmap || function() { return false; }; - window.WebGLFramebuffer = window.WebGLFramebuffer || Object; - Object.assign(_window, window); // eslint-disable-line no-restricted-properties - - return window; -} diff --git a/src/util/worker_pool.js b/src/util/worker_pool.ts similarity index 87% rename from src/util/worker_pool.js rename to src/util/worker_pool.ts index f9a899dfcc..d102de8ed9 100644 --- a/src/util/worker_pool.js +++ b/src/util/worker_pool.ts @@ -1,6 +1,4 @@ -// @flow - -import WebWorker from './web_worker'; +import webWorkerFactory from './web_worker'; import type {WorkerInterface} from './web_worker'; import browser from './browser'; @@ -13,7 +11,9 @@ export const PRELOAD_POOL_ID = 'mapboxgl_preloaded_worker_pool'; export default class WorkerPool { static workerCount: number; - active: {[_: number | string]: boolean}; + active: { + [_ in number | string]: boolean; + }; workers: Array; constructor() { @@ -26,7 +26,7 @@ export default class WorkerPool { // client code has had a chance to set it. this.workers = []; while (this.workers.length < WorkerPool.workerCount) { - this.workers.push(new WebWorker()); + this.workers.push(webWorkerFactory()); } } @@ -40,7 +40,7 @@ export default class WorkerPool { this.workers.forEach((w) => { w.terminate(); }); - this.workers = (null: any); + this.workers = null; } } diff --git a/test/.eslintrc b/test/.eslintrc index 6f7c66dfab..18b48d60b2 100644 --- a/test/.eslintrc +++ b/test/.eslintrc @@ -1,4 +1,7 @@ { + "plugins": [ + "html" + ], "rules": { "flowtype/require-valid-file-annotation": [0], "no-restricted-properties": "off" diff --git a/test/README.md b/test/README.md index 8585e2abde..c10008a37c 100644 --- a/test/README.md +++ b/test/README.md @@ -7,14 +7,14 @@ First you must configure your development environment per [`../CONTRIBUTING.md`] There are two test suites associated with Mapbox GL JS - - `yarn test` runs quick unit tests - - `yarn run test-suite` runs slower integration tests + - `npm run test` runs quick unit tests + - `npm run test-suite` runs slower integration tests To run individual tests: - - Unit tests: `yarn test-unit path/to/file.test.js` where path *does not include* `test/unit/` - - e.g. `yarn test-unit ui/handler/scroll_zoom.test.js` - - Render tests: `yarn test-render render-test-name` (e.g. `yarn test-render background-color/default`) + - Unit tests: `npm run test-unit-file path/to/file.test.js` where path *does not include* `test/unit/` + - e.g. `npm run test-unit-file test/unit/ui/handler/scroll_zoom.test.js` + - Render tests: `npm run test-render render-test-name` (e.g. `npm run test-render background-color/default`) ## Integration Tests diff --git a/test/ajax_stubs.js b/test/ajax_stubs.js deleted file mode 100644 index ab9c4fca1a..0000000000 --- a/test/ajax_stubs.js +++ /dev/null @@ -1,128 +0,0 @@ - -import {PNG} from 'pngjs'; -import request from 'request'; -// we're using a require hook to load this file instead of src/util/ajax.js, -// so we import browser module as if it were in an adjacent file -import browser from './browser'; // eslint-disable-line import/no-unresolved -const cache = {}; - -/** - * The type of a resource. - * @private - * @readonly - * @enum {string} - */ -const ResourceType = { - Unknown: 'Unknown', - Style: 'Style', - Source: 'Source', - Tile: 'Tile', - Glyphs: 'Glyphs', - SpriteImage: 'SpriteImage', - SpriteJSON: 'SpriteJSON', - Image: 'Image' -}; -export {ResourceType}; - -if (typeof Object.freeze == 'function') { - Object.freeze(ResourceType); -} - -function cached(data, callback) { - setImmediate(() => { - callback(null, data); - }); -} - -export const getReferrer = () => undefined; - -export const getJSON = function({url}, callback) { - if (cache[url]) return cached(cache[url], callback); - return request(url, (error, response, body) => { - if (!error && response.statusCode >= 200 && response.statusCode < 300) { - let data; - try { - data = JSON.parse(body); - } catch (err) { - return callback(err); - } - cache[url] = data; - callback(null, data); - } else { - callback(error || new Error(response.statusCode)); - } - }); -}; - -export const getArrayBuffer = function({url}, callback) { - if (cache[url]) return cached(cache[url], callback); - return request({url, encoding: null}, (error, response, body) => { - if (!error && response.statusCode >= 200 && response.statusCode < 300) { - cache[url] = body; - callback(null, body); - } else { - if (!error) error = {status: +response.statusCode}; - callback(error); - } - }); -}; - -export const makeRequest = getArrayBuffer; - -export const postData = function({url, body}, callback) { - return request.post(url, body, (error, response, body) => { - if (!error && response.statusCode >= 200 && response.statusCode < 300) { - callback(null, body); - } else { - callback(error || new Error(response.statusCode)); - } - }); -}; - -export const getImage = function({url}, callback) { - if (cache[url]) return cached(cache[url], callback); - return request({url, encoding: null}, (error, response, body) => { - if (!error && response.statusCode >= 200 && response.statusCode < 300) { - new PNG().parse(body, (err, png) => { - if (err) return callback(err); - cache[url] = png; - callback(null, png); - }); - } else { - callback(error || {status: response.statusCode}); - } - }); -}; - -browser.getImageData = function({width, height, data}, padding = 0) { - const source = new Uint8Array(data); - const dest = new Uint8Array((2 * padding + width) * (2 * padding + height) * 4); - - const offset = (2 * padding + width) * padding + padding; - for (let i = 0; i < height; i++) { - dest.set(source.slice(i * width * 4, (i + 1) * width * 4), 4 * (offset + (width + 2 * padding) * i)); - } - return {width: width + 2 * padding, height: height + 2 * padding, data: dest}; -}; - -// Hack: since node doesn't have any good video codec modules, just grab a png with -// the first frame and fake the video API. -export const getVideo = function(urls, callback) { - return request({url: urls[0], encoding: null}, (error, response, body) => { - if (!error && response.statusCode >= 200 && response.statusCode < 300) { - new PNG().parse(body, (err, png) => { - if (err) return callback(err); - callback(null, { - readyState: 4, // HAVE_ENOUGH_DATA - addEventListener() {}, - play() {}, - width: png.width, - height: png.height, - data: png.data - }); - }); - } else { - callback(error || new Error(response.statusCode)); - } - }); -}; diff --git a/test/browser/fixtures/land.html b/test/browser/fixtures/land.html index a49c8b1c7a..c241c05f3f 100644 --- a/test/browser/fixtures/land.html +++ b/test/browser/fixtures/land.html @@ -17,8 +17,9 @@ - + diff --git a/test/render.test.js b/test/render.test.js index 3c594a37a7..95f2702bda 100644 --- a/test/render.test.js +++ b/test/render.test.js @@ -1,13 +1,11 @@ -/* eslint-disable import/unambiguous, import/no-commonjs, no-global-assign */ +import './stub_loader'; +import canvas from 'canvas'; +import renderRunner from './integration/lib/render'; +import suiteImplementation from './suite_implementation'; +import ignores from './ignores.json'; -require('./stub_loader'); -require('@mapbox/flow-remove-types/register'); -const {registerFont} = require('canvas'); -require = require("esm")(module, true); +const {registerFont} = canvas; -const suite = require('./integration/lib/render'); -const suiteImplementation = require('./suite_implementation'); -const ignores = require('./ignores.json'); registerFont('./node_modules/npm-font-open-sans/fonts/Bold/OpenSans-Bold.ttf', {family: 'Open Sans', weight: 'bold'}); -suite.run('js', ignores, suiteImplementation); +renderRunner('js', ignores, suiteImplementation); diff --git a/test/stub_loader.js b/test/stub_loader.js index 0fc4534a34..d5d0a35578 100644 --- a/test/stub_loader.js +++ b/test/stub_loader.js @@ -1,16 +1,146 @@ -// Load our stubbed ajax module for the integration suite implementation -/* eslint-disable import/unambiguous, import/no-commonjs */ -const fs = require('fs'); -const assert = require('assert'); -const pirates = require('pirates'); - -process.env["ESM_OPTIONS"] = '{ "cache": "node_modules/.cache/esm-stubbed"}'; - -pirates.addHook((code, filename) => { - assert(filename.endsWith('/ajax.js')); - return fs.readFileSync(`${__dirname}/ajax_stubs.js`, 'utf-8'); -}, { - exts: ['.js'], - matcher: filename => filename.endsWith('/ajax.js') +import gl from 'gl'; +import {JSDOM, VirtualConsole} from "jsdom"; +import {PNG} from 'pngjs'; +import sinon from 'sinon'; + +let lastDataFromUrl = null; + +// The following is the mocking of what's needed in window and global for the tests to run. +const {window} = new JSDOM('', { + // Send jsdom console output to the node console object. + virtualConsole: new VirtualConsole().sendTo(console) +}); + +global.ImageData = window.ImageData || function () { return false; }; +global.ImageBitmap = window.ImageBitmap || function () { return false; }; +global.WebGLFramebuffer = window.WebGLFramebuffer || Object; +global.HTMLElement = window.HTMLElement; +global.HTMLImageElement = window.HTMLImageElement; +global.HTMLVideoElement = window.HTMLVideoElement; +global.HTMLCanvasElement = window.HTMLCanvasElement; +global.OffscreenCanvas = window.OffscreenCanvas; +global.Image = window.Image; +global.navigator = window.navigator; +global.performance = window.performance; +global.devicePixelRatio = window.devicePixelRatio; +global.addEventListener = window.addEventListener; +global.removeEventListener = window.removeEventListener; +global.matchMedia = window.matchMedia; +global.caches = window.caches; +global.WheelEvent = window.WheelEvent; +global.Blob = window.Blob; +global.URL = window.URL; +global.fetch = window.fetch; +global.document = window.document; +global.window = window; +// stubbing image load as it is not implemented in jsdom +// eslint-disable-next-line accessor-pairs +Object.defineProperty(global.Image.prototype, 'src', { + set(src) { + if (!this.onload) { + return; + } + if (src.startsWith('data:image/png')) { + const base64 = src.replace(/data:.*;base64,/, ''); + const buff = Buffer.from(base64, 'base64'); + new PNG().parse(buff, (err, png) => { + if (err) throw new Error("Couldn't parse PNG"); + this.data = png.data; + this.height = png.height; + this.width = png.width; + this.onload(); + }); + return; + } + if (src && typeof src === 'string' && !src.startsWith('blob')) { + this.onload(); + return; + } + if (!lastDataFromUrl) { + return; + } + if (lastDataFromUrl.size < 10) { + // if this is not a valid image load it anyway but don't set the data for later use + // this is the case in the unit tests + this.onload(); + return; + } + const reader = new window.FileReader(); + reader.onload = (_) => { + const dataUrl = reader.result; + new PNG().parse(dataUrl, (err, png) => { + if (err) throw new Error("Couldn't parse PNG"); + this.data = png.data; + this.height = png.height; + this.width = png.width; + this.onload(); + }); + }; + reader.readAsArrayBuffer(lastDataFromUrl); + } }); +// Delete local and session storage from JSDOM and stub them out with a warning log +// Accessing these properties during extend() produces an error in Node environments +// See https://github.com/mapbox/mapbox-gl-js/pull/7455 for discussion +delete window.localStorage; +delete window.sessionStorage; +window.localStorage = window.sessionStorage = () => console.log('Local and session storage not available in Node. Use a stub implementation if needed for testing.'); + +window.devicePixelRatio = 1; + +global.requestAnimationFrame = window.requestAnimationFrame = (callback) => { + return setImmediate(callback, 0); +}; +global.cancelAnimationFrame = clearImmediate; + +// Add webgl context with the supplied GL +const originalGetContext = global.HTMLCanvasElement.prototype.getContext; + +function imitateWebGlGetContext(type, attributes) { + if (type === 'webgl') { + if (!this._webGLContext) { + this._webGLContext = gl(this.width, this.height, attributes); + } + return this._webGLContext; + } + // Fallback to existing HTMLCanvasElement getContext behaviour + return originalGetContext.call(this, type, attributes); +} +global.HTMLCanvasElement.prototype.getContext = imitateWebGlGetContext; + +window.useFakeXMLHttpRequest = () => { + sinon.xhr.supportsCORS = true; + window.server = sinon.fakeServer.create(); + global.XMLHttpRequest = window.server.xhr; +}; + +window.clearFakeXMLHttpRequest = () => { + window.server = null; + global.XMLHttpRequest = null; +}; + +global.URL.createObjectURL = (blob) => { + lastDataFromUrl = blob; + return 'blob:'; +}; + +global.URL.revokeObjectURL = () => { + lastDataFromUrl = null; +}; + +window.useFakeWorkerPresence = () => { + global.WorkerGlobalScope = function () { }; + global.self = new global.WorkerGlobalScope(); +}; +window.clearFakeWorkerPresence = () => { + global.WorkerGlobalScope = undefined; + global.self = undefined; +}; + +window.performance.getEntriesByName = () => { }; +window.performance.mark = () => { }; +window.performance.measure = () => { }; +window.performance.clearMarks = () => { }; +window.performance.clearMeasures = () => { }; + diff --git a/test/suite_implementation.js b/test/suite_implementation.js index 0b33c0803d..d231d295bb 100644 --- a/test/suite_implementation.js +++ b/test/suite_implementation.js @@ -1,19 +1,41 @@ import {PNG} from 'pngjs'; -import Map from '../src/ui/map'; -import config from '../src/util/config'; -import window from '../src/util/window'; -import browser from '../src/util/browser'; -import {plugin as rtlTextPlugin} from '../src/source/rtl_text_plugin'; +import request from 'request'; +import maplibregl from '../rollup/build/tsc/index'; +import browser from '../rollup/build/tsc/util/browser'; +import * as rtlTextPluginModule from '../rollup/build/tsc/source/rtl_text_plugin'; import rtlText from '@mapbox/mapbox-gl-rtl-text'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import customLayerImplementations from './integration/custom_layer_implementations'; +import {fileURLToPath} from 'url'; + +const __dirname = dirname(fileURLToPath(import.meta.url)); + +const {plugin: rtlTextPlugin} = rtlTextPluginModule; rtlTextPlugin['applyArabicShaping'] = rtlText.applyArabicShaping; rtlTextPlugin['processBidirectionalText'] = rtlText.processBidirectionalText; rtlTextPlugin['processStyledBidirectionalText'] = rtlText.processStyledBidirectionalText; -module.exports = function(style, options, _callback) { // eslint-disable-line import/no-commonjs +// replacing the browser method of get image in order to avoid usage of context and canvas 2d with Image object... +browser.getImageData = function (img, padding = 0) { + if (!img.data) { + return {width: 1, height: 1, data: new Uint8Array(1)}; + } + const width = img.width; + const height = img.height; + const data = img.data; + const source = new Uint8Array(data); + const dest = new Uint8Array((2 * padding + width) * (2 * padding + height) * 4); + + const offset = (2 * padding + width) * padding + padding; + for (let i = 0; i < height; i++) { + dest.set(source.slice(i * width * 4, (i + 1) * width * 4), 4 * (offset + (width + 2 * padding) * i)); + } + return {width: width + 2 * padding, height: height + 2 * padding, data: dest}; +}; + +export default function(style, options, _callback) { let wasCallbackCalled = false; const timeout = setTimeout(() => { @@ -29,6 +51,20 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im } window.devicePixelRatio = options.pixelRatio; + window.useFakeXMLHttpRequest(); + XMLHttpRequest.onCreate = req => { + setTimeout(() => { + let reqObj = req.url; + if (req.responseType === 'arraybuffer') { + reqObj = {url: req.url, encoding: null}; + } + request(reqObj, (error, response, body) => { + req.setStatus(response.statusCode); + req.response = body; + req.onload(); + }); + }, 0); + }; if (options.addFakeCanvas) { const fakeCanvas = createFakeCanvas(window.document, options.addFakeCanvas.id, options.addFakeCanvas.image); @@ -39,10 +75,7 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im Object.defineProperty(container, 'clientWidth', {value: options.width}); Object.defineProperty(container, 'clientHeight', {value: options.height}); - // We are self-hosting test files. - config.REQUIRE_ACCESS_TOKEN = false; - - const map = new Map({ + const map = new maplibregl.Map({ container, style, classes: options.classes, @@ -59,11 +92,6 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im // Configure the map to never stop the render loop map.repaint = true; - let now = 0; - browser.now = function() { - return now; - }; - if (options.debug) map.showTileBoundaries = true; if (options.showOverdrawInspector) map.showOverdrawInspector = true; if (options.showPadding) map.showPadding = true; @@ -183,7 +211,7 @@ module.exports = function(style, options, _callback) { // eslint-disable-line im applyOperations(map, operations.slice(1), callback); } } -}; +} function createFakeCanvas(document, id, imagePath) { const fakeCanvas = document.createElement('canvas'); @@ -200,3 +228,4 @@ function updateFakeCanvas(document, id, imagePath) { const image = PNG.sync.read(fs.readFileSync(path.join(__dirname, './integration', imagePath))); fakeCanvas.data = image.data; } + diff --git a/test/unit/changelog.js b/test/unit/changelog.js deleted file mode 100644 index 908e08394c..0000000000 --- a/test/unit/changelog.js +++ /dev/null @@ -1,17 +0,0 @@ -import {test} from '../util/test'; -import fs from 'fs'; -import path from 'path'; -import {version} from '../../package.json'; - -test('changelog', (t) => { - const changelog = fs.readFileSync(path.join(__dirname, '../../CHANGELOG.md'), 'utf8'); - t.test('latest version is in changelog', (t) => { - if (version.indexOf('-dev') <= 0 && version.indexOf('-rc') <= 0) { - const versionString = `## ${version}\n`; - t.ok(changelog.indexOf(versionString) >= 0); - } - t.end(); - }); - - t.end(); -}); diff --git a/test/unit/data/dem_data.test.js b/test/unit/data/dem_data.test.js index 4f9627d37e..5f8b4e2fcf 100644 --- a/test/unit/data/dem_data.test.js +++ b/test/unit/data/dem_data.test.js @@ -1,7 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import DEMData from '../../../src/data/dem_data'; -import {RGBAImage} from '../../../src/util/image'; -import {serialize, deserialize} from '../../../src/util/web_worker_transfer'; +import DEMData from '../../../rollup/build/tsc/data/dem_data'; +import {RGBAImage} from '../../../rollup/build/tsc/util/image'; +import {serialize, deserialize} from '../../../rollup/build/tsc/util/web_worker_transfer'; function createMockImage(height, width) { // RGBAImage passed to constructor has uniform 1px padding on all sides. diff --git a/test/unit/data/feature_position_map.test.js b/test/unit/data/feature_position_map.test.js index b450f05efe..80ac29ef3c 100644 --- a/test/unit/data/feature_position_map.test.js +++ b/test/unit/data/feature_position_map.test.js @@ -1,7 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import FeatureMap from '../../../src/data/feature_position_map'; -import {serialize, deserialize} from '../../../src/util/web_worker_transfer'; +import FeatureMap from '../../../rollup/build/tsc/data/feature_position_map'; +import {serialize, deserialize} from '../../../rollup/build/tsc/util/web_worker_transfer'; test('FeaturePositionMap', (t) => { diff --git a/test/unit/data/fill_bucket.test.js b/test/unit/data/fill_bucket.test.js index ad18a695be..13fb24c987 100644 --- a/test/unit/data/fill_bucket.test.js +++ b/test/unit/data/fill_bucket.test.js @@ -1,12 +1,16 @@ + +import '../../stub_loader'; import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import Protobuf from 'pbf'; import {VectorTile} from '@mapbox/vector-tile'; -import Point from '@mapbox/point-geometry'; -import segment from '../../../src/data/segment'; -import FillBucket from '../../../src/data/bucket/fill_bucket'; -import FillStyleLayer from '../../../src/style/style_layer/fill_style_layer'; +import Point from '../../../rollup/build/tsc/util/point'; +import segment from '../../../rollup/build/tsc/data/segment'; +import FillBucket from '../../../rollup/build/tsc/data/bucket/fill_bucket'; +import FillStyleLayer from '../../../rollup/build/tsc/style/style_layer/fill_style_layer'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); // Load a fill feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.join(__dirname, '/../../fixtures/mbsv5-6-18-23.vector.pbf')))); diff --git a/test/unit/data/line_bucket.test.js b/test/unit/data/line_bucket.test.js index 5660a98a7b..a2f6f52c9b 100644 --- a/test/unit/data/line_bucket.test.js +++ b/test/unit/data/line_bucket.test.js @@ -1,12 +1,15 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import Protobuf from 'pbf'; import {VectorTile} from '@mapbox/vector-tile'; -import Point from '@mapbox/point-geometry'; -import segment from '../../../src/data/segment'; -import LineBucket from '../../../src/data/bucket/line_bucket'; -import LineStyleLayer from '../../../src/style/style_layer/line_style_layer'; +import Point from '../../../rollup/build/tsc/util/point'; +import segment from '../../../rollup/build/tsc/data/segment'; +import LineBucket from '../../../rollup/build/tsc/data/bucket/line_bucket'; +import LineStyleLayer from '../../../rollup/build/tsc/style/style_layer/line_style_layer'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); // Load a line feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.join(__dirname, '/../../fixtures/mbsv5-6-18-23.vector.pbf')))); diff --git a/test/unit/data/load_geometry.test.js b/test/unit/data/load_geometry.test.js index 1ad2269f35..dc9bea5e5e 100644 --- a/test/unit/data/load_geometry.test.js +++ b/test/unit/data/load_geometry.test.js @@ -1,9 +1,11 @@ import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import Protobuf from 'pbf'; import {VectorTile} from '@mapbox/vector-tile'; -import loadGeometry from '../../../src/data/load_geometry.js'; +import loadGeometry from '../../../rollup/build/tsc/data/load_geometry.js'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); // Load a line feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.join(__dirname, '/../../fixtures/mbsv5-6-18-23.vector.pbf')))); diff --git a/test/unit/data/symbol_bucket.test.js b/test/unit/data/symbol_bucket.test.js index 87a8badb43..e1056f7733 100644 --- a/test/unit/data/symbol_bucket.test.js +++ b/test/unit/data/symbol_bucket.test.js @@ -1,18 +1,21 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import Protobuf from 'pbf'; import {VectorTile} from '@mapbox/vector-tile'; -import SymbolBucket from '../../../src/data/bucket/symbol_bucket'; -import {CollisionBoxArray} from '../../../src/data/array_types'; -import {performSymbolLayout} from '../../../src/symbol/symbol_layout'; -import {Placement} from '../../../src/symbol/placement'; -import Transform from '../../../src/geo/transform'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import Tile from '../../../src/source/tile'; -import CrossTileSymbolIndex from '../../../src/symbol/cross_tile_symbol_index'; -import FeatureIndex from '../../../src/data/feature_index'; +import SymbolBucket from '../../../rollup/build/tsc/data/bucket/symbol_bucket'; +import {CollisionBoxArray} from '../../../rollup/build/tsc/data/array_types'; +import {performSymbolLayout} from '../../../rollup/build/tsc/symbol/symbol_layout'; +import {Placement} from '../../../rollup/build/tsc/symbol/placement'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import Tile from '../../../rollup/build/tsc/source/tile'; +import CrossTileSymbolIndex from '../../../rollup/build/tsc/symbol/cross_tile_symbol_index'; +import FeatureIndex from '../../../rollup/build/tsc/data/feature_index'; import {createSymbolBucket} from '../../util/create_symbol_layer'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); // Load a point feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.join(__dirname, '/../../fixtures/mbsv5-6-18-23.vector.pbf')))); diff --git a/test/unit/data/vertex_buffer.test.js b/test/unit/data/vertex_buffer.test.js index 464359eaa0..e735e31923 100644 --- a/test/unit/data/vertex_buffer.test.js +++ b/test/unit/data/vertex_buffer.test.js @@ -1,7 +1,8 @@ import {test} from '../../util/test'; -import VertexBuffer from '../../../src/gl/vertex_buffer'; -import {StructArrayLayout3i6} from '../../../src/data/array_types'; -import Context from '../../../src/gl/context'; +import VertexBuffer from '../../../rollup/build/tsc/gl/vertex_buffer'; +import {StructArrayLayout3i6} from '../../../rollup/build/tsc/data/array_types'; +import Context from '../../../rollup/build/tsc/gl/context'; +import gl from 'gl'; test('VertexBuffer', (t) => { class TestArray extends StructArrayLayout3i6 {} @@ -11,7 +12,7 @@ test('VertexBuffer', (t) => { ]; t.test('constructs itself', (t) => { - const context = new Context(require('gl')(10, 10)); + const context = new Context(gl(10, 10)); const array = new TestArray(); array.emplaceBack(1, 1, 1); array.emplaceBack(1, 1, 1); @@ -29,7 +30,7 @@ test('VertexBuffer', (t) => { }); t.test('enableAttributes', (t) => { - const context = new Context(require('gl')(10, 10)); + const context = new Context(gl(10, 10)); const array = new TestArray(); const buffer = new VertexBuffer(context, array, attributes); t.stub(context.gl, 'enableVertexAttribArray').callsFake(() => {}); @@ -39,7 +40,7 @@ test('VertexBuffer', (t) => { }); t.test('setVertexAttribPointers', (t) => { - const context = new Context(require('gl')(10, 10)); + const context = new Context(gl(10, 10)); const array = new TestArray(); const buffer = new VertexBuffer(context, array, attributes); t.stub(context.gl, 'vertexAttribPointer').callsFake(() => {}); diff --git a/test/unit/geo/edge_insets.test.js b/test/unit/geo/edge_insets.test.js index ccfc1982cf..54ecb58a0c 100644 --- a/test/unit/geo/edge_insets.test.js +++ b/test/unit/geo/edge_insets.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import EdgeInsets from '../../../src/geo/edge_insets'; +import EdgeInsets from '../../../rollup/build/tsc/geo/edge_insets'; test('EdgeInsets', (t) => { t.test('#constructor', (t) => { diff --git a/test/unit/geo/lng_lat.test.js b/test/unit/geo/lng_lat.test.js index 07a11e327e..561a2002bb 100644 --- a/test/unit/geo/lng_lat.test.js +++ b/test/unit/geo/lng_lat.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import LngLat from '../../../src/geo/lng_lat'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; test('LngLat', (t) => { t.test('#constructor', (t) => { diff --git a/test/unit/geo/lng_lat_bounds.test.js b/test/unit/geo/lng_lat_bounds.test.js index c623a65e4a..9164de5207 100644 --- a/test/unit/geo/lng_lat_bounds.test.js +++ b/test/unit/geo/lng_lat_bounds.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import LngLat from '../../../src/geo/lng_lat'; -import LngLatBounds from '../../../src/geo/lng_lat_bounds'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import LngLatBounds from '../../../rollup/build/tsc/geo/lng_lat_bounds'; test('LngLatBounds', (t) => { t.test('#constructor', (t) => { diff --git a/test/unit/geo/mercator_coordinate.test.js b/test/unit/geo/mercator_coordinate.test.js index 72400950b1..3d2ab46675 100644 --- a/test/unit/geo/mercator_coordinate.test.js +++ b/test/unit/geo/mercator_coordinate.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import LngLat from '../../../src/geo/lng_lat'; -import MercatorCoordinate, {mercatorScale} from '../../../src/geo/mercator_coordinate'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import MercatorCoordinate, {mercatorScale} from '../../../rollup/build/tsc/geo/mercator_coordinate'; test('LngLat', (t) => { t.test('#constructor', (t) => { diff --git a/test/unit/geo/transform.test.js b/test/unit/geo/transform.test.js index 8a9632c516..5443c03508 100644 --- a/test/unit/geo/transform.test.js +++ b/test/unit/geo/transform.test.js @@ -1,8 +1,8 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import Transform from '../../../src/geo/transform'; -import LngLat from '../../../src/geo/lng_lat'; -import {OverscaledTileID, CanonicalTileID} from '../../../src/source/tile_id'; +import Point from '../../../rollup/build/tsc/util/point'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import {OverscaledTileID, CanonicalTileID} from '../../../rollup/build/tsc/source/tile_id'; import {fixedLngLat, fixedCoord} from '../../util/fixed'; test('transform', (t) => { diff --git a/test/unit/gl/state.test.js b/test/unit/gl/state.test.js index a7b020957e..1216eb07fc 100644 --- a/test/unit/gl/state.test.js +++ b/test/unit/gl/state.test.js @@ -1,8 +1,8 @@ import {test} from '../../util/test'; -import {ClearColor, ClearDepth, ClearStencil, ColorMask, DepthMask, StencilMask, StencilFunc, StencilOp, StencilTest, DepthRange, DepthTest, DepthFunc, Blend, BlendFunc, BlendColor, Program, ActiveTextureUnit, Viewport, BindFramebuffer, BindRenderbuffer, BindTexture, BindVertexBuffer, BindElementBuffer, BindVertexArrayOES, PixelStoreUnpack, PixelStoreUnpackPremultiplyAlpha} from '../../../src/gl/value'; -import Context from '../../../src/gl/context'; -import Color from '../../../src/style-spec/util/color'; -import {deepEqual} from '../../../src/util/util'; +import {ClearColor, ClearDepth, ClearStencil, ColorMask, DepthMask, StencilMask, StencilFunc, StencilOp, StencilTest, DepthRange, DepthTest, DepthFunc, Blend, BlendFunc, BlendColor, Program, ActiveTextureUnit, Viewport, BindFramebuffer, BindRenderbuffer, BindTexture, BindVertexBuffer, BindElementBuffer, BindVertexArrayOES, PixelStoreUnpack, PixelStoreUnpackPremultiplyAlpha} from '../../../rollup/build/tsc/gl/value'; +import Context from '../../../rollup/build/tsc/gl/context'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; +import {deepEqual} from '../../../rollup/build/tsc/util/util'; import gl from 'gl'; const context = new Context(gl(10, 10)); diff --git a/test/unit/mapbox-gl.js b/test/unit/mapbox-gl.test.js similarity index 61% rename from test/unit/mapbox-gl.js rename to test/unit/mapbox-gl.test.js index 3b3764fb7a..29d731ae25 100644 --- a/test/unit/mapbox-gl.js +++ b/test/unit/mapbox-gl.test.js @@ -1,12 +1,8 @@ +import '../stub_loader'; import {test} from '../util/test'; -import mapboxgl from '../../src'; +import mapboxgl from '../../rollup/build/tsc'; test('mapboxgl', (t) => { - t.test('version', (t) => { - t.ok(mapboxgl.version); - t.end(); - }); - t.test('workerCount', (t) => { t.ok(typeof mapboxgl.workerCount === 'number'); t.end(); diff --git a/test/unit/render/glyph_manager.test.js b/test/unit/render/glyph_manager.test.js index 73f55531a1..d26d2af37c 100644 --- a/test/unit/render/glyph_manager.test.js +++ b/test/unit/render/glyph_manager.test.js @@ -1,6 +1,7 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import parseGlyphPBF from '../../../src/style/parse_glyph_pbf'; -import GlyphManager from '../../../src/render/glyph_manager'; +import parseGlyphPBF from '../../../rollup/build/tsc/style/parse_glyph_pbf'; +import GlyphManager from '../../../rollup/build/tsc/render/glyph_manager'; import fs from 'fs'; const glyphs = {}; diff --git a/test/unit/render/line_atlas.test.js b/test/unit/render/line_atlas.test.js index b1c2bdef93..5fdd57b245 100644 --- a/test/unit/render/line_atlas.test.js +++ b/test/unit/render/line_atlas.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import LineAtlas from '../../../src/render/line_atlas'; +import LineAtlas from '../../../rollup/build/tsc/render/line_atlas'; test('LineAtlas', (t) => { const lineAtlas = new LineAtlas(64, 64); diff --git a/test/unit/render/uniform_binding.test.js b/test/unit/render/uniform_binding.test.js index bbdecdb4b9..4f4a2fba7e 100644 --- a/test/unit/render/uniform_binding.test.js +++ b/test/unit/render/uniform_binding.test.js @@ -5,7 +5,7 @@ import { Uniform2f, Uniform3f, Uniform4f -} from '../../../src/render/uniform_binding'; +} from '../../../rollup/build/tsc/render/uniform_binding'; test('Uniform1i', (t) => { // test counts ensure we don't call the gl.uniform* setters more than expected diff --git a/test/unit/shaders/encode_attribute.test.js b/test/unit/shaders/encode_attribute.test.js index 5530317ca3..4603c5e801 100644 --- a/test/unit/shaders/encode_attribute.test.js +++ b/test/unit/shaders/encode_attribute.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {packUint8ToFloat} from '../../../src/shaders/encode_attribute'; +import {packUint8ToFloat} from '../../../rollup/build/tsc/shaders/encode_attribute'; test('packUint8ToFloat', (t) => { t.equal(packUint8ToFloat(0, 0), 0); diff --git a/test/unit/source/canvas_source.test.js b/test/unit/source/canvas_source.test.js index 5e26b11d34..67548a7654 100644 --- a/test/unit/source/canvas_source.test.js +++ b/test/unit/source/canvas_source.test.js @@ -1,12 +1,16 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import CanvasSource from '../../../src/source/canvas_source'; -import Transform from '../../../src/geo/transform'; -import {Event, Evented} from '../../../src/util/evented'; -import {extend} from '../../../src/util/util'; -import window from '../../../src/util/window'; +import CanvasSource from '../../../rollup/build/tsc/source/canvas_source'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import {Event, Evented} from '../../../rollup/build/tsc/util/evented'; +import {extend} from '../../../rollup/build/tsc/util/util'; + +let originalGetContext = HTMLCanvasElement.prototype.getContext; function createSource(options) { - window.useFakeHTMLCanvasGetContext(); + + HTMLCanvasElement.prototype.getContext = () => { return '2d'; }; + const c = options && options.canvas || window.document.createElement('canvas'); c.width = 20; @@ -38,7 +42,7 @@ class StubMap extends Evented { test('CanvasSource', (t) => { t.afterEach((callback) => { - window.restore(); + HTMLCanvasElement.prototype.getContext = originalGetContext; callback(); }); @@ -182,7 +186,5 @@ test('CanvasSource#serialize', (t) => { t.equal(serialized.type, 'canvas'); t.deepEqual(serialized.coordinates, [[0, 0], [1, 0], [1, 1], [0, 1]]); - window.restore(); - t.end(); }); diff --git a/test/unit/source/geojson_source.test.js b/test/unit/source/geojson_source.test.js index ba8328460a..1937118022 100644 --- a/test/unit/source/geojson_source.test.js +++ b/test/unit/source/geojson_source.test.js @@ -1,10 +1,11 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Tile from '../../../src/source/tile'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import GeoJSONSource from '../../../src/source/geojson_source'; -import Transform from '../../../src/geo/transform'; -import LngLat from '../../../src/geo/lng_lat'; -import {extend} from '../../../src/util/util'; +import Tile from '../../../rollup/build/tsc/source/tile'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import GeoJSONSource from '../../../rollup/build/tsc/source/geojson_source'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import {extend} from '../../../rollup/build/tsc/util/util'; const wrapDispatcher = (dispatcher) => { return { diff --git a/test/unit/source/geojson_worker_source.test.js b/test/unit/source/geojson_worker_source.test.js index a53088e5e9..0241fdcade 100644 --- a/test/unit/source/geojson_worker_source.test.js +++ b/test/unit/source/geojson_worker_source.test.js @@ -1,8 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import GeoJSONWorkerSource from '../../../src/source/geojson_worker_source'; -import StyleLayerIndex from '../../../src/style/style_layer_index'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import perf from '../../../src/util/performance'; +import GeoJSONWorkerSource from '../../../rollup/build/tsc/source/geojson_worker_source'; +import StyleLayerIndex from '../../../rollup/build/tsc/style/style_layer_index'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import perf from '../../../rollup/build/tsc/util/performance'; const actor = {send: () => {}}; diff --git a/test/unit/source/geojson_wrapper.test.js b/test/unit/source/geojson_wrapper.test.js index 4c04c27f34..d5a686d8ae 100644 --- a/test/unit/source/geojson_wrapper.test.js +++ b/test/unit/source/geojson_wrapper.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import Wrapper from '../../../src/source/geojson_wrapper'; +import Wrapper from '../../../rollup/build/tsc/source/geojson_wrapper'; test('geojsonwrapper', (t) => { diff --git a/test/unit/source/image_source.test.js b/test/unit/source/image_source.test.js index fb0e1d843b..6b244169af 100644 --- a/test/unit/source/image_source.test.js +++ b/test/unit/source/image_source.test.js @@ -1,11 +1,10 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import assert from 'assert'; -import ImageSource from '../../../src/source/image_source'; -import {Evented} from '../../../src/util/evented'; -import Transform from '../../../src/geo/transform'; -import {extend} from '../../../src/util/util'; -import browser from '../../../src/util/browser'; -import window from '../../../src/util/window'; +import ImageSource from '../../../rollup/build/tsc/source/image_source'; +import {Evented} from '../../../rollup/build/tsc/util/evented'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import browser from '../../../rollup/build/tsc/util/browser'; function createSource(options) { options = extend({ @@ -30,24 +29,16 @@ class StubMap extends Evented { test('ImageSource', (t) => { window.useFakeXMLHttpRequest(); - // stub this manually because sinon does not stub non-existent methods - assert(!window.URL.createObjectURL); - window.URL.createObjectURL = () => 'blob:'; - t.tearDown(() => delete window.URL.createObjectURL); - // stub Image so we can invoke 'onload' // https://github.com/jsdom/jsdom/commit/58a7028d0d5b6aacc5b435daee9fd8f9eacbb14c - const img = {}; - t.stub(window, 'Image').returns(img); // fake the image request (sinon doesn't allow non-string data for // server.respondWith, so we do so manually) const requests = []; - window.XMLHttpRequest.onCreate = req => { requests.push(req); }; + XMLHttpRequest.onCreate = req => { requests.push(req); }; const respond = () => { const req = requests.shift(); req.setStatus(200); req.response = new ArrayBuffer(1); req.onload(); - img.onload(); }; t.stub(browser, 'getImageData').callsFake(() => new ArrayBuffer(1)); @@ -64,10 +55,11 @@ test('ImageSource', (t) => { const source = createSource({url : '/image.png'}); source.on('dataloading', (e) => { t.equal(e.dataType, 'source'); - t.end(); }); source.onAdd(new StubMap()); respond(); + t.ok(source.image); + t.end(); }); t.test('transforms url request', (t) => { diff --git a/test/unit/source/query_features.test.js b/test/unit/source/query_features.test.js index a2cf20d60c..1267e55089 100644 --- a/test/unit/source/query_features.test.js +++ b/test/unit/source/query_features.test.js @@ -1,10 +1,11 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import { queryRenderedFeatures, querySourceFeatures -} from '../../../src/source/query_features.js'; -import SourceCache from '../../../src/source/source_cache.js'; -import Transform from '../../../src/geo/transform.js'; +} from '../../../rollup/build/tsc/source/query_features.js'; +import SourceCache from '../../../rollup/build/tsc/source/source_cache.js'; +import Transform from '../../../rollup/build/tsc/geo/transform.js'; test('QueryFeatures#rendered', (t) => { t.test('returns empty object if source returns no tiles', (t) => { diff --git a/test/unit/source/raster_dem_tile_source.test.js b/test/unit/source/raster_dem_tile_source.test.js index f7fef0d6d5..0b725574bd 100644 --- a/test/unit/source/raster_dem_tile_source.test.js +++ b/test/unit/source/raster_dem_tile_source.test.js @@ -1,8 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import RasterDEMTileSource from '../../../src/source/raster_dem_tile_source'; -import window from '../../../src/util/window'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import {RequestManager} from '../../../src/util/mapbox'; +import RasterDEMTileSource from '../../../rollup/build/tsc/source/raster_dem_tile_source'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import {RequestManager} from '../../../rollup/build/tsc/util/mapbox'; function createSource(options, transformCallback) { const source = new RasterDEMTileSource('id', options, {send() {}}, options.eventedParent); @@ -26,7 +26,7 @@ test('RasterTileSource', (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); diff --git a/test/unit/source/raster_dem_tile_worker_source.test.js b/test/unit/source/raster_dem_tile_worker_source.test.js index febeaa32b2..2c6e4f6667 100644 --- a/test/unit/source/raster_dem_tile_worker_source.test.js +++ b/test/unit/source/raster_dem_tile_worker_source.test.js @@ -1,7 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import RasterDEMTileWorkerSource from '../../../src/source/raster_dem_tile_worker_source'; -import StyleLayerIndex from '../../../src/style/style_layer_index'; -import DEMData from '../../../src/data/dem_data'; +import RasterDEMTileWorkerSource from '../../../rollup/build/tsc/source/raster_dem_tile_worker_source'; +import StyleLayerIndex from '../../../rollup/build/tsc/style/style_layer_index'; +import DEMData from '../../../rollup/build/tsc/data/dem_data'; test('loadTile', (t) => { t.test('loads DEM tile', (t) => { diff --git a/test/unit/source/raster_tile_source.test.js b/test/unit/source/raster_tile_source.test.js index 2b77fa7db9..27d4d17ad3 100644 --- a/test/unit/source/raster_tile_source.test.js +++ b/test/unit/source/raster_tile_source.test.js @@ -1,8 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import RasterTileSource from '../../../src/source/raster_tile_source'; -import window from '../../../src/util/window'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import {RequestManager} from '../../../src/util/mapbox'; +import RasterTileSource from '../../../rollup/build/tsc/source/raster_tile_source'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import {RequestManager} from '../../../rollup/build/tsc/util/mapbox'; function createSource(options, transformCallback) { const source = new RasterTileSource('id', options, {send() {}}, options.eventedParent); @@ -26,7 +26,7 @@ test('RasterTileSource', (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); diff --git a/test/unit/source/source_cache.test.js b/test/unit/source/source_cache.test.js index 2d8fc7790b..e276af226e 100644 --- a/test/unit/source/source_cache.test.js +++ b/test/unit/source/source_cache.test.js @@ -1,14 +1,15 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import SourceCache from '../../../src/source/source_cache'; -import {setType} from '../../../src/source/source'; -import Tile from '../../../src/source/tile'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import Transform from '../../../src/geo/transform'; -import LngLat from '../../../src/geo/lng_lat'; -import Point from '@mapbox/point-geometry'; -import {Event, ErrorEvent, Evented} from '../../../src/util/evented'; -import {extend} from '../../../src/util/util'; -import browser from '../../../src/util/browser'; +import SourceCache from '../../../rollup/build/tsc/source/source_cache'; +import {setType} from '../../../rollup/build/tsc/source/source'; +import Tile from '../../../rollup/build/tsc/source/tile'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import Point from '../../../rollup/build/tsc/util/point'; +import {Event, ErrorEvent, Evented} from '../../../rollup/build/tsc/util/evented'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import browser from '../../../rollup/build/tsc/util/browser'; // Add a mocked source type for use in these tests function MockSourceType(id, sourceOptions, _dispatcher, eventedParent) { diff --git a/test/unit/source/tile.test.js b/test/unit/source/tile.test.js index 384d4d4136..ade4867252 100644 --- a/test/unit/source/tile.test.js +++ b/test/unit/source/tile.test.js @@ -1,15 +1,18 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import {createSymbolBucket} from '../../util/create_symbol_layer'; -import Tile from '../../../src/source/tile'; -import GeoJSONWrapper from '../../../src/source/geojson_wrapper'; -import {OverscaledTileID} from '../../../src/source/tile_id'; +import Tile from '../../../rollup/build/tsc/source/tile'; +import GeoJSONWrapper from '../../../rollup/build/tsc/source/geojson_wrapper'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import vtpbf from 'vt-pbf'; -import FeatureIndex from '../../../src/data/feature_index'; -import {CollisionBoxArray} from '../../../src/data/array_types'; -import {extend} from '../../../src/util/util'; -import {serialize, deserialize} from '../../../src/util/web_worker_transfer'; +import FeatureIndex from '../../../rollup/build/tsc/data/feature_index'; +import {CollisionBoxArray} from '../../../rollup/build/tsc/data/array_types'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import {serialize, deserialize} from '../../../rollup/build/tsc/util/web_worker_transfer'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); test('querySourceFeatures', (t) => { const features = [{ diff --git a/test/unit/source/tile_cache.test.js b/test/unit/source/tile_cache.test.js index 623d8710d8..ae6ea19b75 100644 --- a/test/unit/source/tile_cache.test.js +++ b/test/unit/source/tile_cache.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import TileCache from '../../../src/source/tile_cache'; -import {OverscaledTileID} from '../../../src/source/tile_id'; +import TileCache from '../../../rollup/build/tsc/source/tile_cache'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; const idA = new OverscaledTileID(10, 0, 10, 0, 1); const idB = new OverscaledTileID(10, 0, 10, 0, 2); diff --git a/test/unit/source/tile_id.test.js b/test/unit/source/tile_id.test.js index 09255aa5fb..3526d9ab78 100644 --- a/test/unit/source/tile_id.test.js +++ b/test/unit/source/tile_id.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {CanonicalTileID, OverscaledTileID} from '../../../src/source/tile_id'; +import {CanonicalTileID, OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; test('CanonicalTileID', (t) => { t.test('#constructor', (t) => { @@ -49,7 +49,7 @@ test('CanonicalTileID', (t) => { t.equal(new CanonicalTileID(17, 22914, 52870).url(['quadkey={quadkey}']), 'quadkey=02301322130000230'); // Test case confirmed by quadkeytools package - // https://bitbucket.org/steele/quadkeytools/src/master/test/quadkey.js?fileviewer=file-view-default#quadkey.js-57 + // https://bitbucket.org/steele/quadkeytools/rollup/build/tsc/master/test/quadkey.js?fileviewer=file-view-default#quadkey.js-57 t.equal(new CanonicalTileID(6, 29, 3).url(['quadkey={quadkey}']), 'quadkey=011123'); t.end(); diff --git a/test/unit/source/vector_tile_source.test.js b/test/unit/source/vector_tile_source.test.js index 664b0d2830..bb23feaf83 100644 --- a/test/unit/source/vector_tile_source.test.js +++ b/test/unit/source/vector_tile_source.test.js @@ -1,9 +1,10 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import VectorTileSource from '../../../src/source/vector_tile_source'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import window from '../../../src/util/window'; -import {Evented} from '../../../src/util/evented'; -import {RequestManager} from '../../../src/util/mapbox'; +import VectorTileSource from '../../../rollup/build/tsc/source/vector_tile_source'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import {Evented} from '../../../rollup/build/tsc/util/evented'; +import {RequestManager} from '../../../rollup/build/tsc/util/mapbox'; +import fixturesSource from '../../fixtures/source.json'; const wrapDispatcher = (dispatcher) => { return { @@ -40,7 +41,7 @@ test('VectorTileSource', (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -64,7 +65,7 @@ test('VectorTileSource', (t) => { }); t.test('can be constructed from a TileJSON URL', (t) => { - window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); + window.server.respondWith('/source.json', JSON.stringify(fixturesSource)); const source = createSource({url: "/source.json"}); @@ -82,7 +83,7 @@ test('VectorTileSource', (t) => { }); t.test('transforms the request for TileJSON URL', (t) => { - window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); + window.server.respondWith('/source.json', JSON.stringify(fixturesSource)); const transformSpy = t.spy((url) => { return {url}; }); @@ -95,7 +96,7 @@ test('VectorTileSource', (t) => { }); t.test('fires event with metadata property', (t) => { - window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); + window.server.respondWith('/source.json', JSON.stringify(fixturesSource)); const source = createSource({url: "/source.json"}); source.on('data', (e) => { if (e.sourceDataType === 'content') t.end(); @@ -104,7 +105,7 @@ test('VectorTileSource', (t) => { }); t.test('fires "dataloading" event', (t) => { - window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); + window.server.respondWith('/source.json', JSON.stringify(fixturesSource)); const evented = new Evented(); let dataloadingFired = false; evented.on('dataloading', () => { @@ -178,7 +179,7 @@ test('VectorTileSource', (t) => { testScheme('tms', 'http://example.com/10/5/1018.png'); t.test('transforms tile urls before requesting', (t) => { - window.server.respondWith('/source.json', JSON.stringify(require('../../fixtures/source'))); + window.server.respondWith('/source.json', JSON.stringify(fixturesSource)); const source = createSource({url: "/source.json"}); const transformSpy = t.spy(source.map._requestManager, 'transformRequest'); diff --git a/test/unit/source/vector_tile_worker_source.test.js b/test/unit/source/vector_tile_worker_source.test.js index df90a9e463..bda1c213af 100644 --- a/test/unit/source/vector_tile_worker_source.test.js +++ b/test/unit/source/vector_tile_worker_source.test.js @@ -1,15 +1,18 @@ +import '../../stub_loader'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import vt from '@mapbox/vector-tile'; import Protobuf from 'pbf'; import {test} from '../../util/test'; -import VectorTileWorkerSource from '../../../src/source/vector_tile_worker_source'; -import StyleLayerIndex from '../../../src/style/style_layer_index'; -import perf from '../../../src/util/performance'; +import VectorTileWorkerSource from '../../../rollup/build/tsc/source/vector_tile_worker_source'; +import StyleLayerIndex from '../../../rollup/build/tsc/style/style_layer_index'; +import perf from '../../../rollup/build/tsc/util/performance'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); const actor = {send: () => {}}; - test('VectorTileWorkerSource#abortTile aborts pending request', (t) => { + window.useFakeXMLHttpRequest(); const source = new VectorTileWorkerSource(actor, new StyleLayerIndex(), []); source.loadTile({ @@ -31,6 +34,7 @@ test('VectorTileWorkerSource#abortTile aborts pending request', (t) => { }); t.deepEqual(source.loading, {}); + window.clearFakeXMLHttpRequest(); t.end(); }); @@ -286,3 +290,4 @@ test('VectorTileWorkerSource provides resource timing information (fallback meth t.end(); }); }); + diff --git a/test/unit/source/video_source.test.js b/test/unit/source/video_source.test.js index ad44dfc176..0531d2a2cf 100644 --- a/test/unit/source/video_source.test.js +++ b/test/unit/source/video_source.test.js @@ -1,7 +1,7 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import VideoSource from '../../../src/source/video_source'; -import {extend} from '../../../src/util/util'; -import window from '../../../src/util/window'; +import VideoSource from '../../../rollup/build/tsc/source/video_source'; +import {extend} from '../../../rollup/build/tsc/util/util'; function createSource(options) { diff --git a/test/unit/source/worker.test.js b/test/unit/source/worker.test.js index e46fb81bc8..1897bb171d 100644 --- a/test/unit/source/worker.test.js +++ b/test/unit/source/worker.test.js @@ -1,6 +1,6 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Worker from '../../../src/source/worker'; -import window from '../../../src/util/window'; +import Worker from '../../../rollup/build/tsc/source/worker'; const _self = { addEventListener() {} @@ -18,7 +18,7 @@ test('load tile', (t) => { request: {url: '/error'}// Sinon fake server gives 404 responses by default }, (err) => { t.ok(err); - window.restore(); + window.clearFakeXMLHttpRequest(); t.end(); }); window.server.respond(); diff --git a/test/unit/source/worker_tile.test.js b/test/unit/source/worker_tile.test.js index cd0927e1ef..b61e3b2bc6 100644 --- a/test/unit/source/worker_tile.test.js +++ b/test/unit/source/worker_tile.test.js @@ -1,8 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import WorkerTile from '../../../src/source/worker_tile'; -import Wrapper from '../../../src/source/geojson_wrapper'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import StyleLayerIndex from '../../../src/style/style_layer_index'; +import WorkerTile from '../../../rollup/build/tsc/source/worker_tile'; +import Wrapper from '../../../rollup/build/tsc/source/geojson_wrapper'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import StyleLayerIndex from '../../../rollup/build/tsc/style/style_layer_index'; function createWorkerTile() { return new WorkerTile({ diff --git a/test/unit/style-spec/color.js b/test/unit/style-spec/color.test.js similarity index 90% rename from test/unit/style-spec/color.js rename to test/unit/style-spec/color.test.js index 1da9ebc074..1ff4cc2f19 100644 --- a/test/unit/style-spec/color.js +++ b/test/unit/style-spec/color.test.js @@ -1,7 +1,7 @@ // @flow import {test} from '../../util/test'; -import Color from '../../../src/style-spec/util/color'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; test('Color.parse', (t) => { t.deepEqual(Color.parse('red'), new Color(1, 0, 0, 1)); diff --git a/test/unit/style-spec/composite.test.js b/test/unit/style-spec/composite.test.js index b648131807..ecbc146aec 100644 --- a/test/unit/style-spec/composite.test.js +++ b/test/unit/style-spec/composite.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import composite from '../../../src/style-spec/composite'; +import composite from '../../../rollup/build/tsc/style-spec/composite'; test('composites Mapbox vector sources', (t) => { const result = composite({ diff --git a/test/unit/style-spec/declass.test.js b/test/unit/style-spec/declass.test.js index 858c4b5705..a11dc1754f 100644 --- a/test/unit/style-spec/declass.test.js +++ b/test/unit/style-spec/declass.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import declass from '../../../src/style-spec/declass'; +import declass from '../../../rollup/build/tsc/style-spec/declass'; test('declass a style, one class', (t) => { const style = { diff --git a/test/unit/style-spec/deref.test.js b/test/unit/style-spec/deref.test.js index 847e5cba1d..c721d21720 100644 --- a/test/unit/style-spec/deref.test.js +++ b/test/unit/style-spec/deref.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import deref from '../../../src/style-spec/deref'; +import deref from '../../../rollup/build/tsc/style-spec/deref'; test('derefs a ref layer which follows its parent', (t) => { t.deepEqual(deref([ diff --git a/test/unit/style-spec/diff.test.js b/test/unit/style-spec/diff.test.js index 5e1a1d7c94..1338cd8232 100644 --- a/test/unit/style-spec/diff.test.js +++ b/test/unit/style-spec/diff.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import diffStyles from '../../../src/style-spec/diff'; +import diffStyles from '../../../rollup/build/tsc/style-spec/diff'; test('diff', (t) => { diff --git a/test/unit/style-spec/empty.test.js b/test/unit/style-spec/empty.test.js index 5184f4f0de..8926eab4c0 100644 --- a/test/unit/style-spec/empty.test.js +++ b/test/unit/style-spec/empty.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import emptyStyle from '../../../src/style-spec/empty'; -import validateStyleMin from '../../../src/style-spec/validate_style.min'; +import emptyStyle from '../../../rollup/build/tsc/style-spec/empty'; +import validateStyleMin from '../../../rollup/build/tsc/style-spec/validate_style.min'; test('it generates something', (t) => { const style = emptyStyle(); diff --git a/test/unit/style-spec/expression.test.js b/test/unit/style-spec/expression.test.js index 0936eef3ca..8e6369d456 100644 --- a/test/unit/style-spec/expression.test.js +++ b/test/unit/style-spec/expression.test.js @@ -1,7 +1,8 @@ import {test} from '../../util/test'; -import {createPropertyExpression} from '../../../src/style-spec/expression'; -import definitions from '../../../src/style-spec/expression/definitions'; -import v8 from '../../../src/style-spec/reference/v8'; +import {createPropertyExpression} from '../../../rollup/build/tsc/style-spec/expression'; +import definitions from '../../../rollup/build/tsc/style-spec/expression/definitions'; +/* eslint-disable import/no-unresolved */ +import v8 from '../../../rollup/build/tsc/style-spec/reference/v8'; // filter out interal "error" and "filter-*" expressions from definition list const filterExpressionRegex = /filter-/; diff --git a/test/unit/style-spec/feature_filter.test.js b/test/unit/style-spec/feature_filter.test.js index d81c910368..bb13087d68 100644 --- a/test/unit/style-spec/feature_filter.test.js +++ b/test/unit/style-spec/feature_filter.test.js @@ -1,10 +1,10 @@ import {test} from '../../util/test'; -import {default as createFilter, isExpressionFilter} from '../../../src/style-spec/feature_filter'; +import {default as createFilter, isExpressionFilter} from '../../../rollup/build/tsc/style-spec/feature_filter'; -import convertFilter from '../../../src/style-spec/feature_filter/convert'; -import Point from '@mapbox/point-geometry'; -import MercatorCoordinate from '../../../src/geo/mercator_coordinate'; -import EXTENT from '../../../src/data/extent'; +import convertFilter from '../../../rollup/build/tsc/style-spec/feature_filter/convert'; +import Point from '../../../rollup/build/tsc/util/point'; +import MercatorCoordinate from '../../../rollup/build/tsc/geo/mercator_coordinate'; +import EXTENT from '../../../rollup/build/tsc/data/extent'; test('filter', t => { t.test('expression, zoom', (t) => { diff --git a/test/unit/style-spec/format.test.js b/test/unit/style-spec/format.test.js index bfd619084b..6cf26b4847 100644 --- a/test/unit/style-spec/format.test.js +++ b/test/unit/style-spec/format.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import format from '../../../src/style-spec/format'; +import format from '../../../rollup/build/tsc/style-spec/format'; function roundtrip(style) { return JSON.parse(format(style)); diff --git a/test/unit/style-spec/function.test.js b/test/unit/style-spec/function.test.js index 9fa3facf1f..06183f6051 100644 --- a/test/unit/style-spec/function.test.js +++ b/test/unit/style-spec/function.test.js @@ -1,7 +1,7 @@ import {test} from '../../util/test'; -import {createFunction} from '../../../src/style-spec/function'; -import Color from '../../../src/style-spec/util/color'; -import Formatted from '../../../src/style-spec/expression/types/formatted'; +import {createFunction} from '../../../rollup/build/tsc/style-spec/function'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; +import Formatted from '../../../rollup/build/tsc/style-spec/expression/types/formatted'; import {equalWithPrecision} from '../../util'; test('binary search', (t) => { diff --git a/test/unit/style-spec/group_by_layout.test.js b/test/unit/style-spec/group_by_layout.test.js index cd5f5d457b..717c7678ac 100644 --- a/test/unit/style-spec/group_by_layout.test.js +++ b/test/unit/style-spec/group_by_layout.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import group from '../../../src/style-spec/group_by_layout'; +import group from '../../../rollup/build/tsc/style-spec/group_by_layout'; test('group layers whose ref properties are identical', (t) => { const a = { diff --git a/test/unit/style-spec/interpolate.test.js b/test/unit/style-spec/interpolate.test.js index 996fead20d..a68aff8d38 100644 --- a/test/unit/style-spec/interpolate.test.js +++ b/test/unit/style-spec/interpolate.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import * as interpolate from '../../../src/style-spec/util/interpolate'; -import Color from '../../../src/style-spec/util/color'; +import * as interpolate from '../../../rollup/build/tsc/style-spec/util/interpolate'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; test('interpolate.number', (t) => { t.equal(interpolate.number(0, 1, 0.5), 0.5); diff --git a/test/unit/style-spec/migrate.test.js b/test/unit/style-spec/migrate.test.js index af1f678430..660fb83935 100644 --- a/test/unit/style-spec/migrate.test.js +++ b/test/unit/style-spec/migrate.test.js @@ -1,27 +1,29 @@ import {test} from '../../util/test'; import fs from 'fs'; import glob from 'glob'; -import path from 'path'; -import validate from '../../../src/style-spec/validate_style'; -import v8 from '../../../src/style-spec/reference/v8'; -import migrate from '../../../src/style-spec/migrate'; - +import path, {dirname} from 'path'; +import validate from '../../../rollup/build/tsc/style-spec/validate_style'; +/* eslint-disable import/no-unresolved */ +import v8 from '../../../rollup/build/tsc/style-spec/reference/v8'; +import migrate from '../../../rollup/build/tsc/style-spec/migrate'; +import {fileURLToPath} from 'url'; /* eslint-disable import/namespace */ -import * as spec from '../../../src/style-spec/style-spec'; +import * as spec from '../../../rollup/build/tsc/style-spec/style-spec'; +const __dirname = dirname(fileURLToPath(import.meta.url)); const UPDATE = !!process.env.UPDATE; test('does not migrate from version 5', (t) => { t.throws(() => { migrate({version: 5, layers: []}); - }, new Error('cannot migrate from', 5)); + }, new Error('Cannot migrate from 5')); t.end(); }); test('does not migrate from version 6', (t) => { t.throws(() => { migrate({version: 6, layers: []}); - }, new Error('cannot migrate from', 6)); + }, new Error('Cannot migrate from 6')); t.end(); }); diff --git a/test/unit/style-spec/migrate/v8.js b/test/unit/style-spec/migrate/v8.js index 0687d3f398..469513312c 100644 --- a/test/unit/style-spec/migrate/v8.js +++ b/test/unit/style-spec/migrate/v8.js @@ -1,5 +1,5 @@ import {test} from '../../../util/test'; -import migrate from '../../../../src/style-spec/migrate/v8'; +import migrate from '../../../../rollup/build/tsc/style-spec/migrate/v8'; test('split text-font', (t) => { const input = { diff --git a/test/unit/style-spec/migrate/v9.js b/test/unit/style-spec/migrate/v9.js index 51ab437195..4bb6554449 100644 --- a/test/unit/style-spec/migrate/v9.js +++ b/test/unit/style-spec/migrate/v9.js @@ -1,5 +1,5 @@ import {test} from '../../../util/test'; -import migrate from '../../../../src/style-spec/migrate/v9'; +import migrate from '../../../../rollup/build/tsc/style-spec/migrate/v9'; test('deref layers', (t) => { const input = { diff --git a/test/unit/style-spec/spec.test.js b/test/unit/style-spec/spec.test.js index b1baa143e6..a47533861d 100644 --- a/test/unit/style-spec/spec.test.js +++ b/test/unit/style-spec/spec.test.js @@ -1,7 +1,7 @@ import {test} from '../../util/test'; /* eslint-disable import/namespace */ -import * as spec from '../../../src/style-spec/style-spec'; +import * as spec from '../../../rollup/build/tsc/style-spec/style-spec'; ['v8', 'latest'].forEach((version) => { ['', 'min'].forEach((kind) => { diff --git a/test/unit/style-spec/stops.test.js b/test/unit/style-spec/stops.test.js index 8eaf756606..b720c44fae 100644 --- a/test/unit/style-spec/stops.test.js +++ b/test/unit/style-spec/stops.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {findStopLessThanOrEqualTo} from '../../../src/style-spec/expression/stops'; +import {findStopLessThanOrEqualTo} from '../../../rollup/build/tsc/style-spec/expression/stops'; test('findStopLessThanOrEqualTo', (t) => { test('When the input > all stops it returns the last stop.', (t) => { diff --git a/test/unit/style-spec/util/color_spaces.test.js b/test/unit/style-spec/util/color_spaces.test.js index 979e0a22db..a9884da7be 100644 --- a/test/unit/style-spec/util/color_spaces.test.js +++ b/test/unit/style-spec/util/color_spaces.test.js @@ -1,6 +1,6 @@ import {test} from '../../../util/test'; -import * as colorSpaces from '../../../../src/style-spec/util/color_spaces'; -import Color from '../../../../src/style-spec/util/color'; +import * as colorSpaces from '../../../../rollup/build/tsc/style-spec/util/color_spaces'; +import Color from '../../../../rollup/build/tsc/style-spec/util/color'; test('#hclToRgb zero', (t) => { const hclColor = {h: 0, c: 0, l: 0, alpha: null}; diff --git a/test/unit/style-spec/validate.test.js b/test/unit/style-spec/validate.test.js index 64fd3080d9..5b881be619 100644 --- a/test/unit/style-spec/validate.test.js +++ b/test/unit/style-spec/validate.test.js @@ -1,8 +1,10 @@ import {test} from '../../util/test'; import glob from 'glob'; import fs from 'fs'; -import path from 'path'; -import validate from '../../../src/style-spec/validate_style'; +import path, {dirname} from 'path'; +import validate from '../../../rollup/build/tsc/style-spec/validate_style'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); const UPDATE = !!process.env.UPDATE; @@ -20,7 +22,7 @@ glob.sync(`${__dirname}/fixture/*.input.json`).forEach((file) => { const fixtures = glob.sync(`${__dirname}/fixture/*.input.json`); const style = JSON.parse(fs.readFileSync(fixtures[0])); -import reference from '../../../src/style-spec/reference/latest'; +import reference from '../../../rollup/build/tsc/style-spec/reference/latest'; test('validate.parsed exists', (t) => { t.equal(typeof validate.parsed, 'function'); diff --git a/test/unit/style/format_section_override.test.js b/test/unit/style/format_section_override.test.js index 292f937489..a967bc6d45 100644 --- a/test/unit/style/format_section_override.test.js +++ b/test/unit/style/format_section_override.test.js @@ -1,9 +1,10 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import {createExpression, ZoomConstantExpression} from '../../../src/style-spec/expression'; -import EvaluationContext from '../../../src/style-spec/expression/evaluation_context'; -import properties from '../../../src/style/style_layer/symbol_style_layer_properties'; -import {PossiblyEvaluatedPropertyValue} from '../../../src/style/properties'; -import FormatSectionOverride from '../../../src/style/format_section_override'; +import {createExpression, ZoomConstantExpression} from '../../../rollup/build/tsc/style-spec/expression'; +import EvaluationContext from '../../../rollup/build/tsc/style-spec/expression/evaluation_context'; +import properties from '../../../rollup/build/tsc/style/style_layer/symbol_style_layer_properties'; +import {PossiblyEvaluatedPropertyValue} from '../../../rollup/build/tsc/style/properties'; +import FormatSectionOverride from '../../../rollup/build/tsc/style/format_section_override'; test('evaluate', (t) => { diff --git a/test/unit/style/light.test.js b/test/unit/style/light.test.js index 584d42cf6a..c4d1c029e9 100644 --- a/test/unit/style/light.test.js +++ b/test/unit/style/light.test.js @@ -1,8 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Light from '../../../src/style/light'; -import styleSpec from '../../../src/style-spec/reference/latest'; -import Color from '../../../src/style-spec/util/color'; -import {sphericalToCartesian} from '../../../src/util/util'; +import Light from '../../../rollup/build/tsc/style/light'; +import styleSpec from '../../../rollup/build/tsc/style-spec/reference/latest'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; +import {sphericalToCartesian} from '../../../rollup/build/tsc/util/util'; const spec = styleSpec.light; diff --git a/test/unit/style/load_glyph_range.test.js b/test/unit/style/load_glyph_range.test.js index ee055e3096..d5e912741c 100644 --- a/test/unit/style/load_glyph_range.test.js +++ b/test/unit/style/load_glyph_range.test.js @@ -1,24 +1,24 @@ -// @flow - +import '../../stub_loader'; import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; -import window from '../../../src/util/window'; -import {RequestManager} from '../../../src/util/mapbox'; -import loadGlyphRange from '../../../src/style/load_glyph_range'; +import path, {dirname} from 'path'; +import {RequestManager} from '../../../rollup/build/tsc/util/mapbox'; +import loadGlyphRange from '../../../rollup/build/tsc/style/load_glyph_range'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); test('loadGlyphRange', (t) => { window.useFakeXMLHttpRequest(); t.tearDown(() => { - window.restore(); + window.clearFakeXMLHttpRequest(); }); const transform = t.stub().callsFake((url) => ({url})); const manager = new RequestManager(transform); let request; - window.XMLHttpRequest.onCreate = (req) => { request = req; }; + XMLHttpRequest.onCreate = (req) => { request = req; }; loadGlyphRange('Arial Unicode MS', 0, 'https://localhost/fonts/v1/{fontstack}/{range}.pbf', manager, (err, result) => { t.ifError(err); diff --git a/test/unit/style/style.test.js b/test/unit/style/style.test.js index ffe0bc968a..a2f9ecb380 100644 --- a/test/unit/style/style.test.js +++ b/test/unit/style/style.test.js @@ -1,20 +1,19 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import assert from 'assert'; -import Style from '../../../src/style/style'; -import SourceCache from '../../../src/source/source_cache'; -import StyleLayer from '../../../src/style/style_layer'; -import Transform from '../../../src/geo/transform'; -import {extend} from '../../../src/util/util'; -import {RequestManager} from '../../../src/util/mapbox'; -import {Event, Evented} from '../../../src/util/evented'; -import window from '../../../src/util/window'; +import Style from '../../../rollup/build/tsc/style/style'; +import SourceCache from '../../../rollup/build/tsc/source/source_cache'; +import StyleLayer from '../../../rollup/build/tsc/style/style_layer'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import {RequestManager} from '../../../rollup/build/tsc/util/mapbox'; +import {Event, Evented} from '../../../rollup/build/tsc/util/evented'; import { setRTLTextPlugin, clearRTLTextPlugin, evented as rtlTextPluginEvented -} from '../../../src/source/rtl_text_plugin'; -import browser from '../../../src/util/browser'; -import {OverscaledTileID} from '../../../src/source/tile_id'; +} from '../../../rollup/build/tsc/source/rtl_text_plugin'; +import browser from '../../../rollup/build/tsc/util/browser'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; function createStyleJSON(properties) { return extend({ @@ -58,14 +57,15 @@ class StubMap extends Evented { test('Style', (t) => { t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); + window.clearFakeWorkerPresence(); callback(); }); t.test('registers plugin state change listener', (t) => { clearRTLTextPlugin(); window.useFakeXMLHttpRequest(); - window.fakeWorkerPresence(); + window.useFakeWorkerPresence(); t.spy(Style, 'registerForPluginStateChange'); const style = new Style(new StubMap()); t.spy(style.dispatcher, 'broadcast'); @@ -83,9 +83,7 @@ test('Style', (t) => { t.test('loads plugin immediately if already registered', (t) => { clearRTLTextPlugin(); window.useFakeXMLHttpRequest(); - window.fakeWorkerPresence(); - window.URL.createObjectURL = () => 'blob:'; - t.tearDown(() => delete window.URL.createObjectURL); + window.useFakeWorkerPresence(); window.server.respondWith('/plugin.js', "doesn't matter"); let firstError = true; setRTLTextPlugin("/plugin.js", (error) => { @@ -95,6 +93,7 @@ test('Style', (t) => { t.equals(error.message, 'RTL Text Plugin failed to import scripts from /plugin.js'); t.end(); window.clearFakeWorkerPresence(); + window.clearFakeXMLHttpRequest(); firstError = false; } }); @@ -112,7 +111,7 @@ test('Style#loadURL', (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -184,7 +183,7 @@ test('Style#loadURL', (t) => { test('Style#loadJSON', (t) => { t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -219,27 +218,19 @@ test('Style#loadJSON', (t) => { // Stubbing to bypass Web APIs that supported by jsdom: // * `URL.createObjectURL` in ajax.getImage (https://github.com/tmpvar/jsdom/issues/1721) // * `canvas.getContext('2d')` in browser.getImageData - t.stub(window.URL, 'revokeObjectURL'); t.stub(browser, 'getImageData'); // stub Image so we can invoke 'onload' // https://github.com/jsdom/jsdom/commit/58a7028d0d5b6aacc5b435daee9fd8f9eacbb14c - const img = {}; - t.stub(window, 'Image').returns(img); - // stub this manually because sinon does not stub non-existent methods - assert(!window.URL.createObjectURL); - window.URL.createObjectURL = () => 'blob:'; - t.tearDown(() => delete window.URL.createObjectURL); // fake the image request (sinon doesn't allow non-string data for // server.respondWith, so we do so manually) const requests = []; - window.XMLHttpRequest.onCreate = req => { requests.push(req); }; + XMLHttpRequest.onCreate = req => { requests.push(req); }; const respond = () => { let req = requests.find(req => req.url === 'http://example.com/sprite.png'); req.setStatus(200); req.response = new ArrayBuffer(8); req.onload(); - img.onload(); req = requests.find(req => req.url === 'http://example.com/sprite.json'); req.setStatus(200); @@ -518,7 +509,7 @@ test('Style#setState', (t) => { t.stub(style, 'removeSource').callsFake(() => t.fail('removeSource called')); t.stub(style, 'addSource').callsFake(() => t.fail('addSource called')); style.setState(initial); - window.restore(); + window.clearFakeXMLHttpRequest(); t.end(); }); window.server.respond(); diff --git a/test/unit/style/style_layer.test.js b/test/unit/style/style_layer.test.js index 8d682f164a..1ecf77d60e 100644 --- a/test/unit/style/style_layer.test.js +++ b/test/unit/style/style_layer.test.js @@ -1,8 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import createStyleLayer from '../../../src/style/create_style_layer'; -import FillStyleLayer from '../../../src/style/style_layer/fill_style_layer'; -import {extend} from '../../../src/util/util'; -import Color from '../../../src/style-spec/util/color'; +import createStyleLayer from '../../../rollup/build/tsc/style/create_style_layer'; +import FillStyleLayer from '../../../rollup/build/tsc/style/style_layer/fill_style_layer'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import Color from '../../../rollup/build/tsc/style-spec/util/color'; test('StyleLayer', (t) => { t.test('instantiates the correct subclass', (t) => { diff --git a/test/unit/style/style_layer/fill_extrusion_style_layer.js b/test/unit/style/style_layer/fill_extrusion_style_layer.test.js similarity index 85% rename from test/unit/style/style_layer/fill_extrusion_style_layer.js rename to test/unit/style/style_layer/fill_extrusion_style_layer.test.js index c2d5a1fd06..736f64b8ee 100644 --- a/test/unit/style/style_layer/fill_extrusion_style_layer.js +++ b/test/unit/style/style_layer/fill_extrusion_style_layer.test.js @@ -1,6 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import {getIntersectionDistance} from '../../../../src/style/style_layer/fill_extrusion_style_layer'; -import Point from '@mapbox/point-geometry'; +import {getIntersectionDistance} from '../../../../rollup/build/tsc/style/style_layer/fill_extrusion_style_layer'; +import Point from '../../../../rollup/build/tsc/util/point'; test('getIntersectionDistance', (t) => { const queryPoint = [new Point(100, 100)]; diff --git a/test/unit/style/style_layer_index.test.js b/test/unit/style/style_layer_index.test.js index 90f9aa32bf..1a46cf0c95 100644 --- a/test/unit/style/style_layer_index.test.js +++ b/test/unit/style/style_layer_index.test.js @@ -1,6 +1,7 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import {mapObject} from '../../../src/util/util'; -import StyleLayerIndex from '../../../src/style/style_layer_index'; +import {mapObject} from '../../../rollup/build/tsc/util/util'; +import StyleLayerIndex from '../../../rollup/build/tsc/style/style_layer_index'; test('StyleLayerIndex#replace', (t) => { const index = new StyleLayerIndex([ diff --git a/test/unit/symbol/anchor.test.js b/test/unit/symbol/anchor.test.js index 1c97500f71..ebe9ed0a17 100644 --- a/test/unit/symbol/anchor.test.js +++ b/test/unit/symbol/anchor.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import Anchor from '../../../src/symbol/anchor'; +import Anchor from '../../../rollup/build/tsc/symbol/anchor'; test('Anchor', (t) => { t.test('#constructor', (t) => { diff --git a/test/unit/symbol/check_max_angle.test.js b/test/unit/symbol/check_max_angle.test.js index addce67cab..0392a588ac 100644 --- a/test/unit/symbol/check_max_angle.test.js +++ b/test/unit/symbol/check_max_angle.test.js @@ -1,7 +1,7 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import checkMaxAngle from '../../../src/symbol/check_max_angle'; -import Anchor from '../../../src/symbol/anchor'; +import Point from '../../../rollup/build/tsc/util/point'; +import checkMaxAngle from '../../../rollup/build/tsc/symbol/check_max_angle'; +import Anchor from '../../../rollup/build/tsc/symbol/anchor'; test('line with no sharp angles', (t) => { const line = [ new Point(0, 0), new Point(20, -1), new Point(40, 1), new Point(60, 0) ]; diff --git a/test/unit/symbol/clip_line.test.js b/test/unit/symbol/clip_line.test.js index 9e33c25a34..e28a944655 100644 --- a/test/unit/symbol/clip_line.test.js +++ b/test/unit/symbol/clip_line.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import clipLine from '../../../src/symbol/clip_line'; +import Point from '../../../rollup/build/tsc/util/point'; +import clipLine from '../../../rollup/build/tsc/symbol/clip_line'; test('clipLines', (t) => { diff --git a/test/unit/symbol/collision_feature.js b/test/unit/symbol/collision_feature.test.js similarity index 90% rename from test/unit/symbol/collision_feature.js rename to test/unit/symbol/collision_feature.test.js index b039c02f0b..ca3502b109 100644 --- a/test/unit/symbol/collision_feature.js +++ b/test/unit/symbol/collision_feature.test.js @@ -1,8 +1,8 @@ import {test} from '../../util/test'; -import CollisionFeature from '../../../src/symbol/collision_feature'; -import Anchor from '../../../src/symbol/anchor'; -import Point from '@mapbox/point-geometry'; -import {CollisionBoxArray} from '../../../src/data/array_types'; +import CollisionFeature from '../../../rollup/build/tsc/symbol/collision_feature'; +import Anchor from '../../../rollup/build/tsc/symbol/anchor'; +import Point from '../../../rollup/build/tsc/util/point'; +import {CollisionBoxArray} from '../../../rollup/build/tsc/data/array_types'; test('CollisionFeature', (t) => { diff --git a/test/unit/symbol/cross_tile_symbol_index.js b/test/unit/symbol/cross_tile_symbol_index.test.js similarity index 98% rename from test/unit/symbol/cross_tile_symbol_index.js rename to test/unit/symbol/cross_tile_symbol_index.test.js index 492a6aafb9..e415ffc150 100644 --- a/test/unit/symbol/cross_tile_symbol_index.js +++ b/test/unit/symbol/cross_tile_symbol_index.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import CrossTileSymbolIndex from '../../../src/symbol/cross_tile_symbol_index'; -import {OverscaledTileID} from '../../../src/source/tile_id'; +import CrossTileSymbolIndex from '../../../rollup/build/tsc/symbol/cross_tile_symbol_index'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; const styleLayer = { id: 'test' diff --git a/test/unit/symbol/get_anchors.test.js b/test/unit/symbol/get_anchors.test.js index 1bd083cd39..af30511434 100644 --- a/test/unit/symbol/get_anchors.test.js +++ b/test/unit/symbol/get_anchors.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import {getAnchors, getCenterAnchor} from '../../../src/symbol/get_anchors'; +import Point from '../../../rollup/build/tsc/util/point'; +import {getAnchors, getCenterAnchor} from '../../../rollup/build/tsc/symbol/get_anchors'; const TILE_EXTENT = 4096; diff --git a/test/unit/symbol/grid_index.test.js b/test/unit/symbol/grid_index.test.js index 7c6073b14e..ed3c131429 100644 --- a/test/unit/symbol/grid_index.test.js +++ b/test/unit/symbol/grid_index.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import GridIndex from '../../../src/symbol/grid_index'; +import GridIndex from '../../../rollup/build/tsc/symbol/grid_index'; test('GridIndex', (t) => { diff --git a/test/unit/symbol/mergelines.test.js b/test/unit/symbol/mergelines.test.js index dfdb420df0..9c7861c6fd 100644 --- a/test/unit/symbol/mergelines.test.js +++ b/test/unit/symbol/mergelines.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import mergeLines from '../../../src/symbol/mergelines'; -import Point from '@mapbox/point-geometry'; +import mergeLines from '../../../rollup/build/tsc/symbol/mergelines'; +import Point from '../../../rollup/build/tsc/util/point'; function makeFeatures(lines) { const features = []; diff --git a/test/unit/symbol/path_interpolator.test.js b/test/unit/symbol/path_interpolator.test.js index ac772d5c63..82b23f6cb9 100644 --- a/test/unit/symbol/path_interpolator.test.js +++ b/test/unit/symbol/path_interpolator.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import PathInterpolator from '../../../src/symbol/path_interpolator'; +import Point from '../../../rollup/build/tsc/util/point'; +import PathInterpolator from '../../../rollup/build/tsc/symbol/path_interpolator'; test('PathInterpolator', (t) => { diff --git a/test/unit/symbol/quads.test.js b/test/unit/symbol/quads.test.js index 3c3135e7b6..71e91846fb 100644 --- a/test/unit/symbol/quads.test.js +++ b/test/unit/symbol/quads.test.js @@ -1,5 +1,6 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import {getIconQuads} from '../../../src/symbol/quads'; +import {getIconQuads} from '../../../rollup/build/tsc/symbol/quads'; test('getIconQuads', (t) => { const image = Object.freeze({ diff --git a/test/unit/symbol/shaping.test.js b/test/unit/symbol/shaping.test.js index f427d516f1..fa8952eea5 100644 --- a/test/unit/symbol/shaping.test.js +++ b/test/unit/symbol/shaping.test.js @@ -1,10 +1,14 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; -import * as shaping from '../../../src/symbol/shaping'; -import Formatted, {FormattedSection} from '../../../src/style-spec/expression/types/formatted'; -import ResolvedImage from '../../../src/style-spec/expression/types/resolved_image'; -import {ImagePosition} from '../../../src/render/image_atlas'; +import path, {dirname} from 'path'; +import * as shaping from '../../../rollup/build/tsc/symbol/shaping'; +import Formatted, {FormattedSection} from '../../../rollup/build/tsc/style-spec/expression/types/formatted'; +import ResolvedImage from '../../../rollup/build/tsc/style-spec/expression/types/resolved_image'; +import expectedJson from '../../expected/text-shaping-linebreak.json'; +import {ImagePosition} from '../../../rollup/build/tsc/render/image_atlas'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); const WritingMode = shaping.WritingMode; let UPDATE = false; @@ -57,7 +61,7 @@ test('shaping', (t) => { // Line break. shaped = shaping.shapeText(Formatted.fromString('abcde abcde'), glyphs, glyphPositions, images, fontStack, 4 * oneEm, oneEm, 'center', 'center', 0 * oneEm, [0, 0], WritingMode.horizontal, false, 'point', layoutTextSize, layoutTextSizeThisZoom); if (UPDATE) fs.writeFileSync(path.join(__dirname, '/../../expected/text-shaping-linebreak.json'), JSON.stringify(shaped, null, 2)); - t.deepEqual(shaped, require('../../expected/text-shaping-linebreak.json')); + t.deepEqual(shaped, expectedJson); const expectedNewLine = JSON.parse(fs.readFileSync(path.join(__dirname, '/../../expected/text-shaping-newline.json'))); diff --git a/test/unit/symbol/symbol_style_layer.test.js b/test/unit/symbol/symbol_style_layer.test.js index 982d912c99..f44e26e8cc 100644 --- a/test/unit/symbol/symbol_style_layer.test.js +++ b/test/unit/symbol/symbol_style_layer.test.js @@ -1,7 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import SymbolStyleLayer from '../../../src/style/style_layer/symbol_style_layer'; -import FormatSectionOverride from '../../../src/style/format_section_override'; -import properties from '../../../src/style/style_layer/symbol_style_layer_properties'; +import SymbolStyleLayer from '../../../rollup/build/tsc/style/style_layer/symbol_style_layer'; +import FormatSectionOverride from '../../../rollup/build/tsc/style/format_section_override'; +import properties from '../../../rollup/build/tsc/style/style_layer/symbol_style_layer_properties'; function createSymbolLayer(layerProperties) { const layer = new SymbolStyleLayer(layerProperties); diff --git a/test/unit/ui/camera.test.js b/test/unit/ui/camera.test.js index 1286f7c138..9ed2869aea 100644 --- a/test/unit/ui/camera.test.js +++ b/test/unit/ui/camera.test.js @@ -1,8 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Camera from '../../../src/ui/camera'; -import Transform from '../../../src/geo/transform'; -import TaskQueue from '../../../src/util/task_queue'; -import browser from '../../../src/util/browser'; +import Camera from '../../../rollup/build/tsc/ui/camera'; +import Transform from '../../../rollup/build/tsc/geo/transform'; +import TaskQueue from '../../../rollup/build/tsc/util/task_queue'; +import browser from '../../../rollup/build/tsc/util/browser'; import {fixedLngLat, fixedNum} from '../../util/fixed'; import {equalWithPrecision} from '../../util'; diff --git a/test/unit/ui/control/attribution.test.js b/test/unit/ui/control/attribution.test.js index 9fc9316e41..48f8f15ac1 100644 --- a/test/unit/ui/control/attribution.test.js +++ b/test/unit/ui/control/attribution.test.js @@ -1,6 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import config from '../../../../src/util/config'; -import AttributionControl from '../../../../src/ui/control/attribution_control'; +import config from '../../../../rollup/build/tsc/util/config'; +import AttributionControl from '../../../../rollup/build/tsc/ui/control/attribution_control'; import {createMap as globalCreateMap} from '../../../util'; import simulate from '../../../util/simulate_interaction'; diff --git a/test/unit/ui/control/fullscreen.test.js b/test/unit/ui/control/fullscreen.test.js index 880f499956..d70a15b960 100644 --- a/test/unit/ui/control/fullscreen.test.js +++ b/test/unit/ui/control/fullscreen.test.js @@ -1,7 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; import {createMap} from '../../../util'; -import FullscreenControl from '../../../../src/ui/control/fullscreen_control'; +import FullscreenControl from '../../../../rollup/build/tsc/ui/control/fullscreen_control'; test('FullscreenControl appears when fullscreen is enabled', (t) => { window.document.fullscreenEnabled = true; @@ -35,7 +35,7 @@ test('FullscreenControl makes optional container element full screen', (t) => { const fullscreen = new FullscreenControl({container: window.document.querySelector('body')}); map.addControl(fullscreen); const control = map._controls.find((ctrl) => { - return ctrl.hasOwnProperty('_fullscreen'); + return Object.prototype.hasOwnProperty.call(ctrl, '_fullscreen'); }); control._onClickFullscreen(); diff --git a/test/unit/ui/control/geolocate.test.js b/test/unit/ui/control/geolocate.test.js index 7d2b2c8413..b44c7122da 100644 --- a/test/unit/ui/control/geolocate.test.js +++ b/test/unit/ui/control/geolocate.test.js @@ -1,18 +1,11 @@ +import '../../../stub_loader'; +import geolocation from 'mock-geolocation'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; import {createMap} from '../../../util'; -import GeolocateControl from '../../../../src/ui/control/geolocate_control'; +import GeolocateControl from '../../../../rollup/build/tsc/ui/control/geolocate_control'; -// window and navigator globals need to be set for mock-geolocation -global.window = {}; -global.navigator = {}; -const geolocation = require('mock-geolocation'); // eslint-disable-line import/no-commonjs geolocation.use(); -// assign the mock geolocation to window -global.window.navigator = global.navigator; -window.navigator.geolocation = global.window.navigator.geolocation; - // convert the coordinates of a LngLat object to a fixed number of digits function lngLatAsFixed(lngLat, digits) { return Object.keys(lngLat).reduce((previous, current) => { diff --git a/test/unit/ui/control/logo.test.js b/test/unit/ui/control/logo.test.js index 10a1fa529e..323c92ab66 100644 --- a/test/unit/ui/control/logo.test.js +++ b/test/unit/ui/control/logo.test.js @@ -1,6 +1,6 @@ import {test} from '../../../util/test'; import {createMap as globalCreateMap} from '../../../util'; -import VectorTileSource from '../../../../src/source/vector_tile_source'; +import VectorTileSource from '../../../../rollup/build/tsc/source/vector_tile_source'; function createMap(t, logoPosition, logoRequired) { return globalCreateMap(t, { @@ -35,7 +35,7 @@ function createSource(options, logoRequired) { source.on('error', (e) => { throw e.error; }); - const logoFlag = "mapbox_logo"; + const logoFlag = "maplibreLogo"; source[logoFlag] = logoRequired === undefined ? true : logoRequired; return source; } @@ -59,7 +59,7 @@ test('LogoControl appears in the position specified by the position option', (t) }); }); -test('LogoControl is not displayed when the mapbox_logo property is false', (t) => { +test('LogoControl is not displayed when the maplibreLogo property is false', (t) => { const map = createMap(t, 'top-left', false); map.on('load', () => { t.equal(map.getContainer().querySelectorAll('.maplibregl-ctrl-top-left > .maplibregl-ctrl')[0].style.display, 'none'); diff --git a/test/unit/ui/control/scale.test.js b/test/unit/ui/control/scale.test.js index 504f7457a9..a1d6f2f106 100644 --- a/test/unit/ui/control/scale.test.js +++ b/test/unit/ui/control/scale.test.js @@ -1,7 +1,7 @@ import {test} from '../../../util/test'; import {createMap} from '../../../util'; -import ScaleControl from '../../../../src/ui/control/scale_control'; +import ScaleControl from '../../../../rollup/build/tsc/ui/control/scale_control'; test('ScaleControl appears in bottom-left by default', (t) => { const map = createMap(t); diff --git a/test/unit/ui/handler/box_zoom.test.js b/test/unit/ui/handler/box_zoom.test.js index d70f24477b..8823f818d7 100644 --- a/test/unit/ui/handler/box_zoom.test.js +++ b/test/unit/ui/handler/box_zoom.test.js @@ -1,7 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap(clickTolerance) { diff --git a/test/unit/ui/handler/dblclick_zoom.test.js b/test/unit/ui/handler/dblclick_zoom.test.js index a12e910d17..742159452a 100644 --- a/test/unit/ui/handler/dblclick_zoom.test.js +++ b/test/unit/ui/handler/dblclick_zoom.test.js @@ -1,7 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap() { diff --git a/test/unit/ui/handler/drag_pan.test.js b/test/unit/ui/handler/drag_pan.test.js index f740536b0e..b1e4dd0f11 100644 --- a/test/unit/ui/handler/drag_pan.test.js +++ b/test/unit/ui/handler/drag_pan.test.js @@ -1,7 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap(clickTolerance, dragPan) { diff --git a/test/unit/ui/handler/drag_rotate.test.js b/test/unit/ui/handler/drag_rotate.test.js index 7cd7061b45..9d46703790 100644 --- a/test/unit/ui/handler/drag_rotate.test.js +++ b/test/unit/ui/handler/drag_rotate.test.js @@ -1,10 +1,10 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import {extend} from '../../../../src/util/util'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import {extend} from '../../../../rollup/build/tsc/util/util'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; -import browser from '../../../../src/util/browser'; +import browser from '../../../../rollup/build/tsc/util/browser'; function createMap(options) { return new Map(extend({container: DOM.create('div', '', window.document.body)}, options)); diff --git a/test/unit/ui/handler/keyboard.test.js b/test/unit/ui/handler/keyboard.test.js index bec31a0177..1e94c696a5 100644 --- a/test/unit/ui/handler/keyboard.test.js +++ b/test/unit/ui/handler/keyboard.test.js @@ -1,9 +1,9 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; -import window from '../../../../src/util/window'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; -import {extend} from '../../../../src/util/util'; +import {extend} from '../../../../rollup/build/tsc/util/util'; function createMap(options) { return new Map(extend({ diff --git a/test/unit/ui/handler/map_event.test.js b/test/unit/ui/handler/map_event.test.js index d3e247bc50..5ceaec9cab 100644 --- a/test/unit/ui/handler/map_event.test.js +++ b/test/unit/ui/handler/map_event.test.js @@ -1,7 +1,7 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap() { diff --git a/test/unit/ui/handler/mouse_rotate.test.js b/test/unit/ui/handler/mouse_rotate.test.js index 308d9e9715..d26cf5057c 100644 --- a/test/unit/ui/handler/mouse_rotate.test.js +++ b/test/unit/ui/handler/mouse_rotate.test.js @@ -1,10 +1,10 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import {extend} from '../../../../src/util/util'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import {extend} from '../../../../rollup/build/tsc/util/util'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; -import browser from '../../../../src/util/browser'; +import browser from '../../../../rollup/build/tsc/util/browser'; function createMap(options) { return new Map(extend({container: DOM.create('div', '', window.document.body)}, options)); diff --git a/test/unit/ui/handler/scroll_zoom.test.js b/test/unit/ui/handler/scroll_zoom.test.js index fba8c7cae1..90cb687f80 100644 --- a/test/unit/ui/handler/scroll_zoom.test.js +++ b/test/unit/ui/handler/scroll_zoom.test.js @@ -1,8 +1,8 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import browser from '../../../../src/util/browser'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import browser from '../../../../rollup/build/tsc/util/browser'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; import {equalWithPrecision} from '../../../util'; import sinon from 'sinon'; diff --git a/test/unit/ui/handler/touch_zoom_rotate.test.js b/test/unit/ui/handler/touch_zoom_rotate.test.js index ae3ece5035..ef44523ee9 100644 --- a/test/unit/ui/handler/touch_zoom_rotate.test.js +++ b/test/unit/ui/handler/touch_zoom_rotate.test.js @@ -1,8 +1,8 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import Marker from '../../../../src/ui/marker'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import Marker from '../../../../rollup/build/tsc/ui/marker'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap() { diff --git a/test/unit/ui/hash.test.js b/test/unit/ui/hash.test.js index e1be22ab4e..c4cbb38710 100644 --- a/test/unit/ui/hash.test.js +++ b/test/unit/ui/hash.test.js @@ -1,6 +1,6 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Hash from '../../../src/ui/hash'; -import window from '../../../src/util/window'; +import Hash from '../../../rollup/build/tsc/ui/hash'; import {createMap as globalCreateMap} from '../../util'; test('hash', (t) => { diff --git a/test/unit/ui/map.test.js b/test/unit/ui/map.test.js index 1aa9cf79f6..748ebe82d9 100755 --- a/test/unit/ui/map.test.js +++ b/test/unit/ui/map.test.js @@ -1,12 +1,12 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import {extend} from '../../../src/util/util'; -import window from '../../../src/util/window'; -import Map from '../../../src/ui/map'; +import {extend} from '../../../rollup/build/tsc/util/util'; +import Map from '../../../rollup/build/tsc/ui/map'; import {createMap} from '../../util'; -import LngLat from '../../../src/geo/lng_lat'; -import Tile from '../../../src/source/tile'; -import {OverscaledTileID} from '../../../src/source/tile_id'; -import {Event, ErrorEvent} from '../../../src/util/evented'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import Tile from '../../../rollup/build/tsc/source/tile'; +import {OverscaledTileID} from '../../../rollup/build/tsc/source/tile_id'; +import {Event, ErrorEvent} from '../../../rollup/build/tsc/util/evented'; import simulate from '../../util/simulate_interaction'; import {fixedLngLat, fixedNum} from '../../util/fixed'; @@ -27,7 +27,7 @@ test('Map', (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -568,10 +568,11 @@ test('Map', (t) => { }); t.test('listen to window resize event', (t) => { - window.addEventListener = function(type) { + const original = global.addEventListener; + global.addEventListener = function(type) { if (type === 'resize') { - //restore empty function not to mess with other tests - window.addEventListener = function() {}; + //restore original function not to mess with other tests + global.addEventListener = original; t.end(); } diff --git a/test/unit/ui/map/isMoving.test.js b/test/unit/ui/map/isMoving.test.js index 49c0869559..c20576056f 100644 --- a/test/unit/ui/map/isMoving.test.js +++ b/test/unit/ui/map/isMoving.test.js @@ -1,8 +1,8 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import browser from '../../../../src/util/browser'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import browser from '../../../../rollup/build/tsc/util/browser'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap() { diff --git a/test/unit/ui/map/isRotating.test.js b/test/unit/ui/map/isRotating.test.js index d74ede0d6a..f943b6fcb0 100644 --- a/test/unit/ui/map/isRotating.test.js +++ b/test/unit/ui/map/isRotating.test.js @@ -1,9 +1,9 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; -import browser from '../../../../src/util/browser'; +import browser from '../../../../rollup/build/tsc/util/browser'; function createMap() { return new Map({container: DOM.create('div', '', window.document.body)}); diff --git a/test/unit/ui/map/isZooming.test.js b/test/unit/ui/map/isZooming.test.js index 1203d61c5a..a954ae37d5 100644 --- a/test/unit/ui/map/isZooming.test.js +++ b/test/unit/ui/map/isZooming.test.js @@ -1,8 +1,8 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; -import browser from '../../../../src/util/browser'; -import window from '../../../../src/util/window'; -import Map from '../../../../src/ui/map'; -import DOM from '../../../../src/util/dom'; +import browser from '../../../../rollup/build/tsc/util/browser'; +import Map from '../../../../rollup/build/tsc/ui/map'; +import DOM from '../../../../rollup/build/tsc/util/dom'; import simulate from '../../../util/simulate_interaction'; function createMap() { diff --git a/test/unit/ui/map/requestRenderFrame.test.js b/test/unit/ui/map/requestRenderFrame.test.js index 8799ee0b46..f38fc41264 100644 --- a/test/unit/ui/map/requestRenderFrame.test.js +++ b/test/unit/ui/map/requestRenderFrame.test.js @@ -1,3 +1,4 @@ +import '../../../stub_loader'; import {test} from '../../../util/test'; import {createMap} from '../../../util'; diff --git a/test/unit/ui/marker.test.js b/test/unit/ui/marker.test.js index b8b80bf35a..7e957ef259 100644 --- a/test/unit/ui/marker.test.js +++ b/test/unit/ui/marker.test.js @@ -1,10 +1,10 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import window from '../../../src/util/window'; import {createMap as globalCreateMap} from '../../util'; -import Marker from '../../../src/ui/marker'; -import Popup from '../../../src/ui/popup'; -import LngLat from '../../../src/geo/lng_lat'; -import Point from '@mapbox/point-geometry'; +import Marker from '../../../rollup/build/tsc/ui/marker'; +import Popup from '../../../rollup/build/tsc/ui/popup'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import Point from '../../../rollup/build/tsc/util/point'; import simulate from '../../util/simulate_interaction'; function createMap(t, options = {}) { diff --git a/test/unit/ui/popup.test.js b/test/unit/ui/popup.test.js index 0100fa9f2b..6843513faf 100644 --- a/test/unit/ui/popup.test.js +++ b/test/unit/ui/popup.test.js @@ -1,9 +1,9 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import window from '../../../src/util/window'; import {createMap as globalCreateMap} from '../../util'; -import Popup from '../../../src/ui/popup'; -import LngLat from '../../../src/geo/lng_lat'; -import Point from '@mapbox/point-geometry'; +import Popup from '../../../rollup/build/tsc/ui/popup'; +import LngLat from '../../../rollup/build/tsc/geo/lng_lat'; +import Point from '../../../rollup/build/tsc/util/point'; import simulate from '../../util/simulate_interaction'; const containerWidth = 512; diff --git a/test/unit/util/actor.test.js b/test/unit/util/actor.test.js index 8b91db3324..d91c59bdb4 100644 --- a/test/unit/util/actor.test.js +++ b/test/unit/util/actor.test.js @@ -1,10 +1,11 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Actor from '../../../src/util/actor'; -import WebWorker from '../../../src/util/web_worker'; +import Actor from '../../../rollup/build/tsc/util/actor'; +import workerFactory from '../../../rollup/build/tsc/util/web_worker'; test('Actor', (t) => { t.test('forwards resopnses to correct callback', (t) => { - t.stub(WebWorker, 'Worker').callsFake(function Worker(self) { + t.stub(workerFactory, 'Worker').callsFake(function Worker(self) { this.self = self; this.actor = new Actor(self, this); this.test = function (mapId, params, callback) { @@ -12,7 +13,7 @@ test('Actor', (t) => { }; }); - const worker = new WebWorker(); + const worker = workerFactory(); const m1 = new Actor(worker, {}, 1); const m2 = new Actor(worker, {}, 2); @@ -31,12 +32,12 @@ test('Actor', (t) => { t.test('targets worker-initiated messages to correct map instance', (t) => { let workerActor; - t.stub(WebWorker, 'Worker').callsFake(function Worker(self) { + t.stub(workerFactory, 'Worker').callsFake(function Worker(self) { this.self = self; this.actor = workerActor = new Actor(self, this); }); - const worker = new WebWorker(); + const worker = workerFactory(); new Actor(worker, { test () { t.end(); } diff --git a/test/unit/util/ajax.test.js b/test/unit/util/ajax.test.js index f7e3bed777..9888022ac3 100644 --- a/test/unit/util/ajax.test.js +++ b/test/unit/util/ajax.test.js @@ -1,3 +1,4 @@ +import '../../stub_loader'; import {test} from '../../util/test'; import { getArrayBuffer, @@ -5,10 +6,9 @@ import { postData, getImage, resetImageRequestQueue -} from '../../../src/util/ajax'; -import window from '../../../src/util/window'; -import config from '../../../src/util/config'; -import webpSupported from '../../../src/util/webp_supported'; +} from '../../../rollup/build/tsc/util/ajax'; +import config from '../../../rollup/build/tsc/util/config'; +import webpSupported from '../../../rollup/build/tsc/util/webp_supported'; test('ajax', (t) => { t.beforeEach(callback => { @@ -17,7 +17,7 @@ test('ajax', (t) => { }); t.afterEach(callback => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -106,21 +106,10 @@ test('ajax', (t) => { const maxRequests = config.MAX_PARALLEL_IMAGE_REQUESTS; - // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 - const jsdomImage = window.Image; - window.Image = class { - set src(src) { - setTimeout(() => { - if (this.onload) this.onload(); - }); - } - }; - function callback(err) { if (err) return; // last request is only added after we got a response from one of the previous ones t.equals(window.server.requests.length, maxRequests + 1); - window.Image = jsdomImage; t.end(); } @@ -139,19 +128,10 @@ test('ajax', (t) => { const maxRequests = config.MAX_PARALLEL_IMAGE_REQUESTS; - // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 - const jsdomImage = window.Image; - window.Image = class { - set src(src) { - setTimeout(() => this.onload()); - } - }; - for (let i = 0; i < maxRequests + 1; i++) { getImage({url: ''}, () => t.fail).cancel(); } t.equals(window.server.requests.length, maxRequests + 1); - window.Image = jsdomImage; t.end(); }); @@ -199,15 +179,6 @@ test('ajax', (t) => { // mock webp support webpSupported.supported = true; - // jsdom doesn't call image onload; fake it https://github.com/jsdom/jsdom/issues/1816 - window.Image = class { - set src(src) { - setTimeout(() => { - if (this.onload) this.onload(); - }); - } - }; - getImage({url: ''}, () => { t.end(); }); window.server.respond(); diff --git a/test/unit/util/browser.test.js b/test/unit/util/browser.test.js index 4a482d5319..5d2e700088 100644 --- a/test/unit/util/browser.test.js +++ b/test/unit/util/browser.test.js @@ -1,5 +1,6 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import browser from '../../../src/util/browser'; +import browser from '../../../rollup/build/tsc/util/browser'; test('browser', (t) => { t.test('frame', (t) => { @@ -23,11 +24,6 @@ test('browser', (t) => { t.end(); }); - t.test('devicePixelRatio', (t) => { - t.equal(typeof browser.devicePixelRatio, 'number'); - t.end(); - }); - t.test('hardwareConcurrency', (t) => { t.equal(typeof browser.hardwareConcurrency, 'number'); t.end(); diff --git a/test/unit/util/classify_rings.test.js b/test/unit/util/classify_rings.test.js index 6434d99ac1..31691e9a45 100644 --- a/test/unit/util/classify_rings.test.js +++ b/test/unit/util/classify_rings.test.js @@ -1,9 +1,11 @@ import {test} from '../../util/test'; import fs from 'fs'; -import path from 'path'; +import path, {dirname} from 'path'; import Protobuf from 'pbf'; import {VectorTile} from '@mapbox/vector-tile'; -import classifyRings from '../../../src/util/classify_rings'; +import classifyRings from '../../../rollup/build/tsc/util/classify_rings'; +import {fileURLToPath} from 'url'; +const __dirname = dirname(fileURLToPath(import.meta.url)); // Load a fill feature from fixture tile. const vt = new VectorTile(new Protobuf(fs.readFileSync(path.join(__dirname, '/../../fixtures/mbsv5-6-18-23.vector.pbf')))); diff --git a/test/unit/util/color_ramp.test.js b/test/unit/util/color_ramp.test.js index b55e26e629..e1bf66dbec 100644 --- a/test/unit/util/color_ramp.test.js +++ b/test/unit/util/color_ramp.test.js @@ -1,7 +1,7 @@ import {test} from '../../util/test'; -import {renderColorRamp} from '../../../src/util/color_ramp'; -import {createPropertyExpression} from '../../../src/style-spec/expression'; +import {renderColorRamp} from '../../../rollup/build/tsc/util/color_ramp'; +import {createPropertyExpression} from '../../../rollup/build/tsc/style-spec/expression'; const spec = { 'function': true, diff --git a/test/unit/util/dispatcher.test.js b/test/unit/util/dispatcher.test.js index 0fc7db0e4a..cefa3a7d9f 100644 --- a/test/unit/util/dispatcher.test.js +++ b/test/unit/util/dispatcher.test.js @@ -1,7 +1,8 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import Dispatcher from '../../../src/util/dispatcher'; -import WebWorker from '../../../src/util/web_worker'; -import WorkerPool from '../../../src/util/worker_pool'; +import Dispatcher from '../../../rollup/build/tsc/util/dispatcher'; +import WebWorker from '../../../rollup/build/tsc/util/web_worker'; +import WorkerPool from '../../../rollup/build/tsc/util/worker_pool'; test('Dispatcher', (t) => { t.test('requests and releases workers from pool', (t) => { diff --git a/test/unit/util/evented.test.js b/test/unit/util/evented.test.js index eb1ed60b33..e9a01c54d2 100644 --- a/test/unit/util/evented.test.js +++ b/test/unit/util/evented.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {Event, Evented} from '../../../src/util/evented'; +import {Event, Evented} from '../../../rollup/build/tsc/util/evented'; test('Evented', (t) => { diff --git a/test/unit/util/find_pole_of_inaccessibility.test.js b/test/unit/util/find_pole_of_inaccessibility.test.js index 6265119024..adf99ff8ff 100644 --- a/test/unit/util/find_pole_of_inaccessibility.test.js +++ b/test/unit/util/find_pole_of_inaccessibility.test.js @@ -1,6 +1,6 @@ import {test} from '../../util/test'; -import Point from '@mapbox/point-geometry'; -import findPoleOfInaccessibility from '../../../src/util/find_pole_of_inaccessibility'; +import Point from '../../../rollup/build/tsc/util/point'; +import findPoleOfInaccessibility from '../../../rollup/build/tsc/util/find_pole_of_inaccessibility'; test('polygon_poi', (t) => { diff --git a/test/unit/util/mapbox.test.js b/test/unit/util/mapbox.test.js index aebba25659..f1401e3a67 100644 --- a/test/unit/util/mapbox.test.js +++ b/test/unit/util/mapbox.test.js @@ -1,11 +1,10 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import * as mapbox from '../../../src/util/mapbox'; -import config from '../../../src/util/config'; -import window from '../../../src/util/window'; -import webpSupported from '../../../src/util/webp_supported'; -import {uuid} from '../../../src/util/util'; -import {SKU_ID} from '../../../src/util/sku_token'; -import {version} from '../../../package.json'; +import * as mapbox from '../../../rollup/build/tsc/util/mapbox'; +import config from '../../../rollup/build/tsc/util/config'; +import webpSupported from '../../../rollup/build/tsc/util/webp_supported'; +import {uuid} from '../../../rollup/build/tsc/util/util'; +import {SKU_ID} from '../../../rollup/build/tsc/util/sku_token'; import {equalWithPrecision} from '../../util'; const mapboxTileURLs = [ @@ -327,14 +326,14 @@ test("mapbox", (t) => { }); t.test('.normalizeTileURL inserts @2x on 2x devices', (t) => { - window.devicePixelRatio = 2; + global.devicePixelRatio = 2; config.API_URL = 'http://path.png'; config.REQUIRE_ACCESS_TOKEN = false; t.equal(manager.normalizeTileURL('mapbox://path.png/tile.png'), `http://path.png/v4/tile@2x.png`); t.equal(manager.normalizeTileURL('mapbox://path.png/tile.png32'), `http://path.png/v4/tile@2x.png32`); t.equal(manager.normalizeTileURL('mapbox://path.png/tile.jpg70'), `http://path.png/v4/tile@2x.jpg70`); t.equal(manager.normalizeTileURL('mapbox://path.png/tile.png?access_token=foo'), `http://path.png/v4/tile@2x.png?access_token=foo`); - window.devicePixelRatio = 1; + global.devicePixelRatio = 1; t.end(); }); @@ -426,7 +425,7 @@ test("mapbox", (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -497,10 +496,10 @@ test("mapbox", (t) => { this.data[id] = String(val); }, getItem (id) { - return this.data.hasOwnProperty(id) ? this.data[id] : undefined; + return Object.prototype.hasOwnProperty.call(this.data, id) ? this.data[id] : undefined; }, removeItem (id) { - if (this.hasOwnProperty(id)) delete this[id]; + if (Object.prototype.hasOwnProperty.call(this, id)) delete this[id]; } }; callback(); @@ -629,7 +628,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'appUserTurnstile'); - t.equal(reqBody.sdkVersion, version); t.equal(reqBody.skuId, SKU_ID); t.ok(reqBody.userId); @@ -688,7 +686,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=pk.new.*`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'appUserTurnstile'); - t.equal(reqBody.sdkVersion, version); t.equal(reqBody.skuId, SKU_ID); t.ok(reqBody.userId); @@ -711,7 +708,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'appUserTurnstile'); - t.equal(reqBody.sdkVersion, version); t.equal(reqBody.skuId, SKU_ID); t.ok(reqBody.userId); equalWithPrecision(t, new Date(reqBody.created).valueOf(), tomorrow, 100); @@ -762,7 +758,7 @@ test("mapbox", (t) => { }); t.afterEach((callback) => { - window.restore(); + window.clearFakeXMLHttpRequest(); callback(); }); @@ -833,10 +829,10 @@ test("mapbox", (t) => { this.data[id] = String(val); }, getItem (id) { - return this.data.hasOwnProperty(id) ? this.data[id] : undefined; + return Object.prototype.hasOwnProperty.call(this.data, id) ? this.data[id] : undefined; }, removeItem (id) { - if (this.hasOwnProperty(id)) delete this[id]; + if (Object.prototype.hasOwnProperty.call(this, id)) delete this[id]; } }; callback(); @@ -948,7 +944,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'map.load'); - t.equal(reqBody.sdkVersion, version); t.ok(reqBody.userId); t.end(); @@ -982,7 +977,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=pk.new.*`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'map.load'); - t.equal(reqBody.sdkVersion, version); t.ok(reqBody.userId); t.end(); @@ -1002,7 +996,6 @@ test("mapbox", (t) => { t.equal(req.url, `${config.EVENTS_URL}?access_token=key`); t.equal(req.method, 'POST'); t.equal(reqBody.event, 'map.load'); - t.equal(reqBody.sdkVersion, version); t.ok(reqBody.userId); equalWithPrecision(t, new Date(reqBody.created).valueOf(), now, 100); diff --git a/test/unit/util/primitives.test.js b/test/unit/util/primitives.test.js index 35b56d50cb..270cd99dd9 100644 --- a/test/unit/util/primitives.test.js +++ b/test/unit/util/primitives.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {Aabb, Frustum} from '../../../src/util/primitives'; +import {Aabb, Frustum} from '../../../rollup/build/tsc/util/primitives'; import {mat4, vec3} from 'gl-matrix'; test('primitives', (t) => { @@ -50,6 +50,7 @@ test('primitives', (t) => { const createTestCameraFrustum = (fovy, aspectRatio, zNear, zFar, elevation, rotation) => { const proj = new Float64Array(16); const invProj = new Float64Array(16); + // Note that left handed coordinate space is used where z goes towards the sky. // Y has to be flipped as well because it's part of the projection/camera matrix used in transform.js mat4.perspective(proj, fovy, aspectRatio, zNear, zFar); @@ -92,7 +93,7 @@ test('primitives', (t) => { }); t.test('No intersection between aabb and frustum', (t) => { - const frustum = createTestCameraFrustum(Math.PI / 2, 1.0, 0.1, 100.0, -5); + const frustum = createTestCameraFrustum(Math.PI / 2, 1.0, 0.1, 100.0, -5, 0); const aabbList = [ new Aabb(vec3.fromValues(-6, 0, 0), vec3.fromValues(-5.5, 0, 0)), @@ -117,7 +118,6 @@ test('primitives', (t) => { mat4.invert(invProj, proj); const frustum = Frustum.fromInvProjectionMatrix(invProj, 1.0, 0.0); - // mat4.perspective generates a projection matrix for right handed coordinate space. // This means that forward direction will be -z const expectedFrustumPoints = [ @@ -131,7 +131,6 @@ test('primitives', (t) => { [-100.0, -100.0, -100.0, 1.0], ]; - // Round numbers to mitigate the precision loss frustum.points = frustum.points.map(array => array.map(n => Math.round(n * 10) / 10)); frustum.planes = frustum.planes.map(array => array.map(n => Math.round(n * 1000) / 1000)); diff --git a/test/unit/util/resolve_tokens.test.js b/test/unit/util/resolve_tokens.test.js index 0b2f63965e..a494a1db23 100644 --- a/test/unit/util/resolve_tokens.test.js +++ b/test/unit/util/resolve_tokens.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import resolveTokens from '../../../src/util/resolve_tokens'; +import resolveTokens from '../../../rollup/build/tsc/util/resolve_tokens'; test('resolveToken', (t) => { t.equal('3 Fine Fields', resolveTokens({a:3, b:'Fine', c:'Fields'}, '{a} {b} {c}')); diff --git a/test/unit/util/sku_token.test.js b/test/unit/util/sku_token.test.js index 83c81569c3..eb5e7fd179 100644 --- a/test/unit/util/sku_token.test.js +++ b/test/unit/util/sku_token.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import {createSkuToken, SKU_ID} from '../../../src/util/sku_token'; +import {createSkuToken, SKU_ID} from '../../../rollup/build/tsc/util/sku_token'; test('sku token generation', (t) => { const skuToken = createSkuToken().token; diff --git a/test/unit/util/struct_array.test.js b/test/unit/util/struct_array.test.js index 41d195d7de..ee6b3ced7a 100644 --- a/test/unit/util/struct_array.test.js +++ b/test/unit/util/struct_array.test.js @@ -1,7 +1,7 @@ // @flow import {test} from '../../util/test'; -import {StructArrayLayout3i6, FeatureIndexArray} from '../../../src/data/array_types'; +import {StructArrayLayout3i6, FeatureIndexArray} from '../../../rollup/build/tsc/data/array_types'; test('StructArray', (t) => { class TestArray extends StructArrayLayout3i6 {} diff --git a/test/unit/util/task_queue.test.js b/test/unit/util/task_queue.test.js index 94430433f5..ee4d3473b5 100644 --- a/test/unit/util/task_queue.test.js +++ b/test/unit/util/task_queue.test.js @@ -1,5 +1,5 @@ import {test} from '../../util/test'; -import TaskQueue from '../../../src/util/task_queue'; +import TaskQueue from '../../../rollup/build/tsc/util/task_queue'; test('TaskQueue', (t) => { t.test('Calls callbacks, in order', (t) => { diff --git a/test/unit/util/throttle.test.js b/test/unit/util/throttle.test.js index 5c1943097d..b53104d3bb 100644 --- a/test/unit/util/throttle.test.js +++ b/test/unit/util/throttle.test.js @@ -2,7 +2,7 @@ import {test} from '../../util/test'; -import throttle from '../../../src/util/throttle'; +import throttle from '../../../rollup/build/tsc/util/throttle'; test('throttle', (t) => { diff --git a/test/unit/util/tile_request_cache.test.js b/test/unit/util/tile_request_cache.test.js index 7b47071c39..b2d8e14cd0 100644 --- a/test/unit/util/tile_request_cache.test.js +++ b/test/unit/util/tile_request_cache.test.js @@ -1,22 +1,22 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import {cacheGet, cachePut, cacheClose} from '../../../src/util/tile_request_cache'; -import window from '../../../src/util/window'; +import {cacheGet, cachePut, cacheClose} from '../../../rollup/build/tsc/util/tile_request_cache'; import sinon from 'sinon'; test('tile_request_cache', (t) => { t.beforeEach(callback => { cacheClose(); - window.caches = sinon.stub(); + global.caches = sinon.stub(); callback(); }); t.afterEach(callback => { - window.restore(); + delete global.caches; callback(); }); - t.test('cachePut, no window.caches', (t) => { - delete window.caches; + t.test('cachePut, no caches', (t) => { + delete global.caches; let result; try { @@ -29,8 +29,8 @@ test('tile_request_cache', (t) => { t.end(); }); - t.test('cacheGet, no window.caches', (t) => { - delete window.caches; + t.test('cacheGet, no caches', (t) => { + delete global.caches; cacheGet({url:''}, (result) => { t.ifError(result, 'should not result in error'); @@ -40,7 +40,7 @@ test('tile_request_cache', (t) => { }); t.test('cacheGet, cache open error', (t) => { - window.caches.open = sinon.stub().rejects(new Error('The operation is insecure')); + global.caches.open = sinon.stub().rejects(new Error('The operation is insecure')); cacheGet({url:''}, (error) => { t.ok(error, 'should result in error'); @@ -52,7 +52,7 @@ test('tile_request_cache', (t) => { t.test('cacheGet, cache match error', (t) => { const fakeCache = sinon.stub(); fakeCache.match = sinon.stub().withArgs('someurl').rejects(new Error('ohno')); - window.caches.open = sinon.stub().resolves(fakeCache); + global.caches.open = sinon.stub().resolves(fakeCache); cacheGet({url:'someurl'}, (error) => { t.ok(error, 'should result in error'); @@ -76,7 +76,7 @@ test('tile_request_cache', (t) => { fakeCache.delete = sinon.stub(); fakeCache.put = sinon.stub(); - window.caches.open = sinon.stub().resolves(fakeCache); + global.caches.open = sinon.stub().resolves(fakeCache); cacheGet({url:'someurl'}, (error, response, fresh) => { t.ifError(error, 'should not result in error'); diff --git a/test/unit/util/util.test.js b/test/unit/util/util.test.js index bad799c54b..2f8840d9b0 100644 --- a/test/unit/util/util.test.js +++ b/test/unit/util/util.test.js @@ -1,9 +1,7 @@ -// @flow - import {test} from '../../util/test'; -import {easeCubicInOut, keysDifference, extend, pick, uniqueId, bindAll, asyncAll, clamp, wrap, bezier, endsWith, mapObject, filterObject, deepEqual, clone, arraysIntersect, isCounterClockwise, isClosedPolygon, parseCacheControl, uuid, validateUuid, nextPowerOfTwo, isPowerOfTwo} from '../../../src/util/util'; -import Point from '@mapbox/point-geometry'; +import {easeCubicInOut, keysDifference, extend, pick, uniqueId, bindAll, asyncAll, clamp, wrap, bezier, mapObject, filterObject, deepEqual, clone, arraysIntersect, isCounterClockwise, isClosedPolygon, parseCacheControl, uuid, validateUuid, nextPowerOfTwo, isPowerOfTwo} from '../../../rollup/build/tsc/util/util'; +import Point from '../../../rollup/build/tsc/util/point'; test('util', (t) => { t.equal(easeCubicInOut(0), 0, 'easeCubicInOut=0'); @@ -146,12 +144,6 @@ test('util', (t) => { }); }); - t.test('endsWith', (t) => { - t.ok(endsWith('mapbox', 'box')); - t.notOk(endsWith('mapbox', 'map')); - t.end(); - }); - t.test('mapObject', (t) => { t.plan(6); t.deepEqual(mapObject({}, () => { t.ok(false); }), {}); diff --git a/test/unit/util/web_worker_transfer.test.js b/test/unit/util/web_worker_transfer.test.js index 2fd5c43f55..7626dd9638 100644 --- a/test/unit/util/web_worker_transfer.test.js +++ b/test/unit/util/web_worker_transfer.test.js @@ -1,15 +1,12 @@ -// @flow - +import '../../stub_loader'; import {test} from '../../util/test'; -import {register, serialize, deserialize} from '../../../src/util/web_worker_transfer'; - -import type {Serialized} from '../../../src/util/web_worker_transfer'; +import {register, serialize, deserialize} from '../../../rollup/build/tsc/util/web_worker_transfer'; test('round trip', (t) => { class Foo { - n: number; - buffer: ArrayBuffer; - _cached: ?number; + n; + buffer; + _cached; constructor(n) { this.n = n; @@ -32,7 +29,7 @@ test('round trip', (t) => { const transferables = []; const deserialized = deserialize(serialize(foo, transferables)); t.assert(deserialized instanceof Foo); - const bar: Foo = (deserialized: any); + const bar = deserialized; t.assert(foo !== bar); t.assert(bar.constructor === Foo); @@ -56,19 +53,19 @@ test('anonymous class', (t) => { test('custom serialization', (t) => { class Bar { - id: string; - _deserialized: boolean; + id; + _deserialized; constructor(id) { this.id = id; this._deserialized = false; } - static serialize(b: Bar): Serialized { + static serialize(b) { return {foo: `custom serialization,${b.id}`}; } - static deserialize(input: Serialized): Bar { - const b = new Bar((input: any).foo.split(',')[1]); + static deserialize(input) { + const b = new Bar(input.foo.split(',')[1]); b._deserialized = true; return b; } @@ -81,7 +78,7 @@ test('custom serialization', (t) => { const deserialized = deserialize(serialize(bar)); t.assert(deserialized instanceof Bar); - const bar2: Bar = (deserialized: any); + const bar2 = deserialized; t.equal(bar2.id, bar.id); t.assert(bar2._deserialized); t.end(); diff --git a/test/unit/util/worker_pool.test.js b/test/unit/util/worker_pool.test.js index 3918dcf4ce..3c8b46f6af 100644 --- a/test/unit/util/worker_pool.test.js +++ b/test/unit/util/worker_pool.test.js @@ -1,5 +1,6 @@ +import '../../stub_loader'; import {test} from '../../util/test'; -import WorkerPool from '../../../src/util/worker_pool'; +import WorkerPool from '../../../rollup/build/tsc/util/worker_pool'; test('WorkerPool', (t) => { t.test('#acquire', (t) => { diff --git a/test/util/create_symbol_layer.js b/test/util/create_symbol_layer.js index 7ddde7b710..0e9fa7b950 100644 --- a/test/util/create_symbol_layer.js +++ b/test/util/create_symbol_layer.js @@ -1,6 +1,6 @@ -import SymbolBucket from '../../src/data/bucket/symbol_bucket'; -import SymbolStyleLayer from '../../src/style/style_layer/symbol_style_layer'; -import featureFilter from '../../src/style-spec/feature_filter'; +import SymbolBucket from '../../rollup/build/tsc/data/bucket/symbol_bucket'; +import SymbolStyleLayer from '../../rollup/build/tsc/style/style_layer/symbol_style_layer'; +import featureFilter from '../../rollup/build/tsc/style-spec/feature_filter'; export function createSymbolBucket(layerId, font, text, collisionBoxArray) { const layer = new SymbolStyleLayer({ diff --git a/test/util/index.js b/test/util/index.js index e5ce5cfc8f..b9f5b82ac0 100644 --- a/test/util/index.js +++ b/test/util/index.js @@ -1,6 +1,6 @@ -import window from '../../src/util/window'; -import Map from '../../src/ui/map'; -import {extend} from '../../src/util/util'; +import '../stub_loader'; +import Map from '../../rollup/build/tsc/ui/map'; +import {extend} from '../../rollup/build/tsc/util/util'; export function createMap(t, options, callback) { const container = window.document.createElement('div'); diff --git a/test/util/test.js b/test/util/test.js index 49218e59ad..6bc26e1381 100644 --- a/test/util/test.js +++ b/test/util/test.js @@ -3,30 +3,8 @@ import tap from 'tap'; import sinon from 'sinon'; -type CreateTest = (typeof sinon) & { - (name: string, body: (test: CreateTest) => void): void, - - test: CreateTest, - - ok(value: mixed, msg?: string): void, - assert(value: mixed, msg?: string): void, - true(value: mixed, msg?: string): void, - notOk(value: mixed, msg?: string): void, - false(value: mixed, msg?: string): void, - equal(actual: mixed, expected: mixed, msg?: string): void, - notEqual(actual: mixed, expected: mixed, msg?: string): void, - deepEqual(actual: mixed, expected: mixed, msg?: string): void, - fail(msg?: string): void, - ifError(err: mixed, msg?: string): void, - throws(fn: Function, expected?: RegExp | Function, msg?: string): void, - doesNotThrow(fn: Function, expected?: RegExp | Function, msg?: string): void, - plan(n: number): void, - end(): void, - tearDown(() => void): void, -}; - -export const test = (tap.test: CreateTest); -export const only = (tap.only: CreateTest); +export const test = tap.test; +export const only = tap.only; const consoleError = console.error; const consoleWarn = console.warn; diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 0000000000..0cad85d29c --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,37 @@ +{ + "compilerOptions": { + "allowJs": false, + "allowSyntheticDefaultImports": true, + "checkJs": false, + "declaration": true, + "esModuleInterop": true, + "importHelpers": false, + "isolatedModules": true, + //"importsNotUsedAsValues": "preserve", + "jsx": "preserve", + "module": "ES6", + "moduleResolution": "Node", + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": false, + "target": "ES6", + "lib": [ + "ESNext", + "DOM", + "DOM.Iterable", + "WebWorker" + ], + "outDir": "rollup/build/tsc", + "declarationDir": "types", + "declarationMap": true + }, + "include": [ + "src/**/*.ts" + ], + "exclude": [ + "node_modules", + "lib", + "dist" + ] +} \ No newline at end of file diff --git a/yarn.lock b/yarn.lock deleted file mode 100644 index 4128c627ba..0000000000 --- a/yarn.lock +++ /dev/null @@ -1,11905 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.5.5", "@babel/code-frame@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" - integrity sha512-a9gxpmdXtZEInkCSHUJDLHZVBgb1QS0jhss4cPP93EW7s+uC5bikET2twEF3KV+7rDblJcmNvTR7VJejqd2C2g== - dependencies: - "@babel/highlight" "^7.8.3" - -"@babel/compat-data@^7.8.6", "@babel/compat-data@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.9.0.tgz#04815556fc90b0c174abd2c0c1bb966faa036a6c" - integrity sha512-zeFQrr+284Ekvd9e7KAX954LkapWiOmQtsfHirhxqfdlX6MEC32iRE+pqUGlYIBchdevaCwvzxWGSy/YBNI85g== - dependencies: - browserslist "^4.9.1" - invariant "^2.2.4" - semver "^5.5.0" - -"@babel/core@>=7.2.2", "@babel/core@^7.1.2", "@babel/core@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.9.0.tgz#ac977b538b77e132ff706f3b8a4dbad09c03c56e" - integrity sha512-kWc7L0fw1xwvI0zi8OKVBuxRVefwGOrKSQMvrQ3dW+bIIavBY3/NpXmpjMy7bQnLgwgzWQZ8TlM57YHpHNHz4w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helpers" "^7.9.0" - "@babel/parser" "^7.9.0" - "@babel/template" "^7.8.6" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - convert-source-map "^1.7.0" - debug "^4.1.0" - gensync "^1.0.0-beta.1" - json5 "^2.1.2" - lodash "^4.17.13" - resolve "^1.3.2" - semver "^5.4.1" - source-map "^0.5.0" - -"@babel/generator@^7.1.3", "@babel/generator@^7.4.0", "@babel/generator@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.9.4.tgz#12441e90c3b3c4159cdecf312075bf1a8ce2dbce" - integrity sha512-rjP8ahaDy/ouhrvCoU1E5mqaitWrxwuNGU+dy1EpaoK48jZay4MdkskKGIMHLZNewg8sAsqpGSREJwP0zH3YQA== - dependencies: - "@babel/types" "^7.9.0" - jsesc "^2.5.1" - lodash "^4.17.13" - source-map "^0.5.0" - -"@babel/helper-annotate-as-pure@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.8.3.tgz#60bc0bc657f63a0924ff9a4b4a0b24a13cf4deee" - integrity sha512-6o+mJrZBxOoEX77Ezv9zwW7WV8DdluouRKNY/IR5u/YTMuKHgugHOzYWlYvYLpLA9nPsQCAAASpCIbjI9Mv+Uw== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-builder-binary-assignment-operator-visitor@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.8.3.tgz#c84097a427a061ac56a1c30ebf54b7b22d241503" - integrity sha512-5eFOm2SyFPK4Rh3XMMRDjN7lBH0orh3ss0g3rTYZnBQ+r6YPj7lgDyCvPphynHvUrobJmeMignBr6Acw9mAPlw== - dependencies: - "@babel/helper-explode-assignable-expression" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-builder-react-jsx-experimental@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.9.0.tgz#066d80262ade488f9c1b1823ce5db88a4cedaa43" - integrity sha512-3xJEiyuYU4Q/Ar9BsHisgdxZsRlsShMe90URZ0e6przL26CCs8NJbDoxH94kKT17PcxlMhsCAwZd90evCo26VQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-module-imports" "^7.8.3" - "@babel/types" "^7.9.0" - -"@babel/helper-builder-react-jsx@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.9.0.tgz#16bf391990b57732700a3278d4d9a81231ea8d32" - integrity sha512-weiIo4gaoGgnhff54GQ3P5wsUQmnSwpkvU0r6ZHq6TzoSzKy4JxHEgnxNytaKbov2a9z/CVNyzliuCOUPEX3Jw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/types" "^7.9.0" - -"@babel/helper-compilation-targets@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.8.7.tgz#dac1eea159c0e4bd46e309b5a1b04a66b53c1dde" - integrity sha512-4mWm8DCK2LugIS+p1yArqvG1Pf162upsIsjE7cNBjez+NjliQpVhj20obE520nao0o14DaTnFJv+Fw5a0JpoUw== - dependencies: - "@babel/compat-data" "^7.8.6" - browserslist "^4.9.1" - invariant "^2.2.4" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/helper-create-class-features-plugin@^7.8.3": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.8.6.tgz#243a5b46e2f8f0f674dc1387631eb6b28b851de0" - integrity sha512-klTBDdsr+VFFqaDHm5rR69OpEQtO2Qv8ECxHS1mNhJJvaHArR6a1xTf5K/eZW7eZpJbhCx3NW1Yt/sKsLXLblg== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - -"@babel/helper-create-regexp-features-plugin@^7.8.3", "@babel/helper-create-regexp-features-plugin@^7.8.8": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.8.8.tgz#5d84180b588f560b7864efaeea89243e58312087" - integrity sha512-LYVPdwkrQEiX9+1R29Ld/wTrmQu1SSKYnuOk3g0CkcZMA1p0gsNxJFj/3gBdaJ7Cg0Fnek5z0DsMULePP7Lrqg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - regexpu-core "^4.7.0" - -"@babel/helper-define-map@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.8.3.tgz#a0655cad5451c3760b726eba875f1cd8faa02c15" - integrity sha512-PoeBYtxoZGtct3md6xZOCWPcKuMuk3IHhgxsRRNtnNShebf4C8YonTSblsK4tvDbm+eJAw2HAPOfCr+Q/YRG/g== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/types" "^7.8.3" - lodash "^4.17.13" - -"@babel/helper-explode-assignable-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-explode-assignable-expression/-/helper-explode-assignable-expression-7.8.3.tgz#a728dc5b4e89e30fc2dfc7d04fa28a930653f982" - integrity sha512-N+8eW86/Kj147bO9G2uclsg5pwfs/fqqY5rwgIL7eTBklgXjcOJ3btzS5iM6AitJcftnY7pm2lGsrJVYLGjzIw== - dependencies: - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.8.3.tgz#eeeb665a01b1f11068e9fb86ad56a1cb1a824cca" - integrity sha512-BCxgX1BC2hD/oBlIFUgOCQDOPV8nSINxCwM3o93xP4P9Fq6aV5sgv2cOOITDMtCfQ+3PvHp3l689XZvAM9QyOA== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-get-function-arity@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-get-function-arity/-/helper-get-function-arity-7.8.3.tgz#b894b947bd004381ce63ea1db9f08547e920abd5" - integrity sha512-FVDR+Gd9iLjUMY1fzE2SR0IuaJToR4RkCDARVfsBBPSP53GEqSFjD8gNyxg246VUyc/ALRxFaAK8rVG7UT7xRA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-hoist-variables@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.8.3.tgz#1dbe9b6b55d78c9b4183fc8cdc6e30ceb83b7134" - integrity sha512-ky1JLOjcDUtSc+xkt0xhYff7Z6ILTAHKmZLHPxAhOP0Nd77O+3nCsd6uSVYur6nJnCI029CrNbYlc0LoPfAPQg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-member-expression-to-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.8.3.tgz#659b710498ea6c1d9907e0c73f206eee7dadc24c" - integrity sha512-fO4Egq88utkQFjbPrSHGmGLFqmrshs11d46WI+WZDESt7Wu7wN2G2Iu+NMMZJFDOVRHAMIkB5SNh30NtwCA7RA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-imports@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498" - integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-module-transforms@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.9.0.tgz#43b34dfe15961918707d247327431388e9fe96e5" - integrity sha512-0FvKyu0gpPfIQ8EkxlrAydOWROdHpBmiCiRwLkUiBGhCUPRRbVD2/tm3sFr/c/GWFrQ/ffutGUAnx7V0FzT2wA== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-simple-access" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/template" "^7.8.6" - "@babel/types" "^7.9.0" - lodash "^4.17.13" - -"@babel/helper-optimise-call-expression@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.8.3.tgz#7ed071813d09c75298ef4f208956006b6111ecb9" - integrity sha512-Kag20n86cbO2AvHca6EJsvqAd82gc6VMGule4HwebwMlwkpXuVqrNRj6CkCV2sKxgi9MyAUnZVnZ6lJ1/vKhHQ== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670" - integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ== - -"@babel/helper-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.8.3.tgz#139772607d51b93f23effe72105b319d2a4c6965" - integrity sha512-BWt0QtYv/cg/NecOAZMdcn/waj/5P26DR4mVLXfFtDokSR6fyuG0Pj+e2FqtSME+MqED1khnSMulkmGl8qWiUQ== - dependencies: - lodash "^4.17.13" - -"@babel/helper-remap-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.8.3.tgz#273c600d8b9bf5006142c1e35887d555c12edd86" - integrity sha512-kgwDmw4fCg7AVgS4DukQR/roGp+jP+XluJE5hsRZwxCYGg+Rv9wSGErDWhlI90FODdYfd4xG4AQRiMDjjN0GzA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-replace-supers@^7.8.3", "@babel/helper-replace-supers@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.8.6.tgz#5ada744fd5ad73203bf1d67459a27dcba67effc8" - integrity sha512-PeMArdA4Sv/Wf4zXwBKPqVj7n9UF/xg6slNRtZW84FM7JpE1CbG8B612FyM4cxrf4fMAMGO0kR7voy1ForHHFA== - dependencies: - "@babel/helper-member-expression-to-functions" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/traverse" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/helper-simple-access@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.8.3.tgz#7f8109928b4dab4654076986af575231deb639ae" - integrity sha512-VNGUDjx5cCWg4vvCTR8qQ7YJYZ+HBjxOgXEl7ounz+4Sn7+LMD3CFrCTEU6/qXKbA2nKg21CwhhBzO0RpRbdCw== - dependencies: - "@babel/template" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helper-split-export-declaration@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.8.3.tgz#31a9f30070f91368a7182cf05f831781065fc7a9" - integrity sha512-3x3yOeyBhW851hroze7ElzdkeRXQYQbFIb7gLK1WQYsw2GWDay5gAJNw1sWJ0VFP6z5J1whqeXH/WCdCjZv6dA== - dependencies: - "@babel/types" "^7.8.3" - -"@babel/helper-validator-identifier@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.9.0.tgz#ad53562a7fc29b3b9a91bbf7d10397fd146346ed" - integrity sha512-6G8bQKjOh+of4PV/ThDm/rRqlU7+IGoJuofpagU5GlEl29Vv0RGqqt86ZGRV8ZuSOY3o+8yXl5y782SMcG7SHw== - -"@babel/helper-wrap-function@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.8.3.tgz#9dbdb2bb55ef14aaa01fe8c99b629bd5352d8610" - integrity sha512-LACJrbUET9cQDzb6kG7EeD7+7doC3JNvUgTEQOx2qaO1fKlzE/Bf05qs9w1oXQMmXlPO65lC3Tq9S6gZpTErEQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.8.3" - "@babel/types" "^7.8.3" - -"@babel/helpers@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.9.2.tgz#b42a81a811f1e7313b88cba8adc66b3d9ae6c09f" - integrity sha512-JwLvzlXVPjO8eU9c/wF9/zOIN7X6h8DYf7mG4CiFRZRvZNKEF5dQ3H3V+ASkHoIB3mWhatgl5ONhyqHRI6MppA== - dependencies: - "@babel/template" "^7.8.3" - "@babel/traverse" "^7.9.0" - "@babel/types" "^7.9.0" - -"@babel/highlight@^7.8.3": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.9.0.tgz#4e9b45ccb82b79607271b2979ad82c7b68163079" - integrity sha512-lJZPilxX7Op3Nv/2cvFdnlepPXDxi29wxteT57Q965oc5R9v86ztx0jfxVrTcBk8C2kcPkkDa2Z4T3ZsPPVWsQ== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/parser@7.1.3": - version "7.1.3" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.1.3.tgz#2c92469bac2b7fbff810b67fca07bd138b48af77" - integrity sha512-gqmspPZOMW3MIRb9HlrnbZHXI1/KHTOroBwN1NcLL6pWxzqzEKGvRTq0W/PxS45OtQGbaFikSQpkS5zbnsQm2w== - -"@babel/parser@^7.4.3", "@babel/parser@^7.7.0", "@babel/parser@^7.8.6", "@babel/parser@^7.9.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.9.4.tgz#68a35e6b0319bbc014465be43828300113f2f2e8" - integrity sha512-bC49otXX6N0/VYhgOMh4gnP26E9xnDZK3TmbNpxYzzz9BQLBosQwfyOe9/cXUU3txYhTzLCbcqd5c8y/OmCjHA== - -"@babel/plugin-proposal-async-generator-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.8.3.tgz#bad329c670b382589721b27540c7d288601c6e6f" - integrity sha512-NZ9zLv848JsV3hs8ryEh7Uaz/0KsmPLqv0+PdkDJL1cJy0K4kOCFa8zc1E3mp+RHPQcpdfb/6GovEsW4VDrOMw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - -"@babel/plugin-proposal-class-properties@^7.1.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.8.3.tgz#5e06654af5cd04b608915aada9b2a6788004464e" - integrity sha512-EqFhbo7IosdgPgZggHaNObkmO1kNUe3slaKu54d5OWvy+p9QIKOzK1GAEpAIsZtWVtPXUHSMcT4smvDrCfY4AA== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-proposal-decorators@^7.1.2": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.8.3.tgz#2156860ab65c5abf068c3f67042184041066543e" - integrity sha512-e3RvdvS4qPJVTe288DlXjwKflpfy1hr0j5dz5WpIYYeP7vQZg2WfAEIp8k5/Lwis/m5REXEteIz6rrcDtXXG7w== - dependencies: - "@babel/helper-create-class-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-decorators" "^7.8.3" - -"@babel/plugin-proposal-do-expressions@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-do-expressions/-/plugin-proposal-do-expressions-7.8.3.tgz#2ccf97061e93d5ffff986dda3f1b54efe9df7719" - integrity sha512-NoMcN+0+SS1DVswjDCfz+Jfm9ViOYuFtv1lm0QInEugbEXK2iH3jeSq38WmIiTP+2QKqo2zt8xku77gqHINZkw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-do-expressions" "^7.8.3" - -"@babel/plugin-proposal-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.8.3.tgz#38c4fe555744826e97e2ae930b0fb4cc07e66054" - integrity sha512-NyaBbyLFXFLT9FP+zk0kYlUlA8XtCUbehs67F0nnEg7KICgMc2mNkIeu9TYhKzyXMkrapZFwAhXLdnt4IYHy1w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - -"@babel/plugin-proposal-export-default-from@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.8.3.tgz#4cb7c2fdeaed490b60d9bfd3dc8a20f81f9c2e7c" - integrity sha512-PYtv2S2OdCdp7GSPDg5ndGZFm9DmWFvuLoS5nBxZCgOBggluLnhTScspJxng96alHQzPyrrHxvC9/w4bFuspeA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-export-default-from" "^7.8.3" - -"@babel/plugin-proposal-export-namespace-from@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.8.3.tgz#63ad57265d0e3912afd666eb44ce26fa8cd2c774" - integrity sha512-WKK+9jz6TWUTX1uej9/EUVOmM1sK7aHv6bZyxbUV3NJjbiIZRqJITeXGMo7D631J72PEnIORh5VOlFCSlrLicg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - -"@babel/plugin-proposal-function-bind@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-bind/-/plugin-proposal-function-bind-7.8.3.tgz#e34a1e984771b84b6e5322745edeadca7e500ced" - integrity sha512-6q7VAHJQa9x4P6Lm6h6KHoJUEhx2r1buFKseHICe0ogb1LWxducO4tsQp3hd/7BVBo485YBsn6tJnpuwWm/9cA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-function-bind" "^7.8.3" - -"@babel/plugin-proposal-function-sent@^7.1.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-function-sent/-/plugin-proposal-function-sent-7.8.3.tgz#341fd532b7eadbbbdd8bcb715150f279a779f14f" - integrity sha512-lu9wQjLnXd6Zy6eBKr0gE175xfD+da1rv2wOWEnZlD5KIxl894Tg34ppZ7ANR0jzQJMn+7pGuzSdy6JK4zGtKg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-wrap-function" "^7.8.3" - "@babel/plugin-syntax-function-sent" "^7.8.3" - -"@babel/plugin-proposal-json-strings@^7.0.0", "@babel/plugin-proposal-json-strings@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.8.3.tgz#da5216b238a98b58a1e05d6852104b10f9a70d6b" - integrity sha512-KGhQNZ3TVCQG/MjRbAUwuH+14y9q0tpxs1nWWs3pbSleRdDro9SAMMDyye8HhY1gqZ7/NqIc8SKhya0wRDgP1Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-json-strings" "^7.8.0" - -"@babel/plugin-proposal-logical-assignment-operators@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.8.3.tgz#e94810d96cb76f20524e66ba617171c21f3c0124" - integrity sha512-TLPLojGZYBeeoesO2NQIMLUJKD9N5oJlxG6iHLx7l7EvNQP5DfzeyxdI2lMPo5I7ih4Jv/vxrlwIPf6aJw422Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" - -"@babel/plugin-proposal-nullish-coalescing-operator@^7.0.0", "@babel/plugin-proposal-nullish-coalescing-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.8.3.tgz#e4572253fdeed65cddeecfdab3f928afeb2fd5d2" - integrity sha512-TS9MlfzXpXKt6YYomudb/KU7nQI6/xnapG6in1uZxoxDghuSMZsPb6D2fyUwNYSAp4l1iR7QtFOjkqcRYcUsfw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - -"@babel/plugin-proposal-numeric-separator@^7.0.0", "@babel/plugin-proposal-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.8.3.tgz#5d6769409699ec9b3b68684cd8116cedff93bad8" - integrity sha512-jWioO1s6R/R+wEHizfaScNsAx+xKgwTLNXSh7tTC4Usj3ItsPEhYkEpU4h+lpnBwq7NBVOJXfO6cRFYcX69JUQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" - -"@babel/plugin-proposal-object-rest-spread@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.9.0.tgz#a28993699fc13df165995362693962ba6b061d6f" - integrity sha512-UgqBv6bjq4fDb8uku9f+wcm1J7YxJ5nT7WO/jBr0cl0PLKb7t1O6RNR1kZbjgx2LQtsDI9hwoQVmn0yhXeQyow== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - -"@babel/plugin-proposal-optional-catch-binding@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.8.3.tgz#9dee96ab1650eed88646ae9734ca167ac4a9c5c9" - integrity sha512-0gkX7J7E+AtAw9fcwlVQj8peP61qhdg/89D5swOkjYbkboA2CVckn3kiyum1DE0wskGb7KJJxBdyEBApDLLVdw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - -"@babel/plugin-proposal-optional-chaining@^7.0.0", "@babel/plugin-proposal-optional-chaining@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.9.0.tgz#31db16b154c39d6b8a645292472b98394c292a58" - integrity sha512-NDn5tu3tcv4W30jNhmc2hyD5c56G6cXx4TesJubhxrJeCvuuMpttxr0OnNCqbZGhFjLrg+NIhxxC+BK5F6yS3w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - -"@babel/plugin-proposal-pipeline-operator@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-pipeline-operator/-/plugin-proposal-pipeline-operator-7.8.3.tgz#c3569228e7466f91bfff7f1c1ae18fb5d36b3097" - integrity sha512-Z0qV3aUYoLUAnVLdfLTlz/GJYfcrbX7Mhrp897Twik29wQseAFAAXQ4TPvN1oswVBHdN74sLPIn9HVfTXtjuQA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-pipeline-operator" "^7.8.3" - -"@babel/plugin-proposal-throw-expressions@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-throw-expressions/-/plugin-proposal-throw-expressions-7.8.3.tgz#155f36ae40c2a88ae685c35e3220f8a0d426cf24" - integrity sha512-tH40s9JnoR+r45ZXKWW+PC5xzPQfVJix3pR1D8Ty5l9sn5NnrbZUzw8MtnNxu/Bz7p0imyeSYj9FQVccEymOEg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-throw-expressions" "^7.8.3" - -"@babel/plugin-proposal-unicode-property-regex@^7.4.4", "@babel/plugin-proposal-unicode-property-regex@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.8.8.tgz#ee3a95e90cdc04fe8cd92ec3279fa017d68a0d1d" - integrity sha512-EVhjVsMpbhLw9ZfHWSx2iy13Q8Z/eg8e8ccVWt23sWQK5l1UdkoLJPN5w69UA4uITGBnEZD2JOe4QOHycYKv8A== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.8" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-async-generators@^7.8.0": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" - integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-decorators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.8.3.tgz#8d2c15a9f1af624b0025f961682a9d53d3001bda" - integrity sha512-8Hg4dNNT9/LcA1zQlfwuKR8BUc/if7Q7NkTam9sGTcJphLwpf2g4S42uhspQrIrR+dpzE0dtTqBVFoHl8GtnnQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-do-expressions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-do-expressions/-/plugin-syntax-do-expressions-7.8.3.tgz#e54edb578dc2c05e3b0055fac5cc55a9767d22dd" - integrity sha512-puRiUTVDQ69iRX41eeVWqOftZK31waWqZfwKB/TGzPfgi7097twx/DpwfOfyqEGqYtvpQF3jpHwT6UBzvSyAjw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-dynamic-import@^7.0.0", "@babel/plugin-syntax-dynamic-import@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-default-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-default-from/-/plugin-syntax-export-default-from-7.8.3.tgz#f1e55ce850091442af4ba9c2550106035b29d678" - integrity sha512-a1qnnsr73KLNIQcQlcQ4ZHxqqfBKM6iNQZW2OMTyxNbA2WC7SHWHtGVpFzWtQAuS2pspkWVzdEBXXx8Ik0Za4w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-flow@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-flow/-/plugin-syntax-flow-7.8.3.tgz#f2c883bd61a6316f2c89380ae5122f923ba4527f" - integrity sha512-innAx3bUbA0KSYj2E2MNFSn9hiCeowOFLxlsuhXzw8hMQnzkDomUr9QCD7E9VF60NmnG1sNTuuv6Qf4f8INYsg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-function-bind@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-bind/-/plugin-syntax-function-bind-7.8.3.tgz#17d722cd8efc9bb9cf8bc59327f2b26295b352f7" - integrity sha512-gEYag4Q3CfqlQcJQQw/KSWdV2husGOnIsOsRlyzkoaNqj2V/V/CSdSJDCGSl67oJ1bdIYP6TjORWPH561dSJpA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-function-sent@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-function-sent/-/plugin-syntax-function-sent-7.8.3.tgz#5a4874bdfc271f0fa1c470bf508dc54af3041e19" - integrity sha512-NNEutF0x2PdWYij2bmf/i50dSq4SUdgFij4BZwj3I4qDZgql3dlFJRyvwGHAhwKYElUKHaP0wQ/yO1d/enpJaw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-meta@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.8.3.tgz#230afff79d3ccc215b5944b438e4e266daf3d84d" - integrity sha512-vYiGd4wQ9gx0Lngb7+bPCwQXGK/PR6FeTIJ+TIOlq+OfOKG/kCAOO2+IBac3oMM9qV7/fU76hfcqxUaLKZf1hQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-json-strings@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" - integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-jsx@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.8.3.tgz#521b06c83c40480f1e58b4fd33b92eceb1d6ea94" - integrity sha512-WxdW9xyLgBdefoo0Ynn3MRSkhe5tFVxxKNVdnZSh318WrG2e2jH+E9wd/++JsqcLJZPfz87njQJ8j2Upjm0M0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-logical-assignment-operators@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.8.3.tgz#3995d7d7ffff432f6ddc742b47e730c054599897" - integrity sha512-Zpg2Sgc++37kuFl6ppq2Q7Awc6E6AIW671x5PY8E/f7MCIyPPGK/EoeZXvvY3P42exZ3Q4/t3YOzP/HiN79jDg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" - integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-numeric-separator@^7.8.0", "@babel/plugin-syntax-numeric-separator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.8.3.tgz#0e3fb63e09bea1b11e96467271c8308007e7c41f" - integrity sha512-H7dCMAdN83PcCmqmkHB5dtp+Xa9a6LKSvA2hiFBC/5alSHxM5VgWZXFqDi0YFe8XNGT6iCa+z4V4zSt/PdZ7Dw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-object-rest-spread@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" - integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-catch-binding@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" - integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-optional-chaining@^7.8.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" - integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-pipeline-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-pipeline-operator/-/plugin-syntax-pipeline-operator-7.8.3.tgz#945d9f13958408e2b1048f6ebe03f370d390aaca" - integrity sha512-GhiBvlXZLWeP+MjKaEv33KmiR/QMCv4iCwz1AuuAp7pHxBvOxxyQmIPukh+N/py6PRLYG10bvRCNeenG34QbDA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-throw-expressions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-throw-expressions/-/plugin-syntax-throw-expressions-7.8.3.tgz#c763bcf26d202ddb65f1299a29d63aad312adb54" - integrity sha512-Mv3shY1i7ZssY4OY+eLZJAmNCwqTcpv2qOKO9x6irELSygfKWVSMXk0igJsA9UhU4hOdw0qMGkjj9TAk4MqzwQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-top-level-await@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.8.3.tgz#3acdece695e6b13aaf57fc291d1a800950c71391" - integrity sha512-kwj1j9lL/6Wd0hROD3b/OZZ7MSrZLqqn9RAZ5+cYYsflQ9HZBIKCUkr3+uL1MEJ1NePiUbf98jjiMQSv0NMR9g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-arrow-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.8.3.tgz#82776c2ed0cd9e1a49956daeb896024c9473b8b6" - integrity sha512-0MRF+KC8EqH4dbuITCWwPSzsyO3HIWWlm30v8BbbpOrS1B++isGxPnnuq/IZvOX5J2D/p7DQalQm+/2PnlKGxg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-async-to-generator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.8.3.tgz#4308fad0d9409d71eafb9b1a6ee35f9d64b64086" - integrity sha512-imt9tFLD9ogt56Dd5CI/6XgpukMwd/fLGSrix2httihVe7LOGVPhyhMh1BU5kDM7iHD08i8uUtmV2sWaBFlHVQ== - dependencies: - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-remap-async-to-generator" "^7.8.3" - -"@babel/plugin-transform-block-scoped-functions@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.8.3.tgz#437eec5b799b5852072084b3ae5ef66e8349e8a3" - integrity sha512-vo4F2OewqjbB1+yaJ7k2EJFHlTP3jR634Z9Cj9itpqNjuLXvhlVxgnjsHsdRgASR8xYDrx6onw4vW5H6We0Jmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-block-scoping@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.8.3.tgz#97d35dab66857a437c166358b91d09050c868f3a" - integrity sha512-pGnYfm7RNRgYRi7bids5bHluENHqJhrV4bCZRwc5GamaWIIs07N4rZECcmJL6ZClwjDz1GbdMZFtPs27hTB06w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - lodash "^4.17.13" - -"@babel/plugin-transform-classes@^7.9.0": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.9.2.tgz#8603fc3cc449e31fdbdbc257f67717536a11af8d" - integrity sha512-TC2p3bPzsfvSsqBZo0kJnuelnoK9O3welkUpqSqBQuBF6R5MN2rysopri8kNvtlGIb2jmUO7i15IooAZJjZuMQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-define-map" "^7.8.3" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-optimise-call-expression" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.6" - "@babel/helper-split-export-declaration" "^7.8.3" - globals "^11.1.0" - -"@babel/plugin-transform-computed-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.8.3.tgz#96d0d28b7f7ce4eb5b120bb2e0e943343c86f81b" - integrity sha512-O5hiIpSyOGdrQZRQ2ccwtTVkgUDBBiCuK//4RJ6UfePllUTCENOzKxfh6ulckXKc0DixTFLCfb2HVkNA7aDpzA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-destructuring@^7.8.3": - version "7.8.8" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.8.8.tgz#fadb2bc8e90ccaf5658de6f8d4d22ff6272a2f4b" - integrity sha512-eRJu4Vs2rmttFCdhPUM3bV0Yo/xPSdPw6ML9KHs/bjB4bLA5HXlbvYXPOD5yASodGod+krjYx21xm1QmL8dCJQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-dotall-regex@^7.4.4", "@babel/plugin-transform-dotall-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.8.3.tgz#c3c6ec5ee6125c6993c5cbca20dc8621a9ea7a6e" - integrity sha512-kLs1j9Nn4MQoBYdRXH6AeaXMbEJFaFu/v1nQkvib6QzTj8MZI5OQzqmD83/2jEM1z0DLilra5aWO5YpyC0ALIw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-duplicate-keys@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.8.3.tgz#8d12df309aa537f272899c565ea1768e286e21f1" - integrity sha512-s8dHiBUbcbSgipS4SMFuWGqCvyge5V2ZeAWzR6INTVC3Ltjig/Vw1G2Gztv0vU/hRG9X8IvKvYdoksnUfgXOEQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-exponentiation-operator@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.8.3.tgz#581a6d7f56970e06bf51560cd64f5e947b70d7b7" - integrity sha512-zwIpuIymb3ACcInbksHaNcR12S++0MDLKkiqXHl3AzpgdKlFNhog+z/K0+TGW+b0w5pgTq4H6IwV/WhxbGYSjQ== - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-flow-strip-types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.9.0.tgz#8a3538aa40434e000b8f44a3c5c9ac7229bd2392" - integrity sha512-7Qfg0lKQhEHs93FChxVLAvhBshOPQDtJUTVHr/ZwQNRccCm4O9D79r9tVSoV8iNwjP1YgfD+e/fgHcPkN1qEQg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-flow" "^7.8.3" - -"@babel/plugin-transform-for-of@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.9.0.tgz#0f260e27d3e29cd1bb3128da5e76c761aa6c108e" - integrity sha512-lTAnWOpMwOXpyDx06N+ywmF3jNbafZEqZ96CGYabxHrxNX8l5ny7dt4bK/rGwAh9utyP2b2Hv7PlZh1AAS54FQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-function-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.8.3.tgz#279373cb27322aaad67c2683e776dfc47196ed8b" - integrity sha512-rO/OnDS78Eifbjn5Py9v8y0aR+aSYhDhqAwVfsTl0ERuMZyr05L1aFSCJnbv2mmsLkit/4ReeQ9N2BgLnOcPCQ== - dependencies: - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.8.3.tgz#aef239823d91994ec7b68e55193525d76dbd5dc1" - integrity sha512-3Tqf8JJ/qB7TeldGl+TT55+uQei9JfYaregDcEAyBZ7akutriFrt6C/wLYIer6OYhleVQvH/ntEhjE/xMmy10A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-member-expression-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.8.3.tgz#963fed4b620ac7cbf6029c755424029fa3a40410" - integrity sha512-3Wk2EXhnw+rP+IDkK6BdtPKsUE5IeZ6QOGrPYvw52NwBStw9V1ZVzxgK6fSKSxqUvH9eQPR3tm3cOq79HlsKYA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-modules-amd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.9.0.tgz#19755ee721912cf5bb04c07d50280af3484efef4" - integrity sha512-vZgDDF003B14O8zJy0XXLnPH4sg+9X5hFBBGN1V+B2rgrB+J2xIypSN6Rk9imB2hSTHQi5OHLrFWsZab1GMk+Q== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-commonjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.9.0.tgz#e3e72f4cbc9b4a260e30be0ea59bdf5a39748940" - integrity sha512-qzlCrLnKqio4SlgJ6FMMLBe4bySNis8DFn1VkGmOcxG9gqEyPIOzeQrA//u0HAKrWpJlpZbZMPB1n/OPa4+n8g== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-simple-access" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-systemjs@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.9.0.tgz#e9fd46a296fc91e009b64e07ddaa86d6f0edeb90" - integrity sha512-FsiAv/nao/ud2ZWy4wFacoLOm5uxl0ExSQ7ErvP7jpoihLR6Cq90ilOFyX9UXct3rbtKsAiZ9kFt5XGfPe/5SQ== - dependencies: - "@babel/helper-hoist-variables" "^7.8.3" - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - babel-plugin-dynamic-import-node "^2.3.0" - -"@babel/plugin-transform-modules-umd@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.9.0.tgz#e909acae276fec280f9b821a5f38e1f08b480697" - integrity sha512-uTWkXkIVtg/JGRSIABdBoMsoIeoHQHPTL0Y2E7xf5Oj7sLqwVsNXOkNk0VJc7vF0IMBsPeikHxFjGe+qmwPtTQ== - dependencies: - "@babel/helper-module-transforms" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-named-capturing-groups-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.8.3.tgz#a2a72bffa202ac0e2d0506afd0939c5ecbc48c6c" - integrity sha512-f+tF/8UVPU86TrCb06JoPWIdDpTNSGGcAtaD9mLP0aYGA0OS0j7j7DHJR0GTFrUZPUU6loZhbsVZgTh0N+Qdnw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - -"@babel/plugin-transform-new-target@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.8.3.tgz#60cc2ae66d85c95ab540eb34babb6434d4c70c43" - integrity sha512-QuSGysibQpyxexRyui2vca+Cmbljo8bcRckgzYV4kRIsHpVeyeC3JDO63pY+xFZ6bWOBn7pfKZTqV4o/ix9sFw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-object-super@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.8.3.tgz#ebb6a1e7a86ffa96858bd6ac0102d65944261725" - integrity sha512-57FXk+gItG/GejofIyLIgBKTas4+pEU47IXKDBWFTxdPd7F80H8zybyAY7UoblVfBhBGs2EKM+bJUu2+iUYPDQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-replace-supers" "^7.8.3" - -"@babel/plugin-transform-parameters@^7.8.7": - version "7.9.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.9.3.tgz#3028d0cc20ddc733166c6e9c8534559cee09f54a" - integrity sha512-fzrQFQhp7mIhOzmOtPiKffvCYQSK10NR8t6BBz2yPbeUHb9OLW8RZGtgDRBn8z2hGcwvKDL3vC7ojPTLNxmqEg== - dependencies: - "@babel/helper-get-function-arity" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-property-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.8.3.tgz#33194300d8539c1ed28c62ad5087ba3807b98263" - integrity sha512-uGiiXAZMqEoQhRWMK17VospMZh5sXWg+dlh2soffpkAl96KAm+WZuJfa6lcELotSRmooLqg0MWdH6UUq85nmmg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-display-name@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.8.3.tgz#70ded987c91609f78353dd76d2fb2a0bb991e8e5" - integrity sha512-3Jy/PCw8Fe6uBKtEgz3M82ljt+lTg+xJaM4og+eyu83qLT87ZUSckn0wy7r31jflURWLO83TW6Ylf7lyXj3m5A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-react-jsx-development@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.9.0.tgz#3c2a130727caf00c2a293f0aed24520825dbf754" - integrity sha512-tK8hWKrQncVvrhvtOiPpKrQjfNX3DtkNLSX4ObuGcpS9p0QrGetKmlySIGR07y48Zft8WVgPakqd/bk46JrMSw== - dependencies: - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx-self@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.9.0.tgz#f4f26a325820205239bb915bad8e06fcadabb49b" - integrity sha512-K2ObbWPKT7KUTAoyjCsFilOkEgMvFG+y0FqOl6Lezd0/13kMkkjHskVsZvblRPj1PHA44PrToaZANrryppzTvQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx-source@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.9.0.tgz#89ef93025240dd5d17d3122294a093e5e0183de0" - integrity sha512-K6m3LlSnTSfRkM6FcRk8saNEeaeyG5k7AVkBU2bZK3+1zdkSED3qNdsWrUgQBeTVD2Tp3VMmerxVO2yM5iITmw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-react-jsx@^7.9.4": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.9.4.tgz#86f576c8540bd06d0e95e0b61ea76d55f6cbd03f" - integrity sha512-Mjqf3pZBNLt854CK0C/kRuXAnE6H/bo7xYojP+WGtX8glDGSibcwnsWwhwoSuRg0+EBnxPC1ouVnuetUIlPSAw== - dependencies: - "@babel/helper-builder-react-jsx" "^7.9.0" - "@babel/helper-builder-react-jsx-experimental" "^7.9.0" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-syntax-jsx" "^7.8.3" - -"@babel/plugin-transform-regenerator@^7.8.7": - version "7.8.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.8.7.tgz#5e46a0dca2bee1ad8285eb0527e6abc9c37672f8" - integrity sha512-TIg+gAl4Z0a3WmD3mbYSk+J9ZUH6n/Yc57rtKRnlA/7rcCvpekHXe0CMZHP1gYp7/KLe9GHTuIba0vXmls6drA== - dependencies: - regenerator-transform "^0.14.2" - -"@babel/plugin-transform-reserved-words@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.8.3.tgz#9a0635ac4e665d29b162837dd3cc50745dfdf1f5" - integrity sha512-mwMxcycN3omKFDjDQUl+8zyMsBfjRFr0Zn/64I41pmjv4NJuqcYlEtezwYtw9TFd9WR1vN5kiM+O0gMZzO6L0A== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-shorthand-properties@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.8.3.tgz#28545216e023a832d4d3a1185ed492bcfeac08c8" - integrity sha512-I9DI6Odg0JJwxCHzbzW08ggMdCezoWcuQRz3ptdudgwaHxTjxw5HgdFJmZIkIMlRymL6YiZcped4TTCB0JcC8w== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-spread@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.8.3.tgz#9c8ffe8170fdfb88b114ecb920b82fb6e95fe5e8" - integrity sha512-CkuTU9mbmAoFOI1tklFWYYbzX5qCIZVXPVy0jpXgGwkplCndQAa58s2jr66fTeQnA64bDox0HL4U56CFYoyC7g== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-sticky-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.8.3.tgz#be7a1290f81dae767475452199e1f76d6175b100" - integrity sha512-9Spq0vGCD5Bb4Z/ZXXSK5wbbLFMG085qd2vhL1JYu1WcQ5bXqZBAYRzU1d+p79GcHs2szYv5pVQCX13QgldaWw== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/helper-regex" "^7.8.3" - -"@babel/plugin-transform-template-literals@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.8.3.tgz#7bfa4732b455ea6a43130adc0ba767ec0e402a80" - integrity sha512-820QBtykIQOLFT8NZOcTRJ1UNuztIELe4p9DCgvj4NK+PwluSJ49we7s9FB1HIGNIYT7wFUJ0ar2QpCDj0escQ== - dependencies: - "@babel/helper-annotate-as-pure" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-typeof-symbol@^7.8.4": - version "7.8.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.8.4.tgz#ede4062315ce0aaf8a657a920858f1a2f35fc412" - integrity sha512-2QKyfjGdvuNfHsb7qnBBlKclbD4CfshH2KvDabiijLMGXPHJXGxtDzwIF7bQP+T0ysw8fYTtxPafgfs/c1Lrqg== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-transform-unicode-regex@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.8.3.tgz#0cef36e3ba73e5c57273effb182f46b91a1ecaad" - integrity sha512-+ufgJjYdmWfSQ+6NS9VGUR2ns8cjJjYbrbi11mZBTaWm+Fui/ncTLFF28Ei1okavY+xkojGr1eJxNsWYeA5aZw== - dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/preset-env@^7.1.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.9.0.tgz#a5fc42480e950ae8f5d9f8f2bbc03f52722df3a8" - integrity sha512-712DeRXT6dyKAM/FMbQTV/FvRCms2hPCx+3weRjZ8iQVQWZejWWk1wwG6ViWMyqb/ouBbGOl5b6aCk0+j1NmsQ== - dependencies: - "@babel/compat-data" "^7.9.0" - "@babel/helper-compilation-targets" "^7.8.7" - "@babel/helper-module-imports" "^7.8.3" - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-proposal-async-generator-functions" "^7.8.3" - "@babel/plugin-proposal-dynamic-import" "^7.8.3" - "@babel/plugin-proposal-json-strings" "^7.8.3" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-proposal-numeric-separator" "^7.8.3" - "@babel/plugin-proposal-object-rest-spread" "^7.9.0" - "@babel/plugin-proposal-optional-catch-binding" "^7.8.3" - "@babel/plugin-proposal-optional-chaining" "^7.9.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.8.3" - "@babel/plugin-syntax-async-generators" "^7.8.0" - "@babel/plugin-syntax-dynamic-import" "^7.8.0" - "@babel/plugin-syntax-json-strings" "^7.8.0" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" - "@babel/plugin-syntax-numeric-separator" "^7.8.0" - "@babel/plugin-syntax-object-rest-spread" "^7.8.0" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" - "@babel/plugin-syntax-optional-chaining" "^7.8.0" - "@babel/plugin-syntax-top-level-await" "^7.8.3" - "@babel/plugin-transform-arrow-functions" "^7.8.3" - "@babel/plugin-transform-async-to-generator" "^7.8.3" - "@babel/plugin-transform-block-scoped-functions" "^7.8.3" - "@babel/plugin-transform-block-scoping" "^7.8.3" - "@babel/plugin-transform-classes" "^7.9.0" - "@babel/plugin-transform-computed-properties" "^7.8.3" - "@babel/plugin-transform-destructuring" "^7.8.3" - "@babel/plugin-transform-dotall-regex" "^7.8.3" - "@babel/plugin-transform-duplicate-keys" "^7.8.3" - "@babel/plugin-transform-exponentiation-operator" "^7.8.3" - "@babel/plugin-transform-for-of" "^7.9.0" - "@babel/plugin-transform-function-name" "^7.8.3" - "@babel/plugin-transform-literals" "^7.8.3" - "@babel/plugin-transform-member-expression-literals" "^7.8.3" - "@babel/plugin-transform-modules-amd" "^7.9.0" - "@babel/plugin-transform-modules-commonjs" "^7.9.0" - "@babel/plugin-transform-modules-systemjs" "^7.9.0" - "@babel/plugin-transform-modules-umd" "^7.9.0" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.8.3" - "@babel/plugin-transform-new-target" "^7.8.3" - "@babel/plugin-transform-object-super" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.8.7" - "@babel/plugin-transform-property-literals" "^7.8.3" - "@babel/plugin-transform-regenerator" "^7.8.7" - "@babel/plugin-transform-reserved-words" "^7.8.3" - "@babel/plugin-transform-shorthand-properties" "^7.8.3" - "@babel/plugin-transform-spread" "^7.8.3" - "@babel/plugin-transform-sticky-regex" "^7.8.3" - "@babel/plugin-transform-template-literals" "^7.8.3" - "@babel/plugin-transform-typeof-symbol" "^7.8.4" - "@babel/plugin-transform-unicode-regex" "^7.8.3" - "@babel/preset-modules" "^0.1.3" - "@babel/types" "^7.9.0" - browserslist "^4.9.1" - core-js-compat "^3.6.2" - invariant "^2.2.2" - levenary "^1.1.1" - semver "^5.5.0" - -"@babel/preset-flow@^7.0.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/preset-flow/-/preset-flow-7.9.0.tgz#fee847c3e090b0b2d9227c1949e4da1d1379280d" - integrity sha512-88uSmlshIrlmPkNkEcx3UpSZ6b8n0UGBq0/0ZMZCF/uxAW0XIAUuDHBhIOAh0pvweafH4RxOwi/H3rWhtqOYPA== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-flow-strip-types" "^7.9.0" - -"@babel/preset-modules@^0.1.3": - version "0.1.3" - resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.3.tgz#13242b53b5ef8c883c3cf7dddd55b36ce80fbc72" - integrity sha512-Ra3JXOHBq2xd56xSF7lMKXdjBn3T772Y1Wet3yWnkDly9zHvJki029tAFzvAAK5cf4YV3yoxuP61crYRol6SVg== - dependencies: - "@babel/helper-plugin-utils" "^7.0.0" - "@babel/plugin-proposal-unicode-property-regex" "^7.4.4" - "@babel/plugin-transform-dotall-regex" "^7.4.4" - "@babel/types" "^7.4.4" - esutils "^2.0.2" - -"@babel/preset-react@^7.0.0": - version "7.9.4" - resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.9.4.tgz#c6c97693ac65b6b9c0b4f25b948a8f665463014d" - integrity sha512-AxylVB3FXeOTQXNXyiuAQJSvss62FEotbX2Pzx3K/7c+MKJMdSg6Ose6QYllkdCFA8EInCJVw7M/o5QbLuA4ZQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - "@babel/plugin-transform-react-display-name" "^7.8.3" - "@babel/plugin-transform-react-jsx" "^7.9.4" - "@babel/plugin-transform-react-jsx-development" "^7.9.0" - "@babel/plugin-transform-react-jsx-self" "^7.9.0" - "@babel/plugin-transform-react-jsx-source" "^7.9.0" - -"@babel/preset-stage-0@^7.0.0": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/preset-stage-0/-/preset-stage-0-7.8.3.tgz#b6a0eca1a3b72e07f9caf58f998e97568028f6f5" - integrity sha512-+l6FlG1j73t4wh78W41StbcCz0/9a1/y+vxfnjtHl060kSmcgMfGzK9MEkLvrCOXfhp9RCX+d88sm6rOqxEIEQ== - -"@babel/runtime-corejs3@^7.8.3": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.9.2.tgz#26fe4aa77e9f1ecef9b776559bbb8e84d34284b7" - integrity sha512-HHxmgxbIzOfFlZ+tdeRKtaxWOMUoCG5Mu3wKeUmOxjYrwb3AAHgnmtCUbPPK11/raIWLIBK250t8E2BPO0p7jA== - dependencies: - core-js-pure "^3.0.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7": - version "7.9.2" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.9.2.tgz#d90df0583a3a252f09aaa619665367bae518db06" - integrity sha512-NE2DtOdufG7R5vnfQUTehdTfNycfUANEtCa9PssN9O/xmTzP4E08UI797ixaei6hBEVL9BI/PsdJS5x7mWoB9Q== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/template@^7.4.0", "@babel/template@^7.8.3", "@babel/template@^7.8.6": - version "7.8.6" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.8.6.tgz#86b22af15f828dfb086474f964dcc3e39c43ce2b" - integrity sha512-zbMsPMy/v0PWFZEhQJ66bqjhH+z0JgMoBWuikXybgG3Gkd/3t5oQ1Rw2WQhnSrsOmsKXnZOx15tkC4qON/+JPg== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/parser" "^7.8.6" - "@babel/types" "^7.8.6" - -"@babel/traverse@^7.1.4", "@babel/traverse@^7.4.3", "@babel/traverse@^7.7.0", "@babel/traverse@^7.8.3", "@babel/traverse@^7.8.6", "@babel/traverse@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.9.0.tgz#d3882c2830e513f4fe4cec9fe76ea1cc78747892" - integrity sha512-jAZQj0+kn4WTHO5dUZkZKhbFrqZE7K5LAQ5JysMnmvGij+wOdr+8lWqPeW0BcF4wFwrEXXtdGO7wcV6YPJcf3w== - dependencies: - "@babel/code-frame" "^7.8.3" - "@babel/generator" "^7.9.0" - "@babel/helper-function-name" "^7.8.3" - "@babel/helper-split-export-declaration" "^7.8.3" - "@babel/parser" "^7.9.0" - "@babel/types" "^7.9.0" - debug "^4.1.0" - globals "^11.1.0" - lodash "^4.17.13" - -"@babel/types@^7.1.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.7.0", "@babel/types@^7.8.3", "@babel/types@^7.8.6", "@babel/types@^7.9.0": - version "7.9.0" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.9.0.tgz#00b064c3df83ad32b2dbf5ff07312b15c7f1efb5" - integrity sha512-BS9JKfXkzzJl8RluW4JGknzpiUV7ZrvTayM6yfqLTVBEnFtyowVIOu6rqxRd5cVO6yGoWf4T8u8dgK9oB+GCng== - dependencies: - "@babel/helper-validator-identifier" "^7.9.0" - lodash "^4.17.13" - to-fast-properties "^2.0.0" - -"@mapbox/flow-remove-types@^1.3.0-await.upstream.2": - version "1.3.0-await.upstream.2" - resolved "https://registry.yarnpkg.com/@mapbox/flow-remove-types/-/flow-remove-types-1.3.0-await.upstream.2.tgz#bb8613e5cfd3f69d764658c5084d7f5d501097a2" - integrity sha512-OYVWXwkluP+9Jz2uenNSeum7U2Hp6RncPAS8iz3qnJ37kE/acae5dD1207BFqWsJ2JsBqULG8g2wB+hUQzPeYg== - dependencies: - babylon "^7.0.0-beta.41" - node-modules-regexp "^1.0.0" - pirates "^3.0.2" - vlq "^0.2.1" - -"@mapbox/gazetteer@^4.0.4": - version "4.0.4" - resolved "https://registry.yarnpkg.com/@mapbox/gazetteer/-/gazetteer-4.0.4.tgz#511b059d5f2a58e0b4d7ec6c1562c846a888fb82" - integrity sha512-XzOaDedR2EAfjlVApDn+cV6Upi8tsa8J6fBRWHxzmG0ekdC03jvqXkOKPS/P4BkUDyBD6bMLMJ8WH5A0iZNmwQ== - dependencies: - "@mapbox/geojsonhint" "^2.2.0" - -"@mapbox/geojson-rewind@^0.5.0": - version "0.5.0" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-rewind/-/geojson-rewind-0.5.0.tgz#91f0ad56008c120caa19414b644d741249f4f560" - integrity sha512-73l/qJQgj/T/zO1JXVfuVvvKDgikD/7D/rHAD28S9BG1OTstgmftrmqfCx4U+zQAmtsB6HcDA3a7ymdnJZAQgg== - dependencies: - concat-stream "~2.0.0" - minimist "^1.2.5" - -"@mapbox/geojson-types@^1.0.2": - version "1.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/geojson-types/-/geojson-types-1.0.2.tgz#9aecf642cb00eab1080a57c4f949a65b4a5846d6" - integrity sha512-e9EBqHHv3EORHrSfbR9DqecPNn+AmuAoQxV6aL8Xu30bJMJR1o8PZLZzpk1Wq7/NfCbuhmakHTPYRhoqLsXRnw== - -"@mapbox/geojsonhint@^2.2.0": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@mapbox/geojsonhint/-/geojsonhint-2.2.0.tgz#75ca94706e9a56e6debf4e1c78fabdc67978b883" - integrity sha512-8qQYRB+/2z2JsN5s6D0WAnpo69+3V3nvJsSFLwMB1dsaWz1V4oZeuoje9srbYAxxL8PXCwIywfhYa3GxOkBv5Q== - dependencies: - concat-stream "^1.6.1" - jsonlint-lines "1.7.1" - minimist "1.2.0" - vfile "^4.0.0" - vfile-reporter "^5.1.1" - -"@mapbox/jsonlint-lines-primitives@^2.0.2": - version "2.0.2" - resolved "https://registry.yarnpkg.com/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz#ce56e539f83552b58d10d672ea4d6fc9adc7b234" - integrity sha1-zlblOfg1UrWNENZy6k1vya3HsjQ= - -"@mapbox/mapbox-gl-rtl-text@^0.2.1": - version "0.2.3" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-rtl-text/-/mapbox-gl-rtl-text-0.2.3.tgz#a26ecfb3f0061456d93ee8570dd9587d226ea8bd" - integrity sha512-RaCYfnxULUUUxNwcUimV9C/o2295ktTyLEUzD/+VWkqXqvaVfFcZ5slytGzb2Sd/Jj4MlbxD0DCZbfa6CzcmMw== - -"@mapbox/mapbox-gl-supported@^1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@mapbox/mapbox-gl-supported/-/mapbox-gl-supported-1.5.0.tgz#f60b6a55a5d8e5ee908347d2ce4250b15103dc8e" - integrity sha512-/PT1P6DNf7vjEEiPkVIRJkvibbqWtqnyGaBz3nfRdcxclNSnSdaLU5tfAgcD7I8Yt5i+L19s406YLl1koLnLbg== - -"@mapbox/mvt-fixtures@^3.6.0": - version "3.6.0" - resolved "https://registry.yarnpkg.com/@mapbox/mvt-fixtures/-/mvt-fixtures-3.6.0.tgz#0d359c1eca9499db8b5b57292b1f986921ef0fbd" - integrity sha512-YgaODBQdutOcCnOiRJzbJO3lRejuaeuwfYk0XxfVlAi6L+UDXVHzi7NlpAa6GAYGzQm1V1KLk+2Io8+aSv8I+w== - dependencies: - "@mapbox/sphericalmercator" "^1.0.5" - "@mapbox/vector-tile" "^1.3.0" - d3-queue "^3.0.7" - pbf "^3.0.5" - protocol-buffers-schema "^3.3.2" - -"@mapbox/point-geometry@0.1.0", "@mapbox/point-geometry@^0.1.0", "@mapbox/point-geometry@~0.1.0": - version "0.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz#8a83f9335c7860effa2eeeca254332aa0aeed8f2" - integrity sha1-ioP5M1x4YO/6Lu7KJUMyqgru2PI= - -"@mapbox/sphericalmercator@^1.0.5": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/sphericalmercator/-/sphericalmercator-1.1.0.tgz#f3b1af042620716a1289fc41e1e97f610823aefe" - integrity sha512-pEsfZyG4OMThlfFQbCte4gegvHUjxXCjz0KZ4Xk8NdOYTQBLflj6U8PL05RPAiuRAMAQNUUKJuL6qYZ5Y4kAWA== - -"@mapbox/tiny-sdf@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@mapbox/tiny-sdf/-/tiny-sdf-1.1.1.tgz#16a20c470741bfe9191deb336f46e194da4a91ff" - integrity sha512-Ihn1nZcGIswJ5XGbgFAvVumOgWpvIjBX9jiRlIl46uQG9vJOF51ViBYHF95rEZupuyQbEmhLaDPLQlU7fUTsBg== - -"@mapbox/unitbezier@^0.0.0": - version "0.0.0" - resolved "https://registry.yarnpkg.com/@mapbox/unitbezier/-/unitbezier-0.0.0.tgz#15651bd553a67b8581fb398810c98ad86a34524e" - integrity sha1-FWUb1VOme4WB+zmIEMmK2Go0Uk4= - -"@mapbox/vector-tile@^1.3.0", "@mapbox/vector-tile@^1.3.1": - version "1.3.1" - resolved "https://registry.yarnpkg.com/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz#d3a74c90402d06e89ec66de49ec817ff53409666" - integrity sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw== - dependencies: - "@mapbox/point-geometry" "~0.1.0" - -"@mapbox/whoots-js@^3.1.0": - version "3.1.0" - resolved "https://registry.yarnpkg.com/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz#497c67a1cef50d1a2459ba60f315e448d2ad87fe" - integrity sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q== - -"@mrmlnc/readdir-enhanced@^2.2.1": - version "2.2.1" - resolved "https://registry.yarnpkg.com/@mrmlnc/readdir-enhanced/-/readdir-enhanced-2.2.1.tgz#524af240d1a360527b730475ecfa1344aa540dde" - integrity sha512-bPHp6Ji8b41szTOcaP63VlnbbO5Ny6dwAATtY6JTjh5N2OLrb5Qk/Th5cRkRQhkWCt+EJsYrNB0MiL+Gpn6e3g== - dependencies: - call-me-maybe "^1.0.1" - glob-to-regexp "^0.3.0" - -"@nodelib/fs.stat@^1.1.2": - version "1.1.3" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-1.1.3.tgz#2b5a3ab3f918cca48a8c754c08168e3f03eba61b" - integrity sha512-shAmDyaQC4H92APFoIaVDHCx5bStIocgvbwQyxPRrbUY20V1EYTbSDchWbuwlMG3V17cprZhA6+78JfB+3DTPw== - -"@octokit/auth-token@^2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.0.tgz#b64178975218b99e4dfe948253f0673cbbb59d9f" - integrity sha512-eoOVMjILna7FVQf96iWc3+ZtE/ZT6y8ob8ZzcqKY1ibSQCnu4O/B7pJvzMx5cyZ/RjAff6DAdEb0O0Cjcxidkg== - dependencies: - "@octokit/types" "^2.0.0" - -"@octokit/endpoint@^6.0.0": - version "6.0.0" - resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.0.tgz#4c7acd79ab72df78732a7d63b09be53ec5a2230b" - integrity sha512-3nx+MEYoZeD0uJ+7F/gvELLvQJzLXhep2Az0bBSXagbApDvDW0LWwpnAIY/hb0Jwe17A0fJdz0O12dPh05cj7A== - dependencies: - "@octokit/types" "^2.0.0" - is-plain-object "^3.0.0" - universal-user-agent "^5.0.0" - -"@octokit/plugin-paginate-rest@^1.1.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-1.1.2.tgz#004170acf8c2be535aba26727867d692f7b488fc" - integrity sha512-jbsSoi5Q1pj63sC16XIUboklNw+8tL9VOnJsWycWYR78TKss5PVpIPb1TUUcMQ+bBh7cY579cVAWmf5qG+dw+Q== - dependencies: - "@octokit/types" "^2.0.1" - -"@octokit/plugin-request-log@^1.0.0": - version "1.0.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" - integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== - -"@octokit/plugin-rest-endpoint-methods@2.4.0": - version "2.4.0" - resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-2.4.0.tgz#3288ecf5481f68c494dd0602fc15407a59faf61e" - integrity sha512-EZi/AWhtkdfAYi01obpX0DF7U6b1VRr30QNQ5xSFPITMdLSfhcBqjamE3F+sKcxPbD7eZuMHu3Qkk2V+JGxBDQ== - dependencies: - "@octokit/types" "^2.0.1" - deprecation "^2.3.1" - -"@octokit/request-error@^1.0.2": - version "1.2.1" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-1.2.1.tgz#ede0714c773f32347576c25649dc013ae6b31801" - integrity sha512-+6yDyk1EES6WK+l3viRDElw96MvwfJxCt45GvmjDUKWjYIb3PJZQkq3i46TwGwoPD4h8NmTrENmtyA1FwbmhRA== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request-error@^2.0.0": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.0.tgz#94ca7293373654400fbb2995f377f9473e00834b" - integrity sha512-rtYicB4Absc60rUv74Rjpzek84UbVHGHJRu4fNVlZ1mCcyUPPuzFfG9Rn6sjHrd95DEsmjSt1Axlc699ZlbDkw== - dependencies: - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - once "^1.4.0" - -"@octokit/request@^5.2.0": - version "5.3.4" - resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.3.4.tgz#fbc950bf785d59da3b0399fc6d042c8cf52e2905" - integrity sha512-qyj8G8BxQyXjt9Xu6NvfvOr1E0l35lsXtwm3SopsYg/JWXjlsnwqLc8rsD2OLguEL/JjLfBvrXr4az7z8Lch2A== - dependencies: - "@octokit/endpoint" "^6.0.0" - "@octokit/request-error" "^2.0.0" - "@octokit/types" "^2.0.0" - deprecation "^2.0.0" - is-plain-object "^3.0.0" - node-fetch "^2.3.0" - once "^1.4.0" - universal-user-agent "^5.0.0" - -"@octokit/rest@^16.30.1": - version "16.43.1" - resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-16.43.1.tgz#3b11e7d1b1ac2bbeeb23b08a17df0b20947eda6b" - integrity sha512-gfFKwRT/wFxq5qlNjnW2dh+qh74XgTQ2B179UX5K1HYCluioWj8Ndbgqw2PVqa1NnVJkGHp2ovMpVn/DImlmkw== - dependencies: - "@octokit/auth-token" "^2.4.0" - "@octokit/plugin-paginate-rest" "^1.1.1" - "@octokit/plugin-request-log" "^1.0.0" - "@octokit/plugin-rest-endpoint-methods" "2.4.0" - "@octokit/request" "^5.2.0" - "@octokit/request-error" "^1.0.2" - atob-lite "^2.0.0" - before-after-hook "^2.0.0" - btoa-lite "^1.0.0" - deprecation "^2.0.0" - lodash.get "^4.4.2" - lodash.set "^4.3.2" - lodash.uniq "^4.5.0" - octokit-pagination-methods "^1.1.0" - once "^1.4.0" - universal-user-agent "^4.0.0" - -"@octokit/types@^2.0.0", "@octokit/types@^2.0.1": - version "2.5.0" - resolved "https://registry.yarnpkg.com/@octokit/types/-/types-2.5.0.tgz#f1bbd147e662ae2c79717d518aac686e58257773" - integrity sha512-KEnLwOfdXzxPNL34fj508bhi9Z9cStyN7qY1kOfVahmqtAfrWw6Oq3P4R+dtsg0lYtZdWBpUrS/Ixmd5YILSww== - dependencies: - "@types/node" ">= 8" - -"@rollup/plugin-strip@^1.3.1": - version "1.3.2" - resolved "https://registry.yarnpkg.com/@rollup/plugin-strip/-/plugin-strip-1.3.2.tgz#9f52e99add99b835a4a3c14e02385f3726514923" - integrity sha512-dByULCvYdklJRJ50XqmA/ntyvVuVnnxOrgZ6cIIMBLLzQrsm9Ui15VD+6I8a11w8Ob9R7ySwYjFck9YCMzseKA== - dependencies: - "@rollup/pluginutils" "^3.0.4" - estree-walker "^1.0.1" - magic-string "^0.25.5" - -"@rollup/pluginutils@^3.0.4": - version "3.0.8" - resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-3.0.8.tgz#4e94d128d94b90699e517ef045422960d18c8fde" - integrity sha512-rYGeAc4sxcZ+kPG/Tw4/fwJODC3IXHYDH4qusdN/b6aLw5LPUbzpecYbEJh4sVQGPFJxd2dBU4kc1H3oy9/bnw== - dependencies: - estree-walker "^1.0.1" - -"@sinonjs/commons@^1", "@sinonjs/commons@^1.3.0", "@sinonjs/commons@^1.4.0", "@sinonjs/commons@^1.7.0": - version "1.7.1" - resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-1.7.1.tgz#da5fd19a5f71177a53778073978873964f49acf1" - integrity sha512-Debi3Baff1Qu1Unc3mjJ96MgpbwTn43S1+9yJ0llWygPwDNu2aaWBD6yc9y/Z8XDRNhx7U+u2UDg2OGQXkclUQ== - dependencies: - type-detect "4.0.8" - -"@sinonjs/formatio@^3.2.1": - version "3.2.2" - resolved "https://registry.yarnpkg.com/@sinonjs/formatio/-/formatio-3.2.2.tgz#771c60dfa75ea7f2d68e3b94c7e888a78781372c" - integrity sha512-B8SEsgd8gArBLMD6zpRw3juQ2FVSsmdd7qlevyDqzS9WTCtvF55/gAL+h6gue8ZvPYcdiPdvueM/qm//9XzyTQ== - dependencies: - "@sinonjs/commons" "^1" - "@sinonjs/samsam" "^3.1.0" - -"@sinonjs/samsam@^3.1.0", "@sinonjs/samsam@^3.3.3": - version "3.3.3" - resolved "https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-3.3.3.tgz#46682efd9967b259b81136b9f120fd54585feb4a" - integrity sha512-bKCMKZvWIjYD0BLGnNrxVuw4dkWCYsLqFOUWw8VgKF/+5Y+mE7LfHWPIYoDXowH+3a9LsWDMo0uAP8YDosPvHQ== - dependencies: - "@sinonjs/commons" "^1.3.0" - array-from "^2.1.1" - lodash "^4.17.15" - -"@sinonjs/text-encoding@^0.7.1": - version "0.7.1" - resolved "https://registry.yarnpkg.com/@sinonjs/text-encoding/-/text-encoding-0.7.1.tgz#8da5c6530915653f3a1f38fd5f101d8c3f8079c5" - integrity sha512-+iTbntw2IZPb/anVDbypzfQa+ay64MW0Zo8aJ8gZPWMMK6/OubMVb6lUPMagqjOPnmtauXnFCACVl3O7ogjeqQ== - -"@types/color-name@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@types/color-name/-/color-name-1.1.1.tgz#1c1261bbeaa10a8055bbc5d8ab84b7b2afc846a0" - integrity sha512-rr+OQyAjxze7GgWrSaJwydHStIhHq2lvY3BOC2Mj7KnzI7XK0Uw1TOOdI9lDoajEbSWLiYgoo4f1R51erQfhPQ== - -"@types/estree@*": - version "0.0.44" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.44.tgz#980cc5a29a3ef3bea6ff1f7d021047d7ea575e21" - integrity sha512-iaIVzr+w2ZJ5HkidlZ3EJM8VTZb2MJLCjw3V+505yVts0gRC4UMvjw0d1HPtGqI/HQC/KdsYtayfzl+AXY2R8g== - -"@types/estree@0.0.39": - version "0.0.39" - resolved "https://registry.yarnpkg.com/@types/estree/-/estree-0.0.39.tgz#e177e699ee1b8c22d23174caaa7422644389509f" - integrity sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw== - -"@types/events@*": - version "3.0.0" - resolved "https://registry.yarnpkg.com/@types/events/-/events-3.0.0.tgz#2862f3f58a9a7f7c3e78d79f130dd4d71c25c2a7" - integrity sha512-EaObqwIvayI5a8dCzhFrjKzVwKLxjoG9T6Ppd5CEo07LRKfQ8Yokw54r5+Wq7FaBQ+yXRvQAYPrHwya1/UFt9g== - -"@types/geojson@^7946.0.7": - version "7946.0.7" - resolved "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.7.tgz#c8fa532b60a0042219cdf173ca21a975ef0666ad" - integrity sha512-wE2v81i4C4Ol09RtsWFAqg3BUitWbHSpSlIo+bNdsCJijO9sjme+zm+73ZMCa/qMC8UEERxzGbvmr1cffo2SiQ== - -"@types/glob@^7.1.1": - version "7.1.1" - resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.1.1.tgz#aa59a1c6e3fbc421e07ccd31a944c30eba521575" - integrity sha512-1Bh06cbWJUHMC97acuD6UMG29nMt0Aqz1vF3guLfG+kHHJhy3AyohZFFxYk2f7Q1SQIrNwvncxAE0N/9s70F2w== - dependencies: - "@types/events" "*" - "@types/minimatch" "*" - "@types/node" "*" - -"@types/minimatch@*": - version "3.0.3" - resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-3.0.3.tgz#3dca0e3f33b200fc7d1139c0cd96c1268cadfd9d" - integrity sha512-tHq6qdbT9U1IRSGf14CL0pUlULksvY9OZ+5eEgl1N7t+OA3tGvNpxJCzuKQlsNgCVwbAs670L1vcVQi8j9HjnA== - -"@types/node@*", "@types/node@>= 8": - version "12.12.31" - resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.31.tgz#d6b4f9645fee17f11319b508fb1001797425da51" - integrity sha512-T+wnJno8uh27G9c+1T+a1/WYCHzLeDqtsGJkoEdSp2X8RTh3oOCZQcUnjAx90CS8cmmADX51O0FI/tu9s0yssg== - -"@types/q@^1.5.1": - version "1.5.2" - resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" - integrity sha512-ce5d3q03Ex0sy4R14722Rmt6MT07Ua+k4FwDfdcToYJcMKNtRVQvJ6JCAPdAmAnbRb6CsX6aYb9m96NGod9uTw== - -"@types/resolve@0.0.8": - version "0.0.8" - resolved "https://registry.yarnpkg.com/@types/resolve/-/resolve-0.0.8.tgz#f26074d238e02659e323ce1a13d041eee280e194" - integrity sha512-auApPaJf3NPfe18hSoJkp8EbZzer2ISk7o8mCC3M9he/a04+gbMF97NkpD2S8riMGvm4BMRI59/SZQSaLTKpsQ== - dependencies: - "@types/node" "*" - -"@types/unist@*", "@types/unist@^2.0.0", "@types/unist@^2.0.2": - version "2.0.3" - resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" - integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== - -"@types/vfile-message@*": - version "2.0.0" - resolved "https://registry.yarnpkg.com/@types/vfile-message/-/vfile-message-2.0.0.tgz#690e46af0fdfc1f9faae00cd049cc888957927d5" - integrity sha512-GpTIuDpb9u4zIO165fUy9+fXcULdD8HFRNli04GehoMVbeNq7D6OBnqSmg3lxZnC+UvgUhEWKxdKiwYUkGltIw== - dependencies: - vfile-message "*" - -"@types/vfile@^3.0.0": - version "3.0.2" - resolved "https://registry.yarnpkg.com/@types/vfile/-/vfile-3.0.2.tgz#19c18cd232df11ce6fa6ad80259bc86c366b09b9" - integrity sha512-b3nLFGaGkJ9rzOcuXRfHkZMdjsawuDD0ENL9fzTophtBg8FJHSGbH7daXkEpcwy3v7Xol3pAvsmlYyFhR4pqJw== - dependencies: - "@types/node" "*" - "@types/unist" "*" - "@types/vfile-message" "*" - -JSONStream@^1.0.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" - integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== - dependencies: - jsonparse "^1.2.0" - through ">=2.2.7 <3" - -"JSV@>= 4.0.x": - version "4.0.2" - resolved "https://registry.yarnpkg.com/JSV/-/JSV-4.0.2.tgz#d077f6825571f82132f9dffaed587b4029feff57" - integrity sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c= - -abab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.3.tgz#623e2075e02eb2d3f2475e49f99c91846467907a" - integrity sha512-tsFzPpcttalNjFBCFMqsKYQcWxxen1pgJR56by//QwvJc4/OUS3kPOOttx2tSIfjsylB0pYu7f5D3K1RCxUnUg== - -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - -accepts@~1.3.4, accepts@~1.3.5, accepts@~1.3.7: - version "1.3.7" - resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.7.tgz#531bc726517a3b2b41f850021c6cc15eaab507cd" - integrity sha512-Il80Qs2WjYlJIBNzNkK6KYqlVMTbZLXgHx2oT0pU/fjRHyEp+PEfEPY0R3WCwAGVOtauxh1hOxNgIf5bv7dQpA== - dependencies: - mime-types "~2.1.24" - negotiator "0.6.2" - -acorn-dynamic-import@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/acorn-dynamic-import/-/acorn-dynamic-import-4.0.0.tgz#482210140582a36b83c3e342e1cfebcaa9240948" - integrity sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw== - -acorn-globals@^4.3.0: - version "4.3.4" - resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-4.3.4.tgz#9fa1926addc11c97308c4e66d7add0d40c3272e7" - integrity sha512-clfQEh21R+D0leSbUdWf3OcfqyaCSAQ8Ryq00bofSekfr9W8u1jyYZo6ir0xu9Gtcf7BjcHJpnbZH7JOCpP60A== - dependencies: - acorn "^6.0.1" - acorn-walk "^6.0.1" - -acorn-jsx@^5.0.0, acorn-jsx@^5.0.1: - version "5.2.0" - resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.2.0.tgz#4c66069173d6fdd68ed85239fc256226182b2ebe" - integrity sha512-HiUX/+K2YpkpJ+SzBffkM/AQ2YE03S0U1kjTLVpoJdhZMOWy8qvXVN9JdLqv2QsaQ6MPYQIuNmwD8zOiYUofLQ== - -acorn-node@^1.2.0, acorn-node@^1.3.0, acorn-node@^1.5.2, acorn-node@^1.6.1: - version "1.8.2" - resolved "https://registry.yarnpkg.com/acorn-node/-/acorn-node-1.8.2.tgz#114c95d64539e53dede23de8b9d96df7c7ae2af8" - integrity sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A== - dependencies: - acorn "^7.0.0" - acorn-walk "^7.0.0" - xtend "^4.0.2" - -acorn-walk@^6.0.1: - version "6.2.0" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-6.2.0.tgz#123cb8f3b84c2171f1f7fb252615b1c78a6b1a8c" - integrity sha512-7evsyfH1cLOCdAzZAd43Cic04yKydNx0cF+7tiA19p1XnLLPU4dpCQOqpjqwokFe//vS0QqfqqjCS2JkiIs0cA== - -acorn-walk@^7.0.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-7.1.1.tgz#345f0dffad5c735e7373d2fec9a1023e6a44b83e" - integrity sha512-wdlPY2tm/9XBr7QkKlq0WQVgiuGTX6YWPyRyBviSoScBuLfTVQhvwg6wJ369GJ/1nPfTLMfnrFIfjqVg6d+jQQ== - -acorn@^5.2.1: - version "5.7.4" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-5.7.4.tgz#3e8d8a9947d0599a1796d10225d7432f4a4acf5e" - integrity sha512-1D++VG7BhrtvQpNbBzovKNc1FLGGEE/oGe7b9xJm/RFHMBeUaUGpluV9RLjZa47YFdPcDAenEYuq9pQPcMdLJg== - -acorn@^6.0.1, acorn@^6.0.4, acorn@^6.0.7, acorn@^6.1.1: - version "6.4.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-6.4.1.tgz#531e58ba3f51b9dacb9a6646ca4debf5b14ca474" - integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== - -acorn@^7.0.0, acorn@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.1.1.tgz#e35668de0b402f359de515c5482a1ab9f89a69bf" - integrity sha512-add7dgA5ppRPxCFJoAGfMDi7PIBXq1RtGo7BhbLaxwrXPOmw8gq48Y9ozT01hUKy9byMjlR20EJhu5zlkErEkg== - -address@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/address/-/address-1.1.2.tgz#bf1116c9c758c51b7a933d296b72c221ed9428b6" - integrity sha512-aT6camzM4xEA54YVJYSqxz1kv4IHnQZRtThJJHhUMRExaU5spC7jX5ugSwTaTgJliIgs4VhZOk7htClvQ/LmRA== - -after@0.8.2: - version "0.8.2" - resolved "https://registry.yarnpkg.com/after/-/after-0.8.2.tgz#fedb394f9f0e02aa9768e702bda23b505fae7e1f" - integrity sha1-/ts5T58OAqqXaOcCvaI7UF+ufh8= - -agent-base@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-4.3.0.tgz#8165f01c436009bccad0b1d122f05ed770efc6ee" - integrity sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg== - dependencies: - es6-promisify "^5.0.0" - -ajv@^6.10.2, ajv@^6.5.5, ajv@^6.9.1: - version "6.12.0" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.0.tgz#06d60b96d87b8454a5adaba86e7854da629db4b7" - integrity sha512-D6gFiFA0RRLyUbvijN74DWAjXSFxWKaWP7mldxkVhyhAV3+SWA9HEJPHQ2c9soIeTFJqcSdFDGFgdqs1iUU2Hw== - dependencies: - fast-deep-equal "^3.1.1" - fast-json-stable-stringify "^2.0.0" - json-schema-traverse "^0.4.1" - uri-js "^4.2.2" - -alphanum-sort@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/alphanum-sort/-/alphanum-sort-1.0.2.tgz#97a1119649b211ad33691d9f9f486a8ec9fbe0a3" - integrity sha1-l6ERlkmyEa0zaR2fn0hqjsn74KM= - -amdefine@>=0.0.4: - version "1.0.1" - resolved "https://registry.yarnpkg.com/amdefine/-/amdefine-1.0.1.tgz#4a5282ac164729e93619bcfd3ad151f817ce91f5" - integrity sha1-SlKCrBZHKek2Gbz9OtFR+BfOkfU= - -ansi-escapes@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-3.2.0.tgz#8780b98ff9dbf5638152d1f1fe5c1d7b4442976b" - integrity sha512-cBhpre4ma+U0T1oM5fXg7Dy1Jw7zzwv7lt/GoCpr+hDQJoYnKVPLL4dCvSEFMmQurOQvSrwT7SL/DAlhBI97RQ== - -ansi-html@^0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/ansi-html/-/ansi-html-0.0.7.tgz#813584021962a9e9e6fd039f940d12f56ca7859e" - integrity sha1-gTWEAhliqenm/QOflA0S9WynhZ4= - -ansi-regex@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-2.1.1.tgz#c3b33ab5ee360d86e0e628f0468ae7ef27d654df" - integrity sha1-w7M6te42DYbg5ijwRorn7yfWVN8= - -ansi-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-3.0.0.tgz#ed0317c322064f79466c02966bddb605ab37d998" - integrity sha1-7QMXwyIGT3lGbAKWa922Bas32Zg= - -ansi-regex@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-4.1.0.tgz#8b9f8f08cf1acb843756a839ca8c7e3168c51997" - integrity sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg== - -ansi-regex@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.0.tgz#388539f55179bf39339c81af30a654d69f87cb75" - integrity sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg== - -ansi-styles@^3.2.0, ansi-styles@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d" - integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA== - dependencies: - color-convert "^1.9.0" - -ansi-styles@^4.0.0: - version "4.3.0" - resolved "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -ansi-styles@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359" - integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA== - dependencies: - "@types/color-name" "^1.1.1" - color-convert "^2.0.1" - -ansi-styles@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-1.0.0.tgz#cb102df1c56f5123eab8b67cd7b98027a0279178" - integrity sha1-yxAt8cVvUSPquLZ817mAJ6AnkXg= - -anymatch@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-2.0.0.tgz#bcb24b4f37934d9aa7ac17b4adaf89e7c76ef2eb" - integrity sha512-5teOsQWABXHHBFP9y3skS5P3d/WfWXpv3FUpy+LorMrNYaT9pI4oLMQX7jzQ2KklNpGpWHzdCXTDT2Y3XGlZBw== - dependencies: - micromatch "^3.1.4" - normalize-path "^2.1.1" - -anymatch@~3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.1.tgz#c55ecf02185e2469259399310c173ce31233b142" - integrity sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg== - dependencies: - normalize-path "^3.0.0" - picomatch "^2.0.4" - -append-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/append-buffer/-/append-buffer-1.0.2.tgz#d8220cf466081525efea50614f3de6514dfa58f1" - integrity sha1-2CIM9GYIFSXv6lBhTz3mUU36WPE= - dependencies: - buffer-equal "^1.0.0" - -append-transform@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/append-transform/-/append-transform-1.0.0.tgz#046a52ae582a228bd72f58acfbe2967c678759ab" - integrity sha512-P009oYkeHyU742iSZJzZZywj4QRJdnTWffaKuJQLablCZ1uz6/cW4yaRgcDaoQ+uwOxxnt0gRUcwfsNP2ri0gw== - dependencies: - default-require-extensions "^2.0.0" - -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -archy@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/archy/-/archy-1.0.0.tgz#f9c8c13757cc1dd7bc379ac77b2c62a5c2868c40" - integrity sha1-+cjBN1fMHde8N5rHeyxipcKGjEA= - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -argparse@^1.0.7: - version "1.0.10" - resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" - integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== - dependencies: - sprintf-js "~1.0.2" - -arr-diff@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/arr-diff/-/arr-diff-4.0.0.tgz#d6461074febfec71e7e15235761a329a5dc7c520" - integrity sha1-1kYQdP6/7HHn4VI1dhoyml3HxSA= - -arr-flatten@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/arr-flatten/-/arr-flatten-1.1.0.tgz#36048bbff4e7b47e136644316c99669ea5ae91f1" - integrity sha512-L3hKV5R/p5o81R7O02IGnwpDmkp6E982XhtbuwSe3O4qOtMMMtodicASA1Cny2U+aCXcNpml+m4dPsvsJ3jatg== - -arr-union@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/arr-union/-/arr-union-3.1.0.tgz#e39b09aea9def866a8f206e288af63919bae39c4" - integrity sha1-45sJrqne+Gao8gbiiK9jkZuuOcQ= - -array-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-equal/-/array-equal-1.0.0.tgz#8c2a5ef2472fd9ea742b04c77a75093ba2757c93" - integrity sha1-jCpe8kcv2ep0KwTHenUJO6J1fJM= - -array-find-index@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-find-index/-/array-find-index-1.0.2.tgz#df010aa1287e164bbda6f9723b0a96a1ec4187a1" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -array-flatten@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" - integrity sha1-ml9pkFGx5wczKPKgCJaLZOopVdI= - -array-from@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/array-from/-/array-from-2.1.1.tgz#cfe9d8c26628b9dc5aecc62a9f5d8f1f352c1195" - integrity sha1-z+nYwmYoudxa7MYqn12PHzUsEZU= - -array-includes@^3.0.3, array-includes@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.1.tgz#cdd67e6852bdf9c1215460786732255ed2459348" - integrity sha512-c2VXaCHl7zPsvpkFsw4nxvFie4fh1ur9bpcgsVkIjqn0H/Xwdg+7fv3n2r/isyS8EBj5b06M9kHyZuIr4El6WQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - is-string "^1.0.5" - -array-union@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-1.0.2.tgz#9a34410e4f4e3da23dea375be5be70f24778ec39" - integrity sha1-mjRBDk9OPaI96jdb5b5w8kd47Dk= - dependencies: - array-uniq "^1.0.1" - -array-uniq@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/array-uniq/-/array-uniq-1.0.3.tgz#af6ac877a25cc7f74e058894753858dfdb24fdb6" - integrity sha1-r2rId6Jcx/dOBYiUdThY39sk/bY= - -array-unique@^0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/array-unique/-/array-unique-0.3.2.tgz#a894b75d4bc4f6cd679ef3244a9fd8f46ae2d428" - integrity sha1-qJS3XUvE9s1nnvMkSp/Y9Gri1Cg= - -array.prototype.flat@^1.2.1: - version "1.2.3" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.2.3.tgz#0de82b426b0318dbfdb940089e38b043d37f6c7b" - integrity sha512-gBlRZV0VSmfPIeWfuuy56XZMvbVfbEUnOXUvt3F/eUUUSyzlgLxhEX4YAEpxNAogRGehPSnfXyPtYyKAhkzQhQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -arraybuffer.slice@~0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/arraybuffer.slice/-/arraybuffer.slice-0.0.7.tgz#3bbc4275dd584cc1b10809b89d4e8b63a69e7675" - integrity sha512-wGUIVQXuehL5TCqQun8OW81jGzAWycqzFF8lFp+GOM5BXLYj3bKNsYC4daB7n6XjCqxQA/qgTJ+8ANR3acjrog== - -arrify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" - integrity sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0= - -asn1.js@^4.0.0: - version "4.10.1" - resolved "https://registry.yarnpkg.com/asn1.js/-/asn1.js-4.10.1.tgz#b9c2bf5805f1e64aadeed6df3a2bfafb5a73f5a0" - integrity sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw== - dependencies: - bn.js "^4.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -assert@^1.4.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/assert/-/assert-1.5.0.tgz#55c109aaf6e0aefdb3dc4b71240c70bf574b18eb" - integrity sha512-EDsgawzwoun2CZkCgtxJbv392v4nbk9XDD06zI+kQYoBM/3RBWLlEyJARDOmhAAosBjWACEkKL6S+lIZtcAubA== - dependencies: - object-assign "^4.1.1" - util "0.10.3" - -assign-symbols@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assign-symbols/-/assign-symbols-1.0.0.tgz#59667f41fadd4f20ccbc2bb96b8d4f7f78ec0367" - integrity sha1-WWZ/QfrdTyDMvCu5a41Pf3jsA2c= - -astral-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" - integrity sha512-+Ryf6g3BKoRc7jfp7ad8tM4TtMiaWvbF/1/sQcZPkkS7ag3D5nMBCe2UfOTONtAkaG0tO0ij3C5Lwmf1EiyjHg== - -async-cache@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/async-cache/-/async-cache-1.1.0.tgz#4a9a5a89d065ec5d8e5254bd9ee96ba76c532b5a" - integrity sha1-SppaidBl7F2OUlS9nulrp2xTK1o= - dependencies: - lru-cache "^4.0.0" - -async-each@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" - integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== - -async-limiter@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" - integrity sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ== - -async@0.9.x: - version "0.9.2" - resolved "https://registry.npmjs.org/async/-/async-0.9.2.tgz#aea74d5e61c1f899613bf64bda66d4c78f2fd17d" - integrity sha1-rqdNXmHB+JlhO/ZL2mbUx48v0X0= - -async@~0.2.9: - version "0.2.10" - resolved "https://registry.yarnpkg.com/async/-/async-0.2.10.tgz#b6bbe0b0674b9d719708ca38de8c237cb526c3d1" - integrity sha1-trvgsGdLnXGXCMo43owjfLUmw9E= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -atob-lite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/atob-lite/-/atob-lite-2.0.0.tgz#0fef5ad46f1bd7a8502c65727f0367d5ee43d696" - integrity sha1-D+9a1G8b16hQLGVyfwNn1e5D1pY= - -atob@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" - integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== - -autoprefixer@^9.0.0: - version "9.7.5" - resolved "https://registry.yarnpkg.com/autoprefixer/-/autoprefixer-9.7.5.tgz#8df10b9ff9b5814a8d411a5cfbab9c793c392376" - integrity sha512-URo6Zvt7VYifomeAfJlMFnYDhow1rk2bufwkbamPEAtQFcL11moLk4PnR7n9vlu7M+BkXAZkHFA0mIcY7tjQFg== - dependencies: - browserslist "^4.11.0" - caniuse-lite "^1.0.30001036" - chalk "^2.4.2" - normalize-range "^0.1.2" - num2fraction "^1.2.2" - postcss "^7.0.27" - postcss-value-parser "^4.0.3" - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - -babel-eslint@^10.0.1: - version "10.1.0" - resolved "https://registry.yarnpkg.com/babel-eslint/-/babel-eslint-10.1.0.tgz#6968e568a910b78fb3779cdd8b6ac2f479943232" - integrity sha512-ifWaTHQ0ce+448CYop8AdrQiBsGrnC+bMgfyKFdi6EsPLTAWG+QfyDeM6OH+FmWnKvEq5NnBMLvlBUPKQZoDSg== - dependencies: - "@babel/code-frame" "^7.0.0" - "@babel/parser" "^7.7.0" - "@babel/traverse" "^7.7.0" - "@babel/types" "^7.7.0" - eslint-visitor-keys "^1.0.0" - resolve "^1.12.0" - -babel-plugin-dynamic-import-node@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/babel-plugin-dynamic-import-node/-/babel-plugin-dynamic-import-node-2.3.0.tgz#f00f507bdaa3c3e3ff6e7e5e98d90a7acab96f7f" - integrity sha512-o6qFkpeQEBxcqt0XYlWzAVxNCSCZdUgcR8IRlhD/8DylxjjO4foPcvTW0GGKa/cVt3rvxZ7o5ippJ+/0nvLhlQ== - dependencies: - object.assign "^4.1.0" - -babelify@^10.0.0: - version "10.0.0" - resolved "https://registry.yarnpkg.com/babelify/-/babelify-10.0.0.tgz#fe73b1a22583f06680d8d072e25a1e0d1d1d7fb5" - integrity sha512-X40FaxyH7t3X+JFAKvb1H9wooWKLRCi8pg3m8poqtdZaIng+bjzp9RvKQCvRjF9isHiPkXspbbXT/zwXLtwgwg== - -babylon@^7.0.0-beta.41: - version "7.0.0-beta.47" - resolved "https://registry.yarnpkg.com/babylon/-/babylon-7.0.0-beta.47.tgz#6d1fa44f0abec41ab7c780481e62fd9aafbdea80" - integrity sha512-+rq2cr4GDhtToEzKFD6KZZMDBXhjFAr9JjPw9pAppZACeEWqNM294j+NdBzkSHYXwzzBmVjZ3nEVJlOhbR2gOQ== - -backbone@^1.1.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/backbone/-/backbone-1.4.0.tgz#54db4de9df7c3811c3f032f34749a4cd27f3bd12" - integrity sha512-RLmDrRXkVdouTg38jcgHhyQ/2zjg7a8E6sz2zxfz21Hh17xDJYUHBZimVIt5fUyS8vbfpeSmTL3gUjTEvUV3qQ== - dependencies: - underscore ">=1.8.3" - -backo2@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/backo2/-/backo2-1.0.2.tgz#31ab1ac8b129363463e35b3ebb69f4dfcfba7947" - integrity sha1-MasayLEpNjRj41s+u2n038+6eUc= - -bail@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/bail/-/bail-1.0.5.tgz#b6fa133404a392cbc1f8c4bf63f5953351e7a776" - integrity sha512-xFbRxM1tahm08yHBP16MMjVUAvDaBMD38zsM9EMAUN61omwLmKlOpB/Zku5QkjZ8TZ4vn53pj+t518cH0S03RQ== - -balanced-match@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" - integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c= - -base64-arraybuffer@0.1.5: - version "0.1.5" - resolved "https://registry.yarnpkg.com/base64-arraybuffer/-/base64-arraybuffer-0.1.5.tgz#73926771923b5a19747ad666aa5cd4bf9c6e9ce8" - integrity sha1-c5JncZI7Whl0etZmqlzUv5xunOg= - -base64-js@^1.0.2: - version "1.3.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.3.1.tgz#58ece8cb75dd07e71ed08c736abc5fac4dbf8df1" - integrity sha512-mLQ4i2QO1ytvGWFWmcngKO//JXAQueZvwEKtjgQFM4jIK0kU+ytMfplL8j+n5mspOfjHwoAg+9yhb7BwAHm36g== - -base64id@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/base64id/-/base64id-2.0.0.tgz#2770ac6bc47d312af97a8bf9a634342e0cd25cb6" - integrity sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog== - -base@^0.11.1: - version "0.11.2" - resolved "https://registry.yarnpkg.com/base/-/base-0.11.2.tgz#7bde5ced145b6d551a90db87f83c558b4eb48a8f" - integrity sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg== - dependencies: - cache-base "^1.0.1" - class-utils "^0.3.5" - component-emitter "^1.2.1" - define-property "^1.0.0" - isobject "^3.0.1" - mixin-deep "^1.2.0" - pascalcase "^0.1.1" - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -before-after-hook@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" - integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== - -benchmark@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/benchmark/-/benchmark-2.1.4.tgz#09f3de31c916425d498cc2ee565a0ebf3c2a5629" - integrity sha1-CfPeMckWQl1JjMLuVloOvzwqVik= - dependencies: - lodash "^4.17.4" - platform "^1.3.3" - -better-assert@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/better-assert/-/better-assert-1.0.2.tgz#40866b9e1b9e0b55b481894311e68faffaebc522" - integrity sha1-QIZrnhueC1W0gYlDEeaPr/rrxSI= - dependencies: - callsite "1.0.0" - -binary-extensions@^1.0.0: - version "1.13.1" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-1.13.1.tgz#598afe54755b2868a5330d2aff9d4ebb53209b65" - integrity sha512-Un7MIEDdUC5gNpcGDV97op1Ywk748MpHcFTHoYs6qnj1Z3j7I53VG3nwZhKzoBZmbdRNnb6WRdFlwl7tSDuZGw== - -binary-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/binary-extensions/-/binary-extensions-2.0.0.tgz#23c0df14f6a88077f5f986c0d167ec03c3d5537c" - integrity sha512-Phlt0plgpIIBOGTT/ehfFnbNlfsDEiqmzE2KRXoX1bLIlir4X/MR+zSyBEkL05ffWgnRSf/DXv+WrUAVr93/ow== - -bind-obj-methods@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/bind-obj-methods/-/bind-obj-methods-2.0.0.tgz#0178140dbe7b7bb67dc74892ace59bc0247f06f0" - integrity sha512-3/qRXczDi2Cdbz6jE+W3IflJOutRVica8frpBn14de1mBOkzDo+6tY33kNhvkw54Kn3PzRRD2VnGbGPcTAk4sw== - -bindings@^1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/bindings/-/bindings-1.5.0.tgz#10353c9e945334bc0511a6d90b38fbc7c9c504df" - integrity sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ== - dependencies: - file-uri-to-path "1.0.0" - -bit-twiddle@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bit-twiddle/-/bit-twiddle-1.0.2.tgz#0c6c1fabe2b23d17173d9a61b7b7093eb9e1769e" - integrity sha1-DGwfq+KyPRcXPZpht7cJPrnhdp4= - -bl@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-4.0.2.tgz#52b71e9088515d0606d9dd9cc7aa48dc1f98e73a" - integrity sha512-j4OH8f6Qg2bGuWfRiltT2HYGx0e1QcBTrK9KAHNMwMZdQnDZFk0ZSYIpADjYCB3U12nicC5tVJwSIhwOWjb4RQ== - dependencies: - buffer "^5.5.0" - inherits "^2.0.4" - readable-stream "^3.4.0" - -bl@~1.2.1: - version "1.2.2" - resolved "https://registry.yarnpkg.com/bl/-/bl-1.2.2.tgz#a160911717103c07410cef63ef51b397c025af9c" - integrity sha512-e8tQYnZodmebYDWGH7KMRvtzKXaJHx3BbilrgZCfvyLUYdKpK1t5PSPmpkny/SgiTSCnjfLW7v5rlONXVFkQEA== - dependencies: - readable-stream "^2.3.5" - safe-buffer "^5.1.1" - -blob@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" - integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== - -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - -bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.0: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -bn.js@^4.0.0, bn.js@^4.1.0, bn.js@^4.1.1, bn.js@^4.4.0: - version "4.11.8" - resolved "https://registry.yarnpkg.com/bn.js/-/bn.js-4.11.8.tgz#2cde09eb5ee341f484746bb0309b3253b1b1442f" - integrity sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA== - -body-parser@1.19.0: - version "1.19.0" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.19.0.tgz#96b2709e57c9c4e09a6fd66a8fd979844f69f08a" - integrity sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw== - dependencies: - bytes "3.1.0" - content-type "~1.0.4" - debug "2.6.9" - depd "~1.1.2" - http-errors "1.7.2" - iconv-lite "0.4.24" - on-finished "~2.3.0" - qs "6.7.0" - raw-body "2.4.0" - type-is "~1.6.17" - -body@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/body/-/body-5.1.0.tgz#e4ba0ce410a46936323367609ecb4e6553125069" - integrity sha1-5LoM5BCkaTYyM2dgnstOZVMSUGk= - dependencies: - continuable-cache "^0.3.1" - error "^7.0.0" - raw-body "~1.1.0" - safe-json-parse "~1.0.1" - -boolbase@^1.0.0, boolbase@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e" - integrity sha1-aN/1++YMUes3cl6p4+0xDcwed24= - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^2.3.1, braces@^2.3.2: - version "2.3.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-2.3.2.tgz#5979fd3f14cd531565e5fa2df1abfff1dfaee729" - integrity sha512-aNdbnj9P8PjdXU4ybaWLK2IF3jc/EoDYbC7AazW6to3TRsfXxscC9UXOB5iDiEQrkyIbWp2SLQda4+QAa7nc3w== - dependencies: - arr-flatten "^1.1.0" - array-unique "^0.3.2" - extend-shallow "^2.0.1" - fill-range "^4.0.0" - isobject "^3.0.1" - repeat-element "^1.1.2" - snapdragon "^0.8.1" - snapdragon-node "^2.0.1" - split-string "^3.0.2" - to-regex "^3.0.1" - -braces@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -brorand@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" - integrity sha1-EsJe/kCkXjwyPrhnWgoM5XsiNx8= - -browser-pack@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/browser-pack/-/browser-pack-6.1.0.tgz#c34ba10d0b9ce162b5af227c7131c92c2ecd5774" - integrity sha512-erYug8XoqzU3IfcU8fUgyHqyOXqIE4tUTTQ+7mqUjQlvnXkOO6OlT9c/ZoJVHYoAaqGxr09CN53G7XIsO4KtWA== - dependencies: - JSONStream "^1.0.3" - combine-source-map "~0.8.0" - defined "^1.0.0" - safe-buffer "^5.1.1" - through2 "^2.0.0" - umd "^3.0.0" - -browser-process-hrtime@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/browser-process-hrtime/-/browser-process-hrtime-1.0.0.tgz#3c9b4b7d782c8121e56f10106d84c0d0ffc94626" - integrity sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow== - -browser-resolve@^1.11.0, browser-resolve@^1.7.0: - version "1.11.3" - resolved "https://registry.yarnpkg.com/browser-resolve/-/browser-resolve-1.11.3.tgz#9b7cbb3d0f510e4cb86bdbd796124d28b5890af6" - integrity sha512-exDi1BYWB/6raKHmDTCicQfTkqwN5fioMFV4j8BsfMU4R2DK/QfZfK7kOVkmWCNANf0snkBzqGqAJBao9gZMdQ== - dependencies: - resolve "1.1.7" - -browserify-aes@^1.0.0, browserify-aes@^1.0.4: - version "1.2.0" - resolved "https://registry.yarnpkg.com/browserify-aes/-/browserify-aes-1.2.0.tgz#326734642f403dabc3003209853bb70ad428ef48" - integrity sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA== - dependencies: - buffer-xor "^1.0.3" - cipher-base "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.3" - inherits "^2.0.1" - safe-buffer "^5.0.1" - -browserify-cipher@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/browserify-cipher/-/browserify-cipher-1.0.1.tgz#8d6474c1b870bfdabcd3bcfcc1934a10e94f15f0" - integrity sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w== - dependencies: - browserify-aes "^1.0.4" - browserify-des "^1.0.0" - evp_bytestokey "^1.0.0" - -browserify-des@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/browserify-des/-/browserify-des-1.0.2.tgz#3af4f1f59839403572f1c66204375f7a7f703e9c" - integrity sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A== - dependencies: - cipher-base "^1.0.1" - des.js "^1.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -browserify-rsa@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/browserify-rsa/-/browserify-rsa-4.0.1.tgz#21e0abfaf6f2029cf2fafb133567a701d4135524" - integrity sha1-IeCr+vbyApzy+vsTNWenAdQTVSQ= - dependencies: - bn.js "^4.1.0" - randombytes "^2.0.1" - -browserify-sign@^4.0.0: - version "4.0.4" - resolved "https://registry.yarnpkg.com/browserify-sign/-/browserify-sign-4.0.4.tgz#aa4eb68e5d7b658baa6bf6a57e630cbd7a93d298" - integrity sha1-qk62jl17ZYuqa/alfmMMvXqT0pg= - dependencies: - bn.js "^4.1.1" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.2" - elliptic "^6.0.0" - inherits "^2.0.1" - parse-asn1 "^5.0.0" - -browserify-zlib@~0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.2.0.tgz#2869459d9aa3be245fe8fe2ca1f46e2e7f54d73f" - integrity sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA== - dependencies: - pako "~1.0.5" - -browserify@^16.5.0: - version "16.5.0" - resolved "https://registry.yarnpkg.com/browserify/-/browserify-16.5.0.tgz#a1c2bc0431bec11fd29151941582e3f645ede881" - integrity sha512-6bfI3cl76YLAnCZ75AGu/XPOsqUhRyc0F/olGIJeCxtfxF2HvPKEcmjU9M8oAPxl4uBY1U7Nry33Q6koV3f2iw== - dependencies: - JSONStream "^1.0.3" - assert "^1.4.0" - browser-pack "^6.0.1" - browser-resolve "^1.11.0" - browserify-zlib "~0.2.0" - buffer "^5.0.2" - cached-path-relative "^1.0.0" - concat-stream "^1.6.0" - console-browserify "^1.1.0" - constants-browserify "~1.0.0" - crypto-browserify "^3.0.0" - defined "^1.0.0" - deps-sort "^2.0.0" - domain-browser "^1.2.0" - duplexer2 "~0.1.2" - events "^2.0.0" - glob "^7.1.0" - has "^1.0.0" - htmlescape "^1.1.0" - https-browserify "^1.0.0" - inherits "~2.0.1" - insert-module-globals "^7.0.0" - labeled-stream-splicer "^2.0.0" - mkdirp "^0.5.0" - module-deps "^6.0.0" - os-browserify "~0.3.0" - parents "^1.0.1" - path-browserify "~0.0.0" - process "~0.11.0" - punycode "^1.3.2" - querystring-es3 "~0.2.0" - read-only-stream "^2.0.0" - readable-stream "^2.0.2" - resolve "^1.1.4" - shasum "^1.0.0" - shell-quote "^1.6.1" - stream-browserify "^2.0.0" - stream-http "^3.0.0" - string_decoder "^1.1.1" - subarg "^1.0.0" - syntax-error "^1.1.1" - through2 "^2.0.0" - timers-browserify "^1.0.1" - tty-browserify "0.0.1" - url "~0.11.0" - util "~0.10.1" - vm-browserify "^1.0.0" - xtend "^4.0.0" - -browserslist@^4.0.0, browserslist@^4.11.0, browserslist@^4.8.3, browserslist@^4.9.1: - version "4.11.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.11.0.tgz#aef4357b10a8abda00f97aac7cd587b2082ba1ad" - integrity sha512-WqEC7Yr5wUH5sg6ruR++v2SGOQYpyUdYYd4tZoAq1F7y+QXoLoYGXVbxhtaIqWmAJjtNTRjVD3HuJc1OXTel2A== - dependencies: - caniuse-lite "^1.0.30001035" - electron-to-chromium "^1.3.380" - node-releases "^1.1.52" - pkg-up "^3.1.0" - -btoa-lite@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/btoa-lite/-/btoa-lite-1.0.0.tgz#337766da15801210fdd956c22e9c6891ab9d0337" - integrity sha1-M3dm2hWAEhD92VbCLpxokaudAzc= - -btoa@^1.2.1: - version "1.2.1" - resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73" - integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g== - -buble@^0.19.8: - version "0.19.8" - resolved "https://registry.yarnpkg.com/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d" - integrity sha512-IoGZzrUTY5fKXVkgGHw3QeXFMUNBFv+9l8a4QJKG1JhG3nCMHTdEX1DCOg8568E2Q9qvAQIiSokv6Jsgx8p2cA== - dependencies: - acorn "^6.1.1" - acorn-dynamic-import "^4.0.0" - acorn-jsx "^5.0.1" - chalk "^2.4.2" - magic-string "^0.25.3" - minimist "^1.2.0" - os-homedir "^2.0.0" - regexpu-core "^4.5.4" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI= - -buffer-equal-constant-time@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" - integrity sha1-+OcRMvf/5uAaXJaXpMbz5I1cyBk= - -buffer-equal@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-equal/-/buffer-equal-1.0.0.tgz#59616b498304d556abd466966b22eeda3eca5fbe" - integrity sha1-WWFrSYME1Var1GaWayLu2j7KX74= - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -buffer-shims@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/buffer-shims/-/buffer-shims-1.0.0.tgz#9978ce317388c649ad8793028c3477ef044a8b51" - integrity sha1-mXjOMXOIxkmth5MCjDR37wRKi1E= - -buffer-xor@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/buffer-xor/-/buffer-xor-1.0.3.tgz#26e61ed1422fb70dd42e6e36729ed51d855fe8d9" - integrity sha1-JuYe0UIvtw3ULm42cp7VHYVf6Nk= - -buffer@^5.0.2, buffer@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.5.0.tgz#9c3caa3d623c33dd1c7ef584b89b88bf9c9bc1ce" - integrity sha512-9FTEDjLjwoAkEwyMGDjYJQN2gfRgOKBKRfiglhvibGbpeeU/pQn1bJxQqm32OD/AIeEuHxU9roxXxg34Byp/Ww== - dependencies: - base64-js "^1.0.2" - ieee754 "^1.1.4" - -builtin-modules@^3.0.0, builtin-modules@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/builtin-modules/-/builtin-modules-3.1.0.tgz#aad97c15131eb76b65b50ef208e7584cd76a7484" - integrity sha512-k0KL0aWZuBt2lrxrcASWDfwOLMnodeQjodT/1SxEQAXsHANgo6ZC/VEaSEHCXt7aSTZ4/4H5LKa+tBXmW7Vtvw== - -builtin-status-codes@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/builtin-status-codes/-/builtin-status-codes-3.0.0.tgz#85982878e21b98e1c66425e03d0174788f569ee8" - integrity sha1-hZgoeOIbmOHGZCXgPQF0eI9Wnug= - -bytes@1: - version "1.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-1.0.0.tgz#3569ede8ba34315fab99c3e92cb04c7220de1fa8" - integrity sha1-NWnt6Lo0MV+rmcPpLLBMciDeH6g= - -bytes@3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.0.0.tgz#d32815404d689699f85a4ea4fa8755dd13a96048" - integrity sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg= - -bytes@3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.0.tgz#f6cf7933a360e0588fa9fde85651cdc7f805d1f6" - integrity sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg== - -cache-base@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/cache-base/-/cache-base-1.0.1.tgz#0a7f46416831c8b662ee36fe4e7c59d76f666ab2" - integrity sha512-AKcdTnFSWATd5/GCPRxr2ChwIJ85CeyrEyjRHlKxQ56d4XJMGym0uAiKn0xbLOGOl3+yRpOTi484dVCEc5AUzQ== - dependencies: - collection-visit "^1.0.0" - component-emitter "^1.2.1" - get-value "^2.0.6" - has-value "^1.0.0" - isobject "^3.0.1" - set-value "^2.0.0" - to-object-path "^0.3.0" - union-value "^1.0.0" - unset-value "^1.0.0" - -cached-path-relative@^1.0.0, cached-path-relative@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/cached-path-relative/-/cached-path-relative-1.0.2.tgz#a13df4196d26776220cc3356eb147a52dba2c6db" - integrity sha512-5r2GqsoEb4qMTTN9J+WzXfjov+hjxT+j3u5K+kIVNIwAd99DLCJE9pBIMP1qVeybV6JiijL385Oz0DcYxfbOIg== - -caching-transform@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/caching-transform/-/caching-transform-3.0.2.tgz#601d46b91eca87687a281e71cef99791b0efca70" - integrity sha512-Mtgcv3lh3U0zRii/6qVgQODdPA4G3zhG+jtbCWj39RXuUFTMzH0vcdMtaJS1jPowd+It2Pqr6y3NJMQqOqCE2w== - dependencies: - hasha "^3.0.0" - make-dir "^2.0.0" - package-hash "^3.0.0" - write-file-atomic "^2.4.2" - -call-matcher@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/call-matcher/-/call-matcher-2.0.0.tgz#a38bee4e9ddbeec76aa31cc20311085a34dd395b" - integrity sha512-CIDC5wZZfZ2VjZu849WQckS58Z3pJXFfRaSjNjgo/q3in5zxkhTwVL83vttgtmvyLG7TuDlLlBya7SKP6CjDIA== - dependencies: - deep-equal "^1.0.0" - espurify "^2.0.0" - estraverse "^4.0.0" - -call-me-maybe@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/call-me-maybe/-/call-me-maybe-1.0.1.tgz#26d208ea89e37b5cbde60250a15f031c16a4d66b" - integrity sha1-JtII6onje1y95gJQoV8DHBak1ms= - -caller-callsite@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-callsite/-/caller-callsite-2.0.0.tgz#847e0fce0a223750a9a027c54b33731ad3154134" - integrity sha1-hH4PzgoiN1CpoCfFSzNzGtMVQTQ= - dependencies: - callsites "^2.0.0" - -caller-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/caller-path/-/caller-path-2.0.0.tgz#468f83044e369ab2010fac5f06ceee15bb2cb1f4" - integrity sha1-Ro+DBE42mrIBD6xfBs7uFbsssfQ= - dependencies: - caller-callsite "^2.0.0" - -callsite@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/callsite/-/callsite-1.0.0.tgz#280398e5d664bd74038b6f0905153e6e8af1bc20" - integrity sha1-KAOY5dZkvXQDi28JBRU+borxvCA= - -callsites@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-2.0.0.tgz#06eb84f00eea413da86affefacbffb36093b3c50" - integrity sha1-BuuE8A7qQT2oav/vrL/7Ngk7PFA= - -callsites@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" - integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase-keys@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-4.2.0.tgz#a2aa5fb1af688758259c32c141426d78923b9b77" - integrity sha1-oqpfsa9oh1glnDLBQUJteJI7m3c= - dependencies: - camelcase "^4.1.0" - map-obj "^2.0.0" - quick-lru "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -camelcase@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-4.1.0.tgz#d545635be1e33c542649c69173e5de6acfae34dd" - integrity sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0= - -camelcase@^5.0.0: - version "5.3.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" - integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== - -caniuse-api@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/caniuse-api/-/caniuse-api-3.0.0.tgz#5e4d90e2274961d46291997df599e3ed008ee4c0" - integrity sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw== - dependencies: - browserslist "^4.0.0" - caniuse-lite "^1.0.0" - lodash.memoize "^4.1.2" - lodash.uniq "^4.5.0" - -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001036: - version "1.0.30001243" - resolved "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001243.tgz" - integrity sha512-vNxw9mkTBtkmLFnJRv/2rhs1yufpDfCkBZexG3Y0xdOH2Z/eE/85E4Dl5j1YUN34nZVsSp6vVRFQRrez9wJMRA== - -canvas@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/canvas/-/canvas-2.6.1.tgz#0d087dd4d60f5a5a9efa202757270abea8bef89e" - integrity sha512-S98rKsPcuhfTcYbtF53UIJhcbgIAK533d1kJKMwsMwAIFgfd58MOyxRud3kktlzWiEkFliaJtvyZCBtud/XVEA== - dependencies: - nan "^2.14.0" - node-pre-gyp "^0.11.0" - simple-get "^3.0.3" - -capture-stack-trace@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/capture-stack-trace/-/capture-stack-trace-1.0.1.tgz#a6c0bbe1f38f3aa0b92238ecb6ff42c344d4135d" - integrity sha512-mYQLZnx5Qt1JgB1WEiMCf2647plpGeQ2NMR/5L0HNZzGQo4fuSPnK+wjfPnKZV0aiJDgzmWqqkV/g7JD+DW0qw== - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -ccount@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/ccount/-/ccount-1.0.5.tgz#ac82a944905a65ce204eb03023157edf29425c17" - integrity sha512-MOli1W+nfbPLlKEhInaxhRdp7KVLFxLN5ykwzHgLsLI3H3gs5jjFAK4Eoj3OzzcxCtumDaI8onoVDeQyWaNTkw== - -chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.0, chalk@^2.4.1, chalk@^2.4.2: - version "2.4.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" - integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== - dependencies: - ansi-styles "^3.2.1" - escape-string-regexp "^1.0.5" - supports-color "^5.3.0" - -chalk@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" - integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@^4.1.0: - version "4.1.0" - resolved "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz#4e14870a618d9e2edd97dd8345fd9d9dc315646a" - integrity sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -chalk@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-0.4.0.tgz#5199a3ddcd0c1efe23bc08c1b027b06176e0c64f" - integrity sha1-UZmj3c0MHv4jvAjBsCewYXbgxk8= - dependencies: - ansi-styles "~1.0.0" - has-color "~0.1.0" - strip-ansi "~0.1.0" - -character-entities-html4@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-html4/-/character-entities-html4-1.1.4.tgz#0e64b0a3753ddbf1fdc044c5fd01d0199a02e125" - integrity sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g== - -character-entities-legacy@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-entities-legacy/-/character-entities-legacy-1.1.4.tgz#94bc1845dce70a5bb9d2ecc748725661293d8fc1" - integrity sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA== - -character-entities@^1.0.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/character-entities/-/character-entities-1.2.4.tgz#e12c3939b7eaf4e5b15e7ad4c5e28e1d48c5b16b" - integrity sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw== - -character-reference-invalid@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/character-reference-invalid/-/character-reference-invalid-1.1.4.tgz#083329cda0eae272ab3dbbf37e9a382c13af1560" - integrity sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg== - -chardet@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" - integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== - -charm@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/charm/-/charm-1.0.2.tgz#8add367153a6d9a581331052c4090991da995e35" - integrity sha1-it02cVOm2aWBMxBSxAkJkdqZXjU= - dependencies: - inherits "^2.0.1" - -chokidar@^2.0.0, chokidar@^2.0.4: - version "2.1.8" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" - integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== - dependencies: - anymatch "^2.0.0" - async-each "^1.0.1" - braces "^2.3.2" - glob-parent "^3.1.0" - inherits "^2.0.3" - is-binary-path "^1.0.0" - is-glob "^4.0.0" - normalize-path "^3.0.0" - path-is-absolute "^1.0.0" - readdirp "^2.2.1" - upath "^1.1.1" - optionalDependencies: - fsevents "^1.2.7" - -chokidar@^3.0.2: - version "3.3.1" - resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.3.1.tgz#c84e5b3d18d9a4d77558fef466b1bf16bbeb3450" - integrity sha512-4QYCEWOcK3OJrxwvyyAOxFuhpvOVCYkr33LPfFNBjAD/w3sEzWsp2BUOkI4l9bHvWioAd0rc6NlHUOEaWkTeqg== - dependencies: - anymatch "~3.1.1" - braces "~3.0.2" - glob-parent "~5.1.0" - is-binary-path "~2.1.0" - is-glob "~4.0.1" - normalize-path "~3.0.0" - readdirp "~3.3.0" - optionalDependencies: - fsevents "~2.1.2" - -chownr@^1.1.1: - version "1.1.4" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b" - integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg== - -cipher-base@^1.0.0, cipher-base@^1.0.1, cipher-base@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/cipher-base/-/cipher-base-1.0.4.tgz#8760e4ecc272f4c363532f926d874aae2c1397de" - integrity sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -class-utils@^0.3.5: - version "0.3.6" - resolved "https://registry.yarnpkg.com/class-utils/-/class-utils-0.3.6.tgz#f93369ae8b9a7ce02fd41faad0ca83033190c463" - integrity sha512-qOhPa/Fj7s6TY8H8esGu5QNpMMQxz79h+urzrNYN6mn+9BnxlDGf5QZ+XeCDsxSjPqsSR56XOZOJmpeurnLMeg== - dependencies: - arr-union "^3.1.0" - define-property "^0.2.5" - isobject "^3.0.0" - static-extend "^0.1.1" - -clean-yaml-object@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/clean-yaml-object/-/clean-yaml-object-0.1.0.tgz#63fb110dc2ce1a84dc21f6d9334876d010ae8b68" - integrity sha1-Y/sRDcLOGoTcIfbZM0h20BCui2g= - -cli-cursor@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-2.1.0.tgz#b35dac376479facc3e94747d41d0d0f5238ffcb5" - integrity sha1-s12sN2R5+sw+lHR9QdDQ9SOP/LU= - dependencies: - restore-cursor "^2.0.0" - -cli-width@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-2.2.0.tgz#ff19ede8a9a5e579324147b0c11f0fbcbabed639" - integrity sha1-/xnt6Kml5XkyQUewwR8PvLq+1jk= - -cliui@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/cliui/-/cliui-4.1.0.tgz#348422dbe82d800b3022eef4f6ac10bf2e4d1b49" - integrity sha512-4FG+RSG9DL7uEwRUZXZn3SS34DiDPfzP0VOiEwtUWlE+AR2EIg+hSyvrIgUUfhdgR/UkAeW2QHgeP+hWrXs7jQ== - dependencies: - string-width "^2.1.1" - strip-ansi "^4.0.0" - wrap-ansi "^2.0.0" - -cliui@^7.0.2: - version "7.0.4" - resolved "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz#a0265ee655476fc807aea9df3df8df7783808b4f" - integrity sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ== - dependencies: - string-width "^4.2.0" - strip-ansi "^6.0.0" - wrap-ansi "^7.0.0" - -clone-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-buffer/-/clone-buffer-1.0.0.tgz#e3e25b207ac4e701af721e2cb5a16792cac3dc58" - integrity sha1-4+JbIHrE5wGvch4staFnksrD3Fg= - -clone-regexp@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/clone-regexp/-/clone-regexp-1.0.1.tgz#051805cd33173375d82118fc0918606da39fd60f" - integrity sha512-Fcij9IwRW27XedRIJnSOEupS7RVcXtObJXbcUOX93UCLqqOdRpkvzKywOOSizmEK/Is3S/RHX9dLdfo6R1Q1mw== - dependencies: - is-regexp "^1.0.0" - is-supported-regexp-flag "^1.0.0" - -clone-stats@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/clone-stats/-/clone-stats-1.0.0.tgz#b3782dff8bb5474e18b9b6bf0fdfe782f8777680" - integrity sha1-s3gt/4u1R04Yuba/D9/ngvh3doA= - -clone@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/clone/-/clone-2.1.2.tgz#1b7f4b9f591f1e8f83670401600345a02887435f" - integrity sha1-G39Ln1kfHo+DZwQBYANFoCiHQ18= - -cloneable-readable@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/cloneable-readable/-/cloneable-readable-1.1.3.tgz#120a00cb053bfb63a222e709f9683ea2e11d8cec" - integrity sha512-2EF8zTQOxYq70Y4XKtorQupqF0m49MBz2/yf5Bj+MHjvpG3Hy7sImifnqD6UA+TKYxeSV+u6qqQPawN5UvnpKQ== - dependencies: - inherits "^2.0.1" - process-nextick-args "^2.0.0" - readable-stream "^2.3.5" - -coa@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/coa/-/coa-2.0.2.tgz#43f6c21151b4ef2bf57187db0d73de229e3e7ec3" - integrity sha512-q5/jG+YQnSy4nRTV4F7lPepBJZ8qBNJJDBuJdoejDyLXgmL7IEo+Le2JDZudFTFt7mrCqIRaSjws4ygRCTCAXA== - dependencies: - "@types/q" "^1.5.1" - chalk "^2.4.1" - q "^1.1.2" - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -collapse-white-space@^1.0.0, collapse-white-space@^1.0.2: - version "1.0.6" - resolved "https://registry.yarnpkg.com/collapse-white-space/-/collapse-white-space-1.0.6.tgz#e63629c0016665792060dbbeb79c42239d2c5287" - integrity sha512-jEovNnrhMuqyCcjfEJA56v0Xq8SkIoPKDyaHahwo3POf4qcSXqMYuwNcOTzp74vTsR9Tn08z4MxWqAhcekogkQ== - -collection-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/collection-visit/-/collection-visit-1.0.0.tgz#4bc0373c164bc3291b4d368c829cf1a80a59dca0" - integrity sha1-S8A3PBZLwykbTTaMgpzxqApZ3KA= - dependencies: - map-visit "^1.0.0" - object-visit "^1.0.0" - -color-convert@^1.9.0, color-convert@^1.9.1: - version "1.9.3" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8" - integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg== - dependencies: - color-name "1.1.3" - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25" - integrity sha1-p9BVi9icQveV3UIyj3QIMcpTvCU= - -color-name@^1.0.0, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -color-string@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/color-string/-/color-string-1.5.3.tgz#c9bbc5f01b58b5492f3d6857459cb6590ce204cc" - integrity sha512-dC2C5qeWoYkxki5UAXapdjqO672AM4vZuPGRQfO8b5HKuKGBbKWpITyDYN7TOFKvRW7kOgAn3746clDBMDJyQw== - dependencies: - color-name "^1.0.0" - simple-swizzle "^0.2.2" - -color-support@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/color-support/-/color-support-1.1.3.tgz#93834379a1cc9a0c61f82f52f0d04322251bd5a2" - integrity sha512-qiBjkpbMLO/HL68y+lh4q0/O1MZFj2RX6X/KmMa3+gJD3z+WwI1ZzDHysvqHGS3mP6mznPckpXmw1nI9cJjyRg== - -color@^3.0.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/color/-/color-3.1.2.tgz#68148e7f85d41ad7649c5fa8c8106f098d229e10" - integrity sha512-vXTJhHebByxZn3lDvDJYw4lR5+uB3vuoHsuYA5AKuxRVn5wzzIfQKGLBmgdVRHKTJYeK5rvJcHnrd0Li49CFpg== - dependencies: - color-convert "^1.9.1" - color-string "^1.5.2" - -colors@~0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/colors/-/colors-0.6.2.tgz#2423fe6678ac0c5dae8852e5d0e5be08c997abcc" - integrity sha1-JCP+ZnisDF2uiFLl0OW+CMmXq8w= - -combine-source-map@^0.8.0, combine-source-map@~0.8.0: - version "0.8.0" - resolved "https://registry.yarnpkg.com/combine-source-map/-/combine-source-map-0.8.0.tgz#a58d0df042c186fcf822a8e8015f5450d2d79a8b" - integrity sha1-pY0N8ELBhvz4IqjoAV9UUNLXmos= - dependencies: - convert-source-map "~1.1.0" - inline-source-map "~0.6.0" - lodash.memoize "~3.0.3" - source-map "~0.5.3" - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -comma-separated-tokens@^1.0.1: - version "1.0.8" - resolved "https://registry.yarnpkg.com/comma-separated-tokens/-/comma-separated-tokens-1.0.8.tgz#632b80b6117867a158f1080ad498b2fbe7e3f5ea" - integrity sha512-GHuDRO12Sypu2cV70d1dkA2EUmXHgntrzbpvOB+Qy+49ypNfGgFQIC2fhhXbnyrJRynDCAARsT7Ou0M6hirpfw== - -commander@2, commander@^2.20.0, commander@^2.6.0, commander@^2.8.1: - version "2.20.3" - resolved "https://registry.yarnpkg.com/commander/-/commander-2.20.3.tgz#fd485e84c03eb4881c20722ba48035e8531aeb33" - integrity sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ== - -comment-parser@^0.7.0: - version "0.7.2" - resolved "https://registry.yarnpkg.com/comment-parser/-/comment-parser-0.7.2.tgz#baf6d99b42038678b81096f15b630d18142f4b8a" - integrity sha512-4Rjb1FnxtOcv9qsfuaNuVsmmVn4ooVoBHzYfyKteiXwIU84PClyGA5jASoFMwPV93+FPh9spwueXauxFJZkGAg== - -commondir@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/commondir/-/commondir-1.0.1.tgz#ddd800da0c66127393cca5950ea968a3aaf1253b" - integrity sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs= - -component-bind@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/component-bind/-/component-bind-1.0.0.tgz#00c608ab7dcd93897c0009651b1d3a8e1e73bbd1" - integrity sha1-AMYIq33Nk4l8AAllGx06jh5zu9E= - -component-emitter@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.2.1.tgz#137918d6d78283f7df7a6b7c5a63e140e69425e6" - integrity sha1-E3kY1teCg/ffemt8WmPhQOaUJeY= - -component-emitter@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/component-emitter/-/component-emitter-1.3.0.tgz#16e4070fba8ae29b679f2215853ee181ab2eabc0" - integrity sha512-Rd3se6QB+sO1TwqZjscQrurpEPIfO0/yYnSin6Q/rD3mOutHvUrCAhJub3r90uNb+SESBuE0QYoB90YdfatsRg== - -component-inherit@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/component-inherit/-/component-inherit-0.0.3.tgz#645fc4adf58b72b649d5cae65135619db26ff143" - integrity sha1-ZF/ErfWLcrZJ1crmUTVhnbJv8UM= - -compressible@~2.0.16: - version "2.0.18" - resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" - integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== - dependencies: - mime-db ">= 1.43.0 < 2" - -compression@^1.7.4: - version "1.7.4" - resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.4.tgz#95523eff170ca57c29a0ca41e6fe131f41e5bb8f" - integrity sha512-jaSIDzP9pZVS4ZfQ+TzvtiWhdpFhE2RDHz8QJkpX9SIpLq88VueF5jJw6t+6CUQcAoA6t+x89MLrWAqpfDE8iQ== - dependencies: - accepts "~1.3.5" - bytes "3.0.0" - compressible "~2.0.16" - debug "2.6.9" - on-headers "~1.0.2" - safe-buffer "5.1.2" - vary "~1.1.2" - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s= - -concat-stream@^1.6.0, concat-stream@^1.6.1, concat-stream@^1.6.2, concat-stream@~1.6.0: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -concat-stream@~1.5.0: - version "1.5.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.5.2.tgz#708978624d856af41a5a741defdd261da752c266" - integrity sha1-cIl4Yk2FavQaWnQd790mHadSwmY= - dependencies: - inherits "~2.0.1" - readable-stream "~2.0.0" - typedarray "~0.0.5" - -concat-stream@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-2.0.0.tgz#414cf5af790a48c60ab9be4527d56d5e41133cb1" - integrity sha512-MWufYdFw53ccGjCA+Ol7XJYpAlW6/prSMzuPOTRnJGcGzuhLn4Scrz7qf6o8bROZ514ltazcIFJZevcfbo0x7A== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.0.2" - typedarray "^0.0.6" - -console-browserify@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/console-browserify/-/console-browserify-1.2.0.tgz#67063cef57ceb6cf4993a2ab3a55840ae8c49336" - integrity sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA== - -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - -consolidate@^0.15.1: - version "0.15.1" - resolved "https://registry.yarnpkg.com/consolidate/-/consolidate-0.15.1.tgz#21ab043235c71a07d45d9aad98593b0dba56bab7" - integrity sha512-DW46nrsMJgy9kqAbPt5rKaCr7uFtpo4mSUvLHIUbJEjm0vo+aY5QLwBUq3FK4tRnJr/X0Psc0C4jf/h+HtXSMw== - dependencies: - bluebird "^3.1.1" - -constants-browserify@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/constants-browserify/-/constants-browserify-1.0.0.tgz#c20b96d8c617748aaf1c16021760cd27fcb8cb75" - integrity sha1-wguW2MYXdIqvHBYCF2DNJ/y4y3U= - -contains-path@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/contains-path/-/contains-path-0.1.0.tgz#fe8cf184ff6670b6baef01a9d4861a5cbec4120a" - integrity sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo= - -content-disposition@0.5.3: - version "0.5.3" - resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.3.tgz#e130caf7e7279087c5616c2007d0485698984fbd" - integrity sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g== - dependencies: - safe-buffer "5.1.2" - -content-type@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" - integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== - -continuable-cache@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/continuable-cache/-/continuable-cache-0.3.1.tgz#bd727a7faed77e71ff3985ac93351a912733ad0f" - integrity sha1-vXJ6f67XfnH/OYWskzUakSczrQ8= - -convert-source-map@^1.5.0, convert-source-map@^1.6.0, convert-source-map@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" - integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== - dependencies: - safe-buffer "~5.1.1" - -convert-source-map@~1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.1.3.tgz#4829c877e9fe49b3161f3bf3673888e204699860" - integrity sha1-SCnId+n+SbMWHzvzZziI4gRpmGA= - -cookie-signature@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" - integrity sha1-4wOogrNCzD7oylE6eZmXNNqzriw= - -cookie@0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.3.1.tgz#e7e0a1f9ef43b4c8ba925c5c5a96e806d16873bb" - integrity sha1-5+Ch+e9DtMi6klxcWpboBtFoc7s= - -cookie@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.0.tgz#beb437e7022b3b6d49019d088665303ebe9c14ba" - integrity sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg== - -copy-descriptor@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/copy-descriptor/-/copy-descriptor-0.1.1.tgz#676f6eb3c39997c2ee1ac3a924fd6124748f578d" - integrity sha1-Z29us8OZl8LuGsOpJP1hJHSPV40= - -core-js-compat@^3.6.2: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.6.4.tgz#938476569ebb6cda80d339bcf199fae4f16fff17" - integrity sha512-zAa3IZPvsJ0slViBQ2z+vgyyTuhd3MFn1rBQjZSKVEgB0UMYhUkCj9jJUVPgGTGqWvsBVmfnruXgTcNyTlEiSA== - dependencies: - browserslist "^4.8.3" - semver "7.0.0" - -core-js-pure@^3.0.0: - version "3.6.4" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.6.4.tgz#4bf1ba866e25814f149d4e9aaa08c36173506e3a" - integrity sha512-epIhRLkXdgv32xIUFaaAry2wdxZYBi6bgM7cB136dzzXXa+dFyRLTZeLUJxnd8ShrmyVXBub63n2NHo2JAt8Cw== - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -cosmiconfig@^5.0.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" - integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== - dependencies: - import-fresh "^2.0.0" - is-directory "^0.3.1" - js-yaml "^3.13.1" - parse-json "^4.0.0" - -coveralls@^3.0.2: - version "3.0.11" - resolved "https://registry.yarnpkg.com/coveralls/-/coveralls-3.0.11.tgz#e141da0922b632fcc66620f334460c3f0026a4ce" - integrity sha512-LZPWPR2NyGKyaABnc49dR0fpeP6UqhvGq4B5nUrTQ1UBy55z96+ga7r+/ChMdMJUwBgyJDXBi88UBgz2rs9IiQ== - dependencies: - js-yaml "^3.13.1" - lcov-parse "^1.0.0" - log-driver "^1.2.7" - minimist "^1.2.5" - request "^2.88.0" - -create-ecdh@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/create-ecdh/-/create-ecdh-4.0.3.tgz#c9111b6f33045c4697f144787f9254cdc77c45ff" - integrity sha512-GbEHQPMOswGpKXM9kCWVrremUcBmjteUaQ01T9rkKCPDXfUHX0IoP9LpHYo2NPFampa4e+/pFDc3jQdxrxQLaw== - dependencies: - bn.js "^4.1.0" - elliptic "^6.0.0" - -create-error-class@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/create-error-class/-/create-error-class-3.0.2.tgz#06be7abef947a3f14a30fd610671d401bca8b7b6" - integrity sha1-Br56vvlHo/FKMP1hBnHUAbyot7Y= - dependencies: - capture-stack-trace "^1.0.0" - -create-hash@^1.1.0, create-hash@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/create-hash/-/create-hash-1.2.0.tgz#889078af11a63756bcfb59bd221996be3a9ef196" - integrity sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg== - dependencies: - cipher-base "^1.0.1" - inherits "^2.0.1" - md5.js "^1.3.4" - ripemd160 "^2.0.1" - sha.js "^2.4.0" - -create-hmac@^1.1.0, create-hmac@^1.1.2, create-hmac@^1.1.4: - version "1.1.7" - resolved "https://registry.yarnpkg.com/create-hmac/-/create-hmac-1.1.7.tgz#69170c78b3ab957147b2b8b04572e47ead2243ff" - integrity sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg== - dependencies: - cipher-base "^1.0.3" - create-hash "^1.1.0" - inherits "^2.0.1" - ripemd160 "^2.0.0" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -cross-env@^7.0.3: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz#865264b29677dc015ba8418918965dd232fc54cf" - integrity sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw== - dependencies: - cross-spawn "^7.0.1" - -cross-spawn@^4: - version "4.0.2" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-4.0.2.tgz#7b9247621c23adfdd3856004a823cbe397424d41" - integrity sha1-e5JHYhwjrf3ThWAEqCPL45dCTUE= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - -cross-spawn@^6.0.0, cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== - dependencies: - nice-try "^1.0.4" - path-key "^2.0.1" - semver "^5.5.0" - shebang-command "^1.2.0" - which "^1.2.9" - -cross-spawn@^7.0.1: - version "7.0.3" - resolved "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -crypto-browserify@^3.0.0: - version "3.12.0" - resolved "https://registry.yarnpkg.com/crypto-browserify/-/crypto-browserify-3.12.0.tgz#396cf9f3137f03e4b8e532c58f698254e00f80ec" - integrity sha512-fz4spIh+znjO2VjL+IdhEpRJ3YN6sMzITSBijk6FK2UvTqruSQW+/cCZTSNsMiZNvUeq0CqurF+dAbyiGOY6Wg== - dependencies: - browserify-cipher "^1.0.0" - browserify-sign "^4.0.0" - create-ecdh "^4.0.0" - create-hash "^1.1.0" - create-hmac "^1.1.0" - diffie-hellman "^5.0.0" - inherits "^2.0.1" - pbkdf2 "^3.0.3" - public-encrypt "^4.0.0" - randombytes "^2.0.0" - randomfill "^1.0.3" - -css-color-names@0.0.4, css-color-names@^0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/css-color-names/-/css-color-names-0.0.4.tgz#808adc2e79cf84738069b646cb20ec27beb629e0" - integrity sha1-gIrcLnnPhHOAabZGyyDsJ762KeA= - -css-declaration-sorter@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/css-declaration-sorter/-/css-declaration-sorter-4.0.1.tgz#c198940f63a76d7e36c1e71018b001721054cb22" - integrity sha512-BcxQSKTSEEQUftYpBVnsH4SF05NTuBokb19/sBt6asXGKZ/6VP7PLG1CBCkFDYOnhXhPh0jMhO6xZ71oYHXHBA== - dependencies: - postcss "^7.0.1" - timsort "^0.3.0" - -css-select-base-adapter@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/css-select-base-adapter/-/css-select-base-adapter-0.1.1.tgz#3b2ff4972cc362ab88561507a95408a1432135d7" - integrity sha512-jQVeeRG70QI08vSTwf1jHxp74JoZsr2XSgETae8/xC8ovSnL2WF87GTLO86Sbwdt2lK4Umg4HnnwMO4YF3Ce7w== - -css-select@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-1.2.0.tgz#2b3a110539c5355f1cd8d314623e870b121ec858" - integrity sha1-KzoRBTnFNV8c2NMUYj6HCxIeyFg= - dependencies: - boolbase "~1.0.0" - css-what "2.1" - domutils "1.5.1" - nth-check "~1.0.1" - -css-select@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/css-select/-/css-select-2.1.0.tgz#6a34653356635934a81baca68d0255432105dbef" - integrity sha512-Dqk7LQKpwLoH3VovzZnkzegqNSuAziQyNZUcrdDM401iY+R5NkGBXGmtO05/yaXQziALuPogeG0b7UAgjnTJTQ== - dependencies: - boolbase "^1.0.0" - css-what "^3.2.1" - domutils "^1.7.0" - nth-check "^1.0.2" - -css-tree@1.0.0-alpha.37: - version "1.0.0-alpha.37" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.37.tgz#98bebd62c4c1d9f960ec340cf9f7522e30709a22" - integrity sha512-DMxWJg0rnz7UgxKT0Q1HU/L9BeJI0M6ksor0OgqOnF+aRCDWg/N2641HmVyU9KVIu0OVVWOb2IpC9A+BJRnejg== - dependencies: - mdn-data "2.0.4" - source-map "^0.6.1" - -css-tree@1.0.0-alpha.39: - version "1.0.0-alpha.39" - resolved "https://registry.yarnpkg.com/css-tree/-/css-tree-1.0.0-alpha.39.tgz#2bff3ffe1bb3f776cf7eefd91ee5cba77a149eeb" - integrity sha512-7UvkEYgBAHRG9Nt980lYxjsTrCyHFN53ky3wVsDkiMdVqylqRt+Zc+jm5qw7/qyOvN2dHSYtX0e4MbCCExSvnA== - dependencies: - mdn-data "2.0.6" - source-map "^0.6.1" - -css-what@2.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-2.1.3.tgz#a6d7604573365fe74686c3f311c56513d88285f2" - integrity sha512-a+EPoD+uZiNfh+5fxw2nO9QwFa6nJe2Or35fGY6Ipw1R3R4AGz1d1TEZrCegvw2YTmZ0jXirGYlzxxpYSHwpEg== - -css-what@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/css-what/-/css-what-3.2.1.tgz#f4a8f12421064621b456755e34a03a2c22df5da1" - integrity sha512-WwOrosiQTvyms+Ti5ZC5vGEK0Vod3FTt1ca+payZqvKuGJF+dq7bG63DstxtN0dpm6FxY27a/zS3Wten+gEtGw== - -csscolorparser@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/csscolorparser/-/csscolorparser-1.0.3.tgz#b34f391eea4da8f3e98231e2ccd8df9c041f171b" - integrity sha1-s085HupNqPPpgjHizNjfnAQfFxs= - -cssesc@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/cssesc/-/cssesc-3.0.0.tgz#37741919903b868565e1c09ea747445cd18983ee" - integrity sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg== - -cssnano-preset-default@^4.0.7: - version "4.0.7" - resolved "https://registry.yarnpkg.com/cssnano-preset-default/-/cssnano-preset-default-4.0.7.tgz#51ec662ccfca0f88b396dcd9679cdb931be17f76" - integrity sha512-x0YHHx2h6p0fCl1zY9L9roD7rnlltugGu7zXSKQx6k2rYw0Hi3IqxcoAGF7u9Q5w1nt7vK0ulxV8Lo+EvllGsA== - dependencies: - css-declaration-sorter "^4.0.1" - cssnano-util-raw-cache "^4.0.1" - postcss "^7.0.0" - postcss-calc "^7.0.1" - postcss-colormin "^4.0.3" - postcss-convert-values "^4.0.1" - postcss-discard-comments "^4.0.2" - postcss-discard-duplicates "^4.0.2" - postcss-discard-empty "^4.0.1" - postcss-discard-overridden "^4.0.1" - postcss-merge-longhand "^4.0.11" - postcss-merge-rules "^4.0.3" - postcss-minify-font-values "^4.0.2" - postcss-minify-gradients "^4.0.2" - postcss-minify-params "^4.0.2" - postcss-minify-selectors "^4.0.2" - postcss-normalize-charset "^4.0.1" - postcss-normalize-display-values "^4.0.2" - postcss-normalize-positions "^4.0.2" - postcss-normalize-repeat-style "^4.0.2" - postcss-normalize-string "^4.0.2" - postcss-normalize-timing-functions "^4.0.2" - postcss-normalize-unicode "^4.0.1" - postcss-normalize-url "^4.0.1" - postcss-normalize-whitespace "^4.0.2" - postcss-ordered-values "^4.1.2" - postcss-reduce-initial "^4.0.3" - postcss-reduce-transforms "^4.0.2" - postcss-svgo "^4.0.2" - postcss-unique-selectors "^4.0.1" - -cssnano-util-get-arguments@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-arguments/-/cssnano-util-get-arguments-4.0.0.tgz#ed3a08299f21d75741b20f3b81f194ed49cc150f" - integrity sha1-7ToIKZ8h11dBsg87gfGU7UnMFQ8= - -cssnano-util-get-match@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cssnano-util-get-match/-/cssnano-util-get-match-4.0.0.tgz#c0e4ca07f5386bb17ec5e52250b4f5961365156d" - integrity sha1-wOTKB/U4a7F+xeUiULT1lhNlFW0= - -cssnano-util-raw-cache@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-raw-cache/-/cssnano-util-raw-cache-4.0.1.tgz#b26d5fd5f72a11dfe7a7846fb4c67260f96bf282" - integrity sha512-qLuYtWK2b2Dy55I8ZX3ky1Z16WYsx544Q0UWViebptpwn/xDBmog2TLg4f+DBMg1rJ6JDWtn96WHbOKDWt1WQA== - dependencies: - postcss "^7.0.0" - -cssnano-util-same-parent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/cssnano-util-same-parent/-/cssnano-util-same-parent-4.0.1.tgz#574082fb2859d2db433855835d9a8456ea18bbf3" - integrity sha512-WcKx5OY+KoSIAxBW6UBBRay1U6vkYheCdjyVNDm85zt5K9mHoGOfsOsqIszfAqrQQFIIKgjh2+FDgIj/zsl21Q== - -cssnano@^4.1.10: - version "4.1.10" - resolved "https://registry.yarnpkg.com/cssnano/-/cssnano-4.1.10.tgz#0ac41f0b13d13d465487e111b778d42da631b8b2" - integrity sha512-5wny+F6H4/8RgNlaqab4ktc3e0/blKutmq8yNlBFXA//nSFFAqAngjNVRzUvCgYROULmZZUoosL/KSoZo5aUaQ== - dependencies: - cosmiconfig "^5.0.0" - cssnano-preset-default "^4.0.7" - is-resolvable "^1.0.0" - postcss "^7.0.0" - -csso@^4.0.2: - version "4.0.3" - resolved "https://registry.yarnpkg.com/csso/-/csso-4.0.3.tgz#0d9985dc852c7cc2b2cacfbbe1079014d1a8e903" - integrity sha512-NL3spysxUkcrOgnpsT4Xdl2aiEiBG6bXswAABQVHcMrfjjBisFOKwLDOmf4wf32aPdcJws1zds2B0Rg+jqMyHQ== - dependencies: - css-tree "1.0.0-alpha.39" - -cssom@0.3.x, cssom@^0.3.4: - version "0.3.8" - resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" - integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== - -cssstyle@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-1.4.0.tgz#9d31328229d3c565c61e586b02041a28fccdccf1" - integrity sha512-GBrLZYZ4X4x6/QEoBnIrqb8B/f5l4+8me2dkom/j1Gtbxy0kBv6OGzKuAsGM75bkGwGAFkt56Iwg28S3XTZgSA== - dependencies: - cssom "0.3.x" - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -d3-array@1, d3-array@^1.2.0: - version "1.2.4" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.4.tgz#635ce4d5eea759f6f605863dbcfc30edc737f71f" - integrity sha512-KHW6M86R+FUPYGb3R5XiYjXPq7VzwxZ22buHhAEVG5ztoEcZZMLov530mmccaqA1GghZArjQV46fuc8kUqhhHw== - -d3-array@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-array/-/d3-array-1.2.1.tgz#d1ca33de2f6ac31efadb8e050a021d7e2396d5dc" - integrity sha512-CyINJQ0SOUHojDdFDH4JEM0552vCR1utGyLHegJHyYH0JyCpSeTPxi4OBqHMA2jJZq4NH782LtaJWBImqI/HBw== - -d3-axis@1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-axis/-/d3-axis-1.0.8.tgz#31a705a0b535e65759de14173a31933137f18efa" - integrity sha1-MacFoLU15ldZ3hQXOjGTMTfxjvo= - -d3-brush@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-brush/-/d3-brush-1.0.4.tgz#00c2f238019f24f6c0a194a26d41a1530ffe7bc4" - integrity sha1-AMLyOAGfJPbAoZSibUGhUw/+e8Q= - dependencies: - d3-dispatch "1" - d3-drag "1" - d3-interpolate "1" - d3-selection "1" - d3-transition "1" - -d3-chord@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-chord/-/d3-chord-1.0.4.tgz#7dec4f0ba886f713fe111c45f763414f6f74ca2c" - integrity sha1-fexPC6iG9xP+ERxF92NBT290yiw= - dependencies: - d3-array "1" - d3-path "1" - -d3-collection@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.7.tgz#349bd2aa9977db071091c13144d5e4f16b5b310e" - integrity sha512-ii0/r5f4sjKNTfh84Di+DpztYwqKhEyUlKoPrzUFfeSkWxjW49xU2QzO9qrPrNkpdI0XJkfzvmTu8V2Zylln6A== - -d3-collection@1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/d3-collection/-/d3-collection-1.0.4.tgz#342dfd12837c90974f33f1cc0a785aea570dcdc2" - integrity sha1-NC39EoN8kJdPM/HMCnha6lcNzcI= - -d3-color@1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.4.0.tgz#89c45a995ed773b13314f06460df26d60ba0ecaf" - integrity sha512-TzNPeJy2+iEepfiL92LAAB7fvnp/dV2YwANPVHdDWmYMm23qIJBYww3qT8I8C1wXrmrg4UWs7BKc2tKIgyjzHg== - -d3-color@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-color/-/d3-color-1.0.3.tgz#bc7643fca8e53a8347e2fbdaffa236796b58509b" - integrity sha1-vHZD/KjlOoNH4vva/6I2eWtYUJs= - -d3-dispatch@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.6.tgz#00d37bcee4dd8cd97729dd893a0ac29caaba5d58" - integrity sha512-fVjoElzjhCEy+Hbn8KygnmMS7Or0a9sI2UzGwoB7cCtvI1XpVN9GpoYlnb3xt2YV66oXYb1fLJ8GMvP4hdU1RA== - -d3-dispatch@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-dispatch/-/d3-dispatch-1.0.3.tgz#46e1491eaa9b58c358fce5be4e8bed626e7871f8" - integrity sha1-RuFJHqqbWMNY/OW+TovtYm54cfg= - -d3-drag@1: - version "1.2.5" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.5.tgz#2537f451acd39d31406677b7dc77c82f7d988f70" - integrity sha512-rD1ohlkKQwMZYkQlYVCrSFxsWPzI97+W+PaEIBNTMxRuxz9RF0Hi5nJWHGVJ3Om9d2fRTe1yOBINJyy/ahV95w== - dependencies: - d3-dispatch "1" - d3-selection "1" - -d3-drag@1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/d3-drag/-/d3-drag-1.2.1.tgz#df8dd4c502fb490fc7462046a8ad98a5c479282d" - integrity sha512-Cg8/K2rTtzxzrb0fmnYOUeZHvwa4PHzwXOLZZPwtEs2SKLLKLXeYwZKBB+DlOxUvFmarOnmt//cU4+3US2lyyQ== - dependencies: - d3-dispatch "1" - d3-selection "1" - -d3-dsv@1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.2.0.tgz#9d5f75c3a5f8abd611f74d3f5847b0d4338b885c" - integrity sha512-9yVlqvZcSOMhCYzniHE7EVUws7Fa1zgw+/EAV2BxJoG3ME19V6BQFBwI855XQDsxyOuG7NibqRMTtiF/Qup46g== - dependencies: - commander "2" - iconv-lite "0.4" - rw "1" - -d3-dsv@1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-dsv/-/d3-dsv-1.0.8.tgz#907e240d57b386618dc56468bacfe76bf19764ae" - integrity sha512-IVCJpQ+YGe3qu6odkPQI0KPqfxkhbP/oM1XhhE/DFiYmcXKfCRub4KXyiuehV1d4drjWVXHUWx4gHqhdZb6n/A== - dependencies: - commander "2" - iconv-lite "0.4" - rw "1" - -d3-ease@1: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.6.tgz#ebdb6da22dfac0a22222f2d4da06f66c416a0ec0" - integrity sha512-SZ/lVU7LRXafqp7XtIcBdxnWl8yyLpgOmzAk0mWBI9gXNzLDx5ybZgnRbH9dN/yY5tzVBqCQ9avltSnqVwessQ== - -d3-ease@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-ease/-/d3-ease-1.0.3.tgz#68bfbc349338a380c44d8acc4fbc3304aa2d8c0e" - integrity sha1-aL+8NJM4o4DETYrMT7wzBKotjA4= - -d3-force@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-force/-/d3-force-1.1.0.tgz#cebf3c694f1078fcc3d4daf8e567b2fbd70d4ea3" - integrity sha512-2HVQz3/VCQs0QeRNZTYb7GxoUCeb6bOzMp/cGcLa87awY9ZsPvXOGeZm0iaGBjXic6I1ysKwMn+g+5jSAdzwcg== - dependencies: - d3-collection "1" - d3-dispatch "1" - d3-quadtree "1" - d3-timer "1" - -d3-format@1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.4.3.tgz#4e8eb4dff3fdcb891a8489ec6e698601c41b96f1" - integrity sha512-mm/nE2Y9HgGyjP+rKIekeITVgBtX97o1nrvHCWX8F/yBYyevUTvu9vb5pUnKwrcSw7o7GuwMOWjS9gFDs4O+uQ== - -d3-format@1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/d3-format/-/d3-format-1.2.2.tgz#1a39c479c8a57fe5051b2e67a3bee27061a74e7a" - integrity sha512-zH9CfF/3C8zUI47nsiKfD0+AGDEuM8LwBIP7pBVpyR4l/sKkZqITmMtxRp04rwBrlshIZ17XeFAaovN3++wzkw== - -d3-geo@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/d3-geo/-/d3-geo-1.9.1.tgz#157e3b0f917379d0f73bebfff3be537f49fa7356" - integrity sha512-l9wL/cEQkyZQYXw3xbmLsH3eQ5ij+icNfo4r0GrLa5rOCZR/e/3am45IQ0FvQ5uMsv+77zBRunLc9ufTWSQYFA== - dependencies: - d3-array "1" - -d3-hierarchy@1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/d3-hierarchy/-/d3-hierarchy-1.1.5.tgz#a1c845c42f84a206bcf1c01c01098ea4ddaa7a26" - integrity sha1-ochFxC+Eoga88cAcAQmOpN2qeiY= - -d3-interpolate@1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.4.0.tgz#526e79e2d80daa383f9e0c1c1c7dcc0f0583e987" - integrity sha512-V9znK0zc3jOPV4VD2zZn0sDhZU3WAE2bmlxdIwwQPPzPjvyLkd8B3JUVdS1IDUFDkWZ72c9qnv1GK2ZagTZ8EA== - dependencies: - d3-color "1" - -d3-interpolate@1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/d3-interpolate/-/d3-interpolate-1.1.6.tgz#2cf395ae2381804df08aa1bf766b7f97b5f68fb6" - integrity sha512-mOnv5a+pZzkNIHtw/V6I+w9Lqm9L5bG3OTXPM5A+QO0yyVMQ4W1uZhR+VOJmazaOZXri2ppbiZ5BUNWT0pFM9A== - dependencies: - d3-color "1" - -d3-path@1: - version "1.0.9" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.9.tgz#48c050bb1fe8c262493a8caf5524e3e9591701cf" - integrity sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg== - -d3-path@1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/d3-path/-/d3-path-1.0.5.tgz#241eb1849bd9e9e8021c0d0a799f8a0e8e441764" - integrity sha1-JB6xhJvZ6egCHA0KeZ+KDo5EF2Q= - -d3-polygon@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-polygon/-/d3-polygon-1.0.3.tgz#16888e9026460933f2b179652ad378224d382c62" - integrity sha1-FoiOkCZGCTPysXllKtN4Ik04LGI= - -d3-quadtree@1: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.7.tgz#ca8b84df7bb53763fe3c2f24bd435137f4e53135" - integrity sha512-RKPAeXnkC59IDGD0Wu5mANy0Q2V28L+fNe65pOCXVdVuTJS3WPKaJlFHer32Rbh9gIo9qMuJXio8ra4+YmIymA== - -d3-quadtree@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/d3-quadtree/-/d3-quadtree-1.0.3.tgz#ac7987e3e23fe805a990f28e1b50d38fcb822438" - integrity sha1-rHmH4+I/6AWpkPKOG1DTj8uCJDg= - -d3-queue@3.0.7, d3-queue@^3.0.7: - version "3.0.7" - resolved "https://registry.yarnpkg.com/d3-queue/-/d3-queue-3.0.7.tgz#c93a2e54b417c0959129d7d73f6cf7d4292e7618" - integrity sha1-yTouVLQXwJWRKdfXP2z31Ckudhg= - -d3-random@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-random/-/d3-random-1.1.0.tgz#6642e506c6fa3a648595d2b2469788a8d12529d3" - integrity sha1-ZkLlBsb6OmSFldKyRpeIqNElKdM= - -d3-request@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/d3-request/-/d3-request-1.0.6.tgz#a1044a9ef4ec28c824171c9379fae6d79474b19f" - integrity sha512-FJj8ySY6GYuAJHZMaCQ83xEYE4KbkPkmxZ3Hu6zA1xxG2GD+z6P+Lyp+zjdsHf0xEbp2xcluDI50rCS855EQ6w== - dependencies: - d3-collection "1" - d3-dispatch "1" - d3-dsv "1" - xmlhttprequest "1" - -d3-scale@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-scale/-/d3-scale-1.0.7.tgz#fa90324b3ea8a776422bd0472afab0b252a0945d" - integrity sha512-KvU92czp2/qse5tUfGms6Kjig0AhHOwkzXG0+PqIJB3ke0WUv088AHMZI0OssO9NCkXt4RP8yju9rpH8aGB7Lw== - dependencies: - d3-array "^1.2.0" - d3-collection "1" - d3-color "1" - d3-format "1" - d3-interpolate "1" - d3-time "1" - d3-time-format "2" - -d3-selection@1, d3-selection@^1.1.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.4.1.tgz#98eedbbe085fbda5bafa2f9e3f3a2f4d7d622a98" - integrity sha512-BTIbRjv/m5rcVTfBs4AMBLKs4x8XaaLkwm28KWu9S2vKNqXkXt2AH2Qf0sdPZHjFxcWg/YL53zcqAz+3g4/7PA== - -d3-selection@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/d3-selection/-/d3-selection-1.3.0.tgz#d53772382d3dc4f7507bfb28bcd2d6aed2a0ad6d" - integrity sha512-qgpUOg9tl5CirdqESUAu0t9MU/t3O9klYfGfyKsXEmhyxyzLpzpeh08gaxBUTQw1uXIOkr/30Ut2YRjSSxlmHA== - -d3-shape@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/d3-shape/-/d3-shape-1.2.0.tgz#45d01538f064bafd05ea3d6d2cb748fd8c41f777" - integrity sha1-RdAVOPBkuv0F6j1tLLdI/YxB93c= - dependencies: - d3-path "1" - -d3-time-format@2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.2.3.tgz#0c9a12ee28342b2037e5ea1cf0b9eb4dd75f29cb" - integrity sha512-RAHNnD8+XvC4Zc4d2A56Uw0yJoM7bsvOlJR33bclxq399Rak/b9bhvu/InjxdWhPtkgU53JJcleJTGkNRnN6IA== - dependencies: - d3-time "1" - -d3-time-format@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/d3-time-format/-/d3-time-format-2.1.1.tgz#85b7cdfbc9ffca187f14d3c456ffda268081bb31" - integrity sha512-8kAkymq2WMfzW7e+s/IUNAtN/y3gZXGRrdGfo6R8NKPAA85UBTxZg5E61bR6nLwjPjj4d3zywSQe1CkYLPFyrw== - dependencies: - d3-time "1" - -d3-time@1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.1.0.tgz#b1e19d307dae9c900b7e5b25ffc5dcc249a8a0f1" - integrity sha512-Xh0isrZ5rPYYdqhAVk8VLnMEidhz5aP7htAADH6MfzgmmicPkTo8LhkLxci61/lCB7n7UmE3bN0leRt+qvkLxA== - -d3-time@1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/d3-time/-/d3-time-1.0.8.tgz#dbd2d6007bf416fe67a76d17947b784bffea1e84" - integrity sha512-YRZkNhphZh3KcnBfitvF3c6E0JOFGikHZ4YqD+Lzv83ZHn1/u6yGenRU1m+KAk9J1GnZMnKcrtfvSktlA1DXNQ== - -d3-timer@1: - version "1.0.10" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.10.tgz#dfe76b8a91748831b13b6d9c793ffbd508dd9de5" - integrity sha512-B1JDm0XDaQC+uvo4DT79H0XmBskgS3l6Ve+1SBCfxgmtIb1AVrPIoqd+nPSv+loMX8szQ0sVUhGngL7D5QPiXw== - -d3-timer@1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/d3-timer/-/d3-timer-1.0.7.tgz#df9650ca587f6c96607ff4e60cc38229e8dd8531" - integrity sha512-vMZXR88XujmG/L5oB96NNKH5lCWwiLM/S2HyyAQLcjWJCloK5shxta4CwOFYLZoY3AWX73v8Lgv4cCAdWtRmOA== - -d3-transition@1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.3.2.tgz#a98ef2151be8d8600543434c1ca80140ae23b398" - integrity sha512-sc0gRU4PFqZ47lPVHloMn9tlPcv8jxgOQg+0zjhfZXMQuvppjG6YuwdMBE0TuqCZjeJkLecku/l9R0JPcRhaDA== - dependencies: - d3-color "1" - d3-dispatch "1" - d3-ease "1" - d3-interpolate "1" - d3-selection "^1.1.0" - d3-timer "1" - -d3-transition@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/d3-transition/-/d3-transition-1.1.1.tgz#d8ef89c3b848735b060e54a39b32aaebaa421039" - integrity sha512-xeg8oggyQ+y5eb4J13iDgKIjUcEfIOZs2BqV/eEmXm2twx80wTzJ4tB4vaZ5BKfz7XsI/DFmQL5me6O27/5ykQ== - dependencies: - d3-color "1" - d3-dispatch "1" - d3-ease "1" - d3-interpolate "1" - d3-selection "^1.1.0" - d3-timer "1" - -d3-voronoi@1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/d3-voronoi/-/d3-voronoi-1.1.2.tgz#1687667e8f13a2d158c80c1480c5a29cb0d8973c" - integrity sha1-Fodmfo8TotFYyAwUgMWinLDYlzw= - -d3-zoom@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/d3-zoom/-/d3-zoom-1.7.1.tgz#02f43b3c3e2db54f364582d7e4a236ccc5506b63" - integrity sha512-sZHQ55DGq5BZBFGnRshUT8tm2sfhPHFnOlmPbbwTkAoPeVdRTkB4Xsf9GCY0TSHrTD8PeJPZGmP/TpGicwJDJQ== - dependencies: - d3-dispatch "1" - d3-drag "1" - d3-interpolate "1" - d3-selection "1" - d3-transition "1" - -d3@^4.12.0: - version "4.13.0" - resolved "https://registry.yarnpkg.com/d3/-/d3-4.13.0.tgz#ab236ff8cf0cfc27a81e69bf2fb7518bc9b4f33d" - integrity sha512-l8c4+0SldjVKLaE2WG++EQlqD7mh/dmQjvi2L2lKPadAVC+TbJC4ci7Uk9bRi+To0+ansgsS0iWfPjD7DBy+FQ== - dependencies: - d3-array "1.2.1" - d3-axis "1.0.8" - d3-brush "1.0.4" - d3-chord "1.0.4" - d3-collection "1.0.4" - d3-color "1.0.3" - d3-dispatch "1.0.3" - d3-drag "1.2.1" - d3-dsv "1.0.8" - d3-ease "1.0.3" - d3-force "1.1.0" - d3-format "1.2.2" - d3-geo "1.9.1" - d3-hierarchy "1.1.5" - d3-interpolate "1.1.6" - d3-path "1.0.5" - d3-polygon "1.0.3" - d3-quadtree "1.0.3" - d3-queue "3.0.7" - d3-random "1.1.0" - d3-request "1.0.6" - d3-scale "1.0.7" - d3-selection "1.3.0" - d3-shape "1.2.0" - d3-time "1.0.8" - d3-time-format "2.1.1" - d3-timer "1.0.7" - d3-transition "1.1.1" - d3-voronoi "1.1.2" - d3-zoom "1.7.1" - -dash-ast@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/dash-ast/-/dash-ast-1.0.0.tgz#12029ba5fb2f8aa6f0a861795b23c1b4b6c27d37" - integrity sha512-Vy4dx7gquTeMcQR/hDkYLGUnwVil6vk4FOOct+djUnHOUWt+zJPJAaRIXaAFkPXtJjvlY7o3rfRu0/3hpnwoUA== - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -data-urls@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-1.1.0.tgz#15ee0582baa5e22bb59c77140da8f9c76963bbfe" - integrity sha512-YTWYI9se1P55u58gL5GkQHW4P6VJBJ5iBT+B5a7i2Tjadhv52paJG0qHX4A0OR6/t52odI64KP2YvFpkDOi3eQ== - dependencies: - abab "^2.0.0" - whatwg-mimetype "^2.2.0" - whatwg-url "^7.0.0" - -de-indent@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/de-indent/-/de-indent-1.0.2.tgz#b2038e846dc33baa5796128d0804b455b8c1e21d" - integrity sha1-sgOOhG3DO6pXlhKNCAS0VbjB4h0= - -debug@2.6.9, debug@^2.1.3, debug@^2.2.0, debug@^2.3.3, debug@^2.6.9: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.0.0, debug@^3.1.0, debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -debug@^4.0.0, debug@^4.0.1, debug@^4.1.0, debug@^4.1.1, debug@~4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" - integrity sha512-pYAIzeRo8J6KPEaJ0VWOh5Pzkbw/RetuzehGM7QRRX5he4fPHx2rdKMB256ehJCkX+XRQm16eZLqLNS8RSZXZw== - dependencies: - ms "^2.1.1" - -debug@~3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.1.0.tgz#5bb5a0672628b64149566ba16819e61518c67261" - integrity sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g== - dependencies: - ms "2.0.0" - -decamelize-keys@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.0.tgz#d171a87933252807eb3cb61dc1c1445d078df2d9" - integrity sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk= - dependencies: - decamelize "^1.1.0" - map-obj "^1.0.0" - -decamelize@^1.1.0, decamelize@^1.1.2, decamelize@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -decode-uri-component@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" - integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= - -decompress-response@^4.2.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-4.2.1.tgz#414023cc7a302da25ce2ec82d0d5238ccafd8986" - integrity sha512-jOSne2qbyE+/r8G1VU+G/82LBs2Fs4LAsTiLSHOCOMZQl2OKZ6i8i4IyHemTe+/yIXOtTcRQMzPcgyhoFlqPkw== - dependencies: - mimic-response "^2.0.0" - -deep-equal@^1.0.0, deep-equal@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-1.1.1.tgz#b5c98c942ceffaf7cb051e24e1434a25a2e6076a" - integrity sha512-yd9c5AdiqVcR+JjcwUQb9DkhJc8ngNr0MahEBGvDiJw8puWab2yZlh+nkasOnZP+EGTAP6rRp2JzJhJZzvNF8g== - dependencies: - is-arguments "^1.0.4" - is-date-object "^1.0.1" - is-regex "^1.0.4" - object-is "^1.0.1" - object-keys "^1.1.1" - regexp.prototype.flags "^1.2.0" - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -deep-is@~0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.3.tgz#b369d6fb5dbc13eecf524f91b070feedc357cf34" - integrity sha1-s2nW+128E+7PUk+RsHD+7cNXzzQ= - -default-require-extensions@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/default-require-extensions/-/default-require-extensions-2.0.0.tgz#f5f8fbb18a7d6d50b21f641f649ebb522cfe24f7" - integrity sha1-9fj7sYp9bVCyH2QfZJ67Uiz+JPc= - dependencies: - strip-bom "^3.0.0" - -define-properties@^1.1.2, define-properties@^1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" - integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== - dependencies: - object-keys "^1.0.12" - -define-property@^0.2.5: - version "0.2.5" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-0.2.5.tgz#c35b1ef918ec3c990f9a5bc57be04aacec5c8116" - integrity sha1-w1se+RjsPJkPmlvFe+BKrOxcgRY= - dependencies: - is-descriptor "^0.1.0" - -define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-1.0.0.tgz#769ebaaf3f4a63aad3af9e8d304c9bbe79bfb0e6" - integrity sha1-dp66rz9KY6rTr56NMEybvnm/sOY= - dependencies: - is-descriptor "^1.0.0" - -define-property@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/define-property/-/define-property-2.0.2.tgz#d459689e8d654ba77e02a817f8710d702cb16e9d" - integrity sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ== - dependencies: - is-descriptor "^1.0.2" - isobject "^3.0.1" - -defined@^1.0.0, defined@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/defined/-/defined-1.0.0.tgz#c98d9bcef75674188e110969151199e39b1fa693" - integrity sha1-yY2bzvdWdBiOEQlpFRGZ45sfppM= - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - -depd@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" - integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= - -dependency-graph@^0.8.0: - version "0.8.1" - resolved "https://registry.yarnpkg.com/dependency-graph/-/dependency-graph-0.8.1.tgz#9b8cae3aa2c7bd95ccb3347a09a2d1047a6c3c5a" - integrity sha512-g213uqF8fyk40W8SBjm079n3CZB4qSpCrA2ye1fLGzH/4HEgB6tzuW2CbLE7leb4t45/6h44Ud59Su1/ROTfqw== - -deprecation@^2.0.0, deprecation@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" - integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== - -deps-sort@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/deps-sort/-/deps-sort-2.0.1.tgz#9dfdc876d2bcec3386b6829ac52162cda9fa208d" - integrity sha512-1orqXQr5po+3KI6kQb9A4jnXT1PBwggGl2d7Sq2xsnOeI9GPcE/tGcF9UiSZtZBM7MukY4cAh7MemS6tZYipfw== - dependencies: - JSONStream "^1.0.3" - shasum-object "^1.0.0" - subarg "^1.0.0" - through2 "^2.0.0" - -des.js@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" - integrity sha512-Q0I4pfFrv2VPd34/vfLrFOoRmlYj3OV50i7fskps1jZWK1kApMWWT9G6RRUeYedLcBDIhnSDaUvJMb3AhUlaEA== - dependencies: - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - -destroy@~1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" - integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= - -detab@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detab/-/detab-2.0.3.tgz#33e5dd74d230501bd69985a0d2b9a3382699a130" - integrity sha512-Up8P0clUVwq0FnFjDclzZsy9PadzRn5FFxrr47tQQvMHqyiFYVbpH8oXDzWtF0Q7pYy3l+RPmtBl+BsFF6wH0A== - dependencies: - repeat-string "^1.5.4" - -detect-libc@^1.0.2, detect-libc@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - -detective@^4.0.0: - version "4.7.1" - resolved "https://registry.yarnpkg.com/detective/-/detective-4.7.1.tgz#0eca7314338442febb6d65da54c10bb1c82b246e" - integrity sha512-H6PmeeUcZloWtdt4DAkFyzFL94arpHr3NOwwmVILFiy+9Qd4JTxxXrzfyGk/lmct2qVGBwTSwSXagqu2BxmWig== - dependencies: - acorn "^5.2.1" - defined "^1.0.0" - -detective@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/detective/-/detective-5.2.0.tgz#feb2a77e85b904ecdea459ad897cc90a99bd2a7b" - integrity sha512-6SsIx+nUUbuK0EthKjv0zrdnajCCXVYGmbYYiYjFVpzcjwEs/JMDZ8tPRG29J/HhN56t3GJp2cGSWDRjjot8Pg== - dependencies: - acorn-node "^1.6.1" - defined "^1.0.0" - minimist "^1.1.1" - -diff@^1.3.2: - version "1.4.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf" - integrity sha1-fyjS657nsVqX79ic5j3P2qPMur8= - -diff@^3.5.0: - version "3.5.0" - resolved "https://registry.yarnpkg.com/diff/-/diff-3.5.0.tgz#800c0dd1e0a8bfbc95835c202ad220fe317e5a12" - integrity sha512-A46qtFgd+g7pDZinpnwiRJtxbC1hpgf0uzP3iG89scHk0AUC7A1TGxf5OiiOUv/JMZR8GOt8hL900hV0bOy5xA== - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -diffie-hellman@^5.0.0: - version "5.0.3" - resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" - integrity sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg== - dependencies: - bn.js "^4.1.0" - miller-rabin "^4.0.0" - randombytes "^2.0.0" - -dir-glob@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-2.2.2.tgz#fa09f0694153c8918b18ba0deafae94769fc50c4" - integrity sha512-f9LBi5QWzIW3I6e//uxZoLBlUt9kcp66qo0sSCxL6YZKc75R1c4MFCoe/LaZiBGmgujvQdxc5Bn3QhfyvK5Hsw== - dependencies: - path-type "^3.0.0" - -doctrine-temporary-fork@2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine-temporary-fork/-/doctrine-temporary-fork-2.1.0.tgz#36f2154f556ee4f1e60311d391cd23de5187ed57" - integrity sha512-nliqOv5NkE4zMON4UA6AMJE6As35afs8aYXATpU4pTUdIKiARZwrJVEP1boA3Rx1ZXHVkwxkhcq4VkqvsuRLsA== - dependencies: - esutils "^2.0.2" - -doctrine@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-1.5.0.tgz#379dce730f6166f76cefa4e6707a159b02c5a6fa" - integrity sha1-N53Ocw9hZvds76TmcHoVmwLFpvo= - dependencies: - esutils "^2.0.2" - isarray "^1.0.0" - -doctrine@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" - integrity sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw== - dependencies: - esutils "^2.0.2" - -doctrine@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" - integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== - dependencies: - esutils "^2.0.2" - -documentation@~12.1.1: - version "12.1.4" - resolved "https://registry.yarnpkg.com/documentation/-/documentation-12.1.4.tgz#ec0aafbd9d3879a44189d2d4434953ae3a258598" - integrity sha512-GGS635tR8bBR/m/AuUZ6MCZmFXZA25Wk9S/TTHNe+EMkTCoDdlcft56dZCjF7voCmfnMqKRo8sXAukf/ciA5IA== - dependencies: - "@babel/core" "^7.1.2" - "@babel/generator" "^7.1.3" - "@babel/parser" "7.1.3" - "@babel/plugin-proposal-class-properties" "^7.1.0" - "@babel/plugin-proposal-decorators" "^7.1.2" - "@babel/plugin-proposal-do-expressions" "^7.0.0" - "@babel/plugin-proposal-export-default-from" "^7.0.0" - "@babel/plugin-proposal-export-namespace-from" "^7.0.0" - "@babel/plugin-proposal-function-bind" "^7.0.0" - "@babel/plugin-proposal-function-sent" "^7.1.0" - "@babel/plugin-proposal-json-strings" "^7.0.0" - "@babel/plugin-proposal-logical-assignment-operators" "^7.0.0" - "@babel/plugin-proposal-nullish-coalescing-operator" "^7.0.0" - "@babel/plugin-proposal-numeric-separator" "^7.0.0" - "@babel/plugin-proposal-optional-chaining" "^7.0.0" - "@babel/plugin-proposal-pipeline-operator" "^7.0.0" - "@babel/plugin-proposal-throw-expressions" "^7.0.0" - "@babel/plugin-syntax-dynamic-import" "^7.0.0" - "@babel/plugin-syntax-import-meta" "^7.0.0" - "@babel/preset-env" "^7.1.0" - "@babel/preset-flow" "^7.0.0" - "@babel/preset-react" "^7.0.0" - "@babel/preset-stage-0" "^7.0.0" - "@babel/traverse" "^7.1.4" - "@babel/types" "^7.1.3" - ansi-html "^0.0.7" - babelify "^10.0.0" - chalk "^2.3.0" - chokidar "^2.0.4" - concat-stream "^1.6.0" - diff "^4.0.1" - doctrine-temporary-fork "2.1.0" - get-port "^4.0.0" - git-url-parse "^11.1.2" - github-slugger "1.2.0" - glob "^7.1.2" - globals-docs "^2.4.0" - highlight.js "^9.15.5" - ini "^1.3.5" - js-yaml "^3.10.0" - lodash "^4.17.10" - mdast-util-inject "^1.1.0" - micromatch "^3.1.5" - mime "^2.2.0" - module-deps-sortable "5.0.0" - parse-filepath "^1.0.2" - pify "^4.0.0" - read-pkg-up "^4.0.0" - remark "^9.0.0" - remark-html "^8.0.0" - remark-reference-links "^4.0.1" - remark-toc "^5.0.0" - resolve "^1.8.1" - stream-array "^1.1.2" - strip-json-comments "^2.0.1" - tiny-lr "^1.1.0" - unist-builder "^1.0.2" - unist-util-visit "^1.3.0" - vfile "^4.0.0" - vfile-reporter "^6.0.0" - vfile-sort "^2.1.0" - vinyl "^2.1.0" - vinyl-fs "^3.0.2" - vue-template-compiler "^2.5.16" - yargs "^12.0.2" - -dom-serializer@0: - version "0.2.2" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.2.2.tgz#1afb81f533717175d478655debc5e332d9f9bb51" - integrity sha512-2/xPb3ORsQ42nHYiSunXkDjPLBaEj/xTwUO4B7XCZQTRk7EBtTOPaygh10YAAh2OI1Qrp6NWfpAhzswj0ydt9g== - dependencies: - domelementtype "^2.0.1" - entities "^2.0.0" - -dom-serializer@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-0.1.1.tgz#1ec4059e284babed36eec2941d4a970a189ce7c0" - integrity sha512-l0IU0pPzLWSHBcieZbpOKgkIn3ts3vAh7ZuFyXNwJxJXk/c4Gwj9xaTJwIDVQCXawWD0qb3IzMGH5rglQaO0XA== - dependencies: - domelementtype "^1.3.0" - entities "^1.1.1" - -domain-browser@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/domain-browser/-/domain-browser-1.2.0.tgz#3d31f50191a6749dd1375a7f522e823d42e54eda" - integrity sha512-jnjyiM6eRyZl2H+W8Q/zLMA481hzi0eszAaBUzIVnmYVDBbnLxVNnfu1HgEBvCbL+71FrxMl3E6lpKH7Ge3OXA== - -domelementtype@1, domelementtype@^1.3.0, domelementtype@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-1.3.1.tgz#d048c44b37b0d10a7f2a3d5fee3f4333d790481f" - integrity sha512-BSKB+TSpMpFI/HOxCNr1O8aMOTZ8hT3pM3GQ0w/mWRmkhEDSFJkkyzz4XQsBV44BChwGkrDfMyjVD0eA2aFV3w== - -domelementtype@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.0.1.tgz#1f8bdfe91f5a78063274e803b4bdcedf6e94f94d" - integrity sha512-5HOHUDsYZWV8FGWN0Njbr/Rn7f/eWSQi1v7+HsUVwXgn8nWWlL64zKDkS0n8ZmQ3mlWOMuXOnR+7Nx/5tMO5AQ== - -domexception@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/domexception/-/domexception-1.0.1.tgz#937442644ca6a31261ef36e3ec677fe805582c90" - integrity sha512-raigMkn7CJNNo6Ihro1fzG7wr3fHuYVytzquZKX5n0yizGsTcYgzdIUwj1X9pK0VvjeihV+XiclP+DjwbsSKug== - dependencies: - webidl-conversions "^4.0.2" - -domhandler@^2.3.0: - version "2.4.2" - resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-2.4.2.tgz#8805097e933d65e85546f726d60f5eb88b44f803" - integrity sha512-JiK04h0Ht5u/80fdLMCEmV4zkNh2BcoMFBmZ/91WtYZ8qVXSKjiw7fXMgFPnHcSZgOo3XdinHvmnDUeMf5R4wA== - dependencies: - domelementtype "1" - -domutils@1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.5.1.tgz#dcd8488a26f563d61079e48c9f7b7e32373682cf" - integrity sha1-3NhIiib1Y9YQeeSMn3t+Mjc2gs8= - dependencies: - dom-serializer "0" - domelementtype "1" - -domutils@^1.5.1, domutils@^1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-1.7.0.tgz#56ea341e834e06e6748af7a1cb25da67ea9f8c2a" - integrity sha512-Lgd2XcJ/NjEw+7tFvfKxOzCYKZsdct5lczQ2ZaQY8Djz7pfAD3Gbp8ySJWtreII/vDlMVmxwa6pHmdxIYgttDg== - dependencies: - dom-serializer "0" - domelementtype "1" - -dot-prop@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.2.0.tgz#c34ecc29556dc45f1f4c22697b6f4904e0cc4fcb" - integrity sha512-uEUyaDKoSQ1M4Oq8l45hSE26SnTxL6snNnqvK/VWx5wJhmff5z0FUVJDKDanor/6w3kzE3i7XZOk+7wC0EXr1A== - dependencies: - is-obj "^2.0.0" - -dotignore@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/dotignore/-/dotignore-0.1.2.tgz#f942f2200d28c3a76fbdd6f0ee9f3257c8a2e905" - integrity sha512-UGGGWfSauusaVJC+8fgV+NVvBXkCTmVv7sk6nojDZZvuOUNGUy0Zk4UpHQD6EDjS0jpBwcACvH4eofvyzBcRDw== - dependencies: - minimatch "^3.0.4" - -duplexer2@^0.1.2, duplexer2@~0.1.0, duplexer2@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer2/-/duplexer2-0.1.4.tgz#8b12dab878c0d69e3e7891051662a32fc6bddcc1" - integrity sha1-ixLauHjA1p4+eJEFFmKjL8a93ME= - dependencies: - readable-stream "^2.0.2" - -duplexer3@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" - integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= - -duplexer@^0.1.2: - version "0.1.2" - resolved "https://registry.npmjs.org/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -duplexify@^3.6.0: - version "3.7.1" - resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" - integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== - dependencies: - end-of-stream "^1.0.0" - inherits "^2.0.1" - readable-stream "^2.0.0" - stream-shift "^1.0.0" - -earcut@^2.2.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/earcut/-/earcut-2.2.2.tgz#41b0bc35f63e0fe80da7cddff28511e7e2e80d11" - integrity sha512-eZoZPPJcUHnfRZ0PjLvx2qBordSiO8ofC3vt+qACLM95u+4DovnbYNpQtJh0DNsWj8RnxrQytD4WA8gj5cRIaQ== - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -ecdsa-sig-formatter@1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" - integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== - dependencies: - safe-buffer "^5.0.1" - -ee-first@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" - integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= - -ejs@^2.5.7: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - -ejs@^3.1.5: - version "3.1.5" - resolved "https://registry.npmjs.org/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" - integrity sha512-dldq3ZfFtgVTJMLjOe+/3sROTzALlL9E34V4/sDtUd/KlBSS0s6U1/+WPE1B4sj9CXHJpL1M6rhNJnc9Wbal9w== - dependencies: - jake "^10.6.1" - -electron-to-chromium@^1.3.380: - version "1.3.384" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.384.tgz#ca1d5710a4c53168431f1cbef39c8a971b646bf8" - integrity sha512-9jGNF78o450ymPf63n7/j1HrRAD4xGTsDkKY2X6jtCAWaYgph2A9xQjwfwRpj+AovkARMO+JfZuVCFTdandD6w== - -elliptic@^6.0.0: - version "6.5.2" - resolved "https://registry.yarnpkg.com/elliptic/-/elliptic-6.5.2.tgz#05c5678d7173c049d8ca433552224a495d0e3762" - integrity sha512-f4x70okzZbIQl/NSRLkI/+tteV/9WqL98zx+SQ69KbXxmVrmjwsNUPn/gYJJ0sHvEak24cZgHIPegRePAtA/xw== - dependencies: - bn.js "^4.4.0" - brorand "^1.0.1" - hash.js "^1.0.0" - hmac-drbg "^1.0.0" - inherits "^2.0.1" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.0" - -"emoji-regex@>=6.0.0 <=6.1.1": - version "6.1.1" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-6.1.1.tgz#c6cd0ec1b0642e2a3c67a1137efc5e796da4f88e" - integrity sha1-xs0OwbBkLio8Z6ETfvxeeW2k+I4= - -emoji-regex@^7.0.1: - version "7.0.3" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-7.0.3.tgz#933a04052860c85e83c122479c4748a8e4c72156" - integrity sha512-CwBLREIQ7LvYFB0WyRvwhq5N5qPhc6PMjD6bYggFlI5YyDgl+0vxq5VHbMOFqLg7hfWzmu8T5Z1QofhmTIhItA== - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -encodeurl@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" - integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= - -end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -engine.io-client@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io-client/-/engine.io-client-3.4.0.tgz#82a642b42862a9b3f7a188f41776b2deab643700" - integrity sha512-a4J5QO2k99CM2a0b12IznnyQndoEvtA4UAldhGzKqnHf42I3Qs2W5SPnDvatZRcMaNZs4IevVicBPayxYt6FwA== - dependencies: - component-emitter "1.2.1" - component-inherit "0.0.3" - debug "~4.1.0" - engine.io-parser "~2.2.0" - has-cors "1.1.0" - indexof "0.0.1" - parseqs "0.0.5" - parseuri "0.0.5" - ws "~6.1.0" - xmlhttprequest-ssl "~1.5.4" - yeast "0.1.2" - -engine.io-parser@~2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/engine.io-parser/-/engine.io-parser-2.2.0.tgz#312c4894f57d52a02b420868da7b5c1c84af80ed" - integrity sha512-6I3qD9iUxotsC5HEMuuGsKA0cXerGz+4uGcXQEkfBidgKf0amsjrrtwcbwK/nzpZBxclXlV7gGl9dgWvu4LF6w== - dependencies: - after "0.8.2" - arraybuffer.slice "~0.0.7" - base64-arraybuffer "0.1.5" - blob "0.0.5" - has-binary2 "~1.0.2" - -engine.io@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/engine.io/-/engine.io-3.4.0.tgz#3a962cc4535928c252759a00f98519cb46c53ff3" - integrity sha512-XCyYVWzcHnK5cMz7G4VTu2W7zJS7SM1QkcelghyIk/FmobWBtXE7fwhBusEKvCSqc3bMh8fNFMlUkCKTFRxH2w== - dependencies: - accepts "~1.3.4" - base64id "2.0.0" - cookie "0.3.1" - debug "~4.1.0" - engine.io-parser "~2.2.0" - ws "^7.1.2" - -entities@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" - integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== - -entities@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/entities/-/entities-2.0.0.tgz#68d6084cab1b079767540d80e56a39b423e4abf4" - integrity sha512-D9f7V0JSRwIxlRI2mjMqufDrRDnx8p+eEOz7aUM9SuvF8gsBzra0/6tbjl1m8eQHrZlYj6PxqE00hZ1SAIKPLw== - -env-paths@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" - integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== - -error-ex@^1.2.0, error-ex@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -error@^7.0.0: - version "7.2.1" - resolved "https://registry.yarnpkg.com/error/-/error-7.2.1.tgz#eab21a4689b5f684fc83da84a0e390de82d94894" - integrity sha512-fo9HBvWnx3NGUKMvMwB/CBCMMrfEJgbDTVDEkPygA3Bdd3lM1OyCd+rbQ8BwnpF6GdVeOLDNmyL4N5Bg80ZvdA== - dependencies: - string-template "~0.2.1" - -es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== - dependencies: - es-to-primitive "^1.2.1" - function-bind "^1.1.1" - has "^1.0.3" - has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" - object-inspect "^1.7.0" - object-keys "^1.1.1" - object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -es6-error@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" - integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== - -es6-promise@^4.0.3: - version "4.2.8" - resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" - integrity sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w== - -es6-promisify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/es6-promisify/-/es6-promisify-5.0.0.tgz#5109d62f3e56ea967c4b63505aef08291c8a5203" - integrity sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM= - dependencies: - es6-promise "^4.0.3" - -escalade@^3.1.1: - version "3.1.1" - resolved "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" - integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== - -escape-html@^1.0.3, escape-html@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" - integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= - -escape-string-regexp@^1.0.3, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - -escodegen@^1.11.0, escodegen@^1.11.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.1.tgz#ba01d0c8278b5e95a9a45350142026659027a457" - integrity sha512-Bmt7NcRySdIfNPfU2ZoXDrrXsG9ZjvDxcAlMfDUgRBjLOWTuIACXPBFJH7Z+cLb40JeQco5toikyc9t9P8E9SQ== - dependencies: - esprima "^4.0.1" - estraverse "^4.2.0" - esutils "^2.0.2" - optionator "^0.8.1" - optionalDependencies: - source-map "~0.6.1" - -eslint-config-mourner@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/eslint-config-mourner/-/eslint-config-mourner-3.0.0.tgz#2cb7df3a14889e70409bbc3250ef0373285e7430" - integrity sha512-QWMt3Cbqkhg/73fZ2UrTNa/p27nF3JhI1Ej2Jg7qSBri88Y0bg4LFzz0/6I5IrvFR10c6UPwDS+DsV9Ec42aVQ== - -eslint-import-resolver-node@^0.3.2: - version "0.3.3" - resolved "https://registry.yarnpkg.com/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.3.tgz#dbaa52b6b2816b50bc6711af75422de808e98404" - integrity sha512-b8crLDo0M5RSe5YG8Pu2DYBj71tSB6OvXkfzwbJU2w7y8P4/yo0MyF8jU26IEuEuHF2K5/gcAJE3LhQGqBBbVg== - dependencies: - debug "^2.6.9" - resolve "^1.13.1" - -eslint-module-utils@^2.4.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.5.2.tgz#7878f7504824e1b857dd2505b59a8e5eda26a708" - integrity sha512-LGScZ/JSlqGKiT8OC+cYRxseMjyqt6QO54nl281CK93unD89ijSeRV6An8Ci/2nvWVKe8K/Tqdm75RQoIOCr+Q== - dependencies: - debug "^2.6.9" - pkg-dir "^2.0.0" - -eslint-plugin-flowtype@^3.9.1: - version "3.13.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-flowtype/-/eslint-plugin-flowtype-3.13.0.tgz#e241ebd39c0ce519345a3f074ec1ebde4cf80f2c" - integrity sha512-bhewp36P+t7cEV0b6OdmoRWJCBYRiHFlqPZAG1oS3SF+Y0LQkeDvFSM4oxoxvczD1OdONCXMlJfQFiWLcV9urw== - dependencies: - lodash "^4.17.15" - -eslint-plugin-html@^5.0.5: - version "5.0.5" - resolved "https://registry.yarnpkg.com/eslint-plugin-html/-/eslint-plugin-html-5.0.5.tgz#e2388f813f75b2287cde884811eab287de8e0f56" - integrity sha512-v/33i3OD0fuXcRXexVyXXBOe4mLBLBQoF1UO1Uy9D+XLq4MC8K45GcQKfqjC/FnHAHp3pYUjpHHktYNCtShGmg== - dependencies: - htmlparser2 "^3.10.0" - -eslint-plugin-import@^2.16.0: - version "2.20.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.20.1.tgz#802423196dcb11d9ce8435a5fc02a6d3b46939b3" - integrity sha512-qQHgFOTjguR+LnYRoToeZWT62XM55MBVXObHM6SKFd1VzDcX/vqT1kAz8ssqigh5eMj8qXcRoXXGZpPP6RfdCw== - dependencies: - array-includes "^3.0.3" - array.prototype.flat "^1.2.1" - 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.1" - has "^1.0.3" - minimatch "^3.0.4" - object.values "^1.1.0" - read-pkg-up "^2.0.0" - resolve "^1.12.0" - -eslint-plugin-jsdoc@^17.1.2: - version "17.1.2" - resolved "https://registry.yarnpkg.com/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-17.1.2.tgz#1d2bcdd918c2665dfabe1d60714663f4afe4ae88" - integrity sha512-x3XbsYUF8VFTMi+Ssdezh4g77PodQyFcZ0DPQOeSkvI5EyHGV31yH3ekcD69JChEb5BkmcUu07FtLFuaxE97PQ== - dependencies: - comment-parser "^0.7.0" - debug "^4.1.1" - jsdoctypeparser "^6.0.0" - lodash "^4.17.15" - object.entries-ponyfill "^1.0.1" - regextras "^0.6.1" - -eslint-plugin-react@^7.12.4: - version "7.19.0" - resolved "https://registry.yarnpkg.com/eslint-plugin-react/-/eslint-plugin-react-7.19.0.tgz#6d08f9673628aa69c5559d33489e855d83551666" - integrity sha512-SPT8j72CGuAP+JFbT0sJHOB80TX/pu44gQ4vXH/cq+hQTiY2PuZ6IHkqXJV6x1b28GDdo1lbInjKUrrdUf0LOQ== - dependencies: - array-includes "^3.1.1" - doctrine "^2.1.0" - has "^1.0.3" - jsx-ast-utils "^2.2.3" - object.entries "^1.1.1" - object.fromentries "^2.0.2" - object.values "^1.1.1" - prop-types "^15.7.2" - resolve "^1.15.1" - semver "^6.3.0" - string.prototype.matchall "^4.0.2" - xregexp "^4.3.0" - -eslint-scope@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-4.0.3.tgz#ca03833310f6889a3264781aa82e63eb9cfe7848" - integrity sha512-p7VutNr1O/QrxysMo3E45FjYDTeXBy0iTltPFNSqKAIfjDSXC+4dj+qfyuD8bfAXrW/y6lW3O76VaYNPKfpKrg== - dependencies: - esrecurse "^4.1.0" - estraverse "^4.1.1" - -eslint-utils@^1.3.1: - version "1.4.3" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-1.4.3.tgz#74fec7c54d0776b6f67e0251040b5806564e981f" - integrity sha512-fbBN5W2xdY45KulGXmLHZ3c3FHfVYmKg0IrAKGOkT/464PQsx2UeIzfz1RmEci+KLm1bBaAzZAh8+/E+XAeZ8Q== - dependencies: - eslint-visitor-keys "^1.1.0" - -eslint-visitor-keys@^1.0.0, eslint-visitor-keys@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-1.1.0.tgz#e2a82cea84ff246ad6fb57f9bde5b46621459ec2" - integrity sha512-8y9YjtM1JBJU/A9Kc+SbaOV4y29sSWckBwMHa+FGtVj5gN/sbnKDf6xJUl+8g7FAij9LVaP8C24DUiH/f/2Z9A== - -eslint@^5.15.3: - version "5.16.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-5.16.0.tgz#a1e3ac1aae4a3fbd8296fcf8f7ab7314cbb6abea" - integrity sha512-S3Rz11i7c8AA5JPv7xAH+dOyq/Cu/VXHiHXBPOU1k/JAM5dXqQPt3qcrhpHSorXmrpu2g0gkIBVXAqCpzfoZIg== - dependencies: - "@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" - -esm@~3.0.84: - version "3.0.84" - resolved "https://registry.yarnpkg.com/esm/-/esm-3.0.84.tgz#bb108989f4673b32d4f62406869c28eed3815a63" - integrity sha512-SzSGoZc17S7P+12R9cg21Bdb7eybX25RnIeRZ80xZs+VZ3kdQKzqTp2k4hZJjR7p9l0186TTXSgrxzlMDBktlw== - -espree@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/espree/-/espree-5.0.1.tgz#5d6526fa4fc7f0788a5cf75b15f30323e2f81f7a" - integrity sha512-qWAZcWh4XE/RwzLJejfcofscgMc9CamR6Tn1+XRXNzrvUSSbiAjGOI/fggztjIi7y9VLPqnICMIPiGyr8JaZ0A== - dependencies: - acorn "^6.0.7" - acorn-jsx "^5.0.0" - eslint-visitor-keys "^1.0.0" - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -espurify@^2.0.0, espurify@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/espurify/-/espurify-2.0.1.tgz#c25b3bb613863daa142edcca052370a1a459f41d" - integrity sha512-7w/dUrReI/QbJFHRwfomTlkQOXaB1NuCrBRn5Y26HXn5gvh18/19AgLbayVrNxXQfkckvgrJloWyvZDuJ7dhEA== - -esquery@^1.0.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.2.0.tgz#a010a519c0288f2530b3404124bfb5f02e9797fe" - integrity sha512-weltsSqdeWIX9G2qQZz7KlTRJdkkOCTPgLYJUz1Hacf48R4YOwGPHO3+ORfWedqJKbq5WQmsgK90n+pFLIKt/Q== - dependencies: - estraverse "^5.0.0" - -esrecurse@^4.1.0: - version "4.2.1" - resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.2.1.tgz#007a3b9fdbc2b3bb87e4879ea19c92fdbd3942cf" - integrity sha512-64RBB++fIOAXPw3P9cy89qfMlvZEXZkqqJkjqqXIvzP5ezRZjW+lPWjw35UX/3EhUPFYbg5ER4JYgDw4007/DQ== - dependencies: - estraverse "^4.1.0" - -estraverse@^4.0.0, estraverse@^4.1.0, estraverse@^4.1.1, estraverse@^4.2.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-4.3.0.tgz#398ad3f3c5a24948be7725e83d11a7de28cdbd1d" - integrity sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw== - -estraverse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.0.0.tgz#ac81750b482c11cca26e4b07e83ed8f75fbcdc22" - integrity sha512-j3acdrMzqrxmJTNj5dbr1YbjacrYgAxVMeF0gK16E3j494mOe7xygM/ZLIguEQ0ETwAg2hlJCtHRGav+y0Ny5A== - -estree-walker@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-0.6.1.tgz#53049143f40c6eb918b23671d1fe3219f3a1b362" - integrity sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w== - -estree-walker@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-1.0.1.tgz#31bc5d612c96b704106b477e6dd5d8aa138cb700" - integrity sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -etag@~1.8.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" - integrity sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc= - -eventemitter3@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/eventemitter3/-/eventemitter3-4.0.0.tgz#d65176163887ee59f386d64c82610b696a4a74eb" - integrity sha512-qerSRB0p+UDEssxTtm6EDKcE7W4OaoisfIMl4CngyEhjpYglocpNg6UEqCvemdGhosAsg4sO2dXJOdyBifPGCg== - -events-to-array@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/events-to-array/-/events-to-array-1.1.2.tgz#2d41f563e1fe400ed4962fe1a4d5c6a7539df7f6" - integrity sha1-LUH1Y+H+QA7Uli/hpNXGp1Od9/Y= - -events@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/events/-/events-2.1.0.tgz#2a9a1e18e6106e0e812aa9ebd4a819b3c29c0ba5" - integrity sha512-3Zmiobend8P9DjmKAty0Era4jV8oJ0yGYe2nJJAxgymF9+N8F2m0hhZiMoWtcfepExzNKZumFU3ksdQbInGWCg== - -evp_bytestokey@^1.0.0, evp_bytestokey@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/evp_bytestokey/-/evp_bytestokey-1.0.3.tgz#7fcbdb198dc71959432efe13842684e0525acb02" - integrity sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA== - dependencies: - md5.js "^1.3.4" - safe-buffer "^5.1.1" - -execa@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8" - integrity sha512-adbxcyWV46qiHyvSp50TKt05tB4tK3HcmF7/nxfAdhnox83seTDbwnaqKO4sXRy7roHAIFqJP/Rw/AuEbX61LA== - dependencies: - cross-spawn "^6.0.0" - get-stream "^4.0.0" - is-stream "^1.1.0" - npm-run-path "^2.0.0" - p-finally "^1.0.0" - signal-exit "^3.0.0" - strip-eof "^1.0.0" - -execall@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/execall/-/execall-1.0.0.tgz#73d0904e395b3cab0658b08d09ec25307f29bb73" - integrity sha1-c9CQTjlbPKsGWLCNCewlMH8pu3M= - dependencies: - clone-regexp "^1.0.0" - -expand-brackets@^2.1.4: - version "2.1.4" - resolved "https://registry.yarnpkg.com/expand-brackets/-/expand-brackets-2.1.4.tgz#b77735e315ce30f6b6eff0f83b04151a22449622" - integrity sha1-t3c14xXOMPa27/D4OwQVGiJEliI= - dependencies: - debug "^2.3.3" - define-property "^0.2.5" - extend-shallow "^2.0.1" - posix-character-classes "^0.1.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -expand-template@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c" - integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg== - -express@^4.10.7: - version "4.17.1" - resolved "https://registry.yarnpkg.com/express/-/express-4.17.1.tgz#4491fc38605cf51f8629d39c2b5d026f98a4c134" - integrity sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g== - dependencies: - accepts "~1.3.7" - array-flatten "1.1.1" - body-parser "1.19.0" - content-disposition "0.5.3" - content-type "~1.0.4" - cookie "0.4.0" - cookie-signature "1.0.6" - debug "2.6.9" - depd "~1.1.2" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - finalhandler "~1.1.2" - fresh "0.5.2" - merge-descriptors "1.0.1" - methods "~1.1.2" - on-finished "~2.3.0" - parseurl "~1.3.3" - path-to-regexp "0.1.7" - proxy-addr "~2.0.5" - qs "6.7.0" - range-parser "~1.2.1" - safe-buffer "5.1.2" - send "0.17.1" - serve-static "1.14.1" - setprototypeof "1.1.1" - statuses "~1.5.0" - type-is "~1.6.18" - utils-merge "1.0.1" - vary "~1.1.2" - -extend-shallow@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" - integrity sha1-Ua99YUrZqfYQ6huvu5idaxxWiQ8= - dependencies: - is-extendable "^0.1.0" - -extend-shallow@^3.0.0, extend-shallow@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-3.0.2.tgz#26a71aaf073b39fb2127172746131c2704028db8" - integrity sha1-Jqcarwc7OfshJxcnRhMcJwQCjbg= - dependencies: - assign-symbols "^1.0.0" - is-extendable "^1.0.1" - -extend@^3.0.0, extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -external-editor@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" - integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== - dependencies: - chardet "^0.7.0" - iconv-lite "^0.4.24" - tmp "^0.0.33" - -extglob@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/extglob/-/extglob-2.0.4.tgz#ad00fe4dc612a9232e8718711dc5cb5ab0285543" - integrity sha512-Nmb6QXkELsuBr24CJSkilo6UHHgbekK5UiZgfE6UHD3Eb27YC6oD+bhcT+tJ6cl8dmsgdQxnWlcry8ksBIBLpw== - dependencies: - array-unique "^0.3.2" - define-property "^1.0.0" - expand-brackets "^2.1.4" - extend-shallow "^2.0.1" - fragment-cache "^0.2.1" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -extract-zip@^1.6.6: - version "1.7.0" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927" - integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA== - dependencies: - concat-stream "^1.6.2" - debug "^2.6.9" - mkdirp "^0.5.4" - yauzl "^2.10.0" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -fast-deep-equal@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.1.tgz#545145077c501491e33b15ec408c294376e94ae4" - integrity sha512-8UEa58QDLauDNfpbrX55Q9jrGHThw2ZMdOky5Gl1CDtVeJDPVrG4Jxx1N8jw2gkWaff5UUuX1KJd+9zGe2B+ZA== - -fast-glob@^2.2.6: - version "2.2.7" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-2.2.7.tgz#6953857c3afa475fff92ee6015d52da70a4cd39d" - integrity sha512-g1KuQwHOZAmOZMuBtHdxDtju+T2RT8jgCC9aANsbpdiDDTSnjgfuVsIBNKbUeJI3oKMRExcfNDtJl4OhbffMsw== - dependencies: - "@mrmlnc/readdir-enhanced" "^2.2.1" - "@nodelib/fs.stat" "^1.1.2" - glob-parent "^3.1.0" - is-glob "^4.0.0" - merge2 "^1.2.3" - micromatch "^3.1.10" - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fast-levenshtein@~2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" - integrity sha1-PYpcZog6FqMMqGQ+hR8Zuqd5eRc= - -fast-safe-stringify@^2.0.7: - version "2.0.7" - resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.0.7.tgz#124aa885899261f68aedb42a7c080de9da608743" - integrity sha512-Utm6CdzT+6xsDk2m8S6uL8VHxNwI6Jub+e9NYTcAms28T84pTa25GJQV9j0CY0N1rM8hK4x6grpF2BQf+2qwVA== - -faye-websocket@~0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/faye-websocket/-/faye-websocket-0.10.0.tgz#4e492f8d04dfb6f89003507f6edbf2d501e7c6f4" - integrity sha1-TkkvjQTftviQA1B/btvy1QHnxvQ= - dependencies: - websocket-driver ">=0.5.1" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4= - dependencies: - pend "~1.2.0" - -fd@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/fd/-/fd-0.0.3.tgz#b3240de86dbf5a345baae7382a07d4713566ff0c" - integrity sha512-iAHrIslQb3U68OcMSP0kkNWabp7sSN6d2TBSb2JO3gcLJVDd4owr/hKM4SFJovFOUeeXeItjYgouEDTMWiVAnA== - -figures@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-2.0.0.tgz#3ab1a2d2a62c8bfb431a0c94cb797a2fce27c962" - integrity sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI= - dependencies: - escape-string-regexp "^1.0.5" - -file-entry-cache@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-4.0.0.tgz#633567d15364aefe0b299e1e217735e8f3a9f6e8" - integrity sha512-AVSwsnbV8vH/UVbvgEhf3saVQXORNv0ZzSkvkhQIaia5Tia+JhGTaa/ePUSVoPHQyGayQNmYfkzFi3WZV5zcpA== - dependencies: - flat-cache "^2.0.1" - -file-entry-cache@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-5.0.1.tgz#ca0f6efa6dd3d561333fb14515065c2fafdf439c" - integrity sha512-bCg29ictuBaKUwwArK4ouCaqDgLZcysCFLmM/Yn/FDoqndh/9vNuQfXRDvTuXKLxfD/JtZQGKFT8MGcJBK644g== - dependencies: - flat-cache "^2.0.1" - -file-uri-to-path@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz#553a7b8446ff6f684359c445f1e37a05dacc33dd" - integrity sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw== - -filelist@^1.0.1: - version "1.0.1" - resolved "https://registry.npmjs.org/filelist/-/filelist-1.0.1.tgz#f10d1a3ae86c1694808e8f20906f43d4c9132dbb" - integrity sha512-8zSK6Nu0DQIC08mUC46sWGXi+q3GGpKydAG36k+JDba6VRpkevvOWUW5a/PhShij4+vHT9M+ghgG7eM+a9JDUQ== - dependencies: - minimatch "^3.0.4" - -fill-range@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-4.0.0.tgz#d544811d428f98eb06a63dc402d2403c328c38f7" - integrity sha1-1USBHUKPmOsGpj3EAtJAPDKMOPc= - dependencies: - extend-shallow "^2.0.1" - is-number "^3.0.0" - repeat-string "^1.6.1" - to-regex-range "^2.1.0" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -finalhandler@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.1.2.tgz#b7e7d000ffd11938d0fdb053506f6ebabe9f587d" - integrity sha512-aAWcW57uxVNrQZqFXjITpW3sIUQmHGG3qSb9mUah9MgMC4NeWhNOlNjXEYq3HjRAvL6arUviZGGJsBg6z0zsWA== - dependencies: - debug "2.6.9" - encodeurl "~1.0.2" - escape-html "~1.0.3" - on-finished "~2.3.0" - parseurl "~1.3.3" - statuses "~1.5.0" - unpipe "~1.0.0" - -find-cache-dir@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-2.1.0.tgz#8d0f94cd13fe43c6c7c261a0d86115ca918c05f7" - integrity sha512-Tq6PixE0w/VMFfCgbONnkiQIVol/JJL7nRMi20fqzA4NRs9AfeqMGeRdPi3wIhYkxjeBaWh2rxwapn5Tu3IqOQ== - dependencies: - commondir "^1.0.1" - make-dir "^2.0.0" - pkg-dir "^3.0.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -find-up@^2.0.0, find-up@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-2.1.0.tgz#45d1b7e506c717ddd482775a2b77920a3c0c57a7" - integrity sha1-RdG35QbHF93UgndaK3eSCjwMV6c= - dependencies: - locate-path "^2.0.0" - -find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - -fireworm@^0.7.0: - version "0.7.1" - resolved "https://registry.yarnpkg.com/fireworm/-/fireworm-0.7.1.tgz#ccf20f7941f108883fcddb99383dbe6e1861c758" - integrity sha1-zPIPeUHxCIg/zduZOD2+bhhhx1g= - dependencies: - async "~0.2.9" - is-type "0.0.1" - lodash.debounce "^3.1.1" - lodash.flatten "^3.0.2" - minimatch "^3.0.2" - -flat-cache@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-2.0.1.tgz#5d296d6f04bda44a4630a301413bdbc2ec085ec0" - integrity sha512-LoQe6yDuUMDzQAEH8sgmh4Md6oZnc/7PjtwjNFSzveXqSHt6ka9fPBuso7IGf9Rz4uqnSnWiFH2B/zj24a5ReA== - dependencies: - flatted "^2.0.0" - rimraf "2.6.3" - write "1.0.3" - -flatted@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-2.0.1.tgz#69e57caa8f0eacbc281d2e2cb458d46fdb449e08" - integrity sha512-a1hQMktqW9Nmqr5aktAux3JMNqaucxGcjtjWnZLHX7yyPCmlSV3M54nGYbqT8K+0GhF3NBgmJCc3ma+WOgX8Jg== - -flow-bin@^0.100.0: - version "0.100.0" - resolved "https://registry.yarnpkg.com/flow-bin/-/flow-bin-0.100.0.tgz#729902726658cfa0a81425d6401f9625cf9f5534" - integrity sha512-jcethhgrslBJukH7Z7883ohFFpzLrdsOEwHxvn5NwuTWbNaE71GAl55/PEBRJwYpDvYkRlqgcNkANTv0x5XjqA== - -flush-write-stream@^1.0.2: - version "1.1.1" - resolved "https://registry.yarnpkg.com/flush-write-stream/-/flush-write-stream-1.1.1.tgz#8dd7d873a1babc207d94ead0c2e0e44276ebf2e8" - integrity sha512-3Z4XhFZ3992uIq0XOqb9AreonueSYphE6oYbpt5+3u06JWklbsPkNv3ZKkP9Bz/r+1MWCaMoSQ28P85+1Yc77w== - dependencies: - inherits "^2.0.3" - readable-stream "^2.3.6" - -follow-redirects@^1.0.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.10.0.tgz#01f5263aee921c6a54fb91667f08f4155ce169eb" - integrity sha512-4eyLK6s6lH32nOvLLwlIOnr9zrL8Sm+OvW4pVTJNoXeGzYIkHVf+pADQi+OJ0E67hiuSLezPVPyBcIZO50TmmQ== - dependencies: - debug "^3.0.0" - -for-each@~0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -for-in@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" - integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= - -foreground-child@^1.3.3, foreground-child@^1.5.6: - version "1.5.6" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-1.5.6.tgz#4fd71ad2dfde96789b980a5c0a295937cb2f5ce9" - integrity sha1-T9ca0t/elnibmApcCilZN8svXOk= - dependencies: - cross-spawn "^4" - signal-exit "^3.0.0" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -forwarded@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.1.2.tgz#98c23dab1175657b8c0573e8ceccd91b0ff18c84" - integrity sha1-mMI9qxF1ZXuMBXPozszZGw/xjIQ= - -fragment-cache@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/fragment-cache/-/fragment-cache-0.2.1.tgz#4290fad27f13e89be7f33799c6bc5a0abfff0d19" - integrity sha1-QpD60n8T6Jvn8zeZxrxaCr//DRk= - dependencies: - map-cache "^0.2.2" - -fresh@0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" - integrity sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac= - -fs-constants@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" - integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== - -fs-exists-cached@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-exists-cached/-/fs-exists-cached-1.0.0.tgz#cf25554ca050dc49ae6656b41de42258989dcbce" - integrity sha1-zyVVTKBQ3EmuZla0HeQiWJidy84= - -fs-extra@^7.0.0: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9" - integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - -fs-mkdirp-stream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs-mkdirp-stream/-/fs-mkdirp-stream-1.0.0.tgz#0b7815fc3201c6a69e14db98ce098c16935259eb" - integrity sha1-C3gV/DIBxqaeFNuYzgmMFpNSWes= - dependencies: - graceful-fs "^4.1.11" - through2 "^2.0.3" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8= - -fsevents@^1.2.7: - version "1.2.12" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-1.2.12.tgz#db7e0d8ec3b0b45724fd4d83d43554a8f1f0de5c" - integrity sha512-Ggd/Ktt7E7I8pxZRbGIs7vwqAPscSESMrCSkx2FtWeqmheJgCo2R74fTsZFCifr0VTPwqRpPv17+6b8Zp7th0Q== - dependencies: - bindings "^1.5.0" - nan "^2.12.1" - -fsevents@~2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.2.tgz#4c0a1fb34bc68e543b4b82a9ec392bfbda840805" - integrity sha512-R4wDiBwZ0KzpgOWetKDug1FZcYhqYnUYKtfZYt4mD5SBz76q0KR4Q9o7GIPamsVPGmW3EYPPJ0dOOjvx32ldZA== - -fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - -function-bind@^1.1.1, function-bind@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-loop@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/function-loop/-/function-loop-1.0.2.tgz#16b93dd757845eacfeca1a8061a6a65c106e0cb2" - integrity sha512-Iw4MzMfS3udk/rqxTiDDCllhGwlOrsr50zViTOO/W6lS/9y6B1J0BD2VZzrnWUYBJsl3aeqjgR5v7bWWhZSYbA== - -functional-red-black-tree@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/functional-red-black-tree/-/functional-red-black-tree-1.0.1.tgz#1b0ab3bd553b2a0d6399d29c0e3ea0b252078327" - integrity sha1-GwqzvVU7Kg1jmdKcDj6gslIHgyc= - -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - -gensync@^1.0.0-beta.1: - version "1.0.0-beta.1" - resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.1.tgz#58f4361ff987e5ff6e1e7a210827aa371eaac269" - integrity sha512-r8EC6NO1sngH/zdD9fiRDLdcgnbayXah+mLgManTaIZJqEC1MZstmnox8KpnI2/fxQwrp5OpCOYWLp4rBl4Jcg== - -geojson-vt@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/geojson-vt/-/geojson-vt-3.2.1.tgz#f8adb614d2c1d3f6ee7c4265cad4bbf3ad60c8b7" - integrity sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg== - -get-assigned-identifiers@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/get-assigned-identifiers/-/get-assigned-identifiers-1.2.0.tgz#6dbf411de648cbaf8d9169ebb0d2d576191e2ff1" - integrity sha512-mBBwmeGTrxEMO4pMaaf/uUEFHnYtwr8FTe8Y/mer4rcV/bye0qGm6pw1bGZFGStxC5O76c5ZAVBGnqHmOaJpdQ== - -get-caller-file@^1.0.1: - version "1.0.3" - resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" - integrity sha512-3t6rVToeoZfYSGd8YoLFR2DJkiQrIiUrGcjvFX2mDw3bn6k2OtwHN0TNCLbBO+w8qTvimhDkv+LSscbJY1vE6w== - -get-caller-file@^2.0.5: - version "2.0.5" - resolved "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" - integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== - -get-npm-tarball-url@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/get-npm-tarball-url/-/get-npm-tarball-url-2.0.1.tgz#43c15223c35096e3e4068d8a6c6747bbdfc23462" - integrity sha512-POrVRGyS9X5w+855/H46JGVYBGuVgJXyIkbsTCzW+sv5x2qH+rfQjc7652DzkgOskF+cqLevA2En7V0hu0gZCg== - dependencies: - normalize-registry-url "^1.0.0" - -get-port@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/get-port/-/get-port-4.2.0.tgz#e37368b1e863b7629c43c5a323625f95cf24b119" - integrity sha512-/b3jarXkH8KJoOMQc3uVGHASwGLPq3gSFJ7tgJm2diza+bydJPTGOibin2steecKeOylE8oY2JERlVWkAJO6yw== - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -get-stdin@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-6.0.0.tgz#9e09bf712b360ab9225e812048f71fde9c89657b" - integrity sha512-jp4tHawyV7+fkkSKyvjuLZswblUtz+SQKzSWnBbii16BuZksJlU1wuBYXY75r+duh/llF1ur6oNwi+2ZzjKZ7g== - -get-stream@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" - integrity sha1-jpQ9E1jcN1VQVOy+LtsFqhdO3hQ= - -get-stream@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" - integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== - dependencies: - pump "^3.0.0" - -get-value@^2.0.3, get-value@^2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" - integrity sha1-3BXKHGcjh8p2vTesCjlbogQqLCg= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -git-up@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/git-up/-/git-up-4.0.1.tgz#cb2ef086653640e721d2042fe3104857d89007c0" - integrity sha512-LFTZZrBlrCrGCG07/dm1aCjjpL1z9L3+5aEeI9SBhAqSc+kiA9Or1bgZhQFNppJX6h/f5McrvJt1mQXTFm6Qrw== - dependencies: - is-ssh "^1.3.0" - parse-url "^5.0.0" - -git-url-parse@^11.1.2: - version "11.1.2" - resolved "https://registry.yarnpkg.com/git-url-parse/-/git-url-parse-11.1.2.tgz#aff1a897c36cc93699270587bea3dbcbbb95de67" - integrity sha512-gZeLVGY8QVKMIkckncX+iCq2/L8PlwncvDFKiWkBn9EtCfYDbliRTTp6qzyQ1VMdITUfq7293zDzfpjdiGASSQ== - dependencies: - git-up "^4.0.0" - -github-from-package@0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce" - integrity sha1-l/tdlr/eiXMxPyDoKI75oWf6ZM4= - -github-slugger@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.2.0.tgz#8ada3286fd046d8951c3c952a8d7854cfd90fd9a" - integrity sha512-wIaa75k1vZhyPm9yWrD08A5Xnx/V+RmzGrpjQuLemGKSb77Qukiaei58Bogrl/LZSADDfPzKJX8jhLs4CRTl7Q== - dependencies: - emoji-regex ">=6.0.0 <=6.1.1" - -github-slugger@^1.0.0, github-slugger@^1.2.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/github-slugger/-/github-slugger-1.3.0.tgz#9bd0a95c5efdfc46005e82a906ef8e2a059124c9" - integrity sha512-gwJScWVNhFYSRDvURk/8yhcFBee6aFjye2a7Lhb2bUyRulpIoek9p0I9Kt7PT67d/nUlZbFu8L9RLiA0woQN8Q== - dependencies: - emoji-regex ">=6.0.0 <=6.1.1" - -gl-matrix@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/gl-matrix/-/gl-matrix-3.2.1.tgz#2d8e35125bf854f49abded8a0c8350b1a4907a26" - integrity sha512-YYVO8jUSf6+SakL4AJmx9Jc7zAZhkJQ+WhdtX3VQe5PJdCOX6/ybY4x1vk+h94ePnjRn6uml68+QxTAJneUpvA== - -gl@^4.5.3: - version "4.5.3" - resolved "https://registry.yarnpkg.com/gl/-/gl-4.5.3.tgz#230c96ce59755a986eb343c371239c67ae511d79" - integrity sha512-W1Dfdx5DHAiRBAXxDW7nVT8N+gqcZ14+s8yKeNAqLiXZI+3ohb5/4J+EJrABgtug0tPlaYmRp1y0n3k91CYQ6w== - dependencies: - bindings "^1.5.0" - bit-twiddle "^1.0.2" - glsl-tokenizer "^2.0.2" - nan "^2.14.1" - node-abi "^2.16.0" - node-gyp "^6.1.0" - prebuild-install "^5.1.0" - -glob-parent@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-3.1.0.tgz#9e6af6299d8d3bd2bd40430832bd113df906c5ae" - integrity sha1-nmr2KZ2NO9K9QEMIMr0RPfkGxa4= - dependencies: - is-glob "^3.1.0" - path-dirname "^1.0.0" - -glob-parent@~5.1.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.1.tgz#b6c1ef417c4e5663ea498f1c45afac6916bbc229" - integrity sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ== - dependencies: - is-glob "^4.0.1" - -glob-stream@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/glob-stream/-/glob-stream-6.1.0.tgz#7045c99413b3eb94888d83ab46d0b404cc7bdde4" - integrity sha1-cEXJlBOz65SIjYOrRtC0BMx73eQ= - dependencies: - extend "^3.0.0" - glob "^7.1.1" - glob-parent "^3.1.0" - is-negated-glob "^1.0.0" - ordered-read-streams "^1.0.0" - pumpify "^1.3.5" - readable-stream "^2.1.5" - remove-trailing-separator "^1.0.1" - to-absolute-glob "^2.0.0" - unique-stream "^2.0.2" - -glob-to-regexp@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/glob-to-regexp/-/glob-to-regexp-0.3.0.tgz#8c5a1494d2066c570cc3bfe4496175acc4d502ab" - integrity sha1-jFoUlNIGbFcMw7/kSWF1rMTVAqs= - -glob@^5.0.14: - version "5.0.15" - resolved "https://registry.yarnpkg.com/glob/-/glob-5.0.15.tgz#1bc936b9e02f4a603fcc222ecf7633d30b8b93b1" - integrity sha1-G8k2ueAvSmA/zCIuz3Yz0wuLk7E= - dependencies: - inflight "^1.0.4" - inherits "2" - minimatch "2 || 3" - once "^1.3.0" - path-is-absolute "^1.0.0" - -glob@^7.0.4, glob@^7.0.5, glob@^7.1.0, glob@^7.1.1, glob@^7.1.2, glob@^7.1.3, glob@^7.1.4, glob@^7.1.6, glob@~7.1.6: - version "7.1.6" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.6.tgz#141f33b81a7c2492e125594307480c46679278a6" - integrity sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.0.4" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-modules@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/global-modules/-/global-modules-2.0.0.tgz#997605ad2345f27f51539bea26574421215c7780" - integrity sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A== - dependencies: - global-prefix "^3.0.0" - -global-prefix@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/global-prefix/-/global-prefix-3.0.0.tgz#fc85f73064df69f50421f47f883fe5b913ba9b97" - integrity sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg== - dependencies: - ini "^1.3.5" - kind-of "^6.0.2" - which "^1.3.1" - -globals-docs@^2.4.0: - version "2.4.1" - resolved "https://registry.yarnpkg.com/globals-docs/-/globals-docs-2.4.1.tgz#d16887709f4a15eb22d97e96343591f87a2ee3db" - integrity sha512-qpPnUKkWnz8NESjrCvnlGklsgiQzlq+rcCxoG5uNQ+dNA7cFMCmn231slLAwS2N/PlkzZ3COL8CcS10jXmLHqg== - -globals@^11.1.0, globals@^11.7.0: - version "11.12.0" - resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" - integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== - -globby@^9.0.0: - version "9.2.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-9.2.0.tgz#fd029a706c703d29bdd170f4b6db3a3f7a7cb63d" - integrity sha512-ollPHROa5mcxDEkwg6bPt3QbEf4pDQSNtd6JPL1YvOvAo/7/0VAm9TccUeoTmarjPw4pfUthSCqcyfNB1I3ZSg== - dependencies: - "@types/glob" "^7.1.1" - array-union "^1.0.2" - dir-glob "^2.2.2" - fast-glob "^2.2.6" - glob "^7.1.3" - ignore "^4.0.3" - pify "^4.0.1" - slash "^2.0.0" - -globjoin@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/globjoin/-/globjoin-0.1.4.tgz#2f4494ac8919e3767c5cbb691e9f463324285d43" - integrity sha1-L0SUrIkZ43Z8XLtpHp9GMyQoXUM= - -glsl-tokenizer@^2.0.2: - version "2.1.5" - resolved "https://registry.yarnpkg.com/glsl-tokenizer/-/glsl-tokenizer-2.1.5.tgz#1c2e78c16589933c274ba278d0a63b370c5fee1a" - integrity sha512-XSZEJ/i4dmz3Pmbnpsy3cKh7cotvFlBiZnDOwnj/05EwNp2XrhQ4XKJxT7/pDt4kp4YcpRSKz8eTV7S+mwV6MA== - dependencies: - through2 "^0.6.3" - -gonzales-pe@^4.2.3: - version "4.2.4" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.2.4.tgz#356ae36a312c46fe0f1026dd6cb539039f8500d2" - integrity sha512-v0Ts/8IsSbh9n1OJRnSfa7Nlxi4AkXIsWB6vPept8FDbL4bXn3FNuxjYtO/nmBGu7GDkL9MFeGebeSu6l55EPQ== - dependencies: - minimist "1.1.x" - -got@^6.7.1: - version "6.7.1" - resolved "https://registry.yarnpkg.com/got/-/got-6.7.1.tgz#240cd05785a9a18e561dc1b44b41c763ef1e8db0" - integrity sha1-JAzQV4WpoY5WHcG0S0HHY+8ejbA= - dependencies: - create-error-class "^3.0.0" - duplexer3 "^0.1.4" - get-stream "^3.0.0" - is-redirect "^1.0.0" - is-retry-allowed "^1.0.0" - is-stream "^1.0.0" - lowercase-keys "^1.0.0" - safe-buffer "^5.0.1" - timed-out "^4.0.0" - unzip-response "^2.0.1" - url-parse-lax "^1.0.0" - -graceful-fs@^4.0.0, graceful-fs@^4.1.11, graceful-fs@^4.1.15, graceful-fs@^4.1.2, graceful-fs@^4.1.6: - version "4.2.3" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.3.tgz#4a12ff1b60376ef09862c2093edd908328be8423" - integrity sha512-a30VEBm4PEdx1dRB7MFK7BejejvCvBronbLjht+sHuGYj8PHs7M/5Z+rt5lw551vZ7yfTCj4Vuyy3mSJytDWRQ== - -graceful-fs@^4.2.2: - version "4.2.4" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" - integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== - -graceful-fs@~4.1.11: - version "4.1.15" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.1.15.tgz#ffb703e1066e8a0eeaa4c8b80ba9253eeefbfb00" - integrity sha512-6uHUhOPEBgQ24HM+r6b/QwWfZq+yiFcipKFrOFiBEnWdy5sdzYoi+pJeQaPI5qOLRFqWmAXUPQNsielzdLoecA== - -grid-index@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/grid-index/-/grid-index-1.1.0.tgz#97f8221edec1026c8377b86446a7c71e79522ea7" - integrity sha512-HZRwumpOGUrHyxO5bqKZL0B0GlUpwtCAzZ42sgxUPniu33R1LSFH5yrIcBCHjkctCAh3mtWKcKd9J4vDDdeVHA== - -growly@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081" - integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE= - -gzip-size@^6.0.0: - version "6.0.0" - resolved "https://registry.npmjs.org/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462" - integrity sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q== - dependencies: - duplexer "^0.1.2" - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -has-binary2@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-binary2/-/has-binary2-1.0.3.tgz#7776ac627f3ea77250cfc332dab7ddf5e4f5d11d" - integrity sha512-G1LWKhDSvhGeAQ8mPVQlqNcOB2sJdwATtZKl2pDKKHfpf/rYj24lkinxf69blJbnsvtqqNU+L3SL50vzZhXOnw== - dependencies: - isarray "2.0.1" - -has-color@~0.1.0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/has-color/-/has-color-0.1.7.tgz#67144a5260c34fc3cca677d041daf52fe7b78b2f" - integrity sha1-ZxRKUmDDT8PMpnfQQdr1L+e3iy8= - -has-cors@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/has-cors/-/has-cors-1.1.0.tgz#5e474793f7ea9843d1bb99c23eef49ff126fff39" - integrity sha1-XkdHk/fqmEPRu5nCPu9J/xJv/zk= - -has-flag@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd" - integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0= - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-symbols@^1.0.0, has-symbols@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" - integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== - -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - -has-value@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" - integrity sha1-ex9YutpiyoJ+wKIHgCVlSEWZXh8= - dependencies: - get-value "^2.0.3" - has-values "^0.1.4" - isobject "^2.0.0" - -has-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-value/-/has-value-1.0.0.tgz#18b281da585b1c5c51def24c930ed29a0be6b177" - integrity sha1-GLKB2lhbHFxR3vJMkw7SmgvmsXc= - dependencies: - get-value "^2.0.6" - has-values "^1.0.0" - isobject "^3.0.0" - -has-values@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-0.1.4.tgz#6d61de95d91dfca9b9a02089ad384bff8f62b771" - integrity sha1-bWHeldkd/Km5oCCJrThL/49it3E= - -has-values@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-values/-/has-values-1.0.0.tgz#95b0b63fec2146619a6fe57fe75628d5a39efe4f" - integrity sha1-lbC2P+whRmGab+V/51Yo1aOe/k8= - dependencies: - is-number "^3.0.0" - kind-of "^4.0.0" - -has@^1.0.0, has@^1.0.3, has@~1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hash-base@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/hash-base/-/hash-base-3.0.4.tgz#5fc8686847ecd73499403319a6b0a3f3f6ae4918" - integrity sha1-X8hoaEfs1zSZQDMZprCj8/auSRg= - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -hash.js@^1.0.0, hash.js@^1.0.3: - version "1.1.7" - resolved "https://registry.yarnpkg.com/hash.js/-/hash.js-1.1.7.tgz#0babca538e8d4ee4a0f8988d68866537a003cf42" - integrity sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA== - dependencies: - inherits "^2.0.3" - minimalistic-assert "^1.0.1" - -hasha@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/hasha/-/hasha-3.0.0.tgz#52a32fab8569d41ca69a61ff1a214f8eb7c8bd39" - integrity sha1-UqMvq4Vp1BymmmH/GiFPjrfIvTk= - dependencies: - is-stream "^1.0.1" - -hast-util-is-element@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hast-util-is-element/-/hast-util-is-element-1.0.4.tgz#059090a05cc02e275df1ad02caf8cb422fcd2e02" - integrity sha512-NFR6ljJRvDcyPP5SbV7MyPBgF47X3BsskLnmw1U34yL+X6YC0MoBx9EyMg8Jtx4FzGH95jw8+c1VPLHaRA0wDQ== - -hast-util-sanitize@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/hast-util-sanitize/-/hast-util-sanitize-1.3.1.tgz#4e60d66336bd67e52354d581967467029a933f2e" - integrity sha512-AIeKHuHx0Wk45nSkGVa2/ujQYTksnDl8gmmKo/mwQi7ag7IBZ8cM3nJ2G86SajbjGP/HRpud6kMkPtcM2i0Tlw== - dependencies: - xtend "^4.0.1" - -hast-util-to-html@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/hast-util-to-html/-/hast-util-to-html-4.0.1.tgz#3666b05afb62bd69f8f5e6c94db04dea19438e2a" - integrity sha512-2emzwyf0xEsc4TBIPmDJmBttIw8R4SXAJiJZoiRR/s47ODYWgOqNoDbf2SJAbMbfNdFWMiCSOrI3OVnX6Qq2Mg== - dependencies: - ccount "^1.0.0" - comma-separated-tokens "^1.0.1" - hast-util-is-element "^1.0.0" - hast-util-whitespace "^1.0.0" - html-void-elements "^1.0.0" - property-information "^4.0.0" - space-separated-tokens "^1.0.0" - stringify-entities "^1.0.1" - unist-util-is "^2.0.0" - xtend "^4.0.1" - -hast-util-whitespace@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/hast-util-whitespace/-/hast-util-whitespace-1.0.4.tgz#e4fe77c4a9ae1cb2e6c25e02df0043d0164f6e41" - integrity sha512-I5GTdSfhYfAPNztx2xJRQpG8cuDSNt599/7YUn7Gx/WxNMsG+a835k97TDkFgk123cwjfwINaZknkKkphx/f2A== - -he@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/he/-/he-1.2.0.tgz#84ae65fa7eafb165fddb61566ae14baf05664f0f" - integrity sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw== - -hex-color-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/hex-color-regex/-/hex-color-regex-1.1.0.tgz#4c06fccb4602fe2602b3c93df82d7e7dbf1a8a8e" - integrity sha512-l9sfDFsuqtOqKDsQdqrMRk0U85RZc0RtOR9yPI7mRVOa4FsR/BVnZ0shmQRM96Ji99kYZP/7hn1cedc1+ApsTQ== - -highlight.js@^9.15.5: - version "9.18.1" - resolved "https://registry.yarnpkg.com/highlight.js/-/highlight.js-9.18.1.tgz#ed21aa001fe6252bb10a3d76d47573c6539fe13c" - integrity sha512-OrVKYz70LHsnCgmbXctv/bfuvntIKDz177h0Co37DQ5jamGZLVmoCVMtjMtNZY3X9DrCcKfklHPNeA0uPZhSJg== - -hmac-drbg@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/hmac-drbg/-/hmac-drbg-1.0.1.tgz#d2745701025a6c775a6c545793ed502fc0c649a1" - integrity sha1-0nRXAQJabHdabFRXk+1QL8DGSaE= - dependencies: - hash.js "^1.0.3" - minimalistic-assert "^1.0.0" - minimalistic-crypto-utils "^1.0.1" - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -hsl-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsl-regex/-/hsl-regex-1.0.0.tgz#d49330c789ed819e276a4c0d272dffa30b18fe6e" - integrity sha1-1JMwx4ntgZ4nakwNJy3/owsY/m4= - -hsla-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/hsla-regex/-/hsla-regex-1.0.0.tgz#c1ce7a3168c8c6614033a4b5f7877f3b225f9c38" - integrity sha1-wc56MWjIxmFAM6S194d/OyJfnDg= - -html-comment-regex@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/html-comment-regex/-/html-comment-regex-1.1.2.tgz#97d4688aeb5c81886a364faa0cad1dda14d433a7" - integrity sha512-P+M65QY2JQ5Y0G9KKdlDpo0zK+/OHptU5AaBwUfAIDJZk1MYf32Frm84EcOytfJE0t5JvkAnKlmjsXDnWzCJmQ== - -html-encoding-sniffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-1.0.2.tgz#e70d84b94da53aa375e11fe3a351be6642ca46f8" - integrity sha512-71lZziiDnsuabfdYiUeWdCVyKuqwWi23L8YeIgV9jSSZHCtb6wB1BKWooH7L3tn4/FuZJMVWyNaIDr4RGmaSYw== - dependencies: - whatwg-encoding "^1.0.1" - -html-escaper@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.1.tgz#beed86b5d2b921e92533aa11bce6d8e3b583dee7" - integrity sha512-hNX23TjWwD3q56HpWjUHOKj1+4KKlnjv9PcmBUYKVpga+2cnb9nDx/B1o0yO4n+RZXZdiNxzx6B24C9aNMTkkQ== - -html-tags@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/html-tags/-/html-tags-2.0.0.tgz#10b30a386085f43cede353cc8fa7cb0deeea668b" - integrity sha1-ELMKOGCF9Dzt41PMj6fLDe7qZos= - -html-void-elements@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/html-void-elements/-/html-void-elements-1.0.5.tgz#ce9159494e86d95e45795b166c2021c2cfca4483" - integrity sha512-uE/TxKuyNIcx44cIWnjr/rfIATDH7ZaOMmstu0CwhFG1Dunhlp4OC6/NMbhiwoq5BpW0ubi303qnEk/PZj614w== - -htmlescape@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/htmlescape/-/htmlescape-1.1.1.tgz#3a03edc2214bca3b66424a3e7959349509cb0351" - integrity sha1-OgPtwiFLyjtmQko+eVk0lQnLA1E= - -htmlparser2@^3.10.0, htmlparser2@^3.9.0: - version "3.10.1" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-3.10.1.tgz#bd679dc3f59897b6a34bb10749c855bb53a9392f" - integrity sha512-IgieNijUMbkDovyoKObU1DUhm1iwNYE/fuifEoEHfd1oZKZDaONBSkal7Y01shxsM49R4XaMdGez3WnF9UfiCQ== - dependencies: - domelementtype "^1.3.1" - domhandler "^2.3.0" - domutils "^1.5.1" - entities "^1.1.1" - inherits "^2.0.1" - readable-stream "^3.1.1" - -http-errors@1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.2.tgz#4f5029cf13239f31036e5b2e55292bcfbcc85c8f" - integrity sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg== - dependencies: - depd "~1.1.2" - inherits "2.0.3" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -http-errors@~1.7.2: - version "1.7.3" - resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-1.7.3.tgz#6c619e4f9c60308c38519498c14fbb10aacebb06" - integrity sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw== - dependencies: - depd "~1.1.2" - inherits "2.0.4" - setprototypeof "1.1.1" - statuses ">= 1.5.0 < 2" - toidentifier "1.0.0" - -"http-parser-js@>=0.4.0 <0.4.11": - version "0.4.10" - resolved "https://registry.yarnpkg.com/http-parser-js/-/http-parser-js-0.4.10.tgz#92c9c1374c35085f75db359ec56cc257cbb93fa4" - integrity sha1-ksnBN0w1CF912zWexWzCV8u5P6Q= - -http-proxy@^1.13.1: - version "1.18.0" - resolved "https://registry.yarnpkg.com/http-proxy/-/http-proxy-1.18.0.tgz#dbe55f63e75a347db7f3d99974f2692a314a6a3a" - integrity sha512-84I2iJM/n1d4Hdgc6y2+qY5mDaz2PUVjlg9znE9byl+q0uC3DeByqBGReQu5tpLK0TAqTIXScRUV+dg7+bUPpQ== - dependencies: - eventemitter3 "^4.0.0" - follow-redirects "^1.0.0" - requires-port "^1.0.0" - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -https-browserify@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/https-browserify/-/https-browserify-1.0.0.tgz#ec06c10e0a34c0f2faf199f7fd7fc78fffd03c73" - integrity sha1-7AbBDgo0wPL68Zn3/X/Hj//QPHM= - -https-proxy-agent@^2.2.1: - version "2.2.4" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz#4ee7a737abd92678a293d9b34a1af4d0d08c787b" - integrity sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg== - dependencies: - agent-base "^4.3.0" - debug "^3.1.0" - -iconv-lite@0.4, iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: - version "0.4.24" - resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" - integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== - dependencies: - safer-buffer ">= 2.1.2 < 3" - -ieee754@^1.1.12, ieee754@^1.1.4: - version "1.1.13" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" - integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== - -ignore-walk@^3.0.1, ignore-walk@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - -ignore@^4.0.3, ignore@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-4.0.6.tgz#750e3db5862087b4737ebac8207ffd1ef27b25fc" - integrity sha512-cyFDKrqc/YdcWFniJhzI42+AzS+gNwmUzOSFcRCQYwySuBBBy/KjuxWLZ/FHEH6Moq1NizMOBWyTcv8O4OZIMg== - -ignore@^5.0.4: - version "5.1.4" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.4.tgz#84b7b3dbe64552b6ef0eca99f6743dbec6d97adf" - integrity sha512-MzbUSahkTW1u7JpKKjY7LCARd1fU5W2rLdxlM4kdkayuCwZImjkpluF9CM1aLewYJguPDqewLam18Y6AU69A8A== - -immediate@~3.0.5: - version "3.0.6" - resolved "https://registry.yarnpkg.com/immediate/-/immediate-3.0.6.tgz#9db1dbd0faf8de6fbe0f5dd5e56bb606280de69b" - integrity sha1-nbHb0Pr43m++D13V5Wu2BigN5ps= - -import-cwd@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-cwd/-/import-cwd-2.1.0.tgz#aa6cf36e722761285cb371ec6519f53e2435b0a9" - integrity sha1-qmzzbnInYShcs3HsZRn1PiQ1sKk= - dependencies: - import-from "^2.1.0" - -import-fresh@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-2.0.0.tgz#d81355c15612d386c61f9ddd3922d4304822a546" - integrity sha1-2BNVwVYS04bGH53dOSLUMEgipUY= - dependencies: - caller-path "^2.0.0" - resolve-from "^3.0.0" - -import-fresh@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.2.1.tgz#633ff618506e793af5ac91bf48b72677e15cbe66" - integrity sha512-6e1q1cnWP2RXD9/keSkxHScg508CdXqXWgWBaETNhyuBFz+kUZlKboh+ISK+bU++DmbHimVBrOz/zzPe0sZ3sQ== - dependencies: - parent-module "^1.0.0" - resolve-from "^4.0.0" - -import-from@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/import-from/-/import-from-2.1.0.tgz#335db7f2a7affd53aaa471d4b8021dee36b7f3b1" - integrity sha1-M1238qev/VOqpHHUuAId7ja387E= - dependencies: - resolve-from "^3.0.0" - -import-lazy@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-lazy/-/import-lazy-3.1.0.tgz#891279202c8a2280fdbd6674dbd8da1a1dfc67cc" - integrity sha512-8/gvXvX2JMn0F+CDlSC4l6kOmVaLOO3XLkksI7CI3Ud95KDYJuYur2b9P/PUt/i/pDAMd/DulQsNbbbmRRsDIQ== - -imurmurhash@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" - integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -indent-string@^3.0.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-3.2.0.tgz#4a5fd6d27cc332f37e5419a504dbb837105c9289" - integrity sha1-Sl/W0nzDMvN+VBmlBNu4NxBckok= - -indexes-of@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/indexes-of/-/indexes-of-1.0.1.tgz#f30f716c8e2bd346c7b67d3df3915566a7c05607" - integrity sha1-8w9xbI4r00bHtn0985FVZqfAVgc= - -indexof@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/indexof/-/indexof-0.0.1.tgz#82dc336d232b9062179d05ab3293a66059fd435d" - integrity sha1-gtwzbSMrkGIXnQWrMpOmYFn9Q10= - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk= - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@2.0.4, inherits@^2.0.0, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -inherits@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.1.tgz#b17d08d326b4423e568eff719f91b0b1cbdf69f1" - integrity sha1-sX0I0ya0Qj5Wjv9xn5GwscvfafE= - -inherits@2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.3.tgz#633c2c83e3da42a502f52466022480f4208261de" - integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= - -ini@^1.3.5, ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -inline-source-map@~0.6.0: - version "0.6.2" - resolved "https://registry.yarnpkg.com/inline-source-map/-/inline-source-map-0.6.2.tgz#f9393471c18a79d1724f863fa38b586370ade2a5" - integrity sha1-+Tk0ccGKedFyT4Y/o4tYY3Ct4qU= - dependencies: - source-map "~0.5.3" - -inquirer@^6.2.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.2.tgz#ad50942375d036d327ff528c08bd5fab089928ca" - integrity sha512-cntlB5ghuB0iuO65Ovoi8ogLHiWGs/5yNrtUcKjFhSSiVeAIVpD7koaSU9RM8mpXw5YDi9RdYXGQMaOURB7ycQ== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - -insert-module-globals@^7.0.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/insert-module-globals/-/insert-module-globals-7.2.0.tgz#ec87e5b42728479e327bd5c5c71611ddfb4752ba" - integrity sha512-VE6NlW+WGn2/AeOMd496AHFYmE7eLKkUY6Ty31k4og5vmA3Fjuwe9v6ifH6Xx/Hz27QvdoMoviw1/pqWRB09Sw== - dependencies: - JSONStream "^1.0.3" - acorn-node "^1.5.2" - combine-source-map "^0.8.0" - concat-stream "^1.6.1" - is-buffer "^1.1.0" - path-is-absolute "^1.0.1" - process "~0.11.0" - through2 "^2.0.0" - undeclared-identifiers "^1.1.2" - xtend "^4.0.0" - -internal-slot@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.2.tgz#9c2e9fb3cd8e5e4256c6f45fe310067fcfa378a3" - integrity sha512-2cQNfwhAfJIkU4KZPkDI+Gj5yNNnbqi40W9Gge6dfnk4TocEVm00B3bdiL+JINrbGJil2TeHvM4rETGzk/f/0g== - dependencies: - es-abstract "^1.17.0-next.1" - has "^1.0.3" - side-channel "^1.0.2" - -invariant@^2.2.2, invariant@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/invariant/-/invariant-2.2.4.tgz#610f3c92c9359ce1db616e538008d23ff35158e6" - integrity sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA== - dependencies: - loose-envify "^1.0.0" - -invert-kv@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/invert-kv/-/invert-kv-2.0.0.tgz#7393f5afa59ec9ff5f67a27620d11c226e3eec02" - integrity sha512-wPVv/y/QQ/Uiirj/vh3oP+1Ww+AWehmi1g5fFWGPF6IpCBCDVrhgHRMvrLfdYcwDh3QJbGXDW4JAuzxElLSqKA== - -ipaddr.js@1.9.1: - version "1.9.1" - resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" - integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== - -is-absolute-url@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-absolute-url/-/is-absolute-url-2.1.0.tgz#50530dfb84fcc9aa7dbe7852e83a37b93b9f2aa6" - integrity sha1-UFMN+4T8yap9vnhS6Do3uTufKqY= - -is-absolute@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-absolute/-/is-absolute-1.0.0.tgz#395e1ae84b11f26ad1795e73c17378e48a301576" - integrity sha512-dOWoqflvcydARa360Gvv18DZ/gRuHKi2NU/wU5X1ZFzdYfH29nkiNZsF3mp4OJ3H4yo9Mx8A/uAGNzpzPN3yBA== - dependencies: - is-relative "^1.0.0" - is-windows "^1.0.1" - -is-accessor-descriptor@^0.1.6: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-0.1.6.tgz#a9e12cb3ae8d876727eeef3843f8a0897b5c98d6" - integrity sha1-qeEss66Nh2cn7u84Q/igiXtcmNY= - dependencies: - kind-of "^3.0.2" - -is-accessor-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-accessor-descriptor/-/is-accessor-descriptor-1.0.0.tgz#169c2f6d3df1f992618072365c9b0ea1f6878656" - integrity sha512-m5hnHTkcVsPfqx3AKlyttIPb7J+XykHvJP2B9bZDjlhLIoEq4XoK64Vg7boZlVWYK6LUY94dYPEE7Lh0ZkZKcQ== - dependencies: - kind-of "^6.0.0" - -is-alphabetical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphabetical/-/is-alphabetical-1.0.4.tgz#9e7d6b94916be22153745d184c298cbf986a686d" - integrity sha512-DwzsA04LQ10FHTZuL0/grVDk4rFoVH1pjAToYwBrHSxcrBIGQuXrQMtD5U1b0U2XVgKZCTLLP8u2Qxqhy3l2Vg== - -is-alphanumeric@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-alphanumeric/-/is-alphanumeric-1.0.0.tgz#4a9cef71daf4c001c1d81d63d140cf53fd6889f4" - integrity sha1-Spzvcdr0wAHB2B1j0UDPU/1oifQ= - -is-alphanumerical@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-alphanumerical/-/is-alphanumerical-1.0.4.tgz#7eb9a2431f855f6b1ef1a78e326df515696c4dbf" - integrity sha512-UzoZUr+XfVz3t3v4KyGEniVL9BDRoQtY7tOyrRybkVNjDFWyo1yhXNGrrBTQxp3ib9BLAWs7k2YKBQsFRkZG9A== - dependencies: - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - -is-arguments@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.0.4.tgz#3faf966c7cba0ff437fb31f6250082fcf0448cf3" - integrity sha512-xPh0Rmt8NE65sNzvyUmWgI1tz3mKq74lGA0mL8LYZcoIzKOzDh6HmrYm3d18k60nHerC8A9Km8kYu87zfSFnLA== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-arrayish@^0.3.1: - version "0.3.2" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.3.2.tgz#4574a2ae56f7ab206896fb431eaeed066fdf8f03" - integrity sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ== - -is-binary-path@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-1.0.1.tgz#75f16642b480f187a711c814161fd3a4a7655898" - integrity sha1-dfFmQrSA8YenEcgUFh/TpKdlWJg= - dependencies: - binary-extensions "^1.0.0" - -is-binary-path@~2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-binary-path/-/is-binary-path-2.1.0.tgz#ea1f7f3b80f064236e83470f86c09c254fb45b09" - integrity sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw== - dependencies: - binary-extensions "^2.0.0" - -is-buffer@^1.1.0, is-buffer@^1.1.4, is-buffer@^1.1.5: - version "1.1.6" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" - integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== - -is-buffer@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" - integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== - -is-builtin-module@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-builtin-module/-/is-builtin-module-3.0.0.tgz#137d3d2425023a19a660fb9dd6ddfabe52c03466" - integrity sha512-/93sDihsAD652hrMEbJGbMAVBf1qc96kyThHQ0CAOONHaE3aROLpTjDe4WQ5aoC5ITHFxEq1z8XqSU7km+8amw== - dependencies: - builtin-modules "^3.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.1.5: - version "1.1.5" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.1.5.tgz#f7e46b596890456db74e7f6e976cb3273d06faab" - integrity sha512-ESKv5sMCJB2jnHTWZ3O5itG+O128Hsus4K4Qh1h2/cgn2vbgnLSVqfV46AeJA9D5EeeLa9w81KUXMtn34zhX+Q== - -is-color-stop@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-color-stop/-/is-color-stop-1.1.0.tgz#cfff471aee4dd5c9e158598fbe12967b5cdad345" - integrity sha1-z/9HGu5N1cnhWFmPvhKWe1za00U= - dependencies: - css-color-names "^0.0.4" - hex-color-regex "^1.1.0" - hsl-regex "^1.0.0" - hsla-regex "^1.0.0" - rgb-regex "^1.0.1" - rgba-regex "^1.0.0" - -is-data-descriptor@^0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-0.1.4.tgz#0b5ee648388e2c860282e793f1856fec3f301b56" - integrity sha1-C17mSDiOLIYCgueT8YVv7D8wG1Y= - dependencies: - kind-of "^3.0.2" - -is-data-descriptor@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-data-descriptor/-/is-data-descriptor-1.0.0.tgz#d84876321d0e7add03990406abbbbd36ba9268c7" - integrity sha512-jbRXy1FmtAoCjQkVmIVYwuuqDFUbaOeDjmed1tOGPrsMhtJA4rD9tkgA0F1qJ3gRFRXcHYVkdeaP50Q5rE/jLQ== - dependencies: - kind-of "^6.0.0" - -is-date-object@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.2.tgz#bda736f2cd8fd06d32844e7743bfa7494c3bfd7e" - integrity sha512-USlDT524woQ08aoZFzh3/Z6ch9Y/EWXEHQ/AaRN0SkKq4t2Jw2R2339tSXmwuVoY7LLlBCbOIlx2myP/L5zk0g== - -is-decimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-decimal/-/is-decimal-1.0.4.tgz#65a3a5958a1c5b63a706e1b333d7cd9f630d3fa5" - integrity sha512-RGdriMmQQvZ2aqaQq3awNA6dCGtKpiDFcOzrTWrDAT2MiWrKQVPmxLGHl7Y2nNu6led0kEyoX0enY0qXYsv9zw== - -is-descriptor@^0.1.0: - version "0.1.6" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-0.1.6.tgz#366d8240dde487ca51823b1ab9f07a10a78251ca" - integrity sha512-avDYr0SB3DwO9zsMov0gKCESFYqCnE4hq/4z3TdUlukEy5t9C0YRq7HLrsN52NAcqXKaepeCD0n+B0arnVG3Hg== - dependencies: - is-accessor-descriptor "^0.1.6" - is-data-descriptor "^0.1.4" - kind-of "^5.0.0" - -is-descriptor@^1.0.0, is-descriptor@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-descriptor/-/is-descriptor-1.0.2.tgz#3b159746a66604b04f8c81524ba365c5f14d86ec" - integrity sha512-2eis5WqQGV7peooDyLmNEPUrps9+SXX5c9pL3xEB+4e9HnGuDa7mB7kHxHw4CbqS9k1T2hOH3miL8n8WtiYVtg== - dependencies: - is-accessor-descriptor "^1.0.0" - is-data-descriptor "^1.0.0" - kind-of "^6.0.2" - -is-directory@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1" - integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE= - -is-docker@^2.0.0: - version "2.1.1" - resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" - integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== - -is-extendable@^0.1.0, is-extendable@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89" - integrity sha1-YrEQ4omkcUGOPsNqYX1HLjAd/Ik= - -is-extendable@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-1.0.1.tgz#a7470f9e426733d81bd81e1155264e3a3507cab4" - integrity sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA== - dependencies: - is-plain-object "^2.0.4" - -is-extglob@^2.1.0, is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha1-qIwCU1eR8C7TfHahueqXc8gz+MI= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-fullwidth-code-point@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz#a3b30a5c4f199183167aaab93beefae3ddfb654f" - integrity sha1-o7MKXE8ZkYMWeqq5O+764937ZU8= - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-3.1.0.tgz#7ba5ae24217804ac70707b96922567486cc3e84a" - integrity sha1-e6WuJCF4BKxwcHuWkiVnSGzD6Eo= - dependencies: - is-extglob "^2.1.0" - -is-glob@^4.0.0, is-glob@^4.0.1, is-glob@~4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.1.tgz#7567dbe9f2f5e2467bc77ab83c4a29482407a5dc" - integrity sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg== - dependencies: - is-extglob "^2.1.1" - -is-hexadecimal@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-hexadecimal/-/is-hexadecimal-1.0.4.tgz#cc35c97588da4bd49a8eedd6bc4082d44dcb23a7" - integrity sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw== - -is-module@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-module/-/is-module-1.0.0.tgz#3258fb69f78c14d5b815d664336b4cffb6441591" - integrity sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE= - -is-negated-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-negated-glob/-/is-negated-glob-1.0.0.tgz#6910bca5da8c95e784b5751b976cf5a10fee36d2" - integrity sha1-aRC8pdqMleeEtXUbl2z1oQ/uNtI= - -is-number@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195" - integrity sha1-JP1iAaR4LPUFYcgQJ2r8fRLXEZU= - dependencies: - kind-of "^3.0.2" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" - integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== - -is-plain-obj@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" - integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= - -is-plain-object@^2.0.3, is-plain-object@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" - integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== - dependencies: - isobject "^3.0.1" - -is-plain-object@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.0.tgz#47bfc5da1b5d50d64110806c199359482e75a928" - integrity sha512-tZIpofR+P05k8Aocp7UI/2UTa9lTJSebCXpFFoR9aibpokDj/uXBsJ8luUu0tTVYKkMU6URDUuOfJZ7koewXvg== - dependencies: - isobject "^4.0.0" - -is-promise@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.1.0.tgz#79a2a9ece7f096e80f36d2b2f3bc16c1ff4bf3fa" - integrity sha1-eaKp7OfwlugPNtKy87wWwf9L8/o= - -is-redirect@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" - integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= - -is-reference@^1.1.2: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-reference/-/is-reference-1.1.4.tgz#3f95849886ddb70256a3e6d062b1a68c13c51427" - integrity sha512-uJA/CDPO3Tao3GTrxYn6AwkM4nUPJiGGYu5+cB8qbC7WGFlrKZbiRo7SFKxUAEpFUfiHofWCXBUNhvYJMh+6zw== - dependencies: - "@types/estree" "0.0.39" - -is-regex@^1.0.4, is-regex@^1.0.5, is-regex@~1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.0.5.tgz#39d589a358bf18967f726967120b8fc1aed74eae" - integrity sha512-vlKW17SNq44owv5AQR3Cq0bQPEb8+kF3UKZ2fiZNOWtztYE5i0CzCZxFDwO58qAOWtxdBRVO/V5Qin1wjCqFYQ== - dependencies: - has "^1.0.3" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha1-/S2INUXEa6xaYz57mgnof6LLUGk= - -is-relative@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-relative/-/is-relative-1.0.0.tgz#a1bb6935ce8c5dba1e8b9754b9b2dcc020e2260d" - integrity sha512-Kw/ReK0iqwKeu0MITLFuj0jbPAmEiOsIwyIXvvbfa6QfmN9pkD1M+8pdk7Rl/dTKbH34/XBFMbgD4iMJhLQbGA== - dependencies: - is-unc-path "^1.0.0" - -is-resolvable@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-resolvable/-/is-resolvable-1.1.0.tgz#fb18f87ce1feb925169c9a407c19318a3206ed88" - integrity sha512-qgDYXFSR5WvEfuS5dMj6oTMEbrrSaM0CrFk2Yiq/gXnBvD9pMa2jGXxyhGLfvhZpuMZe18CJpFxAt3CRs42NMg== - -is-retry-allowed@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/is-retry-allowed/-/is-retry-allowed-1.2.0.tgz#d778488bd0a4666a3be8a1482b9f2baafedea8b4" - integrity sha512-RUbUeKwvm3XG2VYamhJL1xFktgjvPzL0Hq8C+6yrWIswDy3BIXGqCxhxkc30N9jqK311gVU137K8Ei55/zVJRg== - -is-ssh@^1.3.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/is-ssh/-/is-ssh-1.3.1.tgz#f349a8cadd24e65298037a522cf7520f2e81a0f3" - integrity sha512-0eRIASHZt1E68/ixClI8bp2YK2wmBPVWEismTs6M+M099jKgrzl/3E976zIbImSIob48N2/XGe9y7ZiYdImSlg== - dependencies: - protocols "^1.1.0" - -is-stream@^1.0.0, is-stream@^1.0.1, is-stream@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" - integrity sha1-EtSj3U5o4Lec6428hBc66A2RykQ= - -is-string@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.5.tgz#40493ed198ef3ff477b8c7f92f644ec82a5cd3a6" - integrity sha512-buY6VNRjhQMiF1qWDouloZlQbRhDPCebwxSjxMjxgemYT46YMd2NR0/H+fBhEfWX4A/w9TBJ+ol+okqJKFE6vQ== - -is-supported-regexp-flag@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-supported-regexp-flag/-/is-supported-regexp-flag-1.0.1.tgz#21ee16518d2c1dd3edd3e9a0d57e50207ac364ca" - integrity sha512-3vcJecUUrpgCqc/ca0aWeNu64UGgxcvO60K/Fkr1N6RSvfGCTU60UKN68JDmKokgba0rFFJs12EnzOQa14ubKQ== - -is-svg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-svg/-/is-svg-3.0.0.tgz#9321dbd29c212e5ca99c4fa9794c714bcafa2f75" - integrity sha512-gi4iHK53LR2ujhLVVj+37Ykh9GLqYHX6JOVXbLAucaG/Cqw9xwdFOjDM2qeifLs1sF1npXXFvDu0r5HNgCMrzQ== - dependencies: - html-comment-regex "^1.1.0" - -is-symbol@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.3.tgz#38e1014b9e6329be0de9d24a414fd7441ec61937" - integrity sha512-OwijhaRSgqvhm/0ZdAcXNZt9lYdKFpcRDT5ULUuYXPoT794UNOdU+gpT6Rzo7b4V2HUl/op6GqY894AZwv9faQ== - dependencies: - has-symbols "^1.0.1" - -is-type@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/is-type/-/is-type-0.0.1.tgz#f651d85c365d44955d14a51d8d7061f3f6b4779c" - integrity sha1-9lHYXDZdRJVdFKUdjXBh8/a0d5w= - dependencies: - core-util-is "~1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-unc-path@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-unc-path/-/is-unc-path-1.0.0.tgz#d731e8898ed090a12c352ad2eaed5095ad322c9d" - integrity sha512-mrGpVd0fs7WWLfVsStvgF6iEJnbjDFZh9/emhRDcGWTduTfNHd9CHeUwH3gYIjdbwo4On6hunkztwOaAw0yllQ== - dependencies: - unc-path-regex "^0.1.2" - -is-url@^1.2.2: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-utf8@^0.2.0, is-utf8@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -is-valid-glob@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-valid-glob/-/is-valid-glob-1.0.0.tgz#29bf3eff701be2d4d315dbacc39bc39fe8f601aa" - integrity sha1-Kb8+/3Ab4tTTFdusw5vDn+j2Aao= - -is-whitespace-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-whitespace-character/-/is-whitespace-character-1.0.4.tgz#0858edd94a95594c7c9dd0b5c174ec6e45ee4aa7" - integrity sha512-SDweEzfIZM0SJV0EUga669UTKlmL0Pq8Lno0QDQsPnvECB3IM2aP0gdx5TrU0A01MAPfViaZiI2V1QMZLaKK5w== - -is-windows@^1.0.1, is-windows@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d" - integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA== - -is-word-character@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-word-character/-/is-word-character-1.0.4.tgz#ce0e73216f98599060592f62ff31354ddbeb0230" - integrity sha512-5SMO8RVennx3nZrqtKwCGyyetPE9VDba5ugvKLaD4KopPG5kR4mQ7tNt/r7feL5yt5h3lpuBbIUmCOG2eSzXHA== - -is-wsl@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d" - integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0= - -is-wsl@^2.1.1: - version "2.2.0" - resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== - dependencies: - is-docker "^2.0.0" - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@1.0.0, isarray@^1.0.0, isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isarray@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.1.tgz#a37d94ed9cda2d59865c9f76fe596ee1f338741e" - integrity sha1-o32U7ZzaLVmGXJ92/llu4fM4dB4= - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha1-6PvzdNxVb/iUehDcsFctYz8s+hA= - -isobject@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-2.1.0.tgz#f065561096a3f1da2ef46272f815c840d87e0c89" - integrity sha1-8GVWEJaj8dou9GJy+BXIQNh+DIk= - dependencies: - isarray "1.0.0" - -isobject@^3.0.0, isobject@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-3.0.1.tgz#4e431e92b11a9731636aa1f9c8d1ccbcfdab78df" - integrity sha1-TkMekrEalzFjaqH5yNHMvP2reN8= - -isobject@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/isobject/-/isobject-4.0.0.tgz#3f1c9155e73b192022a80819bacd0343711697b0" - integrity sha512-S/2fF5wH8SJA/kmwr6HYhK/RI/OkhD84k8ntalo0iJjZikgq1XFvR5M8NPT1x5F7fBwCG3qHfnzeP/Vh/ZxCUA== - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -istanbul-lib-coverage@^2.0.3, istanbul-lib-coverage@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.5.tgz#675f0ab69503fad4b1d849f736baaca803344f49" - integrity sha512-8aXznuEPCJvGnMSRft4udDRDtb1V3pkQkMMI5LI+6HuQz5oQ4J2UFn1H82raA3qJtyOLkkwVqICBQkjnGtn5mA== - -istanbul-lib-hook@^2.0.3: - version "2.0.7" - resolved "https://registry.yarnpkg.com/istanbul-lib-hook/-/istanbul-lib-hook-2.0.7.tgz#c95695f383d4f8f60df1f04252a9550e15b5b133" - integrity sha512-vrRztU9VRRFDyC+aklfLoeXyNdTfga2EI3udDGn4cZ6fpSXpHLV9X6CHvfoMCPtggg8zvDDmC4b9xfu0z6/llA== - dependencies: - append-transform "^1.0.0" - -istanbul-lib-instrument@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-3.3.0.tgz#a5f63d91f0bbc0c3e479ef4c5de027335ec6d630" - integrity sha512-5nnIN4vo5xQZHdXno/YDXJ0G+I3dAm4XgzfSVTPLQpj/zAV2dV6Juy0yaf10/zrJOJeHoN3fraFe+XRq2bFVZA== - dependencies: - "@babel/generator" "^7.4.0" - "@babel/parser" "^7.4.3" - "@babel/template" "^7.4.0" - "@babel/traverse" "^7.4.3" - "@babel/types" "^7.4.0" - istanbul-lib-coverage "^2.0.5" - semver "^6.0.0" - -istanbul-lib-report@^2.0.4: - version "2.0.8" - resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-2.0.8.tgz#5a8113cd746d43c4889eba36ab10e7d50c9b4f33" - integrity sha512-fHBeG573EIihhAblwgxrSenp0Dby6tJMFR/HvlerBsrCTD5bkUuoNtn3gVh29ZCS824cGGBPn7Sg7cNk+2xUsQ== - dependencies: - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - supports-color "^6.1.0" - -istanbul-lib-source-maps@^3.0.2: - version "3.0.6" - resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-3.0.6.tgz#284997c48211752ec486253da97e3879defba8c8" - integrity sha512-R47KzMtDJH6X4/YW9XTx+jrLnZnscW4VpNN+1PViSYTejLVPWv7oov+Duf8YQSPyVRUvueQqz1TcsC6mooZTXw== - dependencies: - debug "^4.1.1" - istanbul-lib-coverage "^2.0.5" - make-dir "^2.1.0" - rimraf "^2.6.3" - source-map "^0.6.1" - -istanbul-reports@^2.1.1: - version "2.2.7" - resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-2.2.7.tgz#5d939f6237d7b48393cc0959eab40cd4fd056931" - integrity sha512-uu1F/L1o5Y6LzPVSVZXNOoD/KXpJue9aeLRd0sM9uMXfZvzomB0WxVamWb5ue8kA2vVWEmW7EG+A5n3f1kqHKg== - dependencies: - html-escaper "^2.0.0" - -jake@^10.6.1: - version "10.8.2" - resolved "https://registry.npmjs.org/jake/-/jake-10.8.2.tgz#ebc9de8558160a66d82d0eadc6a2e58fbc500a7b" - integrity sha512-eLpKyrfG3mzvGE2Du8VoPbeSkRry093+tyNjdYaBbJS9v17knImYGNXQCUV0gLxQtF82m3E8iRb/wdSQZLoq7A== - dependencies: - async "0.9.x" - chalk "^2.4.2" - filelist "^1.0.1" - minimatch "^3.0.4" - -jest-worker@^24.9.0: - version "24.9.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-24.9.0.tgz#5dbfdb5b2d322e98567898238a9697bcce67b3e5" - integrity sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw== - dependencies: - merge-stream "^2.0.0" - supports-color "^6.1.0" - -"js-tokens@^3.0.0 || ^4.0.0", js-tokens@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" - integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== - -js-yaml@^3.10.0, js-yaml@^3.12.1, js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.2.5, js-yaml@^3.2.7, js-yaml@^3.3.1: - version "3.13.1" - resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" - integrity sha512-YfbcO7jXDdyj0DGxYVSlSeQNHbD7XPWvrVWeVUujrQEoZzWJIRrCPoyk6kL6IAjAG2IolMK4T0hNUe0HOUs5Jw== - dependencies: - argparse "^1.0.7" - esprima "^4.0.0" - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -jsdoctypeparser@^6.0.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsdoctypeparser/-/jsdoctypeparser-6.1.0.tgz#acfb936c26300d98f1405cb03e20b06748e512a8" - integrity sha512-UCQBZ3xCUBv/PLfwKAJhp6jmGOSLFNKzrotXGNgbKhWvz27wPsCsVeP7gIcHPElQw2agBmynAitXqhxR58XAmA== - -jsdom@^13.0.0: - version "13.2.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-13.2.0.tgz#b1a0dbdadc255435262be8ea3723d2dba0d7eb3a" - integrity sha512-cG1NtMWO9hWpqRNRR3dSvEQa8bFI6iLlqU2x4kwX51FQjp0qus8T9aBaAO6iGp3DeBrhdwuKxckknohkmfvsFw== - dependencies: - abab "^2.0.0" - acorn "^6.0.4" - acorn-globals "^4.3.0" - array-equal "^1.0.0" - cssom "^0.3.4" - cssstyle "^1.1.1" - data-urls "^1.1.0" - domexception "^1.0.1" - escodegen "^1.11.0" - html-encoding-sniffer "^1.0.2" - nwsapi "^2.0.9" - parse5 "5.1.0" - pn "^1.1.0" - request "^2.88.0" - request-promise-native "^1.0.5" - saxes "^3.1.5" - symbol-tree "^3.2.2" - tough-cookie "^2.5.0" - w3c-hr-time "^1.0.1" - w3c-xmlserializer "^1.0.1" - webidl-conversions "^4.0.2" - whatwg-encoding "^1.0.5" - whatwg-mimetype "^2.3.0" - whatwg-url "^7.0.0" - ws "^6.1.2" - xml-name-validator "^3.0.0" - -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== - -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha1-597mbjXW/Bb3EP6R1c9p9w8IkR0= - -json-parse-better-errors@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz#bb867cfb3450e69107c131d1c514bab3dc8bcaa9" - integrity sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw== - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stable-stringify-without-jsonify@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" - integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= - -json-stable-stringify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/json-stable-stringify/-/json-stable-stringify-0.0.1.tgz#611c23e814db375527df851193db59dd2af27f45" - integrity sha1-YRwj6BTbN1Un34URk9tZ3Sryf0U= - dependencies: - jsonify "~0.0.0" - -json-stringify-pretty-compact@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/json-stringify-pretty-compact/-/json-stringify-pretty-compact-2.0.0.tgz#e77c419f52ff00c45a31f07f4c820c2433143885" - integrity sha512-WRitRfs6BGq4q8gTgOy4ek7iPFXjbra0H3PmDLKm2xnZ+Gh1HUhiKGgCZkSPNULlP7mvfu6FV/mOLhCarspADQ== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -json5@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.1.2.tgz#43ef1f0af9835dd624751a6b7fa48874fb2d608e" - integrity sha512-MoUOQ4WdiN3yxhm7NEVJSJrieAo5hNSLQ5sj05OTRHPL9HOBy8u4Bu88jsC1jvqAdN+E1bJmsUcZH+1HQxliqQ== - dependencies: - minimist "^1.2.5" - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsonify@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/jsonify/-/jsonify-0.0.0.tgz#2c74b6ee41d93ca51b7b5aaee8f503631d252a73" - integrity sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM= - -jsonlint-lines@1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/jsonlint-lines/-/jsonlint-lines-1.7.1.tgz#507de680d3fb8c4be1641cc57d6f679f29f178ff" - integrity sha1-UH3mgNP7jEvhZBzFfW9nnynxeP8= - dependencies: - JSV ">= 4.0.x" - nomnom ">= 1.5.x" - -jsonparse@^1.2.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" - integrity sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA= - -jsonwebtoken@^8.3.0: - version "8.5.1" - resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-8.5.1.tgz#00e71e0b8df54c2121a1f26137df2280673bcc0d" - integrity sha512-XjwVfRS6jTMsqYs0EsuJ4LGxXV14zQybNd4L2r0UvbVnSF9Af8x7p5MzbJ90Ioz/9TI41/hTCvznF/loiSzn8w== - dependencies: - jws "^3.2.2" - lodash.includes "^4.3.0" - lodash.isboolean "^3.0.3" - lodash.isinteger "^4.0.4" - lodash.isnumber "^3.0.3" - lodash.isplainobject "^4.0.6" - lodash.isstring "^4.0.1" - lodash.once "^4.0.0" - ms "^2.1.1" - semver "^5.6.0" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -jsx-ast-utils@^2.2.3: - version "2.2.3" - resolved "https://registry.yarnpkg.com/jsx-ast-utils/-/jsx-ast-utils-2.2.3.tgz#8a9364e402448a3ce7f14d357738310d9248054f" - integrity sha512-EdIHFMm+1BPynpKOpdPqiOsvnIrInRGJD7bzPZdPkjitQEqpdpUuFpq4T0npZFKTiB3RhWFdGN+oqOJIdhDhQA== - dependencies: - array-includes "^3.0.3" - object.assign "^4.1.0" - -jszip@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jszip/-/jszip-3.2.2.tgz#b143816df7e106a9597a94c77493385adca5bd1d" - integrity sha512-NmKajvAFQpbg3taXQXr/ccS2wcucR1AZ+NtyWp2Nq7HHVsXhcJFR8p0Baf32C2yVvBylFWVeKf+WI2AnvlPhpA== - dependencies: - lie "~3.3.0" - pako "~1.0.2" - readable-stream "~2.3.6" - set-immediate-shim "~1.0.1" - -just-extend@^4.0.2: - version "4.1.0" - resolved "https://registry.yarnpkg.com/just-extend/-/just-extend-4.1.0.tgz#7278a4027d889601640ee0ce0e5a00b992467da4" - integrity sha512-ApcjaOdVTJ7y4r08xI5wIqpvwS48Q0PBG4DJROcEkH1f8MdAiNFyFxz3xoL0LWAVwjrwPYZdVHHxhRHcx/uGLA== - -jwa@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" - integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - -jws@^3.2.2: - version "3.2.2" - resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" - integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== - dependencies: - jwa "^1.4.1" - safe-buffer "^5.0.1" - -kdbush@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/kdbush/-/kdbush-3.0.0.tgz#f8484794d47004cc2d85ed3a79353dbe0abc2bf0" - integrity sha512-hRkd6/XW4HTsA9vjVpY9tuXJYLSlelnkTmVFu4M9/7MIYQtFcHpbugAU7UbOfjOiVSVYl2fqgBuJ32JUmRo5Ew== - -kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: - version "3.2.2" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" - integrity sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ= - dependencies: - is-buffer "^1.1.5" - -kind-of@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-4.0.0.tgz#20813df3d712928b207378691a45066fae72dd57" - integrity sha1-IIE989cSkosgc3hpGkUGb65y3Vc= - dependencies: - is-buffer "^1.1.5" - -kind-of@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-5.1.0.tgz#729c91e2d857b7a419a1f9aa65685c4c33f5845d" - integrity sha512-NGEErnH6F2vUuXDh+OlbcKW7/wOcfdRHaZ7VWtqCztfHri/++YKmP51OdWeGPuqCOba6kk2OTe5d02VmTB80Pw== - -kind-of@^6.0.0, kind-of@^6.0.2: - version "6.0.3" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" - integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== - -known-css-properties@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/known-css-properties/-/known-css-properties-0.11.0.tgz#0da784f115ea77c76b81536d7052e90ee6c86a8a" - integrity sha512-bEZlJzXo5V/ApNNa5z375mJC6Nrz4vG43UgcSCrg2OHC+yuB6j0iDSrY7RQ/+PRofFB03wNIIt9iXIVLr4wc7w== - -labeled-stream-splicer@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/labeled-stream-splicer/-/labeled-stream-splicer-2.0.2.tgz#42a41a16abcd46fd046306cf4f2c3576fffb1c21" - integrity sha512-Ca4LSXFFZUjPScRaqOcFxneA0VpKZr4MMYCljyQr4LIewTLb3Y0IUTIsnBBsVubIeEfxeSZpSjSsRM8APEQaAw== - dependencies: - inherits "^2.0.1" - stream-splicer "^2.0.0" - -lazystream@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lazystream/-/lazystream-1.0.0.tgz#f6995fe0f820392f61396be89462407bb77168e4" - integrity sha1-9plf4PggOS9hOWvolGJAe7dxaOQ= - dependencies: - readable-stream "^2.0.5" - -lcid@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/lcid/-/lcid-2.0.0.tgz#6ef5d2df60e52f82eb228a4c373e8d1f397253cf" - integrity sha512-avPEb8P8EGnwXKClwsNUgryVjllcRqtMYa49NTsbQagYuT1DcXnl1915oxWjoyGrXR6zH/Y0Zc96xWsPcoDKeA== - dependencies: - invert-kv "^2.0.0" - -lcov-parse@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lcov-parse/-/lcov-parse-1.0.0.tgz#eb0d46b54111ebc561acb4c408ef9363bdc8f7e0" - integrity sha1-6w1GtUER68VhrLTECO+TY73I9+A= - -lead@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/lead/-/lead-1.0.0.tgz#6f14f99a37be3a9dd784f5495690e5903466ee42" - integrity sha1-bxT5mje+Op3XhPVJVpDlkDRm7kI= - dependencies: - flush-write-stream "^1.0.2" - -leven@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-2.1.0.tgz#c2e7a9f772094dee9d34202ae8acce4687875580" - integrity sha1-wuep93IJTe6dNCAq6KzORoeHVYA= - -leven@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" - integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== - -levenary@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/levenary/-/levenary-1.1.1.tgz#842a9ee98d2075aa7faeedbe32679e9205f46f77" - integrity sha512-mkAdOIt79FD6irqjYSs4rdbnlT5vRonMEvBVPVb3XmevfS8kgRXwfes0dhPdEtzTWD/1eNE/Bm/G1iRt6DcnQQ== - dependencies: - leven "^3.1.0" - -levn@^0.3.0, levn@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/levn/-/levn-0.3.0.tgz#3b09924edf9f083c0490fdd4c0bc4421e04764ee" - integrity sha1-OwmSTt+fCDwEkP3UwLxEIeBHZO4= - dependencies: - prelude-ls "~1.1.2" - type-check "~0.3.2" - -lie@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/lie/-/lie-3.3.0.tgz#dcf82dee545f46074daf200c7c1c5a08e0f40f6a" - integrity sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ== - dependencies: - immediate "~3.0.5" - -list-npm-contents@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/list-npm-contents/-/list-npm-contents-1.0.2.tgz#4fadf7a0e2c894fad92fcfc0092b0cec69444683" - integrity sha512-cpAkA9+ioEqHnxTuh3UDRewX+obC3mTr9dlYRVnTt0riggK+0IdKIed7BPn1BgkBQP+TVHiso4Rj0ZxGaXzh1Q== - dependencies: - bluebird "^3.5.0" - get-npm-tarball-url "^2.0.0" - got "^6.7.1" - is-url "^1.2.2" - ls-archive "^1.2.3" - meow "^3.3.0" - registry-url "^4.0.0" - tmp "0.0.31" - -livereload-js@^2.3.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/livereload-js/-/livereload-js-2.4.0.tgz#447c31cf1ea9ab52fc20db615c5ddf678f78009c" - integrity sha512-XPQH8Z2GDP/Hwz2PCDrh2mth4yFejwA1OZ/81Ti3LgKyhDcEjsSsqFWZojHG0va/duGd+WyosY7eXLDoOyqcPw== - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -load-json-file@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-2.0.0.tgz#7947e42149af80d696cbf797bcaabcfe1fe29ca8" - integrity sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - strip-bom "^3.0.0" - -load-json-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-4.0.0.tgz#2f5f45ab91e33216234fd53adab668eb4ec0993b" - integrity sha1-L19Fq5HjMhYjT9U62rZo607AmTs= - dependencies: - graceful-fs "^4.1.2" - parse-json "^4.0.0" - pify "^3.0.0" - strip-bom "^3.0.0" - -locate-path@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-2.0.0.tgz#2b568b265eec944c6d9c0de9c3dbbbca0354cd8e" - integrity sha1-K1aLJl7slExtnA3pw9u7ygNUzY4= - dependencies: - p-locate "^2.0.0" - path-exists "^3.0.0" - -locate-path@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-3.0.0.tgz#dbec3b3ab759758071b58fe59fc41871af21400e" - integrity sha512-7AO748wWnIhNqAuaty2ZWHkQHRSNfPVIsPIfwEOWO22AmaoVrWavlOcMR5nzTLNYvp36X220/maaRsrec1G65A== - dependencies: - p-locate "^3.0.0" - path-exists "^3.0.0" - -lodash._baseflatten@^3.0.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/lodash._baseflatten/-/lodash._baseflatten-3.1.4.tgz#0770ff80131af6e34f3b511796a7ba5214e65ff7" - integrity sha1-B3D/gBMa9uNPO1EXlqe6UhTmX/c= - dependencies: - lodash.isarguments "^3.0.0" - lodash.isarray "^3.0.0" - -lodash._getnative@^3.0.0: - version "3.9.1" - resolved "https://registry.yarnpkg.com/lodash._getnative/-/lodash._getnative-3.9.1.tgz#570bc7dede46d61cdcde687d65d3eecbaa3aaff5" - integrity sha1-VwvH3t5G1hzc3mh9ZdPuy6o6r/U= - -lodash._isiterateecall@^3.0.0: - version "3.0.9" - resolved "https://registry.yarnpkg.com/lodash._isiterateecall/-/lodash._isiterateecall-3.0.9.tgz#5203ad7ba425fae842460e696db9cf3e6aac057c" - integrity sha1-UgOte6Ql+uhCRg5pbbnPPmqsBXw= - -lodash._reinterpolate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/lodash._reinterpolate/-/lodash._reinterpolate-3.0.0.tgz#0ccf2d89166af03b3663c796538b75ac6e114d9d" - integrity sha1-DM8tiRZq8Ds2Y8eWU4t1rG4RTZ0= - -lodash.assignin@^4.1.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.assignin/-/lodash.assignin-4.2.0.tgz#ba8df5fb841eb0a3e8044232b0e263a8dc6a28a2" - integrity sha1-uo31+4QesKPoBEIysOJjqNxqKKI= - -lodash.castarray@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.castarray/-/lodash.castarray-4.4.0.tgz#c02513515e309daddd4c24c60cfddcf5976d9115" - integrity sha1-wCUTUV4wna3dTCTGDP3c9ZdtkRU= - -lodash.clonedeep@^4.4.1: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.clonedeep/-/lodash.clonedeep-4.5.0.tgz#e23f3f9c4f8fbdde872529c1071857a086e5ccef" - integrity sha1-4j8/nE+Pvd6HJSnBBxhXoIblzO8= - -lodash.debounce@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-3.1.1.tgz#812211c378a94cc29d5aa4e3346cf0bfce3a7df5" - integrity sha1-gSIRw3ipTMKdWqTjNGzwv846ffU= - dependencies: - lodash._getnative "^3.0.0" - -lodash.find@^4.5.1: - version "4.6.0" - resolved "https://registry.yarnpkg.com/lodash.find/-/lodash.find-4.6.0.tgz#cb0704d47ab71789ffa0de8b97dd926fb88b13b1" - integrity sha1-ywcE1Hq3F4n/oN6Ll92Sb7iLE7E= - -lodash.flatten@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/lodash.flatten/-/lodash.flatten-3.0.2.tgz#de1cf57758f8f4479319d35c3e9cc60c4501938c" - integrity sha1-3hz1d1j49EeTGdNcPpzGDEUBk4w= - dependencies: - lodash._baseflatten "^3.0.0" - lodash._isiterateecall "^3.0.0" - -lodash.flattendeep@^4.4.0: - version "4.4.0" - resolved "https://registry.yarnpkg.com/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz#fb030917f86a3134e5bc9bec0d69e0013ddfedb2" - integrity sha1-+wMJF/hqMTTlvJvsDWngAT3f7bI= - -lodash.get@^4.4.2: - version "4.4.2" - resolved "https://registry.yarnpkg.com/lodash.get/-/lodash.get-4.4.2.tgz#2d177f652fa31e939b4438d5341499dfa3825e99" - integrity sha1-LRd/ZS+jHpObRDjVNBSZ36OCXpk= - -lodash.includes@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" - integrity sha1-YLuYqHy5I8aMoeUTJUgzFISfVT8= - -lodash.isarguments@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/lodash.isarguments/-/lodash.isarguments-3.1.0.tgz#2f573d85c6a24289ff00663b491c1d338ff3458a" - integrity sha1-L1c9hcaiQon/AGY7SRwdM4/zRYo= - -lodash.isarray@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.isarray/-/lodash.isarray-3.0.4.tgz#79e4eb88c36a8122af86f844aa9bcd851b5fbb55" - integrity sha1-eeTriMNqgSKvhvhEqpvNhRtfu1U= - -lodash.isboolean@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" - integrity sha1-bC4XHbKiV82WgC/UOwGyDV9YcPY= - -lodash.isinteger@^4.0.4: - version "4.0.4" - resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" - integrity sha1-YZwK89A/iwTDH1iChAt3sRzWg0M= - -lodash.isnumber@^3.0.3: - version "3.0.3" - resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" - integrity sha1-POdoEMWSjQM1IwGsKHMX8RwLH/w= - -lodash.isplainobject@^4.0.6: - version "4.0.6" - resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" - integrity sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs= - -lodash.isstring@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" - integrity sha1-1SfftUVuynzJu5XV2ur4i6VKVFE= - -lodash.memoize@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" - integrity sha1-vMbEmkKihA7Zl/Mj6tpezRguC/4= - -lodash.memoize@~3.0.3: - version "3.0.4" - resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-3.0.4.tgz#2dcbd2c287cbc0a55cc42328bd0c736150d53e3f" - integrity sha1-LcvSwofLwKVcxCMovQxzYVDVPj8= - -lodash.once@^4.0.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha1-DdOXEhPHxW34gJd9UEyI+0cal6w= - -lodash.set@^4.3.2: - version "4.3.2" - resolved "https://registry.yarnpkg.com/lodash.set/-/lodash.set-4.3.2.tgz#d8757b1da807dde24816b0d6a84bea1a76230b23" - integrity sha1-2HV7HagH3eJIFrDWqEvqGnYjCyM= - -lodash.sortby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.sortby/-/lodash.sortby-4.7.0.tgz#edd14c824e2cc9c1e0b0a1b42bb5210516a42438" - integrity sha1-7dFMgk4sycHgsKG0K7UhBRakJDg= - -lodash.template@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.template/-/lodash.template-4.5.0.tgz#f976195cf3f347d0d5f52483569fe8031ccce8ab" - integrity sha512-84vYFxIkmidUiFxidA/KjjH9pAycqW+h980j7Fuz5qxRtO9pgB7MDFTdys1N7A5mcucRiDyEq4fusljItR1T/A== - dependencies: - lodash._reinterpolate "^3.0.0" - lodash.templatesettings "^4.0.0" - -lodash.templatesettings@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lodash.templatesettings/-/lodash.templatesettings-4.2.0.tgz#e481310f049d3cf6d47e912ad09313b154f0fb33" - integrity sha512-stgLz+i3Aa9mZgnjr/O+v9ruKZsPsndy7qPZOchbqk2cnTU1ZaldKK+v7m54WoKIyxiuMZTKT2H81F8BeAc3ZQ== - dependencies: - lodash._reinterpolate "^3.0.0" - -lodash.uniq@^4.5.0: - version "4.5.0" - resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" - integrity sha1-0CJTc662Uq3BvILklFM5qEJ1R3M= - -lodash.uniqby@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz#d99c07a669e9e6d24e1362dfe266c67616af1302" - integrity sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI= - -lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17.15, lodash@^4.17.4: - version "4.17.15" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" - integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== - -lodash@^4.17.19: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -lodash@^4.17.20: - version "4.17.20" - resolved "https://registry.npmjs.org/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" - integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== - -log-driver@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/log-driver/-/log-driver-1.2.7.tgz#63b95021f0702fedfa2c9bb0a24e7797d71871d8" - integrity sha512-U7KCmLdqsGHBLeWqYlFA0V0Sl6P08EE1ZrmA9cxjUE0WVqT9qnyVDPz1kzpFEP0jdJuFnasWIfSd7fsaNXkpbg== - -log-symbols@^2.0.0, log-symbols@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" - integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== - dependencies: - chalk "^2.0.1" - -lolex@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-4.2.0.tgz#ddbd7f6213ca1ea5826901ab1222b65d714b3cd7" - integrity sha512-gKO5uExCXvSm6zbF562EvM+rd1kQDnB9AZBbiQVzf1ZmdDpxUSvpnAaVOP83N/31mRK8Ml8/VE8DMvsAZQ+7wg== - -lolex@^5.0.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/lolex/-/lolex-5.1.2.tgz#953694d098ce7c07bc5ed6d0e42bc6c0c6d5a367" - integrity sha512-h4hmjAvHTmd+25JSwrtTIuwbKdwg5NzZVRMLn9saij4SZaepCrTCxPr35H/3bjwfMJtN+t3CX8672UIkglz28A== - dependencies: - "@sinonjs/commons" "^1.7.0" - -longest-streak@^2.0.1: - version "2.0.4" - resolved "https://registry.yarnpkg.com/longest-streak/-/longest-streak-2.0.4.tgz#b8599957da5b5dab64dee3fe316fa774597d90e4" - integrity sha512-vM6rUVCVUJJt33bnmHiZEvr7wPT78ztX7rojL+LW51bHtLh6HTjx84LA5W4+oa6aKEJA7jJu5LR6vQRBpA5DVg== - -loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" - integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== - dependencies: - js-tokens "^3.0.0 || ^4.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -lowercase-keys@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" - integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== - -lru-cache@^4.0.0, lru-cache@^4.0.1: - version "4.1.5" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" - integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== - dependencies: - pseudomap "^1.0.2" - yallist "^2.1.2" - -ls-archive@^1.2.3: - version "1.3.4" - resolved "https://registry.yarnpkg.com/ls-archive/-/ls-archive-1.3.4.tgz#52150919dab1acb094cdcef9dde9c66934a4650f" - integrity sha512-7GmjZOckV+gzm4PM1/LcWIsZIRsSkAVmIchoEf5xjquNKU0Ti5KUvGQ3dl/7VsbZIduMOPwRDXrvpo3LVJ0Pmg== - dependencies: - async "~0.2.9" - colors "~0.6.2" - optimist "~0.5.2" - rimraf "~2.2.6" - tar "^2.2.1" - yauzl "^2.9.1" - -macos-release@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/macos-release/-/macos-release-2.3.0.tgz#eb1930b036c0800adebccd5f17bc4c12de8bb71f" - integrity sha512-OHhSbtcviqMPt7yfw5ef5aghS2jzFVKEFyCJndQt2YpSQ9qRVSEv2axSJI1paVThEu+FFGs584h/1YhxjVqajA== - -magic-string@^0.25.2, magic-string@^0.25.3, magic-string@^0.25.5: - version "0.25.7" - resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.25.7.tgz#3f497d6fd34c669c6798dcb821f2ef31f5445051" - integrity sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA== - dependencies: - sourcemap-codec "^1.4.4" - -make-dir@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-1.3.0.tgz#79c1033b80515bd6d24ec9933e860ca75ee27f0c" - integrity sha512-2w31R7SJtieJJnQtGc7RVL2StM2vGYVfqUOvUDxH6bC6aJTxPxTF0GnIgCyu7tjockiUWAYQRbxa7vKn34s5sQ== - dependencies: - pify "^3.0.0" - -make-dir@^2.0.0, make-dir@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-2.1.0.tgz#5f0310e18b8be898cc07009295a30ae41e91e6f5" - integrity sha512-LS9X+dc8KLxXCb8dni79fLIIUA5VyZoyjSMCwTluaXA0o27cCK0bhXkpgw+sTXVpPy/lSO57ilRixqk0vDmtRA== - dependencies: - pify "^4.0.1" - semver "^5.6.0" - -make-error@^1.1.1: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-age-cleaner@^0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/map-age-cleaner/-/map-age-cleaner-0.1.3.tgz#7d583a7306434c055fe474b0f45078e6e1b4b92a" - integrity sha512-bJzx6nMoP6PDLPBFmg7+xRKeFZvFboMrGlxmNj9ClvX53KrmvM5bXFXEWjbz4cz1AFn+jWJ9z/DJSz7hrs0w3w== - dependencies: - p-defer "^1.0.0" - -map-cache@^0.2.0, map-cache@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/map-cache/-/map-cache-0.2.2.tgz#c32abd0bd6525d9b051645bb4f26ac5dc98a0dbf" - integrity sha1-wyq9C9ZSXZsFFkW7TyasXcmKDb8= - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -map-obj@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-2.0.0.tgz#a65cd29087a92598b8791257a523e021222ac1f9" - integrity sha1-plzSkIepJZi4eRJXpSPgISIqwfk= - -map-visit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/map-visit/-/map-visit-1.0.0.tgz#ecdca8f13144e660f1b5bd41f12f3479d98dfb8f" - integrity sha1-7Nyo8TFE5mDxtb1B8S80edmN+48= - dependencies: - object-visit "^1.0.0" - -mapbox-gl-styles@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/mapbox-gl-styles/-/mapbox-gl-styles-2.0.2.tgz#bb525b77ea0dc2b041bb8051645176f3783e294a" - integrity sha1-u1Jbd+oNwrBBu4BRZFF283g+KUo= - dependencies: - glob "^5.0.14" - -markdown-escapes@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/markdown-escapes/-/markdown-escapes-1.0.4.tgz#c95415ef451499d7602b91095f3c8e8975f78535" - integrity sha512-8z4efJYk43E0upd0NbVXwgSTQs6cT3T06etieCMEg7dRbzCbxUCK/GHlX8mhHRDcp+OLlHkPKsvqQTCvsRl2cg== - -markdown-table@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/markdown-table/-/markdown-table-1.1.3.tgz#9fcb69bcfdb8717bfd0398c6ec2d93036ef8de60" - integrity sha512-1RUZVgQlpJSPWYbFSpmudq5nHY1doEIv89gBtF0s4gW1GF2XorxcA/70M5vq7rLv0a6mhOUccRsqkwhwLCIQ2Q== - -mathml-tag-names@^2.0.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz#4ddadd67308e780cf16a47685878ee27b736a0a3" - integrity sha512-APMBEanjybaPzUrfqU0IMU5I0AswKMH7k8OTLs0vvV4KZpExkTkY87nR/zpbuTPj+gARop7aGUbl11pnDfW6xg== - -md5.js@^1.3.4: - version "1.3.5" - resolved "https://registry.yarnpkg.com/md5.js/-/md5.js-1.3.5.tgz#b5d07b8e3216e3e27cd728d72f70d1e6a342005f" - integrity sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - safe-buffer "^5.1.2" - -mdast-util-compact@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/mdast-util-compact/-/mdast-util-compact-1.0.4.tgz#d531bb7667b5123abf20859be086c4d06c894593" - integrity sha512-3YDMQHI5vRiS2uygEFYaqckibpJtKq5Sj2c8JioeOQBU6INpKbdWzfyLqFFnDwEcEnRFIdMsguzs5pC1Jp4Isg== - dependencies: - unist-util-visit "^1.1.0" - -mdast-util-definitions@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/mdast-util-definitions/-/mdast-util-definitions-1.2.5.tgz#3fe622a4171c774ebd06f11e9f8af7ec53ea5c74" - integrity sha512-CJXEdoLfiISCDc2JB6QLb79pYfI6+GcIH+W2ox9nMc7od0Pz+bovcHsiq29xAQY6ayqe/9CsK2VzkSJdg1pFYA== - dependencies: - unist-util-visit "^1.0.0" - -mdast-util-inject@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-inject/-/mdast-util-inject-1.1.0.tgz#db06b8b585be959a2dcd2f87f472ba9b756f3675" - integrity sha1-2wa4tYW+lZotzS+H9HK6m3VvNnU= - dependencies: - mdast-util-to-string "^1.0.0" - -mdast-util-to-hast@^3.0.0: - version "3.0.4" - resolved "https://registry.yarnpkg.com/mdast-util-to-hast/-/mdast-util-to-hast-3.0.4.tgz#132001b266031192348d3366a6b011f28e54dc40" - integrity sha512-/eIbly2YmyVgpJNo+bFLLMCI1XgolO/Ffowhf+pHDq3X4/V6FntC9sGQCDLM147eTS+uSXv5dRzJyFn+o0tazA== - dependencies: - collapse-white-space "^1.0.0" - detab "^2.0.0" - mdast-util-definitions "^1.2.0" - mdurl "^1.0.1" - trim "0.0.1" - trim-lines "^1.0.0" - unist-builder "^1.0.1" - unist-util-generated "^1.1.0" - unist-util-position "^3.0.0" - unist-util-visit "^1.1.0" - xtend "^4.0.1" - -mdast-util-to-string@^1.0.0, mdast-util-to-string@^1.0.5: - version "1.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-to-string/-/mdast-util-to-string-1.1.0.tgz#27055500103f51637bd07d01da01eb1967a43527" - integrity sha512-jVU0Nr2B9X3MU4tSK7JP1CMkSvOj7X5l/GboG1tKRw52lLF1x2Ju92Ms9tNetCcbfX3hzlM73zYo2NKkWSfF/A== - -mdast-util-toc@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/mdast-util-toc/-/mdast-util-toc-3.1.0.tgz#395eeb877f067f9d2165d990d77c7eea6f740934" - integrity sha512-Za0hqL1PqWrvxGtA/3NH9D5nhGAUS9grMM4obEAz5+zsk1RIw/vWUchkaoDLNdrwk05A0CSC5eEXng36/1qE5w== - dependencies: - github-slugger "^1.2.1" - mdast-util-to-string "^1.0.5" - unist-util-is "^2.1.2" - unist-util-visit "^1.1.0" - -mdn-data@2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.4.tgz#699b3c38ac6f1d728091a64650b65d388502fd5b" - integrity sha512-iV3XNKw06j5Q7mi6h+9vbx23Tv7JkjEVgKHW4pimwyDGWm0OIQntJJ+u1C6mg6mK1EaTv42XQ7w76yuzH7M2cA== - -mdn-data@2.0.6: - version "2.0.6" - resolved "https://registry.yarnpkg.com/mdn-data/-/mdn-data-2.0.6.tgz#852dc60fcaa5daa2e8cf6c9189c440ed3e042978" - integrity sha512-rQvjv71olwNHgiTbfPZFkJtjNMciWgswYeciZhtvWLO8bmX3TnhyA62I6sTWOyZssWHJJjY6/KiWwqQsWWsqOA== - -mdurl@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" - integrity sha1-/oWy7HWlkDfyrf7BAP1sYBdhFS4= - -media-typer@0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" - integrity sha1-hxDXrwqmJvj/+hzgAWhUUmMlV0g= - -mem@^4.0.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/mem/-/mem-4.3.0.tgz#461af497bc4ae09608cdb2e60eefb69bff744178" - integrity sha512-qX2bG48pTqYRVmDB37rn/6PT7LcR8T7oAX3bf99u1Tt1nzxYfxkgqDwUwolPlXweM0XzBOBFzSx4kfp7KP1s/w== - dependencies: - map-age-cleaner "^0.1.1" - mimic-fn "^2.0.0" - p-is-promise "^2.0.0" - -memorystream@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" - integrity sha1-htcJCzDORV1j+64S3aUaR93K+bI= - -meow@^3.3.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -meow@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-5.0.0.tgz#dfc73d63a9afc714a5e371760eb5c88b91078aa4" - integrity sha512-CbTqYU17ABaLefO8vCU153ZZlprKYWDljcndKKDCFcYQITzWCXZAVk4QMFZPgvzrnUQ3uItnIE/LoUOwrT15Ig== - dependencies: - camelcase-keys "^4.0.0" - decamelize-keys "^1.0.0" - loud-rejection "^1.0.0" - minimist-options "^3.0.1" - normalize-package-data "^2.3.4" - read-pkg-up "^3.0.0" - redent "^2.0.0" - trim-newlines "^2.0.0" - yargs-parser "^10.0.0" - -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha1-sAqqVW3YtEVoFQ7J0blT8/kMu2E= - -merge-source-map@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/merge-source-map/-/merge-source-map-1.1.0.tgz#2fdde7e6020939f70906a68f2d7ae685e4c8c646" - integrity sha512-Qkcp7P2ygktpMPh2mCQZaf3jhN6D3Z/qVZHSdWvQ+2Ef5HgRAPBO57A77+ENm0CPx2+1Ce/MYKi3ymqdfuqibw== - dependencies: - source-map "^0.6.1" - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.2.3: - version "1.3.0" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.3.0.tgz#5b366ee83b2f1582c48f87e47cf1a9352103ca81" - integrity sha512-2j4DAdlBOkiSZIsaXk4mTE3sRS02yBHAtfy127xRV3bQUFqXkjHCHLW6Scv7DwNRbIWNHH8zpnz9zMaKXIdvYw== - -methods@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" - integrity sha1-VSmk1nZUE07cxSZmVoNbD4Ua/O4= - -micromatch@^3.1.10, micromatch@^3.1.4, micromatch@^3.1.5: - version "3.1.10" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-3.1.10.tgz#70859bc95c9840952f359a068a3fc49f9ecfac23" - integrity sha512-MWikgl9n9M3w+bpsY3He8L+w9eF9338xRl8IAO5viDizwSzziFEyUzo2xrrloB64ADbTf8uA8vRqqttDTOmccg== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - braces "^2.3.1" - define-property "^2.0.2" - extend-shallow "^3.0.2" - extglob "^2.0.4" - fragment-cache "^0.2.1" - kind-of "^6.0.2" - nanomatch "^1.2.9" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.2" - -miller-rabin@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/miller-rabin/-/miller-rabin-4.0.1.tgz#f080351c865b0dc562a8462966daa53543c78a4d" - integrity sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA== - dependencies: - bn.js "^4.0.0" - brorand "^1.0.1" - -mime-db@1.43.0, "mime-db@>= 1.43.0 < 2": - version "1.43.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.43.0.tgz#0a12e0502650e473d735535050e7c8f4eb4fae58" - integrity sha512-+5dsGEEovYbT8UY9yD7eE4XTc4UwJ1jBYlgaQQF38ENsKR3wj/8q8RFZrF9WIZpB2V1ArTVFUva8sAul1NzRzQ== - -mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24: - version "2.1.26" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.26.tgz#9c921fc09b7e149a65dfdc0da4d20997200b0a06" - integrity sha512-01paPWYgLrkqAyrlDorC1uDwl2p3qZT7yl806vW7DvDoxwXi46jsjFbg+WdwotBIk6/MbEhO/dh5aZ5sNj/dWQ== - dependencies: - mime-db "1.43.0" - -mime@1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" - integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== - -mime@^2.0.3, mime@^2.2.0: - version "2.4.4" - resolved "https://registry.yarnpkg.com/mime/-/mime-2.4.4.tgz#bd7b91135fc6b01cde3e9bae33d659b63d8857e5" - integrity sha512-LRxmNwziLPT828z+4YkNzloCFC2YM4wrB99k+AV5ZbEyfGNWfG8SO1FUXLmLDBSo89NrJZ4DIWeLjy1CHGhMGA== - -mime@~1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/mime/-/mime-1.4.1.tgz#121f9ebc49e3766f311a76e1fa1c8003c4b03aa6" - integrity sha512-KI1+qOZu5DcW6wayYHSzR/tXKCDC5Om4s1z2QJjDULzLcmf3DvzS7oluY4HCTrc+9FiKmWUgeNLg7W3uIQvxtQ== - -mimic-fn@^1.0.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-1.2.0.tgz#820c86a39334640e99516928bd03fca88057d022" - integrity sha512-jf84uxzwiuiIVKiOLpfYk7N46TSy8ubTonmneY9vrpHNAnp0QBt2BxWV9dO3/j+BoVAb+a5G6YDPW3M5HOdMWQ== - -mimic-fn@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -mimic-response@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-2.1.0.tgz#d13763d35f613d09ec37ebb30bac0469c0ee8f43" - integrity sha512-wXqjST+SLt7R009ySCglWBCFpjUygmCIfD790/kVbiGmUgfYGuB14PiTd5DwVxSV4NcYHjzMkoj5LjQZwTQLEA== - -minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" - integrity sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A== - -minimalistic-crypto-utils@^1.0.0, minimalistic-crypto-utils@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/minimalistic-crypto-utils/-/minimalistic-crypto-utils-1.0.1.tgz#f6c00c1c0b082246e5c4d99dfb8c7c083b2b582a" - integrity sha1-9sAMHAsIIkblxNmd+4x8CDsrWCo= - -"minimatch@2 || 3", minimatch@^3.0.2, minimatch@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083" - integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA== - dependencies: - brace-expansion "^1.1.7" - -minimist-options@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-3.0.2.tgz#fba4c8191339e13ecf4d61beb03f070103f3d954" - integrity sha512-FyBrT/d0d4+uiZRbqznPXqw3IpZZG3gl3wKWiX784FycUKVwBt0uLBFkQrtE4tZOrgo78nZp2jnKz3L65T5LdQ== - dependencies: - arrify "^1.0.1" - is-plain-obj "^1.1.0" - -minimist@1.1.x: - version "1.1.3" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.1.3.tgz#3bedfd91a92d39016fcfaa1c681e8faa1a1efda8" - integrity sha1-O+39kaktOQFvz6ocaB6Pqhoe/ag= - -minimist@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" - integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= - -minimist@^1.1.0, minimist@^1.1.1, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5, minimist@~1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -minipass@^2.2.0, minipass@^2.3.5, minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minipass@^3.0.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-3.1.1.tgz#7607ce778472a185ad6d89082aa2070f79cedcd5" - integrity sha512-UFqVihv6PQgwj8/yTGvl9kPz7xIAY+R5z6XYjRInD3Gk3qx6QGSD6zEcpeG4Dy/lQnv1J6zv8ejV90hyYIKf3w== - dependencies: - yallist "^4.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - -mixin-deep@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" - integrity sha512-WRoDn//mXBiJ1H40rqa3vH0toePwSsGb45iInWlTySa+Uu4k3tYUSxa2v1KqAiLtvlrSzaExqS1gtk96A9zvEA== - dependencies: - for-in "^1.0.2" - is-extendable "^1.0.1" - -mkdirp-classic@^0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.2.tgz#54c441ce4c96cd7790e10b41a87aa51068ecab2b" - integrity sha512-ejdnDQcR75gwknmMw/tx02AuRs8jCtqFoFqDZMjiNxsu85sRIJVXDKHuLYvUUPRBUtV2FpSZa9bL1BUa3BdR2g== - -"mkdirp@>=0.5 0": - version "0.5.5" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def" - integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ== - dependencies: - minimist "^1.2.5" - -mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@^0.5.4, mkdirp@~0.5.1: - version "0.5.4" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.4.tgz#fd01504a6797ec5c9be81ff43d204961ed64a512" - integrity sha512-iG9AK/dJLtJ0XNgTuDbSyNS3zECqDlAhnQW4CsNxBG3LQJBbHmRX1egw39DmtOdCAqY+dKXV+sgPgilNWUKMVw== - dependencies: - minimist "^1.2.5" - -mock-geolocation@^1.0.11: - version "1.0.11" - resolved "https://registry.yarnpkg.com/mock-geolocation/-/mock-geolocation-1.0.11.tgz#2c7b99242a2c70dbecd317b392b30311722992c8" - integrity sha1-LHuZJCoscNvs0xezkrMDEXIpksg= - -module-deps-sortable@5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/module-deps-sortable/-/module-deps-sortable-5.0.0.tgz#99db5bb08f7eab55e4c31f6b7c722c6a2144ba74" - integrity sha512-bnGGeghQmz/t/6771/KC4FmxpVm126iR6AAzzq4N6hVZQVl4+ZZBv+VF3PJmDyxXtVtgcgTSSP7NL+jq1QAHrg== - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.0" - concat-stream "~1.5.0" - defined "^1.0.0" - detective "^4.0.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - readable-stream "^2.0.2" - resolve "^1.1.3" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -module-deps@^6.0.0: - version "6.2.2" - resolved "https://registry.yarnpkg.com/module-deps/-/module-deps-6.2.2.tgz#d8a15c2265dfc119153c29bb47386987d0ee423b" - integrity sha512-a9y6yDv5u5I4A+IPHTnqFxcaKr4p50/zxTjcQJaX2ws9tN/W6J6YXnEKhqRyPhl494dkcxx951onSKVezmI+3w== - dependencies: - JSONStream "^1.0.3" - browser-resolve "^1.7.0" - cached-path-relative "^1.0.2" - concat-stream "~1.6.0" - defined "^1.0.0" - detective "^5.2.0" - duplexer2 "^0.1.2" - inherits "^2.0.1" - parents "^1.0.0" - readable-stream "^2.0.2" - resolve "^1.4.0" - stream-combiner2 "^1.1.1" - subarg "^1.0.0" - through2 "^2.0.0" - xtend "^4.0.0" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.1.tgz#30a5864eb3ebb0a66f2ebe6d727af06a09d86e0a" - integrity sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg== - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -multi-stage-sourcemap@^0.3.1: - version "0.3.1" - resolved "https://registry.yarnpkg.com/multi-stage-sourcemap/-/multi-stage-sourcemap-0.3.1.tgz#35bb1e0655cb022516e9f92d738c07a2aacfeec0" - integrity sha512-UiTLYjqeIoVnJHyWGskwMKIhtZKK9uXUjSTWuwatarrc0d2H/6MAVFdwvEA/aKOHamIn7z4tfvxjz+FYucFpNQ== - dependencies: - source-map "^0.1.34" - -murmurhash-js@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/murmurhash-js/-/murmurhash-js-1.0.0.tgz#b06278e21fc6c37fa5313732b0412bcb6ae15f51" - integrity sha1-sGJ44h/Gw3+lMTcysEEry2rhX1E= - -mustache@^3.0.0: - version "3.2.1" - resolved "https://registry.yarnpkg.com/mustache/-/mustache-3.2.1.tgz#89e78a9d207d78f2799b1e95764a25bf71a28322" - integrity sha512-RERvMFdLpaFfSRIEe632yDm5nsd0SDKn8hGmcUwswnyiE5mtdZLDybtHAz6hjJhawokF0hXvGLtx9mrQfm6FkA== - -mute-stream@0.0.7: - version "0.0.7" - resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.7.tgz#3075ce93bc21b8fab43e1bc4da7e8115ed1e7bab" - integrity sha1-MHXOk7whuPq0PhvE2n6BFe0ee6s= - -nan@^2.12.1, nan@^2.14.0: - version "2.14.0" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" - integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== - -nan@^2.14.1: - version "2.14.1" - resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" - integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== - -nanomatch@^1.2.9: - version "1.2.13" - resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" - integrity sha512-fpoe2T0RbHwBTBUOftAfBPaDEi06ufaUai0mE6Yn1kacc3SnTErfb/h+X94VXzI64rKFHYImXSvdwGGCmwOqCA== - dependencies: - arr-diff "^4.0.0" - array-unique "^0.3.2" - define-property "^2.0.2" - extend-shallow "^3.0.2" - fragment-cache "^0.2.1" - is-windows "^1.0.2" - kind-of "^6.0.2" - object.pick "^1.3.0" - regex-not "^1.0.0" - snapdragon "^0.8.1" - to-regex "^3.0.1" - -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== - -natural-compare@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" - integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc= - -needle@^2.2.1: - version "2.3.3" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.3.3.tgz#a041ad1d04a871b0ebb666f40baaf1fb47867117" - integrity sha512-EkY0GeSq87rWp1hoq/sH/wnTWgFVhYlnIkbJ0YJFfRgEFlz2RraCjBpFQ+vrEgEdp0ThfyHADmkChEhcb7PKyw== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - -negotiator@0.6.2, negotiator@~0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" - integrity sha512-hZXc7K2e+PgeI1eDBe/10Ard4ekbfrrqG8Ep+8Jmf4JID2bNg7NvCPOZN+kfF574pFQI7mum2AUqDidoKqcTOw== - -nice-try@^1.0.4: - version "1.0.5" - resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" - integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== - -nise@^1.5.2: - version "1.5.3" - resolved "https://registry.yarnpkg.com/nise/-/nise-1.5.3.tgz#9d2cfe37d44f57317766c6e9408a359c5d3ac1f7" - integrity sha512-Ymbac/94xeIrMf59REBPOv0thr+CJVFMhrlAkW/gjCIE58BGQdCj0x7KRCb3yz+Ga2Rz3E9XXSvUyyxqqhjQAQ== - dependencies: - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/text-encoding" "^0.7.1" - just-extend "^4.0.2" - lolex "^5.0.1" - path-to-regexp "^1.7.0" - -node-abi@^2.16.0: - version "2.18.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.18.0.tgz#1f5486cfd7d38bd4f5392fa44a4ad4d9a0dffbf4" - integrity sha512-yi05ZoiuNNEbyT/xXfSySZE+yVnQW6fxPZuFbLyS1s6b5Kw3HzV2PHOM4XR+nsjzkHxByK+2Wg+yCQbe35l8dw== - dependencies: - semver "^5.4.1" - -node-abi@^2.7.0: - version "2.15.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-2.15.0.tgz#51d55cc711bd9e4a24a572ace13b9231945ccb10" - integrity sha512-FeLpTS0F39U7hHZU1srAK4Vx+5AHNVOTP+hxBNQknR/54laTHSFIJkDWDqiquY1LeLUgTfPN7sLPhMubx0PLAg== - dependencies: - semver "^5.4.1" - -node-fetch@^2.3.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.0.tgz#e633456386d4aa55863f676a7ab0daa8fdecb0fd" - integrity sha512-8dG4H5ujfvFiqDmVu9fQ5bOHUC15JMjMY/Zumv26oOvvVJjM67KF8koCWIabKQ1GJIa9r2mMZscBq/TbdOcmNA== - -node-gyp@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-6.1.0.tgz#64e31c61a4695ad304c1d5b82cf6b7c79cc79f3f" - integrity sha512-h4A2zDlOujeeaaTx06r4Vy+8MZ1679lU+wbCKDS4ZtvY2A37DESo37oejIw0mtmR3+rvNwts5B6Kpt1KrNYdNw== - dependencies: - env-paths "^2.2.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - mkdirp "^0.5.1" - nopt "^4.0.1" - npmlog "^4.1.2" - request "^2.88.0" - rimraf "^2.6.3" - semver "^5.7.1" - tar "^4.4.12" - which "^1.3.1" - -node-modules-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/node-modules-regexp/-/node-modules-regexp-1.0.0.tgz#8d9dbe28964a4ac5712e9131642107c71e90ec40" - integrity sha1-jZ2+KJZKSsVxLpExZCEHxx6Q7EA= - -node-nailgun-client@^0.1.0: - version "0.1.2" - resolved "https://registry.npmjs.org/node-nailgun-client/-/node-nailgun-client-0.1.2.tgz#c8ee2f8226664020192e4936cacaadf9aa13ae29" - integrity sha512-OC611lR0fsDUSptwnhBf8d3sj4DZ5fiRKfS2QaGPe0kR3Dt9YoZr1MY7utK0scFPTbXuQdSBBbeoKYVbME1q5g== - dependencies: - commander "^2.8.1" - -node-nailgun-server@^0.1.4: - version "0.1.4" - resolved "https://registry.npmjs.org/node-nailgun-server/-/node-nailgun-server-0.1.4.tgz#80cbf1af37611030c60aa88be72d657994df50d4" - integrity sha512-e0Hbh6XPb/7GqATJ45BePaUEO5AwR7InRW/pGeMKHH1cqPMBFCeqdBNfvi+bkVLnsbYOOQE+pAek9nmNoD8sYw== - dependencies: - commander "^2.8.1" - -node-notifier@^5.0.1, node-notifier@^5.4.3: - version "5.4.3" - resolved "https://registry.yarnpkg.com/node-notifier/-/node-notifier-5.4.3.tgz#cb72daf94c93904098e28b9c590fd866e464bd50" - integrity sha512-M4UBGcs4jeOK9CjTsYwkvH6/MzuUmGCyTW+kCY7uO+1ZVr0+FHGdPdIf5CCLqAaxnRrWidyoQlNkMIIVwbKB8Q== - dependencies: - growly "^1.3.0" - is-wsl "^1.1.0" - semver "^5.5.0" - shellwords "^0.1.1" - which "^1.3.0" - -node-plantuml@^0.9.0: - version "0.9.0" - resolved "https://registry.npmjs.org/node-plantuml/-/node-plantuml-0.9.0.tgz#7a6cd34c7c26fbdd3124b1f792974ed6446addcb" - integrity sha512-bUnntTGjbpYu1pvXZI/GS6ctcXf3AOMqJxBMO8vFzTT5RwH8Cj/J5Ca6Dy+PEfMiMDdSBCFKSGnvYyBvYnucXg== - dependencies: - commander "^2.8.1" - node-nailgun-client "^0.1.0" - node-nailgun-server "^0.1.4" - plantuml-encoder "^1.2.5" - -node-pre-gyp@^0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.11.0.tgz#db1f33215272f692cd38f03238e3e9b47c5dd054" - integrity sha512-TwWAOZb0j7e9eGaf9esRx3ZcLaE5tQ2lvYy1pb5IAaG1a2e2Kv5Lms1Y4hpj+ciXJRofIxxlt5haeQ/2ANeE0Q== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4" - -node-releases@^1.1.52: - version "1.1.52" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.52.tgz#bcffee3e0a758e92e44ecfaecd0a47554b0bcba9" - integrity sha512-snSiT1UypkgGt2wxPqS6ImEUICbNCMb31yaxWrOLXjhlt2z2/IBpaOxzONExqSm4y5oLnAqjjRWu+wsDzK5yNQ== - dependencies: - semver "^6.3.0" - -"nomnom@>= 1.5.x": - version "1.8.1" - resolved "https://registry.yarnpkg.com/nomnom/-/nomnom-1.8.1.tgz#2151f722472ba79e50a76fc125bb8c8f2e4dc2a7" - integrity sha1-IVH3Ikcrp55Qp2/BJbuMjy5Nwqc= - dependencies: - chalk "~0.4.0" - underscore "~1.6.0" - -noop-logger@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/noop-logger/-/noop-logger-0.1.1.tgz#94a2b1633c4f1317553007d8966fd0e841b6a4c2" - integrity sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI= - -nopt@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" - integrity sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg== - dependencies: - abbrev "1" - osenv "^0.1.4" - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -normalize-path@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-2.1.1.tgz#1ab28b556e198363a8c1a6f7e6fa20137fe6aed9" - integrity sha1-GrKLVW4Zg2Oowab35vogE3/mrtk= - dependencies: - remove-trailing-separator "^1.0.1" - -normalize-path@^3.0.0, normalize-path@~3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" - integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== - -normalize-range@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/normalize-range/-/normalize-range-0.1.2.tgz#2d10c06bdfd312ea9777695a4d28439456b75942" - integrity sha1-LRDAa9/TEuqXd2laTShDlFa3WUI= - -normalize-registry-url@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/normalize-registry-url/-/normalize-registry-url-1.0.0.tgz#f75d2c48373da780c76f1f0eeb6382c06e784d13" - integrity sha512-0v6T4851b72ykk5zEtFoN4QX/Fqyk7pouIj9xZyAvAe9jlDhAwT4z6FlwsoQCHjeuK2EGUoAwy/F4y4B1uZq9A== - -normalize-selector@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/normalize-selector/-/normalize-selector-0.2.0.tgz#d0b145eb691189c63a78d201dc4fdb1293ef0c03" - integrity sha1-0LFF62kRicY6eNIB3E/bEpPvDAM= - -normalize-url@^3.0.0, normalize-url@^3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-3.3.0.tgz#b2e1c4dc4f7c6d57743df733a4f5978d18650559" - integrity sha512-U+JJi7duF1o+u2pynbp2zXDW2/PADgC30f0GsHZtRh+HOcXHnw137TrNlyxxRvWW5fjKd3bcLHPxofWuCjaeZg== - -now-and-later@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/now-and-later/-/now-and-later-2.0.1.tgz#8e579c8685764a7cc02cb680380e94f43ccb1f7c" - integrity sha512-KGvQ0cB70AQfg107Xvs/Fbu+dGmZoTRJp2TaPwcwQm3/7PteUyN2BCgk8KBMPGBUXZdVwyWS8fDCGFygBm19UQ== - dependencies: - once "^1.3.2" - -npm-bundled@^1.0.1, npm-bundled@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-font-open-sans@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/npm-font-open-sans/-/npm-font-open-sans-1.1.0.tgz#8c27a56e43872747b8448dcc30653a649866c6ef" - integrity sha512-t1y5ShWm6a8FSLwBdINT47XYMcuKY2rkTBsTdz/76YB2MtX0YD89RUkY2eSS2/XOmlZfBe1HFBAwD+b9+/UfmQ== - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.8" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.8.tgz#56ee6cc135b9f98ad3d51c1c95da22bbb9b2ef3e" - integrity sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-normalize-package-bin "^1.0.1" - -npm-packlist@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-2.1.1.tgz#08806a1df79acdc43d02d20c83a3d5472d96c90c" - integrity sha512-95TSDvGwujIhqfSpIiRRLodEF+y6mJMopuZdahoGzqtRDFZXGav46S0p6ngeWaiAkb5R72w6eVARhzej0HvZeQ== - dependencies: - glob "^7.1.6" - ignore-walk "^3.0.3" - npm-bundled "^1.1.1" - npm-normalize-package-bin "^1.0.1" - -npm-run-all@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/npm-run-all/-/npm-run-all-4.1.5.tgz#04476202a15ee0e2e214080861bff12a51d98fba" - integrity sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ== - dependencies: - ansi-styles "^3.2.1" - chalk "^2.4.1" - cross-spawn "^6.0.5" - memorystream "^0.3.1" - minimatch "^3.0.4" - pidtree "^0.3.0" - read-pkg "^3.0.0" - shell-quote "^1.6.1" - string.prototype.padend "^3.0.0" - -npm-run-path@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" - integrity sha1-NakjLfo11wZ7TLLd8jV7GHFTbF8= - dependencies: - path-key "^2.0.0" - -npmlog@^4.0.0, npmlog@^4.0.1, npmlog@^4.0.2, npmlog@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - -nth-check@^1.0.2, nth-check@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-1.0.2.tgz#b2bd295c37e3dd58a3bf0700376663ba4d9cf05c" - integrity sha512-WeBOdju8SnzPN5vTUJYxYUxLeXpCaVP5i5e0LF8fg7WORF2Wd7wFX/pk0tYZk7s8T+J7VLy0Da6J1+wCT0AtHg== - dependencies: - boolbase "~1.0.0" - -num2fraction@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/num2fraction/-/num2fraction-1.2.2.tgz#6f682b6a027a4e9ddfa4564cd2589d1d4e669ede" - integrity sha1-b2gragJ6Tp3fpFZM0lidHU5mnt4= - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -nwsapi@^2.0.9: - version "2.2.0" - resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.0.tgz#204879a9e3d068ff2a55139c2c772780681a38b7" - integrity sha512-h2AatdwYH+JHiZpv7pt/gSX1XoRGb7L/qSIeuqA6GwYoF9w1vP1cw42TO0aI2pNyshRK5893hNSl+1//vHK7hQ== - -nyc@^13.1.0, nyc@^13.3.0: - version "13.3.0" - resolved "https://registry.yarnpkg.com/nyc/-/nyc-13.3.0.tgz#da4dbe91a9c8b9ead3f4f3344c76f353e3c78c75" - integrity sha512-P+FwIuro2aFG6B0Esd9ZDWUd51uZrAEoGutqZxzrVmYl3qSfkLgcQpBPBjtDFsUQLFY1dvTQJPOyeqr8S9GF8w== - dependencies: - archy "^1.0.0" - arrify "^1.0.1" - caching-transform "^3.0.1" - convert-source-map "^1.6.0" - find-cache-dir "^2.0.0" - find-up "^3.0.0" - foreground-child "^1.5.6" - glob "^7.1.3" - istanbul-lib-coverage "^2.0.3" - istanbul-lib-hook "^2.0.3" - istanbul-lib-instrument "^3.1.0" - istanbul-lib-report "^2.0.4" - istanbul-lib-source-maps "^3.0.2" - istanbul-reports "^2.1.1" - make-dir "^1.3.0" - merge-source-map "^1.1.0" - resolve-from "^4.0.0" - rimraf "^2.6.3" - signal-exit "^3.0.2" - spawn-wrap "^1.4.2" - test-exclude "^5.1.0" - uuid "^3.3.2" - yargs "^12.0.5" - yargs-parser "^11.1.1" - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1, object-assign@^4.1.0, object-assign@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-component@0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/object-component/-/object-component-0.0.3.tgz#f0c69aa50efc95b866c186f400a33769cb2f1291" - integrity sha1-8MaapQ78lbhmwYb0AKM3acsvEpE= - -object-copy@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/object-copy/-/object-copy-0.1.0.tgz#7e7d858b781bd7c991a41ba975ed3812754e998c" - integrity sha1-fn2Fi3gb18mRpBupde04EnVOmYw= - dependencies: - copy-descriptor "^0.1.0" - define-property "^0.2.5" - kind-of "^3.0.3" - -object-inspect@^1.7.0, object-inspect@~1.7.0: - version "1.7.0" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.7.0.tgz#f4f6bd181ad77f006b5ece60bd0b6f398ff74a67" - integrity sha512-a7pEHdh1xKIAgTySUGgLMx/xwDZskN1Ud6egYYN3EdRW4ZMPNEDUTF+hwy2LUC+Bl+SyLXANnwz/jyh/qutKUw== - -object-is@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.0.2.tgz#6b80eb84fe451498f65007982f035a5b445edec4" - integrity sha512-Epah+btZd5wrrfjkJZq1AOB9O6OxUQto45hzFd7lXGrpHPGE0W1k+426yrZV+k6NJOzLNNW/nVsmZdIWsAqoOQ== - -object-keys@^1.0.11, object-keys@^1.0.12, object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object-visit@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object-visit/-/object-visit-1.0.1.tgz#f79c4493af0c5377b59fe39d395e41042dd045bb" - integrity sha1-95xEk68MU3e1n+OdOV5BBC3QRbs= - dependencies: - isobject "^3.0.0" - -object.assign@^4.0.4, object.assign@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.0.tgz#968bf1100d7956bb3ca086f006f846b3bc4008da" - integrity sha512-exHJeq6kBKj58mqGyTQ9DFvrZC/eR6OwxzoM9YRoGBqrXYonaFyGiFMuc9VZrXf7DarreEwMpurG3dd+CNyW5w== - dependencies: - define-properties "^1.1.2" - function-bind "^1.1.1" - has-symbols "^1.0.0" - object-keys "^1.0.11" - -object.entries-ponyfill@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/object.entries-ponyfill/-/object.entries-ponyfill-1.0.1.tgz#29abdf77cbfbd26566dd1aa24e9d88f65433d256" - integrity sha1-Kavfd8v70mVm3RqiTp2I9lQz0lY= - -object.entries@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.1.tgz#ee1cf04153de02bb093fec33683900f57ce5399b" - integrity sha512-ilqR7BgdyZetJutmDPfXCDffGa0/Yzl2ivVNpbx/g4UeWrCdRnFDUBrKJGLhGieRHDATnyZXWBeCb29k9CJysQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.fromentries@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.2.tgz#4a09c9b9bb3843dd0f89acdb517a794d4f355ac9" - integrity sha512-r3ZiBH7MQppDJVLx6fhD618GKNG40CZYH9wgwdhKxBDDbQgjeWGGd4AtkZad84d291YxvWe7bJGuE65Anh0dxQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -object.getownpropertydescriptors@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/object.getownpropertydescriptors/-/object.getownpropertydescriptors-2.1.0.tgz#369bf1f9592d8ab89d712dced5cb81c7c5352649" - integrity sha512-Z53Oah9A3TdLoblT7VKJaTDdXdT+lQO+cNpKVnya5JDe9uLvzu1YyY1yFDFrcxrlRgWrEFH0jJtD/IbuwjcEVg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -object.pick@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/object.pick/-/object.pick-1.3.0.tgz#87a10ac4c1694bd2e1cbf53591a66141fb5dd747" - integrity sha1-h6EKxMFpS9Lhy/U1kaZhQftd10c= - dependencies: - isobject "^3.0.1" - -object.values@^1.1.0, object.values@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.1.1.tgz#68a99ecde356b7e9295a3c5e0ce31dc8c953de5e" - integrity sha512-WTa54g2K8iu0kmS/us18jEmdv1a4Wi//BZ/DTVYEcH0XhLM5NYdpDHja3gt57VrZLcNAO2WGA+KpWsDBaHt6eA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - has "^1.0.3" - -octokit-pagination-methods@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/octokit-pagination-methods/-/octokit-pagination-methods-1.1.0.tgz#cf472edc9d551055f9ef73f6e42b4dbb4c80bea4" - integrity sha512-fZ4qZdQ2nxJvtcasX7Ghl+WlWS/d9IgnBIwFZXVNNZUmzpno91SX5bc5vuxiuKoCtK78XxGGNuSCrDC7xYB3OQ== - -on-finished@~2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.3.0.tgz#20f1336481b083cd75337992a16971aa2d906947" - integrity sha1-IPEzZIGwg811M3mSoWlxqi2QaUc= - dependencies: - ee-first "1.1.1" - -on-headers@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" - integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== - -once@^1.3.0, once@^1.3.1, once@^1.3.2, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= - dependencies: - wrappy "1" - -onetime@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-2.0.1.tgz#067428230fd67443b2794b22bba528b6867962d4" - integrity sha1-BnQoIw/WdEOyeUsiu6UotoZ5YtQ= - dependencies: - mimic-fn "^1.0.0" - -open@^7.3.0: - version "7.3.0" - resolved "https://registry.npmjs.org/open/-/open-7.3.0.tgz#45461fdee46444f3645b6e14eb3ca94b82e1be69" - integrity sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw== - dependencies: - is-docker "^2.0.0" - is-wsl "^2.1.1" - -opener@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/opener/-/opener-1.5.1.tgz#6d2f0e77f1a0af0032aca716c2c1fbb8e7e8abed" - integrity sha512-goYSy5c2UXE4Ra1xixabeVh1guIX/ZV/YokJksb6q2lubWu6UbvPQ20p542/sFIll1nl8JnCyK9oBaOcCWXwvA== - -optimist@~0.5.2: - version "0.5.2" - resolved "https://registry.yarnpkg.com/optimist/-/optimist-0.5.2.tgz#85c8c1454b3315e4a78947e857b1df033450bfbc" - integrity sha1-hcjBRUszFeSniUfoV7HfAzRQv7w= - dependencies: - wordwrap "~0.0.2" - -optionator@^0.8.1, optionator@^0.8.2: - version "0.8.3" - resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.8.3.tgz#84fa1d036fe9d3c7e21d99884b601167ec8fb495" - integrity sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA== - dependencies: - deep-is "~0.1.3" - fast-levenshtein "~2.0.6" - levn "~0.3.0" - prelude-ls "~1.1.2" - type-check "~0.3.2" - word-wrap "~1.2.3" - -ordered-read-streams@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/ordered-read-streams/-/ordered-read-streams-1.0.1.tgz#77c0cb37c41525d64166d990ffad7ec6a0e1363e" - integrity sha1-d8DLN8QVJdZBZtmQ/61+xqDhNj4= - dependencies: - readable-stream "^2.0.1" - -os-browserify@~0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/os-browserify/-/os-browserify-0.3.0.tgz#854373c7f5c2315914fc9bfc6bd8238fdda1ec27" - integrity sha1-hUNzx/XCMVkU/Jv8a9gjj92h7Cc= - -os-homedir@^1.0.0, os-homedir@^1.0.1, os-homedir@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - -os-homedir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-2.0.0.tgz#a0c76bb001a8392a503cbd46e7e650b3423a923c" - integrity sha512-saRNz0DSC5C/I++gFIaJTXoFJMRwiP5zHar5vV3xQ2TkgEw6hDCcU5F272JjUylpiVgBrZNQHnfjkLabTfb92Q== - -os-locale@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" - integrity sha512-Z8l3R4wYWM40/52Z+S265okfFj8Kt2cC2MKY+xNi3kFs+XGI7WXu/I309QQQYbRW4ijiZ+yxs9pqEhJh0DqW3Q== - dependencies: - execa "^1.0.0" - lcid "^2.0.0" - mem "^4.0.0" - -os-name@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/os-name/-/os-name-3.1.0.tgz#dec19d966296e1cd62d701a5a66ee1ddeae70801" - integrity sha512-h8L+8aNjNcMpo/mAIBPn5PXCM16iyPGjHNWo6U1YO8sJTMHtEtyczI6QJnLoplswm6goopQkqc7OAnjhWcugVg== - dependencies: - macos-release "^2.2.0" - windows-release "^3.1.0" - -os-tmpdir@^1.0.0, os-tmpdir@~1.0.1, os-tmpdir@~1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" - integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= - -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - -own-or-env@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/own-or-env/-/own-or-env-1.0.1.tgz#54ce601d3bf78236c5c65633aa1c8ec03f8007e4" - integrity sha512-y8qULRbRAlL6x2+M0vIe7jJbJx/kmUTzYonRAa2ayesR2qWLswninkVyeJe4x3IEXhdgoNodzjQRKAoEs6Fmrw== - dependencies: - own-or "^1.0.0" - -own-or@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/own-or/-/own-or-1.0.0.tgz#4e877fbeda9a2ec8000fbc0bcae39645ee8bf8dc" - integrity sha1-Tod/vtqaLsgAD7wLyuOWRe6L+Nw= - -p-defer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" - integrity sha1-n26xgvbJqozXQwBKfU+WsZaw+ww= - -p-finally@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" - integrity sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4= - -p-is-promise@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/p-is-promise/-/p-is-promise-2.1.0.tgz#918cebaea248a62cf7ffab8e3bca8c5f882fc42e" - integrity sha512-Y3W0wlRPK8ZMRbNq97l4M5otioeA5lm1z7bkNkxCka8HSPjR0xRWmpCmc9utiaLP9Jb1eD8BgeIxTW4AIF45Pg== - -p-limit@^1.1.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-1.3.0.tgz#b86bd5f0c25690911c7590fcbfc2010d54b3ccb8" - integrity sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q== - dependencies: - p-try "^1.0.0" - -p-limit@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.2.2.tgz#61279b67721f5287aa1c13a9a7fbbc48c9291b1e" - integrity sha512-WGR+xHecKTr7EbUEhyLSh5Dube9JtdiG78ufaeLxTgpudf/20KqyMioIUZJAezlTIi6evxuoUs9YXc11cU+yzQ== - dependencies: - p-try "^2.0.0" - -p-locate@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-2.0.0.tgz#20a0103b222a70c8fd39cc2e580680f3dde5ec43" - integrity sha1-IKAQOyIqcMj9OcwuWAaA893l7EM= - dependencies: - p-limit "^1.1.0" - -p-locate@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-3.0.0.tgz#322d69a05c0264b25997d9f40cd8a891ab0064a4" - integrity sha512-x+12w/To+4GFfgJhBEpiDcLozRJGegY+Ei7/z0tSLkMmxGZNybVMSfWj9aJn8Z5Fc7dBUNJOOVgPv2H7IwulSQ== - dependencies: - p-limit "^2.0.0" - -p-try@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-1.0.0.tgz#cbc79cdbaf8fd4228e13f621f2b1a237c1b207b3" - integrity sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M= - -p-try@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" - integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== - -package-hash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/package-hash/-/package-hash-3.0.0.tgz#50183f2d36c9e3e528ea0a8605dff57ce976f88e" - integrity sha512-lOtmukMDVvtkL84rJHI7dpTYq+0rli8N2wlnqUcBuDWCfVhRUfOmnR9SsoHFMLpACvEV60dX7rd0rFaYDZI+FA== - dependencies: - graceful-fs "^4.1.15" - hasha "^3.0.0" - lodash.flattendeep "^4.4.0" - release-zalgo "^1.0.0" - -pako@~1.0.2, pako@~1.0.5: - version "1.0.11" - resolved "https://registry.yarnpkg.com/pako/-/pako-1.0.11.tgz#6c9599d340d54dfd3946380252a35705a6b992bf" - integrity sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw== - -parent-module@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" - integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== - dependencies: - callsites "^3.0.0" - -parents@^1.0.0, parents@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/parents/-/parents-1.0.1.tgz#fedd4d2bf193a77745fe71e371d73c3307d9c751" - integrity sha1-/t1NK/GTp3dF/nHjcdc8MwfZx1E= - dependencies: - path-platform "~0.11.15" - -parse-asn1@^5.0.0: - version "5.1.5" - resolved "https://registry.yarnpkg.com/parse-asn1/-/parse-asn1-5.1.5.tgz#003271343da58dc94cace494faef3d2147ecea0e" - integrity sha512-jkMYn1dcJqF6d5CpU689bq7w/b5ALS9ROVSpQDPrZsqqesUJii9qutvoT5ltGedNXMO2e16YUWIghG9KxaViTQ== - dependencies: - asn1.js "^4.0.0" - browserify-aes "^1.0.0" - create-hash "^1.1.0" - evp_bytestokey "^1.0.0" - pbkdf2 "^3.0.3" - safe-buffer "^5.1.1" - -parse-entities@^1.0.2, parse-entities@^1.1.0: - version "1.2.2" - resolved "https://registry.yarnpkg.com/parse-entities/-/parse-entities-1.2.2.tgz#c31bf0f653b6661354f8973559cb86dd1d5edf50" - integrity sha512-NzfpbxW/NPrzZ/yYSoQxyqUZMZXIdCfE0OIN4ESsnptHJECoUk3FZktxNuzQf4tjt5UEopnxpYJbvYuxIFDdsg== - dependencies: - character-entities "^1.0.0" - character-entities-legacy "^1.0.0" - character-reference-invalid "^1.0.0" - is-alphanumerical "^1.0.0" - is-decimal "^1.0.0" - is-hexadecimal "^1.0.0" - -parse-filepath@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/parse-filepath/-/parse-filepath-1.0.2.tgz#a632127f53aaf3d15876f5872f3ffac763d6c891" - integrity sha1-pjISf1Oq89FYdvWHLz/6x2PWyJE= - dependencies: - is-absolute "^1.0.0" - map-cache "^0.2.0" - path-root "^0.1.1" - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -parse-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-4.0.0.tgz#be35f5425be1f7f6c747184f98a788cb99477ee0" - integrity sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA= - dependencies: - error-ex "^1.3.1" - json-parse-better-errors "^1.0.1" - -parse-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.1.tgz#0ec769704949778cb3b8eda5e994c32073a1adff" - integrity sha512-d7yhga0Oc+PwNXDvQ0Jv1BuWkLVPXcAoQ/WREgd6vNNoKYaW52KI+RdOFjI63wjkmps9yUE8VS4veP+AgpQ/hA== - dependencies: - is-ssh "^1.3.0" - protocols "^1.4.0" - -parse-url@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/parse-url/-/parse-url-5.0.1.tgz#99c4084fc11be14141efa41b3d117a96fcb9527f" - integrity sha512-flNUPP27r3vJpROi0/R3/2efgKkyXqnXwyP1KQ2U0SfFRgdizOdWfvrrvJg1LuOoxs7GQhmxJlq23IpQ/BkByg== - dependencies: - is-ssh "^1.3.0" - normalize-url "^3.3.0" - parse-path "^4.0.0" - protocols "^1.4.0" - -parse5@5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-5.1.0.tgz#c59341c9723f414c452975564c7c00a68d58acd2" - integrity sha512-fxNG2sQjHvlVAYmzBZS9YlDp6PTSSDwa98vkD4QgVDDCAo84z5X1t5XyJQ62ImdLXx5NdIIfihey6xpum9/gRQ== - -parseqs@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseqs/-/parseqs-0.0.5.tgz#d5208a3738e46766e291ba2ea173684921a8b89d" - integrity sha1-1SCKNzjkZ2bikbouoXNoSSGouJ0= - dependencies: - better-assert "~1.0.0" - -parseuri@0.0.5: - version "0.0.5" - resolved "https://registry.yarnpkg.com/parseuri/-/parseuri-0.0.5.tgz#80204a50d4dbb779bfdc6ebe2778d90e4bce320a" - integrity sha1-gCBKUNTbt3m/3G6+J3jZDkvOMgo= - dependencies: - better-assert "~1.0.0" - -parseurl@~1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" - integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== - -pascalcase@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/pascalcase/-/pascalcase-0.1.1.tgz#b363e55e8006ca6fe21784d2db22bd15d7917f14" - integrity sha1-s2PlXoAGym/iF4TS2yK9FdeRfxQ= - -path-browserify@~0.0.0: - version "0.0.1" - resolved "https://registry.yarnpkg.com/path-browserify/-/path-browserify-0.0.1.tgz#e6c4ddd7ed3aa27c68a20cc4e50e1a4ee83bbc4a" - integrity sha512-BapA40NHICOS+USX9SN4tyhq+A2RrN/Ws5F0Z5aMHDp98Fl86lX8Oti8B7uN93L4Ifv4fHOEA+pQw87gmMO/lQ== - -path-dirname@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-dirname/-/path-dirname-1.0.2.tgz#cc33d24d525e099a5388c0336c6e32b9160609e0" - integrity sha1-zDPSTVJeCZpTiMAzbG4yuRYGCeA= - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= - -path-is-inside@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/path-is-inside/-/path-is-inside-1.0.2.tgz#365417dede44430d1c11af61027facf074bdfc53" - integrity sha1-NlQX3t5EQw0cEa9hAn+s8HS9/FM= - -path-key@^2.0.0, path-key@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" - integrity sha1-QRyttXTFoUDTpLGRDUDYDMn0C0A= - -path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-platform@~0.11.15: - version "0.11.15" - resolved "https://registry.yarnpkg.com/path-platform/-/path-platform-0.11.15.tgz#e864217f74c36850f0852b78dc7bf7d4a5721bf2" - integrity sha1-6GQhf3TDaFDwhSt43Hv31KVyG/I= - -path-root-regex@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/path-root-regex/-/path-root-regex-0.1.2.tgz#bfccdc8df5b12dc52c8b43ec38d18d72c04ba96d" - integrity sha1-v8zcjfWxLcUsi0PsONGNcsBLqW0= - -path-root@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/path-root/-/path-root-0.1.1.tgz#9a4a6814cac1c0cd73360a95f32083c8ea4745b7" - integrity sha1-mkpoFMrBwM1zNgqV8yCDyOpHRbc= - dependencies: - path-root-regex "^0.1.0" - -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha1-32BBeABfUi8V60SQ5yR6G/qmf4w= - -path-to-regexp@^1.7.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-1.8.0.tgz#887b3ba9d84393e87a0a0b9f4cb756198b53548a" - integrity sha512-n43JRhlUKUAlibEJhPeir1ncUID16QnEjNpwzNdO3Lm4ywrBpBZ5oLD0I6br9evr1Y9JTqwRtAh7JLoOzAQdVA== - dependencies: - isarray "0.0.1" - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -path-type@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-2.0.0.tgz#f012ccb8415b7096fc2daa1054c3d72389594c73" - integrity sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM= - dependencies: - pify "^2.0.0" - -path-type@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-3.0.0.tgz#cef31dc8e0a1a3bb0d105c0cd97cf3bf47f4e36f" - integrity sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg== - dependencies: - pify "^3.0.0" - -pbf@^3.0.5, pbf@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/pbf/-/pbf-3.2.1.tgz#b4c1b9e72af966cd82c6531691115cc0409ffe2a" - integrity sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ== - dependencies: - ieee754 "^1.1.12" - resolve-protobuf-schema "^2.1.0" - -pbkdf2@^3.0.3: - version "3.0.17" - resolved "https://registry.yarnpkg.com/pbkdf2/-/pbkdf2-3.0.17.tgz#976c206530617b14ebb32114239f7b09336e93a6" - integrity sha512-U/il5MsrZp7mGg3mSQfn742na2T+1/vHDCG5/iTI3X9MKUuYUZVLQhyRsg06mCgDBTd57TxzgZt7P+fYfjRLtA== - dependencies: - create-hash "^1.1.2" - create-hmac "^1.1.4" - ripemd160 "^2.0.1" - safe-buffer "^5.0.1" - sha.js "^2.4.8" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -picomatch@^2.0.4, picomatch@^2.0.7: - version "2.2.2" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.2.2.tgz#21f333e9b6b8eaff02468f5146ea406d345f4dad" - integrity sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg== - -pidtree@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/pidtree/-/pidtree-0.3.0.tgz#f6fada10fccc9f99bf50e90d0b23d72c9ebc2e6b" - integrity sha512-9CT4NFlDcosssyg8KVFltgokyKZIFjoBxw8CTGy+5F38Y1eQWrt8tRayiUOXE+zVKQnYu5BR8JjCtvK3BcnBhg== - -pify@^2.0.0, pify@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pify@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" - integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= - -pify@^4.0.0, pify@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231" - integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g== - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pirates@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-3.0.2.tgz#7e6f85413fd9161ab4e12b539b06010d85954bb9" - integrity sha512-c5CgUJq6H2k6MJz72Ak1F5sN9n9wlSlJyEnwvpm9/y3WB4E3pHBDT2c6PEiS1vyJvq2bUxUAIu0EGf8Cx4Ic7Q== - dependencies: - node-modules-regexp "^1.0.0" - -pirates@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.1.tgz#643a92caf894566f91b2b986d2c66950a8e2fb87" - integrity sha512-WuNqLTbMI3tmfef2TKxlQmAiLHKtFhlsCZnPIpuv2Ow0RDVO8lfy1Opf4NUzlMXLjPl+Men7AuVdX6TA+s+uGA== - dependencies: - node-modules-regexp "^1.0.0" - -pixelmatch@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/pixelmatch/-/pixelmatch-5.1.0.tgz#b640f0e5a03a09f235a4b818ef3b9b98d9d0b911" - integrity sha512-HqtgvuWN12tBzKJf7jYsc38Ha28Q2NYpmBL9WostEGgDHJqbTLkjydZXL1ZHM02ZnB+Dkwlxo87HBY38kMiD6A== - dependencies: - pngjs "^3.4.0" - -pkg-dir@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-2.0.0.tgz#f6d5d1109e19d63edf428e0bd57e12777615334b" - integrity sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s= - dependencies: - find-up "^2.1.0" - -pkg-dir@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-3.0.0.tgz#2749020f239ed990881b1f71210d51eb6523bea3" - integrity sha512-/E57AYkoeQ25qkxMj5PBOVgF8Kiu/h7cYS30Z5+R7WaiCCBfLq58ZI/dSeaEKb9WVJV5n/03QwrN3IeWIFllvw== - dependencies: - find-up "^3.0.0" - -pkg-up@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" - integrity sha512-nDywThFk1i4BQK4twPQ6TA4RT8bDY96yeuCVBWL3ePARCiEKDRSrNGbFIgUJpLp+XeIR65v8ra7WuJOFUBtkMA== - dependencies: - find-up "^3.0.0" - -plantuml-encoder@^1.2.5: - version "1.4.0" - resolved "https://registry.npmjs.org/plantuml-encoder/-/plantuml-encoder-1.4.0.tgz#7899302cf785de956bf1a167e15420feee5975f7" - integrity sha512-sxMwpDw/ySY1WB2CE3+IdMuEcWibJ72DDOsXLkSmEaSzwEUaYBT6DWgOfBiHGCux4q433X6+OEFWjlVqp7gL6g== - -platform@^1.3.3: - version "1.3.5" - resolved "https://registry.yarnpkg.com/platform/-/platform-1.3.5.tgz#fb6958c696e07e2918d2eeda0f0bc9448d733444" - integrity sha512-TuvHS8AOIZNAlE77WUDiR4rySV/VMptyMfcfeoMgs4P8apaZM3JrnbzBiixKUv+XR6i+BXrQh8WAnjaSPFO65Q== - -pn@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" - integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== - -pngjs@^3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/pngjs/-/pngjs-3.4.0.tgz#99ca7d725965fb655814eaf65f38f12bbdbf555f" - integrity sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w== - -posix-character-classes@^0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/posix-character-classes/-/posix-character-classes-0.1.1.tgz#01eac0fe3b5af71a2a6c02feabb8c1fef7e00eab" - integrity sha1-AerA/jta9xoqbAL+q7jB/vfgDqs= - -postcss-calc@^7.0.1: - version "7.0.2" - resolved "https://registry.yarnpkg.com/postcss-calc/-/postcss-calc-7.0.2.tgz#504efcd008ca0273120568b0792b16cdcde8aac1" - integrity sha512-rofZFHUg6ZIrvRwPeFktv06GdbDYLcGqh9EwiMutZg+a0oePCCw1zHOEiji6LCpyRcjTREtPASuUqeAvYlEVvQ== - dependencies: - postcss "^7.0.27" - postcss-selector-parser "^6.0.2" - postcss-value-parser "^4.0.2" - -postcss-cli@^6.1.2: - version "6.1.3" - resolved "https://registry.yarnpkg.com/postcss-cli/-/postcss-cli-6.1.3.tgz#a9eec3e9cde4aaa90170546baf706f8af6f8ecec" - integrity sha512-eieqJU+OR1OFc/lQqMsDmROTJpoMZFvoAQ+82utBQ8/8qGMTfH9bBSPsTdsagYA8uvNzxHw2I2cNSSJkLAGhvw== - dependencies: - chalk "^2.1.0" - chokidar "^2.0.0" - dependency-graph "^0.8.0" - fs-extra "^7.0.0" - get-stdin "^6.0.0" - globby "^9.0.0" - postcss "^7.0.0" - postcss-load-config "^2.0.0" - postcss-reporter "^6.0.0" - pretty-hrtime "^1.0.3" - read-cache "^1.0.0" - yargs "^12.0.1" - -postcss-colormin@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-colormin/-/postcss-colormin-4.0.3.tgz#ae060bce93ed794ac71264f08132d550956bd381" - integrity sha512-WyQFAdDZpExQh32j0U0feWisZ0dmOtPl44qYmJKkq9xFWY3p+4qnRzCHeNrkeRhwPHz9bQ3mo0/yVkaply0MNw== - dependencies: - browserslist "^4.0.0" - color "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-convert-values@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-convert-values/-/postcss-convert-values-4.0.1.tgz#ca3813ed4da0f812f9d43703584e449ebe189a7f" - integrity sha512-Kisdo1y77KUC0Jmn0OXU/COOJbzM8cImvw1ZFsBgBgMgb1iL23Zs/LXRe3r+EZqM3vGYKdQ2YJVQ5VkJI+zEJQ== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-discard-comments@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-comments/-/postcss-discard-comments-4.0.2.tgz#1fbabd2c246bff6aaad7997b2b0918f4d7af4033" - integrity sha512-RJutN259iuRf3IW7GZyLM5Sw4GLTOH8FmsXBnv8Ab/Tc2k4SR4qbV4DNbyyY4+Sjo362SyDmW2DQ7lBSChrpkg== - dependencies: - postcss "^7.0.0" - -postcss-discard-duplicates@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-discard-duplicates/-/postcss-discard-duplicates-4.0.2.tgz#3fe133cd3c82282e550fc9b239176a9207b784eb" - integrity sha512-ZNQfR1gPNAiXZhgENFfEglF93pciw0WxMkJeVmw8eF+JZBbMD7jp6C67GqJAXVZP2BWbOztKfbsdmMp/k8c6oQ== - dependencies: - postcss "^7.0.0" - -postcss-discard-empty@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-empty/-/postcss-discard-empty-4.0.1.tgz#c8c951e9f73ed9428019458444a02ad90bb9f765" - integrity sha512-B9miTzbznhDjTfjvipfHoqbWKwd0Mj+/fL5s1QOz06wufguil+Xheo4XpOnc4NqKYBCNqqEzgPv2aPBIJLox0w== - dependencies: - postcss "^7.0.0" - -postcss-discard-overridden@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-discard-overridden/-/postcss-discard-overridden-4.0.1.tgz#652aef8a96726f029f5e3e00146ee7a4e755ff57" - integrity sha512-IYY2bEDD7g1XM1IDEsUT4//iEYCxAmP5oDSFMVU/JVvT7gh+l4fmjciLqGgwjdWpQIdb0Che2VX00QObS5+cTg== - dependencies: - postcss "^7.0.0" - -postcss-html@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-html/-/postcss-html-0.36.0.tgz#b40913f94eaacc2453fd30a1327ad6ee1f88b204" - integrity sha512-HeiOxGcuwID0AFsNAL0ox3mW6MHH5cstWN1Z3Y+n6H+g12ih7LHdYxWwEA/QmrebctLjo79xz9ouK3MroHwOJw== - dependencies: - htmlparser2 "^3.10.0" - -postcss-inline-svg@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/postcss-inline-svg/-/postcss-inline-svg-3.1.1.tgz#b4215f4b2bee605889d2ae9e6007d5c70cdec34a" - integrity sha512-G2BkarW6gGpGFGAiKzW7aiulUS0/6QuCgq1riZEiX4oMaUTpU1pdW7BU6UFRDrdKkwS0r4icK2pU0bg6sCSOjw== - dependencies: - css-select "^1.2.0" - dom-serializer "^0.1.0" - htmlparser2 "^3.9.0" - postcss "^6.0.1" - postcss-value-parser "^3.2.3" - -postcss-jsx@^0.36.0: - version "0.36.4" - resolved "https://registry.yarnpkg.com/postcss-jsx/-/postcss-jsx-0.36.4.tgz#37a68f300a39e5748d547f19a747b3257240bd50" - integrity sha512-jwO/7qWUvYuWYnpOb0+4bIIgJt7003pgU3P6nETBLaOyBXuTD55ho21xnals5nBrlpTIFodyd3/jBi6UO3dHvA== - dependencies: - "@babel/core" ">=7.2.2" - -postcss-less@^3.1.0: - version "3.1.4" - resolved "https://registry.yarnpkg.com/postcss-less/-/postcss-less-3.1.4.tgz#369f58642b5928ef898ffbc1a6e93c958304c5ad" - integrity sha512-7TvleQWNM2QLcHqvudt3VYjULVB49uiW6XzEUFmvwHzvsOEF5MwBrIXZDJQvJNFGjJQTzSzZnDoCJ8h/ljyGXA== - dependencies: - postcss "^7.0.14" - -postcss-load-config@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/postcss-load-config/-/postcss-load-config-2.1.0.tgz#c84d692b7bb7b41ddced94ee62e8ab31b417b003" - integrity sha512-4pV3JJVPLd5+RueiVVB+gFOAa7GWc25XQcMp86Zexzke69mKf6Nx9LRcQywdz7yZI9n1udOxmLuAwTBypypF8Q== - dependencies: - cosmiconfig "^5.0.0" - import-cwd "^2.0.0" - -postcss-markdown@^0.36.0: - version "0.36.0" - resolved "https://registry.yarnpkg.com/postcss-markdown/-/postcss-markdown-0.36.0.tgz#7f22849ae0e3db18820b7b0d5e7833f13a447560" - integrity sha512-rl7fs1r/LNSB2bWRhyZ+lM/0bwKv9fhl38/06gF6mKMo/NPnp55+K1dSTosSVjFZc0e1ppBlu+WT91ba0PMBfQ== - dependencies: - remark "^10.0.1" - unist-util-find-all-after "^1.0.2" - -postcss-media-query-parser@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#27b39c6f4d94f81b1a73b8f76351c609e5cef244" - integrity sha1-J7Ocb02U+Bsac7j3Y1HGCeXO8kQ= - -postcss-merge-longhand@^4.0.11: - version "4.0.11" - resolved "https://registry.yarnpkg.com/postcss-merge-longhand/-/postcss-merge-longhand-4.0.11.tgz#62f49a13e4a0ee04e7b98f42bb16062ca2549e24" - integrity sha512-alx/zmoeXvJjp7L4mxEMjh8lxVlDFX1gqWHzaaQewwMZiVhLo42TEClKaeHbRf6J7j82ZOdTJ808RtN0ZOZwvw== - dependencies: - css-color-names "0.0.4" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - stylehacks "^4.0.0" - -postcss-merge-rules@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-merge-rules/-/postcss-merge-rules-4.0.3.tgz#362bea4ff5a1f98e4075a713c6cb25aefef9a650" - integrity sha512-U7e3r1SbvYzO0Jr3UT/zKBVgYYyhAz0aitvGIYOYK5CPmkNih+WDSsS5tvPrJ8YMQYlEMvsZIiqmn7HdFUaeEQ== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - cssnano-util-same-parent "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - vendors "^1.0.0" - -postcss-minify-font-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-font-values/-/postcss-minify-font-values-4.0.2.tgz#cd4c344cce474343fac5d82206ab2cbcb8afd5a6" - integrity sha512-j85oO6OnRU9zPf04+PZv1LYIYOprWm6IA6zkXkrJXyRveDEuQggG6tvoy8ir8ZwjLxLuGfNkCZEQG7zan+Hbtg== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-gradients@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-gradients/-/postcss-minify-gradients-4.0.2.tgz#93b29c2ff5099c535eecda56c4aa6e665a663471" - integrity sha512-qKPfwlONdcf/AndP1U8SJ/uzIJtowHlMaSioKzebAXSG4iJthlWC9iSWznQcX4f66gIWX44RSA841HTHj3wK+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - is-color-stop "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-minify-params@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-params/-/postcss-minify-params-4.0.2.tgz#6b9cef030c11e35261f95f618c90036d680db874" - integrity sha512-G7eWyzEx0xL4/wiBBJxJOz48zAKV2WG3iZOqVhPet/9geefm/Px5uo1fzlHu+DOjT+m0Mmiz3jkQzVHe6wxAWg== - dependencies: - alphanum-sort "^1.0.0" - browserslist "^4.0.0" - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - uniqs "^2.0.0" - -postcss-minify-selectors@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-minify-selectors/-/postcss-minify-selectors-4.0.2.tgz#e2e5eb40bfee500d0cd9243500f5f8ea4262fbd8" - integrity sha512-D5S1iViljXBj9kflQo4YutWnJmwm8VvIsU1GeXJGiG9j8CIg9zs4voPMdQDUmIxetUOh60VilsNzCiAFTOqu3g== - dependencies: - alphanum-sort "^1.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -postcss-normalize-charset@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-charset/-/postcss-normalize-charset-4.0.1.tgz#8b35add3aee83a136b0471e0d59be58a50285dd4" - integrity sha512-gMXCrrlWh6G27U0hF3vNvR3w8I1s2wOBILvA87iNXaPvSNo5uZAMYsZG7XjCUf1eVxuPfyL4TJ7++SGZLc9A3g== - dependencies: - postcss "^7.0.0" - -postcss-normalize-display-values@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-display-values/-/postcss-normalize-display-values-4.0.2.tgz#0dbe04a4ce9063d4667ed2be476bb830c825935a" - integrity sha512-3F2jcsaMW7+VtRMAqf/3m4cPFhPD3EFRgNs18u+k3lTJJlVe7d0YPO+bnwqo2xg8YiRpDXJI2u8A0wqJxMsQuQ== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-positions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-positions/-/postcss-normalize-positions-4.0.2.tgz#05f757f84f260437378368a91f8932d4b102917f" - integrity sha512-Dlf3/9AxpxE+NF1fJxYDeggi5WwV35MXGFnnoccP/9qDtFrTArZ0D0R+iKcg5WsUd8nUYMIl8yXDCtcrT8JrdA== - dependencies: - cssnano-util-get-arguments "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-repeat-style@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-repeat-style/-/postcss-normalize-repeat-style-4.0.2.tgz#c4ebbc289f3991a028d44751cbdd11918b17910c" - integrity sha512-qvigdYYMpSuoFs3Is/f5nHdRLJN/ITA7huIoCyqqENJe9PvPmLhNLMu7QTjPdtnVf6OcYYO5SHonx4+fbJE1+Q== - dependencies: - cssnano-util-get-arguments "^4.0.0" - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-string@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-string/-/postcss-normalize-string-4.0.2.tgz#cd44c40ab07a0c7a36dc5e99aace1eca4ec2690c" - integrity sha512-RrERod97Dnwqq49WNz8qo66ps0swYZDSb6rM57kN2J+aoyEAJfZ6bMx0sx/F9TIEX0xthPGCmeyiam/jXif0eA== - dependencies: - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-timing-functions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-timing-functions/-/postcss-normalize-timing-functions-4.0.2.tgz#8e009ca2a3949cdaf8ad23e6b6ab99cb5e7d28d9" - integrity sha512-acwJY95edP762e++00Ehq9L4sZCEcOPyaHwoaFOhIwWCDfik6YvqsYNxckee65JHLKzuNSSmAdxwD2Cud1Z54A== - dependencies: - cssnano-util-get-match "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-unicode@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-unicode/-/postcss-normalize-unicode-4.0.1.tgz#841bd48fdcf3019ad4baa7493a3d363b52ae1cfb" - integrity sha512-od18Uq2wCYn+vZ/qCOeutvHjB5jm57ToxRaMeNuf0nWVHaP9Hua56QyMF6fs/4FSUnVIw0CBPsU0K4LnBPwYwg== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-url@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-normalize-url/-/postcss-normalize-url-4.0.1.tgz#10e437f86bc7c7e58f7b9652ed878daaa95faae1" - integrity sha512-p5oVaF4+IHwu7VpMan/SSpmpYxcJMtkGppYf0VbdH5B6hN8YNmVyJLuY9FmLQTzY3fag5ESUUHDqM+heid0UVA== - dependencies: - is-absolute-url "^2.0.0" - normalize-url "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-normalize-whitespace@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-normalize-whitespace/-/postcss-normalize-whitespace-4.0.2.tgz#bf1d4070fe4fcea87d1348e825d8cc0c5faa7d82" - integrity sha512-tO8QIgrsI3p95r8fyqKV+ufKlSHh9hMJqACqbv2XknufqEDhDvbguXGBBqxw9nsQoXWf0qOqppziKJKHMD4GtA== - dependencies: - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-ordered-values@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/postcss-ordered-values/-/postcss-ordered-values-4.1.2.tgz#0cf75c820ec7d5c4d280189559e0b571ebac0eee" - integrity sha512-2fCObh5UanxvSxeXrtLtlwVThBvHn6MQcu4ksNT2tsaV2Fg76R2CV98W7wNSlX+5/pFwEyaDwKLLoEV7uRybAw== - dependencies: - cssnano-util-get-arguments "^4.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reduce-initial@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-reduce-initial/-/postcss-reduce-initial-4.0.3.tgz#7fd42ebea5e9c814609639e2c2e84ae270ba48df" - integrity sha512-gKWmR5aUulSjbzOfD9AlJiHCGH6AEVLaM0AV+aSioxUDd16qXP1PCh8d1/BGVvpdWn8k/HiK7n6TjeoXN1F7DA== - dependencies: - browserslist "^4.0.0" - caniuse-api "^3.0.0" - has "^1.0.0" - postcss "^7.0.0" - -postcss-reduce-transforms@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-reduce-transforms/-/postcss-reduce-transforms-4.0.2.tgz#17efa405eacc6e07be3414a5ca2d1074681d4e29" - integrity sha512-EEVig1Q2QJ4ELpJXMZR8Vt5DQx8/mo+dGWSR7vWXqcob2gQLyQGsionYcGKATXvQzMPn6DSN1vTN7yFximdIAg== - dependencies: - cssnano-util-get-match "^4.0.0" - has "^1.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - -postcss-reporter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/postcss-reporter/-/postcss-reporter-6.0.1.tgz#7c055120060a97c8837b4e48215661aafb74245f" - integrity sha512-LpmQjfRWyabc+fRygxZjpRxfhRf9u/fdlKf4VHG4TSPbV2XNsuISzYW1KL+1aQzx53CAppa1bKG4APIB/DOXXw== - dependencies: - chalk "^2.4.1" - lodash "^4.17.11" - log-symbols "^2.2.0" - postcss "^7.0.7" - -postcss-resolve-nested-selector@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz#29ccbc7c37dedfac304e9fff0bf1596b3f6a0e4e" - integrity sha1-Kcy8fDfe36wwTp//C/FZaz9qDk4= - -postcss-safe-parser@^4.0.0: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-safe-parser/-/postcss-safe-parser-4.0.2.tgz#a6d4e48f0f37d9f7c11b2a581bf00f8ba4870b96" - integrity sha512-Uw6ekxSWNLCPesSv/cmqf2bY/77z11O7jZGPax3ycZMFU/oi2DMH9i89AdHc1tRwFg/arFoEwX0IS3LCUxJh1g== - dependencies: - postcss "^7.0.26" - -postcss-sass@^0.3.5: - version "0.3.5" - resolved "https://registry.yarnpkg.com/postcss-sass/-/postcss-sass-0.3.5.tgz#6d3e39f101a53d2efa091f953493116d32beb68c" - integrity sha512-B5z2Kob4xBxFjcufFnhQ2HqJQ2y/Zs/ic5EZbCywCkxKd756Q40cIQ/veRDwSrw1BF6+4wUgmpm0sBASqVi65A== - dependencies: - gonzales-pe "^4.2.3" - postcss "^7.0.1" - -postcss-scss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/postcss-scss/-/postcss-scss-2.0.0.tgz#248b0a28af77ea7b32b1011aba0f738bda27dea1" - integrity sha512-um9zdGKaDZirMm+kZFKKVsnKPF7zF7qBAtIfTSnZXD1jZ0JNZIxdB6TxQOjCnlSzLRInVl2v3YdBh/M881C4ug== - dependencies: - postcss "^7.0.0" - -postcss-selector-parser@^3.0.0, postcss-selector-parser@^3.1.0: - version "3.1.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-3.1.2.tgz#b310f5c4c0fdaf76f94902bbaa30db6aa84f5270" - integrity sha512-h7fJ/5uWuRVyOtkO45pnt1Ih40CEleeyCHzipqAZO2e5H20g25Y48uYnFUiShvY4rZWNJ/Bib/KVPmanaCtOhA== - dependencies: - dot-prop "^5.2.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-selector-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-selector-parser/-/postcss-selector-parser-6.0.2.tgz#934cf799d016c83411859e09dcecade01286ec5c" - integrity sha512-36P2QR59jDTOAiIkqEprfJDsoNrvwFei3eCqKd1Y0tUsBimsq39BLp7RD+JWny3WgB1zGhJX8XVePwm9k4wdBg== - dependencies: - cssesc "^3.0.0" - indexes-of "^1.0.1" - uniq "^1.0.1" - -postcss-svgo@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/postcss-svgo/-/postcss-svgo-4.0.2.tgz#17b997bc711b333bab143aaed3b8d3d6e3d38258" - integrity sha512-C6wyjo3VwFm0QgBy+Fu7gCYOkCmgmClghO+pjcxvrcBKtiKt0uCF+hvbMO1fyv5BMImRK90SMb+dwUnfbGd+jw== - dependencies: - is-svg "^3.0.0" - postcss "^7.0.0" - postcss-value-parser "^3.0.0" - svgo "^1.0.0" - -postcss-syntax@^0.36.2: - version "0.36.2" - resolved "https://registry.yarnpkg.com/postcss-syntax/-/postcss-syntax-0.36.2.tgz#f08578c7d95834574e5593a82dfbfa8afae3b51c" - integrity sha512-nBRg/i7E3SOHWxF3PpF5WnJM/jQ1YpY9000OaVXlAQj6Zp/kIqJxEDWIZ67tAd7NLuk7zqN4yqe9nc0oNAOs1w== - -postcss-unique-selectors@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/postcss-unique-selectors/-/postcss-unique-selectors-4.0.1.tgz#9446911f3289bfd64c6d680f073c03b1f9ee4bac" - integrity sha512-+JanVaryLo9QwZjKrmJgkI4Fn8SBgRO6WXQBJi7KiAVPlmxikB5Jzc4EvXMT2H0/m0RjrVVm9rGNhZddm/8Spg== - dependencies: - alphanum-sort "^1.0.0" - postcss "^7.0.0" - uniqs "^2.0.0" - -postcss-value-parser@^3.0.0, postcss-value-parser@^3.2.3, postcss-value-parser@^3.3.0: - version "3.3.1" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" - integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== - -postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.0.3.tgz#651ff4593aa9eda8d5d0d66593a2417aeaeb325d" - integrity sha512-N7h4pG+Nnu5BEIzyeaaIYWs0LI5XC40OrRh5L60z0QjFsqGWcHcbkBvpe1WYpcIS9yQ8sOi/vIPt1ejQCrMVrg== - -postcss@^6.0.1: - version "6.0.23" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-6.0.23.tgz#61c82cc328ac60e677645f979054eb98bc0e3324" - integrity sha512-soOk1h6J3VMTZtVeVpv15/Hpdl2cBLX3CAw4TAbkpTJiNPk9YP/zWcD1ND+xEtvyuuvKzbxliTOIyvkSeSJ6ag== - dependencies: - chalk "^2.4.1" - source-map "^0.6.1" - supports-color "^5.4.0" - -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.13, postcss@^7.0.14, postcss@^7.0.2, postcss@^7.0.26, postcss@^7.0.27, postcss@^7.0.7: - version "7.0.27" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.27.tgz#cc67cdc6b0daa375105b7c424a85567345fc54d9" - integrity sha512-WuQETPMcW9Uf1/22HWUWP9lgsIC+KEHg2kozMflKjbeUtw9ujvFX6QmIfozaErDkmLWS9WEnEdEe6Uo9/BNTdQ== - dependencies: - chalk "^2.4.2" - source-map "^0.6.1" - supports-color "^6.1.0" - -potpack@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/potpack/-/potpack-1.0.1.tgz#d1b1afd89e4c8f7762865ec30bd112ab767e2ebf" - integrity sha512-15vItUAbViaYrmaB/Pbw7z6qX2xENbFSTA7Ii4tgbPtasxm5v6ryKhKtL91tpWovDJzTiZqdwzhcFBCwiMVdVw== - -prebuild-install@^5.1.0: - version "5.3.3" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-5.3.3.tgz#ef4052baac60d465f5ba6bf003c9c1de79b9da8e" - integrity sha512-GV+nsUXuPW2p8Zy7SarF/2W/oiK8bFQgJcncoJ0d7kRpekEA0ftChjfEaF9/Y+QJEc/wFR7RAEa8lYByuUIe2g== - dependencies: - detect-libc "^1.0.3" - expand-template "^2.0.3" - github-from-package "0.0.0" - minimist "^1.2.0" - mkdirp "^0.5.1" - napi-build-utils "^1.0.1" - node-abi "^2.7.0" - noop-logger "^0.1.1" - npmlog "^4.0.1" - pump "^3.0.0" - rc "^1.2.7" - simple-get "^3.0.3" - tar-fs "^2.0.0" - tunnel-agent "^0.6.0" - which-pm-runs "^1.0.0" - -prelude-ls@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" - integrity sha1-IZMqVJ9eUv/ZqCf1cOBL5iqX2lQ= - -prepend-http@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-1.0.4.tgz#d4f4562b0ce3696e41ac52d0e002e57a635dc6dc" - integrity sha1-1PRWKwzjaW5BrFLQ4ALlemNdxtw= - -pretty-bytes@^5.1.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.3.0.tgz#f2849e27db79fb4d6cfe24764fc4134f165989f2" - integrity sha512-hjGrh+P926p4R4WbaB6OckyRtO0F0/lQBiT+0gnxjV+5kjPBrfVBFCsCLbMqVQeydvIoouYTCmmEURiH3R1Bdg== - -pretty-hrtime@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" - integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= - -printf@^0.5.1: - version "0.5.3" - resolved "https://registry.yarnpkg.com/printf/-/printf-0.5.3.tgz#8b7eec278d886833312238b2bf42b2b6f250880a" - integrity sha512-t3lYN6vPU5PZXDiEZZqoyXvN8wCsBfi8gPoxTKo2e5hhV673t/KUh+mfO8P8lCOCDC/BWcOGIxKyebxc5FuqLA== - -private@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - -process-nextick-args@^2.0.0, process-nextick-args@~2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" - integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== - -process-nextick-args@~1.0.6: - version "1.0.7" - resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-1.0.7.tgz#150e20b756590ad3f91093f25a4f2ad8bff30ba3" - integrity sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M= - -process@~0.11.0: - version "0.11.10" - resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" - integrity sha1-czIwDoQBYb2j5podHZGn1LwW8YI= - -progress@^2.0.0, progress@^2.0.1: - version "2.0.3" - resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" - integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== - -prop-types@^15.6.2, prop-types@^15.7.2: - version "15.7.2" - resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" - integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== - dependencies: - loose-envify "^1.4.0" - object-assign "^4.1.1" - react-is "^16.8.1" - -property-information@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/property-information/-/property-information-4.2.0.tgz#f0e66e07cbd6fed31d96844d958d153ad3eb486e" - integrity sha512-TlgDPagHh+eBKOnH2VYvk8qbwsCG/TAJdmTL7f1PROUcSO8qt/KSmShEQ/OKvock8X9tFjtqjCScyOkkkvIKVQ== - dependencies: - xtend "^4.0.1" - -protocol-buffers-schema@^3.3.1, protocol-buffers-schema@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/protocol-buffers-schema/-/protocol-buffers-schema-3.4.0.tgz#2f0ea31ca96627d680bf2fefae7ebfa2b6453eae" - integrity sha512-G/2kcamPF2S49W5yaMGdIpkG6+5wZF0fzBteLKgEHjbNzqjZQ85aAs1iJGto31EJaSTkNvHs5IXuHSaTLWBAiA== - -protocols@^1.1.0, protocols@^1.4.0: - version "1.4.7" - resolved "https://registry.yarnpkg.com/protocols/-/protocols-1.4.7.tgz#95f788a4f0e979b291ffefcf5636ad113d037d32" - integrity sha512-Fx65lf9/YDn3hUX08XUc0J8rSux36rEsyiv21ZGUC1mOyeM3lTRpZLcrm8aAolzS4itwVfm7TAPyxC2E5zd6xg== - -proxy-addr@~2.0.5: - version "2.0.6" - resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.6.tgz#fdc2336505447d3f2f2c638ed272caf614bbb2bf" - integrity sha512-dh/frvCBVmSsDYzw6n926jv974gddhkFPfiN8hPOi30Wax25QZyZEGveluCgliBnqmuM+UJmBErbAUFIoDbjOw== - dependencies: - forwarded "~0.1.2" - ipaddr.js "1.9.1" - -proxy-from-env@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" - integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== - -pseudomap@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" - integrity sha1-8FKijacOYYkX7wqKw0wa5aaChrM= - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -public-encrypt@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/public-encrypt/-/public-encrypt-4.0.3.tgz#4fcc9d77a07e48ba7527e7cbe0de33d0701331e0" - integrity sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q== - dependencies: - bn.js "^4.1.0" - browserify-rsa "^4.0.0" - create-hash "^1.1.0" - parse-asn1 "^5.0.0" - randombytes "^2.0.1" - safe-buffer "^5.1.2" - -pump@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" - integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -pumpify@^1.3.5: - version "1.5.1" - resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" - integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== - dependencies: - duplexify "^3.6.0" - inherits "^2.0.3" - pump "^2.0.0" - -punycode@1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.3.2.tgz#9653a036fb7c1ee42342f2325cceefea3926c48d" - integrity sha1-llOgNvt8HuQjQvIyXM7v6jkmxI0= - -punycode@^1.3.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-1.4.1.tgz#c0d5a63b2718800ad8e1eb0fa5269c84dd41845e" - integrity sha1-wNWmOycYgArY4esPpSachN1BhF4= - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -puppeteer@^1.18.0: - version "1.20.0" - resolved "https://registry.yarnpkg.com/puppeteer/-/puppeteer-1.20.0.tgz#e3d267786f74e1d87cf2d15acc59177f471bbe38" - integrity sha512-bt48RDBy2eIwZPrkgbcwHtb51mj2nKvHOPMaSH2IsWiv7lOG9k9zhaRzpDZafrk05ajMc3cu+lSQYYOfH2DkVQ== - dependencies: - debug "^4.1.0" - extract-zip "^1.6.6" - https-proxy-agent "^2.2.1" - mime "^2.0.3" - progress "^2.0.1" - proxy-from-env "^1.0.0" - rimraf "^2.6.1" - ws "^6.1.0" - -q@^1.1.2: - version "1.5.1" - resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" - integrity sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc= - -qrcode-terminal@^0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/qrcode-terminal/-/qrcode-terminal-0.12.0.tgz#bb5b699ef7f9f0505092a3748be4464fe71b5819" - integrity sha512-EXtzRZmC+YGmGlDFbXKxQiMZNwCLEO6BANKXG4iCtSIM0yqc/pappSx3RIKr4r0uh5JsBckOXeKrB3Iz7mdQpQ== - -qs@6.7.0: - version "6.7.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.7.0.tgz#41dc1a015e3d581f1621776be31afb2876a9b1bc" - integrity sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ== - -qs@^6.4.0: - version "6.9.3" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.3.tgz#bfadcd296c2d549f1dffa560619132c977f5008e" - integrity sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -querystring-es3@~0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/querystring-es3/-/querystring-es3-0.2.1.tgz#9ec61f79049875707d69414596fd907a4d711e73" - integrity sha1-nsYfeQSYdXB9aUFFlv2Qek1xHnM= - -querystring@0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620" - integrity sha1-sgmEkgO7Jd+CDadW50cAWHhSFiA= - -quick-lru@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-1.1.0.tgz#4360b17c61136ad38078397ff11416e186dcfbb8" - integrity sha1-Q2CxfGETatOAeDl/8RQW4Ybc+7g= - -quickselect@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/quickselect/-/quickselect-2.0.0.tgz#f19680a486a5eefb581303e023e98faaf25dd018" - integrity sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw== - -randombytes@^2.0.0, randombytes@^2.0.1, randombytes@^2.0.5: - version "2.1.0" - resolved "https://registry.yarnpkg.com/randombytes/-/randombytes-2.1.0.tgz#df6f84372f0270dc65cdf6291349ab7a473d4f2a" - integrity sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ== - dependencies: - safe-buffer "^5.1.0" - -randomfill@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/randomfill/-/randomfill-1.0.4.tgz#c92196fc86ab42be983f1bf31778224931d61458" - integrity sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw== - dependencies: - randombytes "^2.0.5" - safe-buffer "^5.1.0" - -range-parser@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" - integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== - -raw-body@2.4.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.4.0.tgz#a1ce6fb9c9bc356ca52e89256ab59059e13d0332" - integrity sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q== - dependencies: - bytes "3.1.0" - http-errors "1.7.2" - iconv-lite "0.4.24" - unpipe "1.0.0" - -raw-body@~1.1.0: - version "1.1.7" - resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-1.1.7.tgz#1d027c2bfa116acc6623bca8f00016572a87d425" - integrity sha1-HQJ8K/oRasxmI7yo8AAWVyqH1CU= - dependencies: - bytes "1" - string_decoder "0.10" - -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -react-dom@^16.8.6: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-16.13.1.tgz#c1bd37331a0486c078ee54c4740720993b2e0e7f" - integrity sha512-81PIMmVLnCNLO/fFOQxdQkvEq/+Hfpv24XNJfpyZhTRfO0QcmQIF/PgCa1zCOj2w1hrn12MFLyaJ/G0+Mxtfag== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - scheduler "^0.19.1" - -react-is@^16.8.1: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4" - integrity sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ== - -react@^16.8.6: - version "16.13.1" - resolved "https://registry.yarnpkg.com/react/-/react-16.13.1.tgz#2e818822f1a9743122c063d6410d85c1e3afe48e" - integrity sha512-YMZQQq32xHLX0bz5Mnibv1/LHb3Sqzngu7xstSM+vrkE5Kzr9xE0yMByK5kMoTK30YVJE61WfbxIFFvfeDKT1w== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - prop-types "^15.6.2" - -read-cache@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/read-cache/-/read-cache-1.0.0.tgz#e664ef31161166c9751cdbe8dbcf86b5fb58f774" - integrity sha1-5mTvMRYRZsl1HNvo28+GtftY93Q= - dependencies: - pify "^2.3.0" - -read-only-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-only-stream/-/read-only-stream-2.0.0.tgz#2724fd6a8113d73764ac288d4386270c1dbf17f0" - integrity sha1-JyT9aoET1zdkrCiNQ4YnDB2/F/A= - dependencies: - readable-stream "^2.0.2" - -read-pkg-up@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-1.0.1.tgz#9d63c13276c065918d57f002a57f40a1b643fb02" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg-up@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-2.0.0.tgz#6b72a8048984e0c41e79510fd5e9fa99b3b549be" - integrity sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4= - dependencies: - find-up "^2.0.0" - read-pkg "^2.0.0" - -read-pkg-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-3.0.0.tgz#3ed496685dba0f8fe118d0691dc51f4a1ff96f07" - integrity sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc= - dependencies: - find-up "^2.0.0" - read-pkg "^3.0.0" - -read-pkg-up@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-4.0.0.tgz#1b221c6088ba7799601c808f91161c66e58f8978" - integrity sha512-6etQSH7nJGsK0RbG/2TeDzZFa8shjQ1um+SwQQ5cwKy0dhSXdOncEhb1CPpvQG4h7FyOV6EB6YlV0yJvZQNAkA== - dependencies: - find-up "^3.0.0" - read-pkg "^3.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -read-pkg@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-2.0.0.tgz#8ef1c0623c6a6db0dc6713c4bfac46332b2368f8" - integrity sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg= - dependencies: - load-json-file "^2.0.0" - normalize-package-data "^2.3.2" - path-type "^2.0.0" - -read-pkg@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-3.0.0.tgz#9cbc686978fee65d16c00e2b19c237fcf6e38389" - integrity sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k= - dependencies: - load-json-file "^4.0.0" - normalize-package-data "^2.3.2" - path-type "^3.0.0" - -"readable-stream@>=1.0.33-1 <1.1.0-0": - version "1.0.34" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.0.34.tgz#125820e34bc842d2f2aaafafe4c2916ee32c157c" - integrity sha1-Elgg40vIQtLyqq+v5MKRbuMsFXw= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -readable-stream@^2, readable-stream@^2.0.0, readable-stream@^2.0.1, readable-stream@^2.0.2, readable-stream@^2.0.5, readable-stream@^2.0.6, readable-stream@^2.1.5, readable-stream@^2.2.2, readable-stream@^2.3.3, readable-stream@^2.3.5, readable-stream@^2.3.6, readable-stream@~2.3.6: - version "2.3.7" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" - integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@^3.0.2, readable-stream@^3.0.6, readable-stream@^3.1.1, readable-stream@^3.4.0: - version "3.6.0" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" - integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -readable-stream@~2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.0.6.tgz#8f90341e68a53ccc928788dacfcd11b36eb9b78e" - integrity sha1-j5A0HmilPMySh4jaz80Rs265t44= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readable-stream@~2.1.0: - version "2.1.5" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.1.5.tgz#66fa8b720e1438b364681f2ad1a63c618448c9d0" - integrity sha1-ZvqLcg4UOLNkaB8q0aY8YYRIydA= - dependencies: - buffer-shims "^1.0.0" - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "~1.0.0" - process-nextick-args "~1.0.6" - string_decoder "~0.10.x" - util-deprecate "~1.0.1" - -readdirp@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-2.2.1.tgz#0e87622a3325aa33e892285caf8b4e846529a525" - integrity sha512-1JU/8q+VgFZyxwrJ+SVIOsh+KywWGpds3NTqikiKpDMZWScmAYyKIgqkO+ARvNWJfXeXR1zxz7aHF4u4CyH6vQ== - dependencies: - graceful-fs "^4.1.11" - micromatch "^3.1.10" - readable-stream "^2.0.2" - -readdirp@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.3.0.tgz#984458d13a1e42e2e9f5841b129e162f369aff17" - integrity sha512-zz0pAkSPOXXm1viEwygWIPSPkcBYjW1xU5j/JBh5t9bGCJwa6f9+BJa6VaB2g+b55yVrmXzqkyLf4xaWYM0IkQ== - dependencies: - picomatch "^2.0.7" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -redent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-2.0.0.tgz#c1b2007b42d57eb1389079b3c8333639d5e1ccaa" - integrity sha1-wbIAe0LVfrE4kHmzyDM2OdXhzKo= - dependencies: - indent-string "^3.0.0" - strip-indent "^2.0.0" - -regenerate-unicode-properties@^8.2.0: - version "8.2.0" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-8.2.0.tgz#e5de7111d655e7ba60c057dbe9ff37c87e65cdec" - integrity sha512-F9DjY1vKLo/tPePDycuH3dn9H1OTPIkVD9Kz4LODu+F2C75mgjAJ7x/gwy6ZcSNRAAkhNlJSOHRe8k3p+K9WhA== - dependencies: - regenerate "^1.4.0" - -regenerate@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.0.tgz#4a856ec4b56e4077c557589cae85e7a4c8869a11" - integrity sha512-1G6jJVDWrt0rK99kBjvEtziZNCICAuvIPkSiUFIQxVP06RCVpq3dmDo2oi6ABpYaDYaTRr67BEhL8r1wgEZZKg== - -regenerator-runtime@^0.13.4: - version "0.13.5" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.5.tgz#d878a1d094b4306d10b9096484b33ebd55e26697" - integrity sha512-ZS5w8CpKFinUzOwW3c83oPeVXoNsrLsaCoLtJvAClH135j/R77RuymhiSErhm2lKcwSCIpmvIWSbDkIfAqKQlA== - -regenerator-transform@^0.14.2: - version "0.14.4" - resolved "https://registry.yarnpkg.com/regenerator-transform/-/regenerator-transform-0.14.4.tgz#5266857896518d1616a78a0479337a30ea974cc7" - integrity sha512-EaJaKPBI9GvKpvUz2mz4fhx7WPgvwRLY9v3hlNHWmAuJHI13T4nwKnNvm5RWJzEdnI5g5UwtOww+S8IdoUC2bw== - dependencies: - "@babel/runtime" "^7.8.4" - private "^0.1.8" - -regex-not@^1.0.0, regex-not@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/regex-not/-/regex-not-1.0.2.tgz#1f4ece27e00b0b65e0247a6810e6a85d83a5752c" - integrity sha512-J6SDjUgDxQj5NusnOtdFxDwN/+HWykR8GELwctJ7mdqhcyy1xEc4SRFHUXvxTp661YaVKAjfRLZ9cCqS6tn32A== - dependencies: - extend-shallow "^3.0.2" - safe-regex "^1.1.0" - -regexp.prototype.flags@^1.2.0, regexp.prototype.flags@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.3.0.tgz#7aba89b3c13a64509dabcf3ca8d9fbb9bdf5cb75" - integrity sha512-2+Q0C5g951OlYlJz6yu5/M33IcsESLlLfsyIaLJaG4FA2r4yP8MvVMJUUP/fVBkSpbbbZlS5gynbEWLipiiXiQ== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -regexpp@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-2.0.1.tgz#8d19d31cf632482b589049f8281f93dbcba4d07f" - integrity sha512-lv0M6+TkDVniA3aD1Eg0DVpfU/booSu7Eev3TDO/mZKHBfVjgCGTV4t4buppESEYDtkArYFOxTJWv6S5C+iaNw== - -regexpu-core@^4.5.4, regexpu-core@^4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.0.tgz#fcbf458c50431b0bb7b45d6967b8192d91f3d938" - integrity sha512-TQ4KXRnIn6tz6tjnrXEkD/sshygKH/j5KzK86X8MkeHyZ8qst/LZ89j3X4/8HEIfHANTFIP/AbXakeRhWIl5YQ== - dependencies: - regenerate "^1.4.0" - regenerate-unicode-properties "^8.2.0" - regjsgen "^0.5.1" - regjsparser "^0.6.4" - unicode-match-property-ecmascript "^1.0.4" - unicode-match-property-value-ecmascript "^1.2.0" - -regextras@^0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/regextras/-/regextras-0.6.1.tgz#9689641bbb338e0ff7001a5c507c6a2008df7b36" - integrity sha512-EzIHww9xV2Kpqx+corS/I7OBmf2rZ0pKKJPsw5Dc+l6Zq1TslDmtRIP9maVn3UH+72MIXmn8zzDgP07ihQogUA== - -registry-url@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/registry-url/-/registry-url-4.0.0.tgz#7dc344ef0f1496fc95a6ad04ccb9a491df11c025" - integrity sha512-WAfGLywivb8s2+Cfblq1UV+kOyzURHzWSJmciDvrmstr4bv/0lnVSB9jfoOfkxx5xNJ1OGlSFmZh9WYBLFJOPg== - dependencies: - rc "^1.2.7" - -regjsgen@^0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.5.1.tgz#48f0bf1a5ea205196929c0d9798b42d1ed98443c" - integrity sha512-5qxzGZjDs9w4tzT3TPhCJqWdCc3RLYwy9J2NB0nm5Lz+S273lvWcpjaTGHsT1dc6Hhfq41uSEOw8wBmxrKOuyg== - -regjsparser@^0.6.4: - version "0.6.4" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.6.4.tgz#a769f8684308401a66e9b529d2436ff4d0666272" - integrity sha512-64O87/dPDgfk8/RQqC4gkZoGyyWFIEUTTh80CU6CWuK5vkCGyekIx+oKcEIYtP/RAxSQltCZHCNu/mdd7fqlJw== - dependencies: - jsesc "~0.5.0" - -release-zalgo@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/release-zalgo/-/release-zalgo-1.0.0.tgz#09700b7e5074329739330e535c5a90fb67851730" - integrity sha1-CXALflB0Mpc5Mw5TXFqQ+2eFFzA= - dependencies: - es6-error "^4.0.1" - -remark-html@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/remark-html/-/remark-html-8.0.0.tgz#9fcb859a6f3cb40f3ef15402950f1a62ec301b3a" - integrity sha512-3V2391GL3hxKhrkzYOyfPpxJ6taIKLCfuLVqumeWQOk3H9nTtSQ8St8kMYkBVIEAquXN1chT83qJ/2lAW+dpEg== - dependencies: - hast-util-sanitize "^1.0.0" - hast-util-to-html "^4.0.0" - mdast-util-to-hast "^3.0.0" - xtend "^4.0.1" - -remark-parse@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-5.0.0.tgz#4c077f9e499044d1d5c13f80d7a98cf7b9285d95" - integrity sha512-b3iXszZLH1TLoyUzrATcTQUZrwNl1rE70rVdSruJFlDaJ9z5aMkhrG43Pp68OgfHndL/ADz6V69Zow8cTQu+JA== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-parse@^6.0.0: - version "6.0.3" - resolved "https://registry.yarnpkg.com/remark-parse/-/remark-parse-6.0.3.tgz#c99131052809da482108413f87b0ee7f52180a3a" - integrity sha512-QbDXWN4HfKTUC0hHa4teU463KclLAnwpn/FBn87j9cKYJWWawbiLgMfP2Q4XwhxxuuuOxHlw+pSN0OKuJwyVvg== - dependencies: - collapse-white-space "^1.0.2" - is-alphabetical "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - is-word-character "^1.0.0" - markdown-escapes "^1.0.0" - parse-entities "^1.1.0" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - trim "0.0.1" - trim-trailing-lines "^1.0.0" - unherit "^1.0.4" - unist-util-remove-position "^1.0.0" - vfile-location "^2.0.0" - xtend "^4.0.1" - -remark-reference-links@^4.0.1: - version "4.0.4" - resolved "https://registry.yarnpkg.com/remark-reference-links/-/remark-reference-links-4.0.4.tgz#190579a0d6b002859d6cdbdc5aeb8bbdae4e06ab" - integrity sha512-+2X8hwSQqxG4tvjYZNrTcEC+bXp8shQvwRGG6J/rnFTvBoU4G0BBviZoqKGZizLh/DG+0gSYhiDDWCqyxXW1iQ== - dependencies: - unist-util-visit "^1.0.0" - -remark-slug@^5.0.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/remark-slug/-/remark-slug-5.1.2.tgz#715ecdef8df1226786204b1887d31ab16aa24609" - integrity sha512-DWX+Kd9iKycqyD+/B+gEFO3jjnt7Yg1O05lygYSNTe5i5PIxxxPjp5qPBDxPIzp5wreF7+1ROCwRgjEcqmzr3A== - dependencies: - github-slugger "^1.0.0" - mdast-util-to-string "^1.0.0" - unist-util-visit "^1.0.0" - -remark-stringify@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-5.0.0.tgz#336d3a4d4a6a3390d933eeba62e8de4bd280afba" - integrity sha512-Ws5MdA69ftqQ/yhRF9XhVV29mhxbfGhbz0Rx5bQH+oJcNhhSM6nCu1EpLod+DjrFGrU0BMPs+czVmJZU7xiS7w== - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark-stringify@^6.0.0: - version "6.0.4" - resolved "https://registry.yarnpkg.com/remark-stringify/-/remark-stringify-6.0.4.tgz#16ac229d4d1593249018663c7bddf28aafc4e088" - integrity sha512-eRWGdEPMVudijE/psbIDNcnJLRVx3xhfuEsTDGgH4GsFF91dVhw5nhmnBppafJ7+NWINW6C7ZwWbi30ImJzqWg== - dependencies: - ccount "^1.0.0" - is-alphanumeric "^1.0.0" - is-decimal "^1.0.0" - is-whitespace-character "^1.0.0" - longest-streak "^2.0.1" - markdown-escapes "^1.0.0" - markdown-table "^1.1.0" - mdast-util-compact "^1.0.0" - parse-entities "^1.0.2" - repeat-string "^1.5.4" - state-toggle "^1.0.0" - stringify-entities "^1.0.1" - unherit "^1.0.4" - xtend "^4.0.1" - -remark-toc@^5.0.0: - version "5.1.1" - resolved "https://registry.yarnpkg.com/remark-toc/-/remark-toc-5.1.1.tgz#8c229d6f834cdb43fde6685e2d43248d3fc82d78" - integrity sha512-vCPW4YOsm2CfyuScdktM9KDnJXVHJsd/ZeRtst+dnBU3B3KKvt8bc+bs5syJjyptAHfqo7H+5Uhz+2blWBfwow== - dependencies: - mdast-util-toc "^3.0.0" - remark-slug "^5.0.0" - -remark@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/remark/-/remark-10.0.1.tgz#3058076dc41781bf505d8978c291485fe47667df" - integrity sha512-E6lMuoLIy2TyiokHprMjcWNJ5UxfGQjaMSMhV+f4idM625UjjK4j798+gPs5mfjzDE6vL0oFKVeZM6gZVSVrzQ== - dependencies: - remark-parse "^6.0.0" - remark-stringify "^6.0.0" - unified "^7.0.0" - -remark@^9.0.0: - version "9.0.0" - resolved "https://registry.yarnpkg.com/remark/-/remark-9.0.0.tgz#c5cfa8ec535c73a67c4b0f12bfdbd3a67d8b2f60" - integrity sha512-amw8rGdD5lHbMEakiEsllmkdBP+/KpjW/PRK6NSGPZKCQowh0BT4IWXDAkRMyG3SB9dKPXWMviFjNusXzXNn3A== - dependencies: - remark-parse "^5.0.0" - remark-stringify "^5.0.0" - unified "^6.0.0" - -remove-bom-buffer@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/remove-bom-buffer/-/remove-bom-buffer-3.0.0.tgz#c2bf1e377520d324f623892e33c10cac2c252b53" - integrity sha512-8v2rWhaakv18qcvNeli2mZ/TMTL2nEyAKRvzo1WtnZBl15SHyEhrCu2/xKlJyUFKHiHgfXIyuY6g2dObJJycXQ== - dependencies: - is-buffer "^1.1.5" - is-utf8 "^0.2.1" - -remove-bom-stream@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/remove-bom-stream/-/remove-bom-stream-1.2.0.tgz#05f1a593f16e42e1fb90ebf59de8e569525f9523" - integrity sha1-BfGlk/FuQuH7kOv1nejlaVJflSM= - dependencies: - remove-bom-buffer "^3.0.0" - safe-buffer "^5.1.0" - through2 "^2.0.3" - -remove-trailing-separator@^1.0.1: - version "1.1.0" - resolved "https://registry.yarnpkg.com/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz#c24bce2a283adad5bc3f58e0d48249b92379d8ef" - integrity sha1-wkvOKig62tW8P1jg1IJJuSN52O8= - -repeat-element@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/repeat-element/-/repeat-element-1.1.3.tgz#782e0d825c0c5a3bb39731f84efee6b742e6b1ce" - integrity sha512-ahGq0ZnV5m5XtZLMb+vP76kcAM5nkLqk0lpqAuojSKGgQtn4eRi4ZZGm2olo2zKFH+sMsWaqOCW1dqAnOru72g== - -repeat-string@^1.5.0, repeat-string@^1.5.4, repeat-string@^1.6.1: - version "1.6.1" - resolved "https://registry.yarnpkg.com/repeat-string/-/repeat-string-1.6.1.tgz#8dcae470e1c88abc2d600fff4a776286da75e637" - integrity sha1-jcrkcOHIirwtYA//Sndihtp15jc= - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -replace-ext@1.0.0, replace-ext@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/replace-ext/-/replace-ext-1.0.0.tgz#de63128373fcbf7c3ccfa4de5a480c45a67958eb" - integrity sha1-3mMSg3P8v3w8z6TeWkgMRaZ5WOs= - -request-promise-core@1.1.3: - version "1.1.3" - resolved "https://registry.yarnpkg.com/request-promise-core/-/request-promise-core-1.1.3.tgz#e9a3c081b51380dfea677336061fea879a829ee9" - integrity sha512-QIs2+ArIGQVp5ZYbWD5ZLCY29D5CfWizP8eWnm8FoGD1TX61veauETVQbrV60662V0oFBkrDOuaBI8XgtuyYAQ== - dependencies: - lodash "^4.17.15" - -request-promise-native@^1.0.5: - version "1.0.8" - resolved "https://registry.yarnpkg.com/request-promise-native/-/request-promise-native-1.0.8.tgz#a455b960b826e44e2bf8999af64dff2bfe58cb36" - integrity sha512-dapwLGqkHtwL5AEbfenuzjTYg35Jd6KPytsC2/TLkVMz8rm+tNt72MGUWT1RP/aYawMpN6HqbNGBQaRcBtjQMQ== - dependencies: - request-promise-core "1.1.3" - stealthy-require "^1.1.1" - tough-cookie "^2.3.3" - -request@^2.88.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -require-directory@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" - integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= - -require-main-filename@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-1.0.1.tgz#97f717b69d48784f5f526a6c5aa8ffdda055a4d1" - integrity sha1-l/cXtp1IeE9fUmpsWqj/3aBVpNE= - -require-main-filename@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b" - integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg== - -requires-port@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" - integrity sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8= - -resolve-from@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-3.0.0.tgz#b22c7af7d9d6881bc8b6e653335eebcb0a188748" - integrity sha1-six699nWiBvItuZTM17rywoYh0g= - -resolve-from@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" - integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== - -resolve-options@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/resolve-options/-/resolve-options-1.1.0.tgz#32bb9e39c06d67338dc9378c0d6d6074566ad131" - integrity sha1-MrueOcBtZzONyTeMDW1gdFZq0TE= - dependencies: - value-or-function "^3.0.0" - -resolve-protobuf-schema@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz#9ca9a9e69cf192bbdaf1006ec1973948aa4a3758" - integrity sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ== - dependencies: - protocol-buffers-schema "^3.3.1" - -resolve-url@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/resolve-url/-/resolve-url-0.2.1.tgz#2c637fe77c893afd2a663fe21aa9080068e2052a" - integrity sha1-LGN/53yJOv0qZj/iGqkIAGjiBSo= - -resolve@1.1.7: - version "1.1.7" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" - integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= - -resolve@^1.1.3, resolve@^1.1.4, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.11.1, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.15.1, resolve@^1.3.2, resolve@^1.4.0, resolve@^1.8.1, resolve@~1.15.1: - version "1.15.1" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.15.1.tgz#27bdcdeffeaf2d6244b95bb0f9f4b4653451f3e8" - integrity sha512-84oo6ZTtoTUpjgNEr5SJyzQhzL72gaRodsSfyxC/AXRvwu0Yse9H8eF9IpGo7b8YetZhlI6v7ZQ6bKBFV/6S7w== - dependencies: - path-parse "^1.0.6" - -restore-cursor@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-2.0.0.tgz#9f7ee287f82fd326d4fd162923d62129eee0dfaf" - integrity sha1-n37ih/gv0ybU/RYpI9YhKe7g368= - dependencies: - onetime "^2.0.0" - signal-exit "^3.0.2" - -resumer@~0.0.0: - version "0.0.0" - resolved "https://registry.yarnpkg.com/resumer/-/resumer-0.0.0.tgz#f1e8f461e4064ba39e82af3cdc2a8c893d076759" - integrity sha1-8ej0YeQGS6Oegq883CqMiT0HZ1k= - dependencies: - through "~2.3.4" - -ret@~0.1.10: - version "0.1.15" - resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" - integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== - -rgb-regex@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/rgb-regex/-/rgb-regex-1.0.1.tgz#c0e0d6882df0e23be254a475e8edd41915feaeb1" - integrity sha1-wODWiC3w4jviVKR16O3UGRX+rrE= - -rgba-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" - integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= - -rimraf@2, rimraf@^2.4.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - -rimraf@2.6.3, rimraf@~2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" - integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA== - dependencies: - glob "^7.1.3" - -rimraf@~2.2.6: - version "2.2.8" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.2.8.tgz#e439be2aaee327321952730f99a8929e4fc50582" - integrity sha1-5Dm+Kq7jJzIZUnMPmaiSnk/FBYI= - -ripemd160@^2.0.0, ripemd160@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/ripemd160/-/ripemd160-2.0.2.tgz#a1c1a6f624751577ba5d07914cbc92850585890c" - integrity sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA== - dependencies: - hash-base "^3.0.0" - inherits "^2.0.1" - -rollup-plugin-buble@^0.19.8: - version "0.19.8" - resolved "https://registry.yarnpkg.com/rollup-plugin-buble/-/rollup-plugin-buble-0.19.8.tgz#f9232e2bb62a7573d04f9705c1bd6f02c2a02c6a" - integrity sha512-8J4zPk2DQdk3rxeZvxgzhHh/rm5nJkjwgcsUYisCQg1QbT5yagW+hehYEW7ZNns/NVbDCTv4JQ7h4fC8qKGOKw== - dependencies: - buble "^0.19.8" - rollup-pluginutils "^2.3.3" - -rollup-plugin-commonjs@^10.1.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-commonjs/-/rollup-plugin-commonjs-10.1.0.tgz#417af3b54503878e084d127adf4d1caf8beb86fb" - integrity sha512-jlXbjZSQg8EIeAAvepNwhJj++qJWNJw1Cl0YnOqKtP5Djx+fFGkp3WRh+W0ASCaFG5w1jhmzDxgu3SJuVxPF4Q== - dependencies: - estree-walker "^0.6.1" - is-reference "^1.1.2" - magic-string "^0.25.2" - resolve "^1.11.0" - rollup-pluginutils "^2.8.1" - -rollup-plugin-json@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-json/-/rollup-plugin-json-4.0.0.tgz#a18da0a4b30bf5ca1ee76ddb1422afbb84ae2b9e" - integrity sha512-hgb8N7Cgfw5SZAkb3jf0QXii6QX/FOkiIq2M7BAQIEydjHvTyxXHQiIzZaTFgx1GK0cRCHOCBHIyEkkLdWKxow== - dependencies: - rollup-pluginutils "^2.5.0" - -rollup-plugin-node-resolve@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-node-resolve/-/rollup-plugin-node-resolve-5.2.0.tgz#730f93d10ed202473b1fb54a5997a7db8c6d8523" - integrity sha512-jUlyaDXts7TW2CqQ4GaO5VJ4PwwaV8VUGA7+km3n6k6xtOEacf61u0VXwN80phY/evMcaS+9eIeJ9MOyDxt5Zw== - dependencies: - "@types/resolve" "0.0.8" - builtin-modules "^3.1.0" - is-module "^1.0.0" - resolve "^1.11.1" - rollup-pluginutils "^2.8.1" - -rollup-plugin-replace@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-replace/-/rollup-plugin-replace-2.2.0.tgz#f41ae5372e11e7a217cde349c8b5d5fd115e70e3" - integrity sha512-/5bxtUPkDHyBJAKketb4NfaeZjL5yLZdeUihSfbF2PQMz+rSTEb8ARKoOl3UBT4m7/X+QOXJo3sLTcq+yMMYTA== - dependencies: - magic-string "^0.25.2" - rollup-pluginutils "^2.6.0" - -rollup-plugin-sourcemaps@^0.4.2: - version "0.4.2" - resolved "https://registry.yarnpkg.com/rollup-plugin-sourcemaps/-/rollup-plugin-sourcemaps-0.4.2.tgz#62125aa94087aadf7b83ef4dfaf629b473135e87" - integrity sha1-YhJaqUCHqt97g+9N+vYptHMTXoc= - dependencies: - rollup-pluginutils "^2.0.1" - source-map-resolve "^0.5.0" - -rollup-plugin-terser@^5.1.2: - version "5.3.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-terser/-/rollup-plugin-terser-5.3.0.tgz#9c0dd33d5771df9630cd027d6a2559187f65885e" - integrity sha512-XGMJihTIO3eIBsVGq7jiNYOdDMb3pVxuzY0uhOE/FM4x/u9nQgr3+McsjzqBn3QfHIpNSZmFnpoKAwHBEcsT7g== - dependencies: - "@babel/code-frame" "^7.5.5" - jest-worker "^24.9.0" - rollup-pluginutils "^2.8.2" - serialize-javascript "^2.1.2" - terser "^4.6.2" - -rollup-plugin-unassert@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/rollup-plugin-unassert/-/rollup-plugin-unassert-0.3.0.tgz#a6d5e52e6354d1a3f223077811b4040bd7cfc763" - integrity sha512-mdRJ8AinuNdtoS9L+CXVQcoaHLHV+eeEV5b9u76ai3yxOWp3t1oXQOuDjRmRiIjOYWYxCkSYiFQH72QoPdDfwQ== - dependencies: - acorn "^6.1.1" - convert-source-map "^1.6.0" - escodegen "^1.11.1" - multi-stage-sourcemap "^0.3.1" - rollup-pluginutils "^2.5.0" - unassert "^1.5.1" - -rollup-pluginutils@^2.0.1, rollup-pluginutils@^2.3.3, rollup-pluginutils@^2.5.0, rollup-pluginutils@^2.6.0, rollup-pluginutils@^2.8.1, rollup-pluginutils@^2.8.2: - version "2.8.2" - resolved "https://registry.yarnpkg.com/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz#72f2af0748b592364dbd3389e600e5a9444a351e" - integrity sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ== - dependencies: - estree-walker "^0.6.1" - -rollup@^1.23.1: - version "1.32.1" - resolved "https://registry.yarnpkg.com/rollup/-/rollup-1.32.1.tgz#4480e52d9d9e2ae4b46ba0d9ddeaf3163940f9c4" - integrity sha512-/2HA0Ec70TvQnXdzynFffkjA6XN+1e2pEv/uKS5Ulca40g2L7KuOE3riasHoNVHOsFD5KKZgDsMk1CP3Tw9s+A== - dependencies: - "@types/estree" "*" - "@types/node" "*" - acorn "^7.1.0" - -run-async@^2.2.0: - version "2.4.0" - resolved "https://registry.yarnpkg.com/run-async/-/run-async-2.4.0.tgz#e59054a5b86876cfae07f431d18cbaddc594f1e8" - integrity sha512-xJTbh/d7Lm7SBhc1tNvTpeCHaEzoyxPrqNlvSdMfBTYwaY++UJFyXUOxAtsRUXjlqOfj8luNaR9vjCh4KeV+pg== - dependencies: - is-promise "^2.1.0" - -rw@1, rw@^1.3.3: - version "1.3.3" - resolved "https://registry.yarnpkg.com/rw/-/rw-1.3.3.tgz#3f862dfa91ab766b14885ef4d01124bfda074fb4" - integrity sha1-P4Yt+pGrdmsUiF700BEkv9oHT7Q= - -rxjs@^6.4.0: - version "6.5.4" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-6.5.4.tgz#e0777fe0d184cec7872df147f303572d414e211c" - integrity sha512-naMQXcgEo3csAEGvw/NydRA0fuS2nDZJiw1YUWFKU7aPPAPGZEsD4Iimit96qwCieH6y614MCLYwdkrWx7z/7Q== - dependencies: - tslib "^1.9.0" - -safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safe-buffer@>=5.1.0, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@^5.1.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - -safe-json-parse@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-json-parse/-/safe-json-parse-1.0.1.tgz#3e76723e38dfdda13c9b1d29a1e07ffee4b30b57" - integrity sha1-PnZyPjjf3aE8mx0poeB//uSzC1c= - -safe-regex@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" - integrity sha1-QKNmnzsHfR6UPURinhV91IAjvy4= - dependencies: - ret "~0.1.10" - -"safer-buffer@>= 2.1.2 < 3", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sax@^1.2.4, sax@~1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" - integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== - -saxes@^3.1.5: - version "3.1.11" - resolved "https://registry.yarnpkg.com/saxes/-/saxes-3.1.11.tgz#d59d1fd332ec92ad98a2e0b2ee644702384b1c5b" - integrity sha512-Ydydq3zC+WYDJK1+gRxRapLIED9PWeSuuS41wqyoRmzvhhh9nc+QQrVMKJYzJFULazeGhzSV0QleN2wD3boh2g== - dependencies: - xmlchars "^2.1.1" - -scheduler@^0.19.1: - version "0.19.1" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.19.1.tgz#4f3e2ed2c1a7d65681f4c854fa8c5a1ccb40f196" - integrity sha512-n/zwRWRYSUj0/3g/otKDRPMh6qv2SYMWNq85IEa8iZyAv8od9zDYpGSnpBEjNgcMNq6Scbu5KfIPxNF72R/2EA== - dependencies: - loose-envify "^1.1.0" - object-assign "^4.1.1" - -seedrandom@^2.4.2: - version "2.4.4" - resolved "https://registry.yarnpkg.com/seedrandom/-/seedrandom-2.4.4.tgz#b25ea98632c73e45f58b77cfaa931678df01f9ba" - integrity sha512-9A+PDmgm+2du77B5i0Ip2cxOqqHjgNxnBgglxLcX78A2D6c2rTo61z4jnVABpF4cKeDMDG+cmXXvdnqse2VqMA== - -selenium-webdriver@^4.0.0-alpha.5: - version "4.0.0-alpha.7" - resolved "https://registry.yarnpkg.com/selenium-webdriver/-/selenium-webdriver-4.0.0-alpha.7.tgz#e3879d8457fd7ad8e4424094b7dc0540d99e6797" - integrity sha512-D4qnTsyTr91jT8f7MfN+OwY0IlU5+5FmlO5xlgRUV6hDEV8JyYx2NerdTEqDDkNq7RZDYc4VoPALk8l578RBHw== - dependencies: - jszip "^3.2.2" - rimraf "^2.7.1" - tmp "0.0.30" - -"semver@2 || 3 || 4 || 5", semver@^5.3.0, semver@^5.4.1, semver@^5.5.0, semver@^5.5.1, semver@^5.6.0, semver@^5.7.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -semver@7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.0.0.tgz#5f3ca35761e47e05b206c6daff2cf814f0316b8e" - integrity sha512-+GB6zVA9LWh6zovYQLALHwv5rb2PHGlJi3lfiqIHxR0uuwCgefcOJc59v9fv1w8GbStwxuuqqAjI9NMAOOgq1A== - -semver@^6.0.0, semver@^6.3.0: - version "6.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" - integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== - -send@0.17.1: - version "0.17.1" - resolved "https://registry.yarnpkg.com/send/-/send-0.17.1.tgz#c1d8b059f7900f7466dd4938bdc44e11ddb376c8" - integrity sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg== - dependencies: - debug "2.6.9" - depd "~1.1.2" - destroy "~1.0.4" - encodeurl "~1.0.2" - escape-html "~1.0.3" - etag "~1.8.1" - fresh "0.5.2" - http-errors "~1.7.2" - mime "1.6.0" - ms "2.1.1" - on-finished "~2.3.0" - range-parser "~1.2.1" - statuses "~1.5.0" - -serialize-javascript@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-2.1.2.tgz#ecec53b0e0317bdc95ef76ab7074b7384785fa61" - integrity sha512-rs9OggEUF0V4jUSecXazOYsLfu7OGK2qIn3c7IPBiffz32XniEp/TX9Xmc9LQfK2nQ2QKHvZ2oygKUGU0lG4jQ== - -serve-static@1.14.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.14.1.tgz#666e636dc4f010f7ef29970a88a674320898b2f9" - integrity sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg== - dependencies: - encodeurl "~1.0.2" - escape-html "~1.0.3" - parseurl "~1.3.3" - send "0.17.1" - -set-blocking@^2.0.0, set-blocking@~2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" - integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= - -set-immediate-shim@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/set-immediate-shim/-/set-immediate-shim-1.0.1.tgz#4b2b1b27eb808a9f8dcc481a58e5e56f599f3f61" - integrity sha1-SysbJ+uAip+NzEgaWOXlb1mfP2E= - -set-value@^2.0.0, set-value@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-value/-/set-value-2.0.1.tgz#a18d40530e6f07de4228c7defe4227af8cad005b" - integrity sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw== - dependencies: - extend-shallow "^2.0.1" - is-extendable "^0.1.1" - is-plain-object "^2.0.3" - split-string "^3.0.1" - -setprototypeof@1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.1.1.tgz#7e95acb24aa92f5885e0abef5ba131330d4ae683" - integrity sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw== - -sha.js@^2.4.0, sha.js@^2.4.8, sha.js@~2.4.4: - version "2.4.11" - resolved "https://registry.yarnpkg.com/sha.js/-/sha.js-2.4.11.tgz#37a5cf0b81ecbc6943de109ba2960d1b26584ae7" - integrity sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ== - dependencies: - inherits "^2.0.1" - safe-buffer "^5.0.1" - -shasum-object@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shasum-object/-/shasum-object-1.0.0.tgz#0b7b74ff5b66ecf9035475522fa05090ac47e29e" - integrity sha512-Iqo5rp/3xVi6M4YheapzZhhGPVs0yZwHj7wvwQ1B9z8H6zk+FEnI7y3Teq7qwnekfEhu8WmG2z0z4iWZaxLWVg== - dependencies: - fast-safe-stringify "^2.0.7" - -shasum@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/shasum/-/shasum-1.0.2.tgz#e7012310d8f417f4deb5712150e5678b87ae565f" - integrity sha1-5wEjENj0F/TetXEhUOVni4euVl8= - dependencies: - json-stable-stringify "~0.0.0" - sha.js "~2.4.4" - -shebang-command@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" - integrity sha1-RKrGW2lbAzmJaMOfNj/uXer98eo= - dependencies: - shebang-regex "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" - integrity sha1-2kL0l0DAtC2yypcoVxyxkMmO/qM= - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shell-quote@^1.6.1: - version "1.7.2" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.7.2.tgz#67a7d02c76c9da24f99d20808fcaded0e0e04be2" - integrity sha512-mRz/m/JVscCrkMyPqHc/bczi3OQHkLTqXHEFu0zDhK/qfv3UcOA4SVmRCLmos4bhjr9ekVQubj/R7waKapmiQg== - -shellwords@^0.1.1: - version "0.1.1" - resolved "https://registry.yarnpkg.com/shellwords/-/shellwords-0.1.1.tgz#d6b9181c1a48d397324c84871efbcfc73fc0654b" - integrity sha512-vFwSUfQvqybiICwZY5+DAWIPLKsWO31Q91JSKl3UYv+K5c2QRPzn0qzec6QPu1Qc9eHYItiP3NdJqNVqetYAww== - -shuffle-seed@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/shuffle-seed/-/shuffle-seed-1.1.6.tgz#533c12683bab3b4fa3e8751fc4e562146744260b" - integrity sha1-UzwSaDurO0+j6HUfxOViFGdEJgs= - dependencies: - seedrandom "^2.4.2" - -side-channel@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.2.tgz#df5d1abadb4e4bf4af1cd8852bf132d2f7876947" - integrity sha512-7rL9YlPHg7Ancea1S96Pa8/QWb4BtXL/TZvS6B8XFetGBeuhAsfmUspK6DokBeZ64+Kj9TCNRD/30pVz1BvQNA== - dependencies: - es-abstract "^1.17.0-next.1" - object-inspect "^1.7.0" - -signal-exit@^3.0.0, signal-exit@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" - integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= - -simple-concat@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.0.tgz#7344cbb8b6e26fb27d66b2fc86f9f6d5997521c6" - integrity sha1-c0TLuLbib7J9ZrL8hvn21Zl1IcY= - -simple-get@^3.0.3: - version "3.1.0" - resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-3.1.0.tgz#b45be062435e50d159540b576202ceec40b9c6b3" - integrity sha512-bCR6cP+aTdScaQCnQKbPKtJOKDp/hj9EDLJo3Nw4y1QksqaovlW/bnptB6/c1e+qmNIDHRK+oXFDdEqBT8WzUA== - dependencies: - decompress-response "^4.2.0" - once "^1.3.1" - simple-concat "^1.0.0" - -simple-swizzle@^0.2.2: - version "0.2.2" - resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" - integrity sha1-pNprY1/8zMoz9w0Xy5JZLeleVXo= - dependencies: - is-arrayish "^0.3.1" - -sinon@^7.3.2: - version "7.5.0" - resolved "https://registry.yarnpkg.com/sinon/-/sinon-7.5.0.tgz#e9488ea466070ea908fd44a3d6478fd4923c67ec" - integrity sha512-AoD0oJWerp0/rY9czP/D6hDTTUYGpObhZjMpd7Cl/A6+j0xBE+ayL/ldfggkBXUs0IkvIiM1ljM8+WkOc5k78Q== - dependencies: - "@sinonjs/commons" "^1.4.0" - "@sinonjs/formatio" "^3.2.1" - "@sinonjs/samsam" "^3.3.3" - diff "^3.5.0" - lolex "^4.2.0" - nise "^1.5.2" - supports-color "^5.5.0" - -slash@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-2.0.0.tgz#de552851a1759df3a8f206535442f5ec4ddeab44" - integrity sha512-ZYKh3Wh2z1PpEXWr0MpSBZ0V6mZHAQfYevttO11c51CaWjGTaadiKZ+wVt1PbMlDV5qhMFslpZCemhwOK7C89A== - -slice-ansi@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" - integrity sha512-Qu+VC3EwYLldKa1fCxuuvULvSJOKEgk9pi8dZeCVK7TqBfUNTH4sFkk4joj8afVSfAYgJoSOetjx9QWOJ5mYoQ== - dependencies: - ansi-styles "^3.2.0" - astral-regex "^1.0.0" - is-fullwidth-code-point "^2.0.0" - -snapdragon-node@^2.0.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/snapdragon-node/-/snapdragon-node-2.1.1.tgz#6c175f86ff14bdb0724563e8f3c1b021a286853b" - integrity sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw== - dependencies: - define-property "^1.0.0" - isobject "^3.0.0" - snapdragon-util "^3.0.1" - -snapdragon-util@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/snapdragon-util/-/snapdragon-util-3.0.1.tgz#f956479486f2acd79700693f6f7b805e45ab56e2" - integrity sha512-mbKkMdQKsjX4BAL4bRYTj21edOf8cN7XHdYUJEe+Zn99hVEYcMvKPct1IqNe7+AZPirn8BCDOQBHQZknqmKlZQ== - dependencies: - kind-of "^3.2.0" - -snapdragon@^0.8.1: - version "0.8.2" - resolved "https://registry.yarnpkg.com/snapdragon/-/snapdragon-0.8.2.tgz#64922e7c565b0e14204ba1aa7d6964278d25182d" - integrity sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg== - dependencies: - base "^0.11.1" - debug "^2.2.0" - define-property "^0.2.5" - extend-shallow "^2.0.1" - map-cache "^0.2.2" - source-map "^0.5.6" - source-map-resolve "^0.5.0" - use "^3.1.0" - -socket.io-adapter@~1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/socket.io-adapter/-/socket.io-adapter-1.1.2.tgz#ab3f0d6f66b8fc7fca3959ab5991f82221789be9" - integrity sha512-WzZRUj1kUjrTIrUKpZLEzFZ1OLj5FwLlAFQs9kuZJzJi5DKdU7FsWc36SNmA8iDOtwBQyT8FkrriRM8vXLYz8g== - -socket.io-client@2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io-client/-/socket.io-client-2.3.0.tgz#14d5ba2e00b9bcd145ae443ab96b3f86cbcc1bb4" - integrity sha512-cEQQf24gET3rfhxZ2jJ5xzAOo/xhZwK+mOqtGRg5IowZsMgwvHwnf/mCRapAAkadhM26y+iydgwsXGObBB5ZdA== - dependencies: - backo2 "1.0.2" - base64-arraybuffer "0.1.5" - component-bind "1.0.0" - component-emitter "1.2.1" - debug "~4.1.0" - engine.io-client "~3.4.0" - has-binary2 "~1.0.2" - has-cors "1.1.0" - indexof "0.0.1" - object-component "0.0.3" - parseqs "0.0.5" - parseuri "0.0.5" - socket.io-parser "~3.3.0" - to-array "0.1.4" - -socket.io-parser@~3.3.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.3.0.tgz#2b52a96a509fdf31440ba40fed6094c7d4f1262f" - integrity sha512-hczmV6bDgdaEbVqhAeVMM/jfUfzuEZHsQg6eOmLgJht6G3mPKMxYm75w2+qhAQZ+4X+1+ATZ+QFKeOZD5riHng== - dependencies: - component-emitter "1.2.1" - debug "~3.1.0" - isarray "2.0.1" - -socket.io-parser@~3.4.0: - version "3.4.0" - resolved "https://registry.yarnpkg.com/socket.io-parser/-/socket.io-parser-3.4.0.tgz#370bb4a151df2f77ce3345ff55a7072cc6e9565a" - integrity sha512-/G/VOI+3DBp0+DJKW4KesGnQkQPFmUCbA/oO2QGT6CWxU7hLGWqU3tyuzeSK/dqcyeHsQg1vTe9jiZI8GU9SCQ== - dependencies: - component-emitter "1.2.1" - debug "~4.1.0" - isarray "2.0.1" - -socket.io@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/socket.io/-/socket.io-2.3.0.tgz#cd762ed6a4faeca59bc1f3e243c0969311eb73fb" - integrity sha512-2A892lrj0GcgR/9Qk81EaY2gYhCBxurV0PfmmESO6p27QPrUK1J3zdns+5QPqvUYK2q657nSj0guoIil9+7eFg== - dependencies: - debug "~4.1.0" - engine.io "~3.4.0" - has-binary2 "~1.0.2" - socket.io-adapter "~1.1.0" - socket.io-client "2.3.0" - socket.io-parser "~3.4.0" - -source-map-explorer@^2.5.1: - version "2.5.1" - resolved "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.5.1.tgz#35ca7ba3574f0002ac347343f1894e04860c827f" - integrity sha512-sg60PIva7pOkvTqbLRGOB3Cp84I1pial0J6tUNs/bNGIz+0+WNw37oLXEDFHTDJhFh24rto8rESv4wCB7w9HVQ== - dependencies: - btoa "^1.2.1" - chalk "^4.1.0" - convert-source-map "^1.7.0" - ejs "^3.1.5" - escape-html "^1.0.3" - glob "^7.1.6" - gzip-size "^6.0.0" - lodash "^4.17.20" - open "^7.3.0" - source-map "^0.7.3" - temp "^0.9.4" - yargs "^16.1.1" - -source-map-resolve@^0.5.0: - version "0.5.3" - resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a" - integrity sha512-Htz+RnsXWk5+P2slx5Jh3Q66vhQj1Cllm0zvnaY98+NFx+Dv2CF/f5O/t8x+KaNdrdIAsruNzoh/KpialbqAnw== - dependencies: - atob "^2.1.2" - decode-uri-component "^0.2.0" - resolve-url "^0.2.1" - source-map-url "^0.4.0" - urix "^0.1.0" - -source-map-support@^0.5.10, source-map-support@^0.5.6, source-map-support@~0.5.12: - version "0.5.16" - resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.16.tgz#0ae069e7fe3ba7538c64c98515e35339eac5a042" - integrity sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ== - dependencies: - buffer-from "^1.0.0" - source-map "^0.6.0" - -source-map-url@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" - integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= - -source-map@^0.1.34: - version "0.1.43" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.1.43.tgz#c24bc146ca517c1471f5dacbe2571b2b7f9e3346" - integrity sha1-wkvBRspRfBRx9drL4lcbK3+eM0Y= - dependencies: - amdefine ">=0.0.4" - -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.3: - version "0.5.7" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" - integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= - -source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -source-map@^0.7.3: - version "0.7.3" - resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383" - integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ== - -sourcemap-codec@^1.4.4: - version "1.4.8" - resolved "https://registry.yarnpkg.com/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz#ea804bd94857402e6992d05a38ef1ae35a9ab4c4" - integrity sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA== - -space-separated-tokens@^1.0.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/space-separated-tokens/-/space-separated-tokens-1.1.5.tgz#85f32c3d10d9682007e917414ddc5c26d1aa6899" - integrity sha512-q/JSVd1Lptzhf5bkYm4ob4iWPjx0KiRe3sRFBNrVqbJkFaBm5vbbowy1mymoPNLRa52+oadOhJ+K49wsSeSjTA== - -spawn-args@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/spawn-args/-/spawn-args-0.2.0.tgz#fb7d0bd1d70fd4316bd9e3dec389e65f9d6361bb" - integrity sha1-+30L0dcP1DFr2ePew4nmX51jYbs= - -spawn-wrap@^1.4.2: - version "1.4.3" - resolved "https://registry.yarnpkg.com/spawn-wrap/-/spawn-wrap-1.4.3.tgz#81b7670e170cca247d80bf5faf0cfb713bdcf848" - integrity sha512-IgB8md0QW/+tWqcavuFgKYR/qIRvJkRLPJDFaoXtLLUaVcCDK0+HeFTkmQHj3eprcYhc+gOl0aEA1w7qZlYezw== - dependencies: - foreground-child "^1.5.6" - mkdirp "^0.5.0" - os-homedir "^1.0.1" - rimraf "^2.6.2" - signal-exit "^3.0.2" - which "^1.3.0" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.2.0.tgz#2ea450aee74f2a89bfb94519c07fcd6f41322977" - integrity sha512-2XQACfElKi9SlVb1CYadKDXvoajPgBVPn/gOQLrTvHdElaVhr7ZEbqJaRnJLVNeaI4cMEAgVCeBMKF6MWRDCRA== - -spdx-expression-parse@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.0.tgz#99e119b7a5da00e05491c9fa338b7904823b41d0" - integrity sha512-Yg6D3XpRD4kkOmTpdgbUiEJFKghJH03fiC1OPll5h/0sO6neh2jqRDVHOQ4o/LMea0tgCkbMgea5ip/e+MkWyg== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -specificity@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/specificity/-/specificity-0.4.1.tgz#aab5e645012db08ba182e151165738d00887b019" - integrity sha512-1klA3Gi5PD1Wv9Q0wUoOQN1IWAuPu0D1U03ThXTr0cJ20+/iq2tHSDnK7Kk/0LXJ1ztUB2/1Os0wKmfyNgUQfg== - -split-string@^3.0.1, split-string@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/split-string/-/split-string-3.1.0.tgz#7cb09dda3a86585705c64b39a6466038682e8fe2" - integrity sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw== - dependencies: - extend-shallow "^3.0.0" - -sprintf-js@~1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" - integrity sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -st@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/st/-/st-1.2.2.tgz#b95554f41b457bf0ed1c48f2bad8fccff894b14f" - integrity sha512-goKkumvz0BMLs6KjjPf5Fub/3T34tRVQxInUI5lqtbaKD+s4HcRlJYP2GPJ8RgAmrsnYOPGmOFEP6ho0KJ+E8g== - dependencies: - async-cache "~1.1.0" - bl "~1.2.1" - fd "~0.0.2" - mime "~1.4.1" - negotiator "~0.6.1" - optionalDependencies: - graceful-fs "~4.1.11" - -stable@^0.1.8: - version "0.1.8" - resolved "https://registry.yarnpkg.com/stable/-/stable-0.1.8.tgz#836eb3c8382fe2936feaf544631017ce7d47a3cf" - integrity sha512-ji9qxRnOVfcuLDySj9qzhGSEFVobyt1kIOSkj1qZzYLzq7Tos/oUUWvotUPQLlrsidqsK6tBH89Bc9kL5zHA6w== - -stack-utils@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-1.0.2.tgz#33eba3897788558bebfc2db059dc158ec36cebb8" - integrity sha512-MTX+MeG5U994cazkjd/9KNAapsHnibjMLnfXodlkXw76JEea0UiNzrqidzo1emMwk7w5Qhc9jd4Bn9TBb1MFwA== - -state-toggle@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/state-toggle/-/state-toggle-1.0.3.tgz#e123b16a88e143139b09c6852221bc9815917dfe" - integrity sha512-d/5Z4/2iiCnHw6Xzghyhb+GcmF89bxwgXG60wjIiZaxnymbyOmI8Hk4VqHXiVVp6u2ysaskFfXg3ekCj4WNftQ== - -static-extend@^0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/static-extend/-/static-extend-0.1.2.tgz#60809c39cbff55337226fd5e0b520f341f1fb5c6" - integrity sha1-YICcOcv/VTNyJv1eC1IPNB8ftcY= - dependencies: - define-property "^0.2.5" - object-copy "^0.1.0" - -"statuses@>= 1.5.0 < 2", statuses@~1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.5.0.tgz#161c7dac177659fd9811f43771fa99381478628c" - integrity sha1-Fhx9rBd2Wf2YEfQ3cfqZOBR4Yow= - -stealthy-require@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" - integrity sha1-NbCYdbT/SfJqd35QmzCQoyJr8ks= - -stream-array@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/stream-array/-/stream-array-1.1.2.tgz#9e5f7345f2137c30ee3b498b9114e80b52bb7eb5" - integrity sha1-nl9zRfITfDDuO0mLkRToC1K7frU= - dependencies: - readable-stream "~2.1.0" - -stream-browserify@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-2.0.2.tgz#87521d38a44aa7ee91ce1cd2a47df0cb49dd660b" - integrity sha512-nX6hmklHs/gr2FuxYDltq8fJA1GDlxKQCz8O/IM4atRqBH8OORmBNgfvW5gG10GT/qQ9u0CzIvr2X5Pkt6ntqg== - dependencies: - inherits "~2.0.1" - readable-stream "^2.0.2" - -stream-combiner2@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/stream-combiner2/-/stream-combiner2-1.1.1.tgz#fb4d8a1420ea362764e21ad4780397bebcb41cbe" - integrity sha1-+02KFCDqNidk4hrUeAOXvry0HL4= - dependencies: - duplexer2 "~0.1.0" - readable-stream "^2.0.2" - -stream-http@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/stream-http/-/stream-http-3.1.0.tgz#22fb33fe9b4056b4eccf58bd8f400c4b993ffe57" - integrity sha512-cuB6RgO7BqC4FBYzmnvhob5Do3wIdIsXAgGycHJnW+981gHqoYcYz9lqjJrk8WXRddbwPuqPYRl+bag6mYv4lw== - dependencies: - builtin-status-codes "^3.0.0" - inherits "^2.0.1" - readable-stream "^3.0.6" - xtend "^4.0.0" - -stream-shift@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.1.tgz#d7088281559ab2778424279b0877da3c392d5a3d" - integrity sha512-AiisoFqQ0vbGcZgQPY1cdP2I76glaVA/RauYR4G4thNFgkTqr90yXTo4LYX60Jl+sIlPNHHdGSwo01AvbKUSVQ== - -stream-splicer@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/stream-splicer/-/stream-splicer-2.0.1.tgz#0b13b7ee2b5ac7e0609a7463d83899589a363fcd" - integrity sha512-Xizh4/NPuYSyAXyT7g8IvdJ9HJpxIGL9PjyhtywCZvvP0OPIdqyrr4dMikeuvY8xahpdKEBlBTySe583totajg== - dependencies: - inherits "^2.0.1" - readable-stream "^2.0.2" - -string-template@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/string-template/-/string-template-0.2.1.tgz#42932e598a352d01fc22ec3367d9d84eec6c9add" - integrity sha1-QpMuWYo1LQH8IuwzZ9nYTuxsmt0= - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" - integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== - dependencies: - is-fullwidth-code-point "^2.0.0" - strip-ansi "^4.0.0" - -string-width@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-3.1.0.tgz#22767be21b62af1081574306f69ac51b62203961" - integrity sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w== - dependencies: - emoji-regex "^7.0.1" - is-fullwidth-code-point "^2.0.0" - strip-ansi "^5.1.0" - -string-width@^4.0.0, string-width@^4.1.0, string-width@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.0.tgz#952182c46cc7b2c313d1596e623992bd163b72b5" - integrity sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.0" - -string.prototype.matchall@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.2.tgz#48bb510326fb9fdeb6a33ceaa81a6ea04ef7648e" - integrity sha512-N/jp6O5fMf9os0JU3E72Qhf590RSRZU/ungsL/qJUYVTNv7hTG0P/dbPjxINVN9jpscu3nzYwKESU3P3RY5tOg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0" - has-symbols "^1.0.1" - internal-slot "^1.0.2" - regexp.prototype.flags "^1.3.0" - side-channel "^1.0.2" - -string.prototype.padend@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/string.prototype.padend/-/string.prototype.padend-3.1.0.tgz#dc08f57a8010dc5c153550318f67e13adbb72ac3" - integrity sha512-3aIv8Ffdp8EZj8iLwREGpQaUZiPyrWrpzMBHvkiSW/bK/EGve9np07Vwy7IJ5waydpGXzQZu/F8Oze2/IWkBaA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - -string.prototype.trim@~1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.1.tgz#141233dff32c82bfad80684d7e5f0869ee0fb782" - integrity sha512-MjGFEeqixw47dAMFMtgUro/I0+wNqZB5GKXGt1fFr24u3TzDXCPu7J9Buppzoe3r/LqkSDLDDJzE15RGWDGAVw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.0-next.1" - function-bind "^1.1.1" - -string.prototype.trimleft@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.1.tgz#9bdb8ac6abd6d602b17a4ed321870d2f8dcefc74" - integrity sha512-iu2AGd3PuP5Rp7x2kEZCrB2Nf41ehzh+goo8TV7z8/XDBbsvc6HQIlUl9RjkZ4oyrW1XM5UwlGl1oVEaDjg6Ag== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string.prototype.trimright@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.1.tgz#440314b15996c866ce8a0341894d45186200c5d9" - integrity sha512-qFvWL3/+QIgZXVmJBfpHmxLB7xsUXz6HsUmP8+5dRaC3Q7oKUv9Vo6aMCRZC1smrtyECFsIT30PqBJ1gTjAs+g== - dependencies: - define-properties "^1.1.3" - function-bind "^1.1.1" - -string_decoder@0.10, string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -stringify-entities@^1.0.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/stringify-entities/-/stringify-entities-1.3.2.tgz#a98417e5471fd227b3e45d3db1861c11caf668f7" - integrity sha512-nrBAQClJAPN2p+uGCVJRPIPakKeKWZ9GtBCmormE7pWOSlHat7+x5A8gx85M7HM5Dt0BP3pP5RhVW77WdbJJ3A== - dependencies: - character-entities-html4 "^1.0.0" - character-entities-legacy "^1.0.0" - is-alphanumerical "^1.0.0" - is-hexadecimal "^1.0.0" - -strip-ansi@^3.0.0, strip-ansi@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-4.0.0.tgz#a8479022eb1ac368a871389b635262c505ee368f" - integrity sha1-qEeQIusaw2iocTibY1JixQXuNo8= - dependencies: - ansi-regex "^3.0.0" - -strip-ansi@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - -strip-ansi@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" - integrity sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w== - dependencies: - ansi-regex "^5.0.0" - -strip-ansi@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-0.1.1.tgz#39e8a98d044d150660abe4a6808acf70bb7bc991" - integrity sha1-OeipjQRNFQZgq+SmgIrPcLt7yZE= - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM= - -strip-eof@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" - integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-indent@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-2.0.0.tgz#5ef8db295d01e6ed6cbf7aab96998d7822527b68" - integrity sha1-XvjbKV0B5u1sv3qrlpmNeCJSe2g= - -strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -style-search@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/style-search/-/style-search-0.1.0.tgz#7958c793e47e32e07d2b5cafe5c0bf8e12e77902" - integrity sha1-eVjHk+R+MuB9K1yv5cC/jhLneQI= - -styled_string@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/styled_string/-/styled_string-0.0.1.tgz#d22782bd81295459bc4f1df18c4bad8e94dd124a" - integrity sha1-0ieCvYEpVFm8Tx3xjEutjpTdEko= - -stylehacks@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/stylehacks/-/stylehacks-4.0.3.tgz#6718fcaf4d1e07d8a1318690881e8d96726a71d5" - integrity sha512-7GlLk9JwlElY4Y6a/rmbH2MhVlTyVmiJd1PfTCqFaIBEGMYNsrO/v3SeGTdhBThLg4Z+NbOk/qFMwCa+J+3p/g== - dependencies: - browserslist "^4.0.0" - postcss "^7.0.0" - postcss-selector-parser "^3.0.0" - -stylelint-config-recommended@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/stylelint-config-recommended/-/stylelint-config-recommended-2.2.0.tgz#46ab139db4a0e7151fd5f94af155512886c96d3f" - integrity sha512-bZ+d4RiNEfmoR74KZtCKmsABdBJr4iXRiCso+6LtMJPw5rd/KnxUWTxht7TbafrTJK1YRjNgnN0iVZaJfc3xJA== - -stylelint-config-standard@^18.2.0: - version "18.3.0" - resolved "https://registry.yarnpkg.com/stylelint-config-standard/-/stylelint-config-standard-18.3.0.tgz#a2a1b788d2cf876c013feaff8ae276117a1befa7" - integrity sha512-Tdc/TFeddjjy64LvjPau9SsfVRexmTFqUhnMBrzz07J4p2dVQtmpncRF/o8yZn8ugA3Ut43E6o1GtjX80TFytw== - dependencies: - stylelint-config-recommended "^2.2.0" - -stylelint@^9.10.1: - version "9.10.1" - resolved "https://registry.yarnpkg.com/stylelint/-/stylelint-9.10.1.tgz#5f0ee3701461dff1d68284e1386efe8f0677a75d" - integrity sha512-9UiHxZhOAHEgeQ7oLGwrwoDR8vclBKlSX7r4fH0iuu0SfPwFaLkb1c7Q2j1cqg9P7IDXeAV2TvQML/fRQzGBBQ== - dependencies: - autoprefixer "^9.0.0" - balanced-match "^1.0.0" - chalk "^2.4.1" - cosmiconfig "^5.0.0" - debug "^4.0.0" - execall "^1.0.0" - file-entry-cache "^4.0.0" - get-stdin "^6.0.0" - global-modules "^2.0.0" - globby "^9.0.0" - globjoin "^0.1.4" - html-tags "^2.0.0" - ignore "^5.0.4" - import-lazy "^3.1.0" - imurmurhash "^0.1.4" - known-css-properties "^0.11.0" - leven "^2.1.0" - lodash "^4.17.4" - log-symbols "^2.0.0" - mathml-tag-names "^2.0.1" - meow "^5.0.0" - micromatch "^3.1.10" - normalize-selector "^0.2.0" - pify "^4.0.0" - postcss "^7.0.13" - postcss-html "^0.36.0" - postcss-jsx "^0.36.0" - postcss-less "^3.1.0" - postcss-markdown "^0.36.0" - postcss-media-query-parser "^0.2.3" - postcss-reporter "^6.0.0" - postcss-resolve-nested-selector "^0.1.1" - postcss-safe-parser "^4.0.0" - postcss-sass "^0.3.5" - postcss-scss "^2.0.0" - postcss-selector-parser "^3.1.0" - postcss-syntax "^0.36.2" - postcss-value-parser "^3.3.0" - resolve-from "^4.0.0" - signal-exit "^3.0.2" - slash "^2.0.0" - specificity "^0.4.1" - string-width "^3.0.0" - style-search "^0.1.0" - sugarss "^2.0.0" - svg-tags "^1.0.0" - table "^5.0.0" - -subarg@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/subarg/-/subarg-1.0.0.tgz#f62cf17581e996b48fc965699f54c06ae268b8d2" - integrity sha1-9izxdYHplrSPyWVpn1TAauJouNI= - dependencies: - minimist "^1.1.0" - -sugarss@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/sugarss/-/sugarss-2.0.0.tgz#ddd76e0124b297d40bf3cca31c8b22ecb43bc61d" - integrity sha512-WfxjozUk0UVA4jm+U1d736AUpzSrNsQcIbyOkoE364GrtWmIrFdk5lksEupgWMD4VaT/0kVx1dobpiDumSgmJQ== - dependencies: - postcss "^7.0.2" - -supercluster@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supercluster/-/supercluster-7.1.0.tgz#f0a457426ec0ab95d69c5f03b51e049774b94479" - integrity sha512-LDasImUAFMhTqhK+cUXfy9C2KTUqJ3gucLjmNLNFmKWOnDUBxLFLH9oKuXOTCLveecmxh8fbk8kgh6Q0gsfe2w== - dependencies: - kdbush "^3.0.0" - -supports-color@^5.0.0, supports-color@^5.3.0, supports-color@^5.4.0, supports-color@^5.5.0: - version "5.5.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f" - integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow== - dependencies: - has-flag "^3.0.0" - -supports-color@^6.0.0, supports-color@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-6.1.0.tgz#0764abc69c63d5ac842dd4867e8d025e880df8f3" - integrity sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ== - dependencies: - has-flag "^3.0.0" - -supports-color@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1" - integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g== - dependencies: - has-flag "^4.0.0" - -svg-tags@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/svg-tags/-/svg-tags-1.0.0.tgz#58f71cee3bd519b59d4b2a843b6c7de64ac04764" - integrity sha1-WPcc7jvVGbWdSyqEO2x95krAR2Q= - -svgo@^1.0.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/svgo/-/svgo-1.3.2.tgz#b6dc511c063346c9e415b81e43401145b96d4167" - integrity sha512-yhy/sQYxR5BkC98CY7o31VGsg014AKLEPxdfhora76l36hD9Rdy5NZA/Ocn6yayNPgSamYdtX2rFJdcv07AYVw== - dependencies: - chalk "^2.4.1" - coa "^2.0.2" - css-select "^2.0.0" - css-select-base-adapter "^0.1.1" - css-tree "1.0.0-alpha.37" - csso "^4.0.2" - js-yaml "^3.13.1" - mkdirp "~0.5.1" - object.values "^1.1.0" - sax "~1.2.4" - stable "^0.1.8" - unquote "~1.1.1" - util.promisify "~1.0.0" - -symbol-tree@^3.2.2: - version "3.2.4" - resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" - integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== - -syntax-error@^1.1.1: - version "1.4.0" - resolved "https://registry.yarnpkg.com/syntax-error/-/syntax-error-1.4.0.tgz#2d9d4ff5c064acb711594a3e3b95054ad51d907c" - integrity sha512-YPPlu67mdnHGTup2A8ff7BC2Pjq0e0Yp/IyTFN03zWO0RcK07uLcbi7C2KpGR2FvWbaB0+bfE27a+sBKebSo7w== - dependencies: - acorn-node "^1.2.0" - -table@^5.0.0, table@^5.2.3: - version "5.4.6" - resolved "https://registry.yarnpkg.com/table/-/table-5.4.6.tgz#1292d19500ce3f86053b05f0e8e7e4a3bb21079e" - integrity sha512-wmEc8m4fjnob4gt5riFRtTu/6+4rSe12TpAELNSqHMfF3IqnA+CH37USM6/YR3qRZv7e56kAEAtd6nKZaxe0Ug== - dependencies: - ajv "^6.10.2" - lodash "^4.17.14" - slice-ansi "^2.1.0" - string-width "^3.0.0" - -tap-mocha-reporter@^3.0.7: - version "3.0.9" - resolved "https://registry.yarnpkg.com/tap-mocha-reporter/-/tap-mocha-reporter-3.0.9.tgz#ea41e741149a94c278d106cbcccc37fec2dfeeaa" - integrity sha512-VO07vhC9EG27EZdOe7bWBj1ldbK+DL9TnRadOgdQmiQOVZjFpUEQuuqO7+rNSO2kfmkq5hWeluYXDWNG/ytXTQ== - dependencies: - color-support "^1.1.0" - debug "^2.1.3" - diff "^1.3.2" - escape-string-regexp "^1.0.3" - glob "^7.0.5" - js-yaml "^3.3.1" - tap-parser "^5.1.0" - unicode-length "^1.0.0" - optionalDependencies: - readable-stream "^2.1.5" - -tap-parser@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-10.0.1.tgz#b63c2500eeef2be8fbf09d512914196d1f12ebec" - integrity sha512-qdT15H0DoJIi7zOqVXDn9X0gSM68JjNy1w3VemwTJlDnETjbi6SutnqmBfjDJAwkFS79NJ97gZKqie00ZCGmzg== - dependencies: - events-to-array "^1.0.1" - minipass "^3.0.0" - tap-yaml "^1.0.0" - -tap-parser@^5.1.0: - version "5.4.0" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-5.4.0.tgz#6907e89725d7b7fa6ae41ee2c464c3db43188aec" - integrity sha512-BIsIaGqv7uTQgTW1KLTMNPSEQf4zDDPgYOBRdgOfuB+JFOLRBfEu6cLa/KvMvmqggu1FKXDfitjLwsq4827RvA== - dependencies: - events-to-array "^1.0.1" - js-yaml "^3.2.7" - optionalDependencies: - readable-stream "^2" - -tap-parser@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/tap-parser/-/tap-parser-7.0.0.tgz#54db35302fda2c2ccc21954ad3be22b2cba42721" - integrity sha512-05G8/LrzqOOFvZhhAk32wsGiPZ1lfUrl+iV7+OkKgfofZxiceZWMHkKmow71YsyVQ8IvGBP2EjcIjE5gL4l5lA== - dependencies: - events-to-array "^1.0.1" - js-yaml "^3.2.7" - minipass "^2.2.0" - -tap-yaml@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/tap-yaml/-/tap-yaml-1.0.0.tgz#4e31443a5489e05ca8bbb3e36cef71b5dec69635" - integrity sha512-Rxbx4EnrWkYk0/ztcm5u3/VznbyFJpyXO12dDBHKWiDVxy7O2Qw6MRrwO5H6Ww0U5YhRY/4C/VzWmFPhBQc4qQ== - dependencies: - yaml "^1.5.0" - -tap@~12.4.1: - version "12.4.1" - resolved "https://registry.yarnpkg.com/tap/-/tap-12.4.1.tgz#0c50480291c8bfffe889e448a847b66a8f2fd809" - integrity sha512-hWh6V5cIIHwvXwmNb3fL/3athC9NyZuL4ZoiyHUHXqRAJJ6/SBmGX7IOfzj/Pf7EzFy9JwDCw/64eOyKx8XikA== - dependencies: - bind-obj-methods "^2.0.0" - browser-process-hrtime "^1.0.0" - capture-stack-trace "^1.0.0" - clean-yaml-object "^0.1.0" - color-support "^1.1.0" - coveralls "^3.0.2" - domain-browser "^1.2.0" - foreground-child "^1.3.3" - fs-exists-cached "^1.0.0" - function-loop "^1.0.1" - glob "^7.1.3" - isexe "^2.0.0" - js-yaml "^3.12.1" - minipass "^2.3.5" - mkdirp "^0.5.1" - nyc "^13.1.0" - opener "^1.5.1" - os-homedir "^1.0.2" - own-or "^1.0.0" - own-or-env "^1.0.1" - rimraf "^2.6.3" - signal-exit "^3.0.0" - source-map-support "^0.5.10" - stack-utils "^1.0.2" - tap-mocha-reporter "^3.0.7" - tap-parser "^7.0.0" - tmatch "^4.0.0" - trivial-deferred "^1.0.1" - ts-node "^8.0.1" - tsame "^2.0.1" - typescript "^3.2.4" - write-file-atomic "^2.3.0" - yapool "^1.0.0" - -tape-filter@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/tape-filter/-/tape-filter-1.0.4.tgz#1d637ac064d51926f339ad88f642eb0f87ca9dc7" - integrity sha1-HWN6wGTVGSbzOa2I9kLrD4fKncc= - dependencies: - minimist "^1.2.0" - -tape@^4.13.2: - version "4.13.2" - resolved "https://registry.yarnpkg.com/tape/-/tape-4.13.2.tgz#eb419b9d9bc004025b1a81a5b63093e07f425629" - integrity sha512-waWwC/OqYVE9TS6r1IynlP2sEdk4Lfo6jazlgkuNkPTHIbuG2BTABIaKdlQWwPeB6Oo4ksZ1j33Yt0NTOAlYMQ== - dependencies: - deep-equal "~1.1.1" - defined "~1.0.0" - dotignore "~0.1.2" - for-each "~0.3.3" - function-bind "~1.1.1" - glob "~7.1.6" - has "~1.0.3" - inherits "~2.0.4" - is-regex "~1.0.5" - minimist "~1.2.0" - object-inspect "~1.7.0" - resolve "~1.15.1" - resumer "~0.0.0" - string.prototype.trim "~1.2.1" - through "~2.3.8" - -tar-fs@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.0.1.tgz#e44086c1c60d31a4f0cf893b1c4e155dabfae9e2" - integrity sha512-6tzWDMeroL87uF/+lin46k+Q+46rAJ0SyPGz7OW7wTgblI273hsBqk2C1j0/xNadNLKDTUL9BukSjB7cwgmlPA== - dependencies: - chownr "^1.1.1" - mkdirp-classic "^0.5.2" - pump "^3.0.0" - tar-stream "^2.0.0" - -tar-stream@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.1.2.tgz#6d5ef1a7e5783a95ff70b69b97455a5968dc1325" - integrity sha512-UaF6FoJ32WqALZGOIAApXx+OdxhekNMChu6axLJR85zMMjXKWFGjbIRe+J6P4UnRGg9rAwWvbTT0oI7hD/Un7Q== - dependencies: - bl "^4.0.1" - end-of-stream "^1.4.1" - fs-constants "^1.0.0" - inherits "^2.0.3" - readable-stream "^3.1.1" - -tar@^2.2.1: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - -tar@^4, tar@^4.4.12: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - -temp@^0.9.4: - version "0.9.4" - resolved "https://registry.npmjs.org/temp/-/temp-0.9.4.tgz#cd20a8580cb63635d0e4e9d4bd989d44286e7620" - integrity sha512-yYrrsWnrXMcdsnu/7YMYAofM1ktpL5By7vZhf15CrXijWWrEYZks5AXBudalfSWJLlnen/QUJUB5aoB0kqZUGA== - dependencies: - mkdirp "^0.5.1" - rimraf "~2.6.2" - -terser@^4.6.2: - version "4.6.7" - resolved "https://registry.yarnpkg.com/terser/-/terser-4.6.7.tgz#478d7f9394ec1907f0e488c5f6a6a9a2bad55e72" - integrity sha512-fmr7M1f7DBly5cX2+rFDvmGBAaaZyPrHYK4mMdHEDAdNTqXSZgSOfqsfGq2HqPGT/1V0foZZuCZFx8CHKgAk3g== - dependencies: - commander "^2.20.0" - source-map "~0.6.1" - source-map-support "~0.5.12" - -test-exclude@^5.1.0: - version "5.2.3" - resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-5.2.3.tgz#c3d3e1e311eb7ee405e092dac10aefd09091eac0" - integrity sha512-M+oxtseCFO3EDtAaGH7iiej3CBkzXqFMbzqYAACdzKui4eZA+pq3tZEwChvOdNfa7xxy8BfbmgJSIr43cC/+2g== - dependencies: - glob "^7.1.3" - minimatch "^3.0.4" - read-pkg-up "^4.0.0" - require-main-filename "^2.0.0" - -testem@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/testem/-/testem-3.0.3.tgz#d59f1ffbcf497909aca5580b0496e6506350d7b8" - integrity sha512-mdBCCn8LlTmgFDpexemyGP4cjO1V0VASs/qbPGZk8Qo05EBnmch29LIqxvWUDih/nA6eau3reXp0rNEef7qpCw== - dependencies: - backbone "^1.1.2" - bluebird "^3.4.6" - charm "^1.0.0" - commander "^2.6.0" - compression "^1.7.4" - consolidate "^0.15.1" - execa "^1.0.0" - express "^4.10.7" - fireworm "^0.7.0" - glob "^7.0.4" - http-proxy "^1.13.1" - js-yaml "^3.2.5" - lodash.assignin "^4.1.0" - lodash.castarray "^4.4.0" - lodash.clonedeep "^4.4.1" - lodash.find "^4.5.1" - lodash.uniqby "^4.7.0" - mkdirp "^0.5.1" - mustache "^3.0.0" - node-notifier "^5.0.1" - npmlog "^4.0.0" - printf "^0.5.1" - rimraf "^2.4.4" - socket.io "^2.1.0" - spawn-args "^0.2.0" - styled_string "0.0.1" - tap-parser "^7.0.0" - tmp "0.0.33" - xmldom "^0.1.19" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha1-f17oI66AUgfACvLfSoTsP8+lcLQ= - -through2-filter@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/through2-filter/-/through2-filter-3.0.0.tgz#700e786df2367c2c88cd8aa5be4cf9c1e7831254" - integrity sha512-jaRjI2WxN3W1V8/FMZ9HKIBXixtiqs3SQSX4/YGIiP3gL6djW48VoZq9tDqeCWs3MT8YY5wb/zli8VW8snY1CA== - dependencies: - through2 "~2.0.0" - xtend "~4.0.0" - -through2@^0.6.3: - version "0.6.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.6.5.tgz#41ab9c67b29d57209071410e1d7a7a968cd3ad48" - integrity sha1-QaucZ7KdVyCQcUEOHXp6lozTrUg= - dependencies: - readable-stream ">=1.0.33-1 <1.1.0-0" - xtend ">=4.0.0 <4.1.0-0" - -through2@^2.0.0, through2@^2.0.3, through2@~2.0.0: - version "2.0.5" - resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" - integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== - dependencies: - readable-stream "~2.3.6" - xtend "~4.0.1" - -"through@>=2.2.7 <3", through@^2.3.6, through@~2.3.4, through@~2.3.8: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha1-DdTJ/6q8NXlgsbckEV1+Doai4fU= - -timed-out@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/timed-out/-/timed-out-4.0.1.tgz#f32eacac5a175bea25d7fab565ab3ed8741ef56f" - integrity sha1-8y6srFoXW+ol1/q1Zas+2HQe9W8= - -timers-browserify@^1.0.1: - version "1.4.2" - resolved "https://registry.yarnpkg.com/timers-browserify/-/timers-browserify-1.4.2.tgz#c9c58b575be8407375cb5e2462dacee74359f41d" - integrity sha1-ycWLV1voQHN1y14kYtrO50NZ9B0= - dependencies: - process "~0.11.0" - -timsort@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/timsort/-/timsort-0.3.0.tgz#405411a8e7e6339fe64db9a234de11dc31e02bd4" - integrity sha1-QFQRqOfmM5/mTbmiNN4R3DHgK9Q= - -tiny-lr@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/tiny-lr/-/tiny-lr-1.1.1.tgz#9fa547412f238fedb068ee295af8b682c98b2aab" - integrity sha512-44yhA3tsaRoMOjQQ+5v5mVdqef+kH6Qze9jTpqtVufgYjYt08zyZAwNwwVBj3i1rJMnR52IxOW0LK0vBzgAkuA== - dependencies: - body "^5.1.0" - debug "^3.1.0" - faye-websocket "~0.10.0" - livereload-js "^2.3.0" - object-assign "^4.1.0" - qs "^6.4.0" - -tinyqueue@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/tinyqueue/-/tinyqueue-2.0.3.tgz#64d8492ebf39e7801d7bd34062e29b45b2035f08" - integrity sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA== - -tmatch@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/tmatch/-/tmatch-4.0.0.tgz#ba178007f30bf6a70f37c643fca5045fb2f8c448" - integrity sha512-Ynn2Gsp+oCvYScQXeV+cCs7citRDilq0qDXA6tuvFwDgiYyyaq7D5vKUlAPezzZR5NDobc/QMeN6e5guOYmvxg== - -tmp@0.0.30: - version "0.0.30" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.30.tgz#72419d4a8be7d6ce75148fd8b324e593a711c2ed" - integrity sha1-ckGdSovn1s51FI/YsyTlk6cRwu0= - dependencies: - os-tmpdir "~1.0.1" - -tmp@0.0.31: - version "0.0.31" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.31.tgz#8f38ab9438e17315e5dbd8b3657e8bfb277ae4a7" - integrity sha1-jzirlDjhcxXl29izZX6L+yd65Kc= - dependencies: - os-tmpdir "~1.0.1" - -tmp@0.0.33, tmp@^0.0.33: - version "0.0.33" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" - integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== - dependencies: - os-tmpdir "~1.0.2" - -to-absolute-glob@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/to-absolute-glob/-/to-absolute-glob-2.0.2.tgz#1865f43d9e74b0822db9f145b78cff7d0f7c849b" - integrity sha1-GGX0PZ50sIItufFFt4z/fQ98hJs= - dependencies: - is-absolute "^1.0.0" - is-negated-glob "^1.0.0" - -to-array@0.1.4: - version "0.1.4" - resolved "https://registry.yarnpkg.com/to-array/-/to-array-0.1.4.tgz#17e6c11f73dd4f3d74cda7a4ff3238e9ad9bf890" - integrity sha1-F+bBH3PdTz10zaek/zI46a2b+JA= - -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha1-3F5pjL0HkmW8c+A3doGk5Og/YW4= - -to-object-path@^0.3.0: - version "0.3.0" - resolved "https://registry.yarnpkg.com/to-object-path/-/to-object-path-0.3.0.tgz#297588b7b0e7e0ac08e04e672f85c1f4999e17af" - integrity sha1-KXWIt7Dn4KwI4E5nL4XB9JmeF68= - dependencies: - kind-of "^3.0.2" - -to-regex-range@^2.1.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-2.1.1.tgz#7c80c17b9dfebe599e27367e0d4dd5590141db38" - integrity sha1-fIDBe53+vlmeJzZ+DU3VWQFB2zg= - dependencies: - is-number "^3.0.0" - repeat-string "^1.6.1" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -to-regex@^3.0.1, to-regex@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/to-regex/-/to-regex-3.0.2.tgz#13cfdd9b336552f30b51f33a8ae1b42a7a7599ce" - integrity sha512-FWtleNAtZ/Ki2qtqej2CXTOayOH9bHDQF+Q48VpWyDXjbYxA4Yz8iDB31zXOBUlOHHKidDbqGVrTUvQMPmBGBw== - dependencies: - define-property "^2.0.2" - extend-shallow "^3.0.2" - regex-not "^1.0.2" - safe-regex "^1.1.0" - -to-through@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-through/-/to-through-2.0.0.tgz#fc92adaba072647bc0b67d6b03664aa195093af6" - integrity sha1-/JKtq6ByZHvAtn1rA2ZKoZUJOvY= - dependencies: - through2 "^2.0.3" - -toidentifier@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.0.tgz#7e1be3470f1e77948bc43d94a3c8f4d7752ba553" - integrity sha512-yaOH/Pk/VEhBWWTlhI+qXxDFXlejDGcQipMlyxda9nthulaxLZUNcUqFxokp0vcYnvteJln5FNQDRrxj3YcbVw== - -tough-cookie@^2.3.3, tough-cookie@^2.5.0, tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-1.0.1.tgz#a8b13fd6bfd2489519674ccde55ba3693b706d09" - integrity sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk= - dependencies: - punycode "^2.1.0" - -trim-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-lines/-/trim-lines-1.1.3.tgz#839514be82428fd9e7ec89e35081afe8f6f93115" - integrity sha512-E0ZosSWYK2mkSu+KEtQ9/KqarVjA9HztOSX+9FDdNacRAq29RRV6ZQNgob3iuW8Htar9vAfEa6yyt5qBAHZDBA== - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -trim-newlines@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-2.0.0.tgz#b403d0b91be50c331dfc4b82eeceb22c3de16d20" - integrity sha1-tAPQuRvlDDMd/EuC7s6yLD3hbSA= - -trim-trailing-lines@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/trim-trailing-lines/-/trim-trailing-lines-1.1.3.tgz#7f0739881ff76657b7776e10874128004b625a94" - integrity sha512-4ku0mmjXifQcTVfYDfR5lpgV7zVqPg6zV9rdZmwOPqq0+Zq19xDqEgagqVbc4pOOShbncuAOIs59R3+3gcF3ZA== - -trim@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" - integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= - -trivial-deferred@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/trivial-deferred/-/trivial-deferred-1.0.1.tgz#376d4d29d951d6368a6f7a0ae85c2f4d5e0658f3" - integrity sha1-N21NKdlR1jaKb3oK6FwvTV4GWPM= - -trough@^1.0.0: - version "1.0.5" - resolved "https://registry.yarnpkg.com/trough/-/trough-1.0.5.tgz#b8b639cefad7d0bb2abd37d433ff8293efa5f406" - integrity sha512-rvuRbTarPXmMb79SmzEp8aqXNKcK+y0XaB298IXueQ8I2PsrATcPBCSPyK/dDNa2iWOhKlfNnOjdAOTBU/nkFA== - -ts-node@^8.0.1: - version "8.8.1" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-8.8.1.tgz#7c4d3e9ed33aa703b64b28d7f9d194768be5064d" - integrity sha512-10DE9ONho06QORKAaCBpPiFCdW+tZJuY/84tyypGtl6r+/C7Asq0dhqbRZURuUlLQtZxxDvT8eoj8cGW0ha6Bg== - dependencies: - arg "^4.1.0" - diff "^4.0.1" - make-error "^1.1.1" - source-map-support "^0.5.6" - yn "3.1.1" - -tsame@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/tsame/-/tsame-2.0.1.tgz#70410ddbefcd29c61e2d68549b3347b0444d613f" - integrity sha512-jxyxgKVKa4Bh5dPcO42TJL22lIvfd9LOVJwdovKOnJa4TLLrHxquK+DlGm4rkGmrcur+GRx+x4oW00O2pY/fFw== - -tslib@^1.9.0: - version "1.11.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.11.1.tgz#eb15d128827fbee2841549e171f45ed338ac7e35" - integrity sha512-aZW88SY8kQbU7gpV19lN24LtXh/yD4ZZg6qieAJDDg+YBsJcSmLGK9QpnUjAKVG/xefmvJGd1WUmfpT/g6AJGA== - -tty-browserify@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/tty-browserify/-/tty-browserify-0.0.1.tgz#3f05251ee17904dfd0677546670db9651682b811" - integrity sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw== - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -type-check@~0.3.2: - version "0.3.2" - resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.3.2.tgz#5884cab512cf1d355e3fb784f30804b2b520db72" - integrity sha1-WITKtRLPHTVeP7eE8wgEsrUg23I= - dependencies: - prelude-ls "~1.1.2" - -type-detect@4.0.8: - version "4.0.8" - resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" - integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== - -type-is@~1.6.17, type-is@~1.6.18: - version "1.6.18" - resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" - integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== - dependencies: - media-typer "0.3.0" - mime-types "~2.1.24" - -typedarray@^0.0.6, typedarray@~0.0.5: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -typescript@^3.2.4: - version "3.8.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061" - integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w== - -umd@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.3.tgz#aa9fe653c42b9097678489c01000acb69f0b26cf" - integrity sha512-4IcGSufhFshvLNcMCV80UnQVlZ5pMOC8mvNPForqwA4+lzYQuetTESLDQkeLmihq8bRcnpbQa48Wb8Lh16/xow== - -unassert@^1.5.1: - version "1.6.0" - resolved "https://registry.yarnpkg.com/unassert/-/unassert-1.6.0.tgz#ceb6d39ce47c6d2bfa9cb3cab407352cbfb60a19" - integrity sha512-GoMtWTwGSxSFuRD0NKmbjlx3VJkgvSogzDzMPpJXYmBZv6MIWButsyMqEYhMx3NI4osXACcZA9mXiBteXyJtRw== - dependencies: - acorn "^7.0.0" - call-matcher "^2.0.0" - deep-equal "^1.0.0" - espurify "^2.0.1" - estraverse "^4.1.0" - esutils "^2.0.2" - object-assign "^4.1.0" - -unc-path-regex@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/unc-path-regex/-/unc-path-regex-0.1.2.tgz#e73dd3d7b0d7c5ed86fbac6b0ae7d8c6a69d50fa" - integrity sha1-5z3T17DXxe2G+6xrCufYxqadUPo= - -undeclared-identifiers@^1.1.2: - version "1.1.3" - resolved "https://registry.yarnpkg.com/undeclared-identifiers/-/undeclared-identifiers-1.1.3.tgz#9254c1d37bdac0ac2b52de4b6722792d2a91e30f" - integrity sha512-pJOW4nxjlmfwKApE4zvxLScM/njmwj/DiUBv7EabwE4O8kRUy+HIwxQtZLBPll/jx1LJyBcqNfB3/cpv9EZwOw== - dependencies: - acorn-node "^1.3.0" - dash-ast "^1.0.0" - get-assigned-identifiers "^1.2.0" - simple-concat "^1.0.0" - xtend "^4.0.1" - -underscore@>=1.8.3: - version "1.9.2" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.9.2.tgz#0c8d6f536d6f378a5af264a72f7bec50feb7cf2f" - integrity sha512-D39qtimx0c1fI3ya1Lnhk3E9nONswSKhnffBI0gME9C99fYOkNi04xs8K6pePLhvl1frbDemkaBQ5ikWllR2HQ== - -underscore@~1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.6.0.tgz#8b38b10cacdef63337b8b24e4ff86d45aea529a8" - integrity sha1-izixDKze9jM3uLJOT/htRa6lKag= - -unherit@^1.0.4: - version "1.1.3" - resolved "https://registry.yarnpkg.com/unherit/-/unherit-1.1.3.tgz#6c9b503f2b41b262330c80e91c8614abdaa69c22" - integrity sha512-Ft16BJcnapDKp0+J/rqFC3Rrk6Y/Ng4nzsC028k2jdDII/rdZ7Wd3pPT/6+vIIxRagwRc9K0IUX0Ra4fKvw+WQ== - dependencies: - inherits "^2.0.0" - xtend "^4.0.0" - -unicode-canonical-property-names-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-1.0.4.tgz#2619800c4c825800efdd8343af7dd9933cbe2818" - integrity sha512-jDrNnXWHd4oHiTZnx/ZG7gtUTVp+gCcTTKr8L0HjlwphROEW3+Him+IpvC+xcJEFegapiMZyZe02CyuOnRmbnQ== - -unicode-length@^1.0.0: - version "1.0.3" - resolved "https://registry.yarnpkg.com/unicode-length/-/unicode-length-1.0.3.tgz#5ada7a7fed51841a418a328cf149478ac8358abb" - integrity sha1-Wtp6f+1RhBpBijKM8UlHisg1irs= - dependencies: - punycode "^1.3.2" - strip-ansi "^3.0.1" - -unicode-match-property-ecmascript@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-1.0.4.tgz#8ed2a32569961bce9227d09cd3ffbb8fed5f020c" - integrity sha512-L4Qoh15vTfntsn4P1zqnHulG0LdXgjSO035fEpdtp6YxXhMT51Q6vgM5lYdG/5X3MjS+k/Y9Xw4SFCY9IkR0rg== - dependencies: - unicode-canonical-property-names-ecmascript "^1.0.4" - unicode-property-aliases-ecmascript "^1.0.4" - -unicode-match-property-value-ecmascript@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-1.2.0.tgz#0d91f600eeeb3096aa962b1d6fc88876e64ea531" - integrity sha512-wjuQHGQVofmSJv1uVISKLE5zO2rNGzM/KCYZch/QQvez7C1hUhBIuZ701fYXExuufJFMPhv2SyL8CyoIfMLbIQ== - -unicode-property-aliases-ecmascript@^1.0.4: - version "1.1.0" - resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-1.1.0.tgz#dd57a99f6207bedff4628abefb94c50db941c8f4" - integrity sha512-PqSoPh/pWetQ2phoj5RLiaqIk4kCNwoV3CI+LfGmWLKI3rE3kl1h59XpX2BjgDrmbxD9ARtQobPGU1SguCYuQg== - -unified@^6.0.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-6.2.0.tgz#7fbd630f719126d67d40c644b7e3f617035f6dba" - integrity sha512-1k+KPhlVtqmG99RaTbAv/usu85fcSRu3wY8X+vnsEhIxNP5VbVIDiXnLqyKIG+UMdyTg0ZX9EI6k2AfjJkHPtA== - dependencies: - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^2.0.0" - x-is-string "^0.1.0" - -unified@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/unified/-/unified-7.1.0.tgz#5032f1c1ee3364bd09da12e27fdd4a7553c7be13" - integrity sha512-lbk82UOIGuCEsZhPj8rNAkXSDXd6p0QLzIuSsCdxrqnqU56St4eyOB+AlXsVgVeRmetPTYydIuvFfpDIed8mqw== - dependencies: - "@types/unist" "^2.0.0" - "@types/vfile" "^3.0.0" - bail "^1.0.0" - extend "^3.0.0" - is-plain-obj "^1.1.0" - trough "^1.0.0" - vfile "^3.0.0" - x-is-string "^0.1.0" - -union-value@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/union-value/-/union-value-1.0.1.tgz#0b6fe7b835aecda61c6ea4d4f02c14221e109847" - integrity sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg== - dependencies: - arr-union "^3.1.0" - get-value "^2.0.6" - is-extendable "^0.1.1" - set-value "^2.0.1" - -uniq@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/uniq/-/uniq-1.0.1.tgz#b31c5ae8254844a3a8281541ce2b04b865a734ff" - integrity sha1-sxxa6CVIRKOoKBVBzisEuGWnNP8= - -uniqs@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/uniqs/-/uniqs-2.0.0.tgz#ffede4b36b25290696e6e165d4a59edb998e6b02" - integrity sha1-/+3ks2slKQaW5uFl1KWe25mOawI= - -unique-stream@^2.0.2: - version "2.3.1" - resolved "https://registry.yarnpkg.com/unique-stream/-/unique-stream-2.3.1.tgz#c65d110e9a4adf9a6c5948b28053d9a8d04cbeac" - integrity sha512-2nY4TnBE70yoxHkDli7DMazpWiP7xMdCYqU2nBRO0UB+ZpEkGsSija7MvmvnZFUeC+mrgiUfcHSr3LmRFIg4+A== - dependencies: - json-stable-stringify-without-jsonify "^1.0.1" - through2-filter "^3.0.0" - -unist-builder@^1.0.1, unist-builder@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/unist-builder/-/unist-builder-1.0.4.tgz#e1808aed30bd72adc3607f25afecebef4dd59e17" - integrity sha512-v6xbUPP7ILrT15fHGrNyHc1Xda8H3xVhP7/HAIotHOhVPjH5dCXA097C3Rry1Q2O+HbOLCao4hfPB+EYEjHgVg== - dependencies: - object-assign "^4.1.0" - -unist-util-find-all-after@^1.0.2: - version "1.0.5" - resolved "https://registry.yarnpkg.com/unist-util-find-all-after/-/unist-util-find-all-after-1.0.5.tgz#5751a8608834f41d117ad9c577770c5f2f1b2899" - integrity sha512-lWgIc3rrTMTlK1Y0hEuL+k+ApzFk78h+lsaa2gHf63Gp5Ww+mt11huDniuaoq1H+XMK2lIIjjPkncxXcDp3QDw== - dependencies: - unist-util-is "^3.0.0" - -unist-util-generated@^1.1.0: - version "1.1.5" - resolved "https://registry.yarnpkg.com/unist-util-generated/-/unist-util-generated-1.1.5.tgz#1e903e68467931ebfaea386dae9ea253628acd42" - integrity sha512-1TC+NxQa4N9pNdayCYA1EGUOCAO0Le3fVp7Jzns6lnua/mYgwHo0tz5WUAfrdpNch1RZLHc61VZ1SDgrtNXLSw== - -unist-util-is@^2.0.0, unist-util-is@^2.1.2: - version "2.1.3" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-2.1.3.tgz#459182db31f4742fceaea88d429693cbf0043d20" - integrity sha512-4WbQX2iwfr/+PfM4U3zd2VNXY+dWtZsN1fLnWEi2QQXA4qyDYAZcDMfXUX0Cu6XZUHHAO9q4nyxxLT4Awk1qUA== - -unist-util-is@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/unist-util-is/-/unist-util-is-3.0.0.tgz#d9e84381c2468e82629e4a5be9d7d05a2dd324cd" - integrity sha512-sVZZX3+kspVNmLWBPAB6r+7D9ZgAFPNWm66f7YNb420RlQSbn+n8rG8dGZSkrER7ZIXGQYNm5pqC3v3HopH24A== - -unist-util-position@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/unist-util-position/-/unist-util-position-3.1.0.tgz#1c42ee6301f8d52f47d14f62bbdb796571fa2d47" - integrity sha512-w+PkwCbYSFw8vpgWD0v7zRCl1FpY3fjDSQ3/N/wNd9Ffa4gPi8+4keqt99N3XW6F99t/mUzp2xAhNmfKWp95QA== - -unist-util-remove-position@^1.0.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/unist-util-remove-position/-/unist-util-remove-position-1.1.4.tgz#ec037348b6102c897703eee6d0294ca4755a2020" - integrity sha512-tLqd653ArxJIPnKII6LMZwH+mb5q+n/GtXQZo6S6csPRs5zB0u79Yw8ouR3wTw8wxvdJFhpP6Y7jorWdCgLO0A== - dependencies: - unist-util-visit "^1.1.0" - -unist-util-stringify-position@^1.0.0, unist-util-stringify-position@^1.1.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-1.1.2.tgz#3f37fcf351279dcbca7480ab5889bb8a832ee1c6" - integrity sha512-pNCVrk64LZv1kElr0N1wPiHEUoXNVFERp+mlTg/s9R5Lwg87f9bM/3sQB99w+N9D/qnM9ar3+AKDBwo/gm/iQQ== - -unist-util-stringify-position@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/unist-util-stringify-position/-/unist-util-stringify-position-2.0.3.tgz#cce3bfa1cdf85ba7375d1d5b17bdc4cada9bd9da" - integrity sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g== - dependencies: - "@types/unist" "^2.0.2" - -unist-util-visit-parents@^2.0.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/unist-util-visit-parents/-/unist-util-visit-parents-2.1.2.tgz#25e43e55312166f3348cae6743588781d112c1e9" - integrity sha512-DyN5vD4NE3aSeB+PXYNKxzGsfocxp6asDc2XXE3b0ekO2BaRUpBicbbUygfSvYfUz1IkmjFR1YF7dPklraMZ2g== - dependencies: - unist-util-is "^3.0.0" - -unist-util-visit@^1.0.0, unist-util-visit@^1.1.0, unist-util-visit@^1.3.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/unist-util-visit/-/unist-util-visit-1.4.1.tgz#4724aaa8486e6ee6e26d7ff3c8685960d560b1e3" - integrity sha512-AvGNk7Bb//EmJZyhtRUnNMEpId/AZ5Ph/KUpTI09WHQuDZHKovQ1oEv3mfmKpWKtoMzyMC4GLBm1Zy5k12fjIw== - dependencies: - unist-util-visit-parents "^2.0.0" - -universal-user-agent@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-4.0.1.tgz#fd8d6cb773a679a709e967ef8288a31fcc03e557" - integrity sha512-LnST3ebHwVL2aNe4mejI9IQh2HfZ1RLo8Io2HugSif8ekzD1TlWpHpColOB/eh8JHMLkGH3Akqf040I+4ylNxg== - dependencies: - os-name "^3.1.0" - -universal-user-agent@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-5.0.0.tgz#a3182aa758069bf0e79952570ca757de3579c1d9" - integrity sha512-B5TPtzZleXyPrUMKCpEHFmVhMN6EhmJYjG5PQna9s7mXeSqGTLap4OpqLl5FCEFUI3UBmllkETwKf/db66Y54Q== - dependencies: - os-name "^3.1.0" - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -unpipe@1.0.0, unpipe@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" - integrity sha1-sr9O6FFKrmFltIF4KdIbLvSZBOw= - -unquote@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/unquote/-/unquote-1.1.1.tgz#8fded7324ec6e88a0ff8b905e7c098cdc086d544" - integrity sha1-j97XMk7G6IoP+LkF58CYzcCG1UQ= - -unset-value@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/unset-value/-/unset-value-1.0.0.tgz#8376873f7d2335179ffb1e6fc3a8ed0dfc8ab559" - integrity sha1-g3aHP30jNRef+x5vw6jtDfyKtVk= - dependencies: - has-value "^0.3.1" - isobject "^3.0.0" - -unzip-response@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/unzip-response/-/unzip-response-2.0.1.tgz#d2f0f737d16b0615e72a6935ed04214572d56f97" - integrity sha1-0vD3N9FrBhXnKmk17QQhRXLVb5c= - -upath@^1.1.1: - version "1.2.0" - resolved "https://registry.yarnpkg.com/upath/-/upath-1.2.0.tgz#8f66dbcd55a883acdae4408af8b035a5044c1894" - integrity sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -urix@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" - integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= - -url-parse-lax@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-1.0.0.tgz#7af8f303645e9bd79a272e7a14ac68bc0609da73" - integrity sha1-evjzA2Rem9eaJy56FKxovAYJ2nM= - dependencies: - prepend-http "^1.0.1" - -url@~0.11.0: - version "0.11.0" - resolved "https://registry.yarnpkg.com/url/-/url-0.11.0.tgz#3838e97cfc60521eb73c525a8e55bfdd9e2e28f1" - integrity sha1-ODjpfPxgUh63PFJajlW/3Z4uKPE= - dependencies: - punycode "1.3.2" - querystring "0.2.0" - -use@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/use/-/use-3.1.1.tgz#d50c8cac79a19fbc20f2911f56eb973f4e10070f" - integrity sha512-cwESVXlO3url9YWlFW/TA9cshCEhtu7IKJ/p5soJ/gGpj7vbvFrAY/eIioQ6Dw23KjZhYgiIo8HOs1nQ2vr/oQ== - -util-deprecate@^1.0.1, util-deprecate@~1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8= - -util.promisify@~1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/util.promisify/-/util.promisify-1.0.1.tgz#6baf7774b80eeb0f7520d8b81d07982a59abbaee" - integrity sha512-g9JpC/3He3bm38zsLupWryXHoEcS22YHthuPQSJdMy6KNrzIRzWqcsHzD/WUnqe45whVou4VIsPew37DoXWNrA== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.2" - has-symbols "^1.0.1" - object.getownpropertydescriptors "^2.1.0" - -util@0.10.3: - version "0.10.3" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.3.tgz#7afb1afe50805246489e3db7fe0ed379336ac0f9" - integrity sha1-evsa/lCAUkZInj23/g7TeTNqwPk= - dependencies: - inherits "2.0.1" - -util@~0.10.1: - version "0.10.4" - resolved "https://registry.yarnpkg.com/util/-/util-0.10.4.tgz#3aa0125bfe668a4672de58857d3ace27ecb76901" - integrity sha512-0Pm9hTQ3se5ll1XihRic3FDIku70C+iHUdT/W926rSgHV5QgXsYbKZN8MSC3tJtSkhuROzvsQjAaFENRXr+19A== - dependencies: - inherits "2.0.3" - -utils-merge@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" - integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -value-or-function@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/value-or-function/-/value-or-function-3.0.0.tgz#1c243a50b595c1be54a754bfece8563b9ff8d813" - integrity sha1-HCQ6ULWVwb5Up1S/7OhWO5/42BM= - -vary@~1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" - integrity sha1-IpnwLG3tMNSllhsLn3RSShj2NPw= - -vendors@^1.0.0: - version "1.0.4" - resolved "https://registry.yarnpkg.com/vendors/-/vendors-1.0.4.tgz#e2b800a53e7a29b93506c3cf41100d16c4c4ad8e" - integrity sha512-/juG65kTL4Cy2su4P8HjtkTxk6VmJDiOPBufWniqQ6wknac6jNiXS9vU+hO3wgusiyqWlzTbVHi0dyJqRONg3w== - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -vfile-location@^2.0.0: - version "2.0.6" - resolved "https://registry.yarnpkg.com/vfile-location/-/vfile-location-2.0.6.tgz#8a274f39411b8719ea5728802e10d9e0dff1519e" - integrity sha512-sSFdyCP3G6Ka0CEmN83A2YCMKIieHx0EDaj5IDP4g1pa5ZJ4FJDvpO0WODLxo4LUX4oe52gmSCK7Jw4SBghqxA== - -vfile-message@*, vfile-message@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-2.0.3.tgz#0dd4f6879fb240a8099b22bd3755536c92e59ba5" - integrity sha512-qQg/2z8qnnBHL0psXyF72kCjb9YioIynvyltuNKFaUhRtqTIcIMP3xnBaPzirVZNuBrUe1qwFciSx2yApa4byw== - dependencies: - "@types/unist" "^2.0.0" - unist-util-stringify-position "^2.0.0" - -vfile-message@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/vfile-message/-/vfile-message-1.1.1.tgz#5833ae078a1dfa2d96e9647886cd32993ab313e1" - integrity sha512-1WmsopSGhWt5laNir+633LszXvZ+Z/lxveBf6yhGsqnQIhlhzooZae7zV6YVM1Sdkw68dtAW3ow0pOdPANugvA== - dependencies: - unist-util-stringify-position "^1.1.1" - -vfile-reporter@^5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-5.1.2.tgz#80f1db5cbe8f9c12f2f30cce3e2cd18353a48519" - integrity sha512-b15sTuss1wOPWVlyWOvu+n6wGJ/eTYngz3uqMLimQvxZ+Q5oFQGYZZP1o3dR9sk58G5+wej0UPCZSwQBX/mzrQ== - dependencies: - repeat-string "^1.5.0" - string-width "^2.0.0" - supports-color "^5.0.0" - unist-util-stringify-position "^2.0.0" - vfile-sort "^2.1.2" - vfile-statistics "^1.1.0" - -vfile-reporter@^6.0.0: - version "6.0.1" - resolved "https://registry.yarnpkg.com/vfile-reporter/-/vfile-reporter-6.0.1.tgz#45d4dc11df2e312196ea2ceb95e42a67fc8ce814" - integrity sha512-0OppK9mo8G2XUpv+hIKLVSDsoxJrXnOy73+vIm0jQUOUFYRduqpFHX+QqAQfvRHyX9B0UFiRuNJnBOjQCIsw1g== - dependencies: - repeat-string "^1.5.0" - string-width "^4.0.0" - supports-color "^6.0.0" - unist-util-stringify-position "^2.0.0" - vfile-sort "^2.1.2" - vfile-statistics "^1.1.0" - -vfile-sort@^2.1.0, vfile-sort@^2.1.2: - version "2.2.2" - resolved "https://registry.yarnpkg.com/vfile-sort/-/vfile-sort-2.2.2.tgz#720fe067ce156aba0b411a01bb0dc65596aa1190" - integrity sha512-tAyUqD2R1l/7Rn7ixdGkhXLD3zsg+XLAeUDUhXearjfIcpL1Hcsj5hHpCoy/gvfK/Ws61+e972fm0F7up7hfYA== - -vfile-statistics@^1.1.0: - version "1.1.4" - resolved "https://registry.yarnpkg.com/vfile-statistics/-/vfile-statistics-1.1.4.tgz#b99fd15ecf0f44ba088cc973425d666cb7a9f245" - integrity sha512-lXhElVO0Rq3frgPvFBwahmed3X03vjPF8OcjKMy8+F1xU/3Q3QU3tKEDp743SFtb74PdF0UWpxPvtOP0GCLheA== - -vfile@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-2.3.0.tgz#e62d8e72b20e83c324bc6c67278ee272488bf84a" - integrity sha512-ASt4mBUHcTpMKD/l5Q+WJXNtshlWxOogYyGYYrg4lt/vuRjC1EFQtlAofL5VmtVNIZJzWYFJjzGWZ0Gw8pzW1w== - dependencies: - is-buffer "^1.1.4" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vfile@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-3.0.1.tgz#47331d2abe3282424f4a4bb6acd20a44c4121803" - integrity sha512-y7Y3gH9BsUSdD4KzHsuMaCzRjglXN0W2EcMf0gpvu6+SbsGhMje7xDc8AEoeXy6mIwCKMI6BkjMsRjzQbhMEjQ== - dependencies: - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^1.0.0" - vfile-message "^1.0.0" - -vfile@^4.0.0: - version "4.0.3" - resolved "https://registry.yarnpkg.com/vfile/-/vfile-4.0.3.tgz#1e50b824fb5e5affd718e225c7bb1af6d97d4408" - integrity sha512-lREgT5sF05TQk68LO6APy0In+TkFGnFEgKChK2+PHIaTrFQ9oHCKXznZ7VILwgYVBcl0gv4lGATFZBLhi2kVQg== - dependencies: - "@types/unist" "^2.0.0" - is-buffer "^2.0.0" - replace-ext "1.0.0" - unist-util-stringify-position "^2.0.0" - vfile-message "^2.0.0" - -vinyl-fs@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/vinyl-fs/-/vinyl-fs-3.0.3.tgz#c85849405f67428feabbbd5c5dbdd64f47d31bc7" - integrity sha512-vIu34EkyNyJxmP0jscNzWBSygh7VWhqun6RmqVfXePrOwi9lhvRs//dOaGOTRUQr4tx7/zd26Tk5WeSVZitgng== - dependencies: - fs-mkdirp-stream "^1.0.0" - glob-stream "^6.1.0" - graceful-fs "^4.0.0" - is-valid-glob "^1.0.0" - lazystream "^1.0.0" - lead "^1.0.0" - object.assign "^4.0.4" - pumpify "^1.3.5" - readable-stream "^2.3.3" - remove-bom-buffer "^3.0.0" - remove-bom-stream "^1.2.0" - resolve-options "^1.1.0" - through2 "^2.0.0" - to-through "^2.0.0" - value-or-function "^3.0.0" - vinyl "^2.0.0" - vinyl-sourcemap "^1.1.0" - -vinyl-sourcemap@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/vinyl-sourcemap/-/vinyl-sourcemap-1.1.0.tgz#92a800593a38703a8cdb11d8b300ad4be63b3e16" - integrity sha1-kqgAWTo4cDqM2xHYswCtS+Y7PhY= - dependencies: - append-buffer "^1.0.2" - convert-source-map "^1.5.0" - graceful-fs "^4.1.6" - normalize-path "^2.1.1" - now-and-later "^2.0.0" - remove-bom-buffer "^3.0.0" - vinyl "^2.0.0" - -vinyl@^2.0.0, vinyl@^2.1.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.0.tgz#d85b07da96e458d25b2ffe19fece9f2caa13ed86" - integrity sha512-MBH+yP0kC/GQ5GwBqrTPTzEfiiLjta7hTtvQtbxBgTeSXsmKQRQecjibMbxIXzVT3Y9KJK+drOz1/k+vsu8Nkg== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - -vlq@^0.2.1: - version "0.2.3" - resolved "https://registry.yarnpkg.com/vlq/-/vlq-0.2.3.tgz#8f3e4328cf63b1540c0d67e1b2778386f8975b26" - integrity sha512-DRibZL6DsNhIgYQ+wNdWDL2SL3bKPlVrRiBqV5yuMm++op8W4kGFtaQfCs4KEJn0wBZcHVHJ3eoywX8983k1ow== - -vm-browserify@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/vm-browserify/-/vm-browserify-1.1.2.tgz#78641c488b8e6ca91a75f511e7a3b32a86e5dda0" - integrity sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ== - -vt-pbf@^3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/vt-pbf/-/vt-pbf-3.1.1.tgz#b0f627e39a10ce91d943b898ed2363d21899fb82" - integrity sha512-pHjWdrIoxurpmTcbfBWXaPwSmtPAHS105253P1qyEfSTV2HJddqjM+kIHquaT/L6lVJIk9ltTGc0IxR/G47hYA== - dependencies: - "@mapbox/point-geometry" "0.1.0" - "@mapbox/vector-tile" "^1.3.1" - pbf "^3.0.5" - -vue-template-compiler@^2.5.16: - version "2.6.11" - resolved "https://registry.yarnpkg.com/vue-template-compiler/-/vue-template-compiler-2.6.11.tgz#c04704ef8f498b153130018993e56309d4698080" - integrity sha512-KIq15bvQDrcCjpGjrAhx4mUlyyHfdmTaoNfeoATHLAiWB+MU3cx4lOzMwrnUh9cCxy0Lt1T11hAFY6TQgroUAA== - dependencies: - de-indent "^1.0.2" - he "^1.1.0" - -w3c-hr-time@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/w3c-hr-time/-/w3c-hr-time-1.0.2.tgz#0a89cdf5cc15822df9c360543676963e0cc308cd" - integrity sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ== - dependencies: - browser-process-hrtime "^1.0.0" - -w3c-xmlserializer@^1.0.1: - version "1.1.2" - resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-1.1.2.tgz#30485ca7d70a6fd052420a3d12fd90e6339ce794" - integrity sha512-p10l/ayESzrBMYWRID6xbuCKh2Fp77+sA0doRuGn4tTIMrrZVeqfpKjXHY+oDh3K4nLdPgNwMTVP6Vp4pvqbNg== - dependencies: - domexception "^1.0.1" - webidl-conversions "^4.0.2" - xml-name-validator "^3.0.0" - -webidl-conversions@^4.0.2: - version "4.0.2" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-4.0.2.tgz#a855980b1f0b6b359ba1d5d9fb39ae941faa63ad" - integrity sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg== - -websocket-driver@>=0.5.1: - version "0.7.3" - resolved "https://registry.yarnpkg.com/websocket-driver/-/websocket-driver-0.7.3.tgz#a2d4e0d4f4f116f1e6297eba58b05d430100e9f9" - integrity sha512-bpxWlvbbB459Mlipc5GBzzZwhoZgGEZLuqPaR0INBGnPAY1vdBX6hPnoFXiw+3yWxDuHyQjO2oXTMyS8A5haFg== - dependencies: - http-parser-js ">=0.4.0 <0.4.11" - safe-buffer ">=5.1.0" - websocket-extensions ">=0.1.1" - -websocket-extensions@>=0.1.1: - version "0.1.3" - resolved "https://registry.yarnpkg.com/websocket-extensions/-/websocket-extensions-0.1.3.tgz#5d2ff22977003ec687a4b87073dfbbac146ccf29" - integrity sha512-nqHUnMXmBzT0w570r2JpJxfiSD1IzoI+HGVdd3aZ0yNi3ngvQ4jv1dtHt5VGxfI2yj5yqImPhOK4vmIh2xMbGg== - -whatwg-encoding@^1.0.1, whatwg-encoding@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-1.0.5.tgz#5abacf777c32166a51d085d6b4f3e7d27113ddb0" - integrity sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw== - dependencies: - iconv-lite "0.4.24" - -whatwg-mimetype@^2.2.0, whatwg-mimetype@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-2.3.0.tgz#3d4b1e0312d2079879f826aff18dbeeca5960fbf" - integrity sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g== - -whatwg-url@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-7.1.0.tgz#c2c492f1eca612988efd3d2266be1b9fc6170d06" - integrity sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg== - dependencies: - lodash.sortby "^4.7.0" - tr46 "^1.0.1" - webidl-conversions "^4.0.2" - -which-module@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" - integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= - -which-pm-runs@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/which-pm-runs/-/which-pm-runs-1.0.0.tgz#670b3afbc552e0b55df6b7780ca74615f23ad1cb" - integrity sha1-Zws6+8VS4LVd9rd4DKdGFfI60cs= - -which@^1.2.9, which@^1.3.0, which@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" - integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== - dependencies: - isexe "^2.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.npmjs.org/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - -windows-release@^3.1.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/windows-release/-/windows-release-3.2.0.tgz#8122dad5afc303d833422380680a79cdfa91785f" - integrity sha512-QTlz2hKLrdqukrsapKsINzqMgOUpQW268eJ0OaOpJN32h272waxR9fkB9VoWRtK7uKHG5EHJcTXQBD8XZVJkFA== - dependencies: - execa "^1.0.0" - -word-wrap@~1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.3.tgz#610636f6b1f703891bd34771ccb17fb93b47079c" - integrity sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ== - -wordwrap@~0.0.2: - version "0.0.3" - resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-0.0.3.tgz#a3d5da6cd5c0bc0008d37234bbaf1bed63059107" - integrity sha1-o9XabNXAvAAI03I0u68b7WMFkQc= - -wrap-ansi@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-2.1.0.tgz#d8fc3d284dd05794fe84973caecdd1cf824fdd85" - integrity sha1-2Pw9KE3QV5T+hJc8rs3Rz4JP3YU= - dependencies: - string-width "^1.0.1" - strip-ansi "^3.0.1" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= - -write-file-atomic@^2.3.0, write-file-atomic@^2.4.2: - version "2.4.3" - resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-2.4.3.tgz#1fd2e9ae1df3e75b8d8c367443c692d4ca81f481" - integrity sha512-GaETH5wwsX+GcnzhPgKcKjJ6M2Cq3/iZp1WyY/X1CSqrW+jVNM9Y7D8EC2sM4ZG/V8wZlSniJnCKWPmBYAucRQ== - dependencies: - graceful-fs "^4.1.11" - imurmurhash "^0.1.4" - signal-exit "^3.0.2" - -write@1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/write/-/write-1.0.3.tgz#0800e14523b923a387e415123c865616aae0f5c3" - integrity sha512-/lg70HAjtkUgWPVZhZcm+T4hkL8Zbtp1nFNOn3lRrxnlv50SRBv7cR7RqR+GMsd3hUXy9hWBo4CHTbFTcOYwig== - dependencies: - mkdirp "^0.5.1" - -ws@^6.1.0, ws@^6.1.2: - version "6.2.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.2.1.tgz#442fdf0a47ed64f59b6a5d8ff130f4748ed524fb" - integrity sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA== - dependencies: - async-limiter "~1.0.0" - -ws@^7.1.2: - version "7.2.3" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.2.3.tgz#a5411e1fb04d5ed0efee76d26d5c46d830c39b46" - integrity sha512-HTDl9G9hbkNDk98naoR/cHDws7+EyYMOdL1BmjsZXRUjf7d+MficC4B7HLUPlSiho0vg+CWKrGIt/VJBd1xunQ== - -ws@~6.1.0: - version "6.1.4" - resolved "https://registry.yarnpkg.com/ws/-/ws-6.1.4.tgz#5b5c8800afab925e94ccb29d153c8d02c1776ef9" - integrity sha512-eqZfL+NE/YQc1/ZynhojeV8q+H050oR8AZ2uIev7RU10svA9ZnJUddHcOUZTJLinZ9yEfdA2kSATS2qZK5fhJA== - dependencies: - async-limiter "~1.0.0" - -x-is-string@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/x-is-string/-/x-is-string-0.1.0.tgz#474b50865af3a49a9c4657f05acd145458f77d82" - integrity sha1-R0tQhlrzpJqcRlfwWs0UVFj3fYI= - -xml-name-validator@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-3.0.0.tgz#6ae73e06de4d8c6e47f9fb181f78d648ad457c6a" - integrity sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw== - -xmlchars@^2.1.1: - version "2.2.0" - resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" - integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== - -xmldom@^0.1.19: - version "0.1.31" - resolved "https://registry.yarnpkg.com/xmldom/-/xmldom-0.1.31.tgz#b76c9a1bd9f0a9737e5a72dc37231cf38375e2ff" - integrity sha512-yS2uJflVQs6n+CyjHoaBmVSqIDevTAWrzMmjG1Gc7h1qQ7uVozNhEPJAwZXWyGQ/Gafo3fCwrcaokezLPupVyQ== - -xmlhttprequest-ssl@~1.5.4: - version "1.5.5" - resolved "https://registry.yarnpkg.com/xmlhttprequest-ssl/-/xmlhttprequest-ssl-1.5.5.tgz#c2876b06168aadc40e57d97e81191ac8f4398b3e" - integrity sha1-wodrBhaKrcQOV9l+gRkayPQ5iz4= - -xmlhttprequest@1: - version "1.8.0" - resolved "https://registry.yarnpkg.com/xmlhttprequest/-/xmlhttprequest-1.8.0.tgz#67fe075c5c24fef39f9d65f5f7b7fe75171968fc" - integrity sha1-Z/4HXFwk/vOfnWX197f+dRcZaPw= - -xregexp@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/xregexp/-/xregexp-4.3.0.tgz#7e92e73d9174a99a59743f67a4ce879a04b5ae50" - integrity sha512-7jXDIFXh5yJ/orPn4SXjuVrWWoi4Cr8jfV1eHv9CixKSbU+jY4mxfrBwAuDvupPNKpMUY+FeIqsVw/JLT9+B8g== - dependencies: - "@babel/runtime-corejs3" "^7.8.3" - -"xtend@>=4.0.0 <4.1.0-0", xtend@^4.0.0, xtend@^4.0.1, xtend@^4.0.2, xtend@~4.0.0, xtend@~4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" - integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== - -"y18n@^3.2.1 || ^4.0.0": - version "4.0.0" - resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.0.tgz#95ef94f85ecc81d007c264e190a120f0a3c8566b" - integrity sha512-r9S/ZyXu/Xu9q1tYlpsLIsa3EeLXXk0VwlxqTcFRfg9EhMW+17kbt9G0NrgCmhGb5vT2hyhJZLfDGx+7+5Uj/w== - -y18n@^5.0.5: - version "5.0.5" - resolved "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz#8769ec08d03b1ea2df2500acef561743bbb9ab18" - integrity sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg== - -yallist@^2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" - integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= - -yallist@^3.0.0, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yaml@^1.5.0: - version "1.8.3" - resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.8.3.tgz#2f420fca58b68ce3a332d0ca64be1d191dd3f87a" - integrity sha512-X/v7VDnK+sxbQ2Imq4Jt2PRUsRsP7UcpSl3Llg6+NRRqWLIvxkMFYtH1FmvwNGYRKKPa+EPA4qDBlI9WVG1UKw== - dependencies: - "@babel/runtime" "^7.8.7" - -yapool@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/yapool/-/yapool-1.0.0.tgz#f693f29a315b50d9a9da2646a7a6645c96985b6a" - integrity sha1-9pPymjFbUNmp2iZGp6ZkXJaYW2o= - -yargs-parser@^10.0.0: - version "10.1.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-10.1.0.tgz#7202265b89f7e9e9f2e5765e0fe735a905edbaa8" - integrity sha512-VCIyR1wJoEBZUqk5PA+oOBF6ypbwh5aNB3I50guxAL/quggdfs4TtNHQrSazFA3fYZ+tEqfs0zIGlv0c/rgjbQ== - dependencies: - camelcase "^4.1.0" - -yargs-parser@^11.1.1: - version "11.1.1" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4" - integrity sha512-C6kB/WJDiaxONLJQnF8ccx9SEeoTTLek8RVbaOIsrAUS8VrBEXfmeSnCZxygc+XC2sNMBIwOOnfcxiynjHsVSQ== - dependencies: - camelcase "^5.0.0" - decamelize "^1.2.0" - -yargs-parser@^20.2.2: - version "20.2.4" - resolved "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.4.tgz#b42890f14566796f85ae8e3a25290d205f154a54" - integrity sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA== - -yargs@^12.0.1, yargs@^12.0.2, yargs@^12.0.5: - version "12.0.5" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-12.0.5.tgz#05f5997b609647b64f66b81e3b4b10a368e7ad13" - integrity sha512-Lhz8TLaYnxq/2ObqHDql8dX8CJi97oHxrjUcYtzKbbykPtVW9WB+poxI+NM2UIzsMgNCZTIf0AQwsjK5yMAqZw== - dependencies: - cliui "^4.0.0" - decamelize "^1.2.0" - find-up "^3.0.0" - get-caller-file "^1.0.1" - os-locale "^3.0.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 || ^4.0.0" - yargs-parser "^11.1.1" - -yargs@^16.1.1: - version "16.2.0" - resolved "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz#1c82bf0f6b6a66eafce7ef30e376f49a12477f66" - integrity sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw== - dependencies: - cliui "^7.0.2" - escalade "^3.1.1" - get-caller-file "^2.0.5" - require-directory "^2.1.1" - string-width "^4.2.0" - y18n "^5.0.5" - yargs-parser "^20.2.2" - -yauzl@^2.10.0, yauzl@^2.9.1: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk= - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yeast@0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/yeast/-/yeast-0.1.2.tgz#008e06d8094320c372dbc2f8ed76a0ca6c8ac419" - integrity sha1-AI4G2AlDIMNy28L47XagymyKxBk= - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==