diff --git a/.github/dependabot.yml b/.github/dependabot.yml new file mode 100644 index 0000000..9368f9f --- /dev/null +++ b/.github/dependabot.yml @@ -0,0 +1,13 @@ +# To get started with Dependabot version updates, you'll need to specify which +# package ecosystems to update and where the package manifests are located. +# Please see the documentation for all configuration options: +# https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates + +version: 2 +updates: + # Maintain dependencies for npm + - package-ecosystem: "npm" # See documentation for possible values + directory: "/" # Location of package manifests + schedule: + interval: "daily" + open-pull-requests-limit: 10 diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml new file mode 100644 index 0000000..2be092a --- /dev/null +++ b/.github/workflows/codeql-analysis.yml @@ -0,0 +1,70 @@ +# For most projects, this workflow file will not need changing; you simply need +# to commit it to your repository. +# +# You may wish to alter this file to override the set of languages analyzed, +# or to provide custom queries or build logic. +# +# ******** NOTE ******** +# We have attempted to detect the languages in your repository. Please check +# the `language` matrix defined below to confirm you have the correct set of +# supported CodeQL languages. +# +name: "CodeQL" + +on: + push: + branches: [ 'main', 'gh-pages' ] + # pull_request: + # The branches below must be a subset of the branches above + # branches: [ main ] + # schedule: + # - cron: '31 10 * * 3' + +jobs: + analyze: + name: Analyze + runs-on: ubuntu-latest + permissions: + actions: read + contents: read + security-events: write + + strategy: + fail-fast: false + matrix: + language: [ 'javascript' ] + # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] + # Learn more about CodeQL language support at https://git.io/codeql-language-support + + steps: + - name: Checkout repository + uses: actions/checkout@v3 + + # Initializes the CodeQL tools for scanning. + - name: Initialize CodeQL + uses: github/codeql-action/init@v2 + with: + languages: ${{ matrix.language }} + # If you wish to specify custom queries, you can do so here or in a config file. + # By default, queries listed here will override any specified in a config file. + # Prefix the list here with "+" to use these queries and those in the config file. + # queries: ./path/to/local/query, your-org/your-repo/queries@main + + # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). + # If this step fails, then you should remove it and run the build manually (see below) + - name: Autobuild + uses: github/codeql-action/autobuild@v2 + + # ℹ️ Command-line programs to run using the OS shell. + # 📚 https://git.io/JvXDl + + # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines + # and modify them (or add more) to build your code if your project + # uses a compiled language + + #- run: | + # make bootstrap + # make release + + - name: Perform CodeQL Analysis + uses: github/codeql-action/analyze@v2 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..84dfd1d --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +node_modules +canvas.bundle.min.js +:w +*~ +*.swp diff --git a/LICENSE.txt b/LICENSE.txt new file mode 100644 index 0000000..25022f1 --- /dev/null +++ b/LICENSE.txt @@ -0,0 +1,21 @@ +The MIT License (MIT) + +Copyright © 2022 Sitdisch + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in +all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +THE SOFTWARE. diff --git a/README.md b/README.md index f9ddbd6..7004f76 100644 --- a/README.md +++ b/README.md @@ -1 +1,239 @@ -# mtw-boilerplate-decks \ No newline at end of file +
+

MTW-BOILERPLATE-DECKS

+
+ +
+ + +
+Snyk Vulnerabilities
+ pending...
+Full Report: Last One
+
+
+ +This boilerplate allows you to develop quickly and easily WebGL-based visualizations of large datasets in deck canvas bundles. It has two modes. The result of production mode is a minimized bundle. You can embed this bundle on a website and then automatically update the deck's datasets continuously, for example. + +In development mode, the deck files are watched. This means, if you edit them and save your changes, the decks will be recompiled and reloaded immediately. Feel free to adapt the existing decks or create a completely new one. If you need inspiration, check out [deck.gl showcase](https://deck.gl/showcase "Go there") or [deck.gl examples](https://deck.gl/examples "Go there"). There you can see what's possible. E. g. Nicolas Belmonte's [Wind Map](https://medium.com/vis-gl/wind-map-a58575f87fe3 "Check it out") is really amazing. + +## | Deck Canvas Examples + +### [mtw-deck-flights](https://mythemeway.github.io/mtw-boilerplate-decks/mtw-deck-flights "Check it out") + + + +
+ +https://user-images.githubusercontent.com/54351917/174600720-2c307f38-73b0-43a1-a46c-ea7f1dedb90b.mp4 + +
+ +
+ +> * Note: moving, zooming and rotating is possible; airports are clickable; +> * Original Sources: [deck.gl website example | globe](https://github.com/visgl/deck.gl/tree/8.7-release/examples/website/globe "Check it out") and [deck.gl pure-js example | globe](https://github.com/visgl/deck.gl/tree/master/examples/get-started/pure-js/globe "Check it out") +> * Original Authors: [deck.gl contributors](https://github.com/visgl/deck.gl/graphs/contributors "Go there") +> * License & Copyright: [MIT ©️ 2020 Urban Computing Foundation](https://github.com/visgl/deck.gl/blob/master/LICENSE "Go there") +> * Changes: made + +Air Traffic Data Source + +> * Original Source: [Crowdsourced air traffic data from The OpenSky Network 2020 [CC-BY]](https://zenodo.org/record/4419082 "Check it out") +> * License: [CC BY 4.0](https://zenodo.org/record/4419082 "Check it out") +> * Credits: +> * Matthias Schäfer, Martin Strohmeier, Vincent Lenders, Ivan Martinovic and Matthias Wilhelm. "Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research". In Proceedings of the 13th IEEE/ACM International Symposium on Information Processing in Sensor Networks (IPSN), pages 83-94, April 2014. +> * Xavier Olive. "traffic, a toolbox for processing and analysing air traffic data." Journal of Open Source Software 4(39), July 2019. +> * Used Source: [deck.gl-data example | globe](https://github.com/visgl/deck.gl-data/tree/master/examples/globe "Check it out") + +Land & Airport Data Source + +> * Original Source: [Natural Earth](https://www.naturalearthdata.com/downloads/ "Check it out") +> * License: [Public Domain](https://www.naturalearthdata.com/about/terms-of-use/ "Check it out") +> * Used Source: [geojson-xyz](http://geojson.xyz/ "Check it out") + +### [mtw-deck-trips](https://mythemeway.github.io/mtw-boilerplate-decks/mtw-deck-trips "Check it out") + + + +
+ +https://user-images.githubusercontent.com/54351917/174600820-05bc8021-a73c-4cfe-bc9d-617a3d571d39.mp4 + +
+ +
+ +> * Note: moving, zooming and rotating is possible (e. g. hold down shift to rotate) +> * Original Source: [deck.gl website example | trips](https://github.com/visgl/deck.gl/tree/8.7-release/examples/website/trips "Check it out") +> * Original Authors: [deck.gl contributors](https://github.com/visgl/deck.gl/graphs/contributors "Go there") +> * License & Copyright: [MIT ©️ 2020 Urban Computing Foundation](https://github.com/visgl/deck.gl/blob/master/LICENSE "Go there") +> * Changes: made + +Boundaries & Roads Data Source + +> * Original Sources: [Borough Boundaries](https://data.cityofnewyork.us/City-Government/Borough-Boundaries/tqmj-j8zm "Check it out") and [NYC Street Centerline](https://data.cityofnewyork.us/City-Government/NYC-Street-Centerline-CSCL-for-PlowNYC-Winter-2016/uxpt-rzip "Check it out") via [NYC OpenData](https://opendata.cityofnewyork.us/ "Check it out") +> * License: [Public Domain / OpenData](https://opendata.cityofnewyork.us/overview/ "Check it out") +> * Credits: +> * [Department of City Planning (DCP)](https://www1.nyc.gov/site/planning/index.page "Check it out") +> * [Department of Information Technology & Telecommunications (DoITT)](https://www1.nyc.gov/site/doitt/index.page "Check it out") +> * Changes: data modified, minified & converted via [mapshaper](https://github.com/mbloch/mapshaper "Check it out") to use only area of interest data + +Trips Data Source + +> * Original Source: [NYC Taxi & Limousine Commission Trip Record Data](https://www1.nyc.gov/site/tlc/about/raw-data.page "Check it out") +> * License: [Public Domain / OpenData](https://opendata.cityofnewyork.us/overview/ "Check it out") +> * Credits: +> * [Taxi and Limousine Commission (TLC)](https://www1.nyc.gov/site/tlc/index.page "Check it out") +> * [Technology System Providers (TSP)](https://www1.nyc.gov/site/tlc/businesses/technology-system-provider-tsp.page "Check it out") +> * [Department of Information Technology & Telecommunications (DoITT)](https://www1.nyc.gov/site/doitt/index.page "Check it out") +> * Used Source: [deck.gl TripsLayer Example | trips.json](https://github.com/visgl/deck.gl-data/blob/master/examples/trips/trips.json "Check it out") via [deck.gl-data](https://github.com/visgl/deck.gl-data "Check it out") +> * License & Copyright: [MIT ©️ 2017 Uber Technologies, Inc.](https://github.com/visgl/deck.gl-data/blob/master/LICENSE "Check it out") +> * Credit: [deck.gl-data contributors](https://github.com/visgl/deck.gl-data/graphs/contributors "Check it out") +> * Changes: data modified and minified to use only area of interest data + +Buildings Data Source + +> * Original Source: [OpenStreetMap](https://www.openstreetmap.org/#map=15/40.7067/-74.0106&layers=Y "Check it out") via [Mapzen Vector Tiles API](https://www.mapzen.com/projects/vector-tiles/ "Check it out") +> * License & Copyright: [ODbL © OpenStreetMap contributors](https://www.openstreetmap.org/copyright "Check it out") +> * Credits: +> * [OpenStreetMap contributors](https://wiki.openstreetmap.org/wiki/Contributors "Check it out") +> * [Mapzen](https://www.mapzen.com/ "Check it out") +> * Used Source: [deck.gl TripsLayer Example | buildings.json](https://github.com/visgl/deck.gl-data/blob/master/examples/trips/buildings.json "Check it out") via [deck.gl-data](https://github.com/visgl/deck.gl-data "Check it out") +> * License & Copyright: [MIT ©️ 2017 Uber Technologies, Inc.](https://github.com/visgl/deck.gl-data/blob/master/LICENSE "Check it out") +> * Credit: [deck.gl-data contributors](https://github.com/visgl/deck.gl-data/graphs/contributors "Check it out") + +## | Feature Overview + +### [Branch: main](https://github.com/MyThemeWay/mtw-boilerplate-decks/tree/main "Check it out") + +Node.js +esbuild +deck.gl +terser + +### Note: +> * Badges are clickable and linked to their sources. + +

Additional Feature Information:

+
+ + + +
[click to toggle] + + + +

+
+ +> Note: Cards are clickable and linked to the corresponding GitHub repositories. + +## | Setup + +To enable local operation of this boilerplate, you can do the following: + +1. open your terminal and define your shell `MYSHELL` and startup file `MYSTARTUPFILE` in use + * e. g. for [Zsh](https://www.zsh.org/ "Go there") + ```bash + MYSHELL="zsh" + MYSTARTUPFILE=".zshrc" + ``` + * or for pure [Bash](https://www.gnu.org/software/bash/ "Go there") + ```bash + MYSHELL="bash" + MYSTARTUPFILE=".bashrc" # or .bash_profile for macOS + ``` +2. install [nvm](https://github.com/nvm-sh/nvm "Go there") and source your startup file again + ```bash + curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.1/install.sh | $MYSHELL + source ~/$MYSTARTUPFILE + ``` +3. if your terminal has closed, open it again and continue +4. execute nvm install --lts to install [Node.js](https://nodejs.org/en/ "Go there") +5. clone the repository `git clone https://github.com/mythemeway/mtw-boilerplate-decks` or your fork to your local machine +6. change your current directory to mtw-boilerplate-decks `cd mtw-boilerplate-decks` +7. run `npm install` + +> Note: If you've already installed Node.js LTS you only have to do steps 5-7. + +That's it. + +## | Boilerplate Usage + +### Run Development Mode + +Go to the mtw-boilerplate-decks directory on your local machine and execute `npm start`. The result will appear at e. g. `http://localhost:8080`. + +### Run Production Mode + +There are two ways to get your minimized bundle. + +Way 1: `npm run build` = without [terser](https://github.com/terser/terser "Check it out") [default] [faster] + +Way 2: `npm run terser` = with [terser](https://github.com/terser/terser "Check it out") additionally [smaller] + +> Note: output directory is always `~/mtw-boilerplate-decks/dist` + +### Embed Deck + +```html +
+ +
+ +``` + +> Note: WebGL canvases can make your CPU sweat. For the environment, stop the requestAnimationFrame loop when the canvas isn't visible #GreenCoding. See my [website-boilerplate](https://github.com/MyThemeWay/Dark-Particle/blob/master/src/canvas/mtw-canvas-disks/main.js "Check it out") for an example. + +### Switch Deck +1. open `~/mtw-boilerplate-decks/canvas.config.js` +2. change `const canvas` and save it + ```js + // + // CANVAS SETTINGS + // - path: path to canvas + // - id: canvas id attribute + // + + // const canvas = { path: './src/mtw-deck-flights.js', id: 'mtw-canvas' }; + const canvas = { path: './src/mtw-deck-trips.js', id: 'mtw-canvas' }; + + module.exports = canvas; + ``` + +### Add Deck + +1. put `mtw-deck-new.js` into the `~/mtw-boilerplate-decks/src/...` directory +2. follow the switch deck procedure + ```js + // + // CANVAS SETTINGS + // - path: path to canvas + // - id: canvas id attribute + // + + // const canvas = { path: './src/mtw-deck-flights.js', id: 'mtw-canvas' }; + // const canvas = { path: './src/mtw-deck-trips.js', id: 'mtw-canvas' }; + const canvas = { path: './src/mtw-deck-new.js', id: 'new-canvas' }; + + module.exports = canvas; + ``` + +### Note: +> * your canvas id attribute setting is only used in production mode; in development mode it is always the default `mtw-canvas` +> * if you switch/add a Deck in development mode, the result is displayed immediately after saving your changes + +## | Appendix +### Note on protected brand names and logos +> * The use of protected brand names, trade names, utility models and brand logos on this website does not constitute an infringement of copyright; rather, it serves as an illustrative note. Even if this is not marked as such at the respective points, the corresponding legal provisions always apply. +> * The brand names and logos used are the property of their respective owners and are subject to their copyright provisions. +> * This offer is in no way related to the legal entities of the protected brand names and logos used. + +### Note on liability for links +> * This README contains links to external third-party websites. The README operator has no influence on the content of these sites. Therefore, he cannot assume any liability. Instead, the respective provider is always responsible for the content. +> * The linked pages were checked for possible legal violations at the time of linking and illegal content wasn't discernible. A permanent control of the linked pages is unreasonable without concrete evidence of an infringement. However, if the README operator becomes aware of such a violation, he will act immediately. + +### Readme uses +> * [GitHub Readme Stats](https://github.com/anuraghazra/github-readme-stats "Check it out") [License: [MIT](https://github.com/anuraghazra/github-readme-stats/blob/master/LICENSE "Go there"); Copyright: ©️ 2021 Anurag Hazra] +> * [Simple Icons](https://simpleicons.org/ "Check it out") [License: [CC0 1.0](https://github.com/simple-icons/simple-icons/blob/develop/LICENSE.md "Go there")] +> * [Shields.io](https://github.com/badges/shields "Check it out") [License: [CC0 1.0](https://github.com/badges/shields/blob/master/LICENSE "Go there")] diff --git a/canvas.config.js b/canvas.config.js new file mode 100644 index 0000000..9a36dd5 --- /dev/null +++ b/canvas.config.js @@ -0,0 +1,18 @@ +/*! MTW-BOILERPLATE-DECKS: CANVAS.CONFIG.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright © 2022 sitdisch + */ + +// +// CANVAS SETTINGS +// - path: path to canvas +// - id: canvas id attribute +// + +const canvas = { path: './src/mtw-deck-flights.js', id: 'mtw-canvas' }; +// const canvas = { path: './src/mtw-deck-trips.js', id: 'mtw-canvas' }; + +module.exports = canvas; diff --git a/dev.config.js b/dev.config.js new file mode 100644 index 0000000..89bb532 --- /dev/null +++ b/dev.config.js @@ -0,0 +1,177 @@ +/*! MTW-BOILERPLATE-DECKS: DEV.CONFIG.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright © 2022 sitdisch + */ + +const { build, analyzeMetafile } = require('esbuild'); +const { get, createServer } = require('http'); + +console.log("[\x1b[90mesbuild\x1b[0m]: starting `\x1b[36mdevelopment-mode\x1b[0m`...\n"); + +var canvas = require('./canvas.config.js'); +var canvasBundle, address, servLog = ''; + +const clients = []; +const addErrDiv = ` + document.getElementById('mtw-canvas').style.display = 'none'; + document.body.innerHTML += '
[ERROR] Hm... something went wrong

Check your terminal for more information about the 🐛
'; +`; + +async function buildCmd() { + return build({ + entryPoints: [`${canvas.path}`], + outfile: './canvas.bundle.js', + logLevel: 'info', + bundle: true, + write: false, + metafile: true, + define: { MTW_CANVAS_ID: '"mtw-canvas"' }, + + watch: { + onRebuild(err, result) { + if (!(err)) buildThen(result) + else { + toClients(addErrDiv); + console.log(servLog); + } + }, + }, + }); +} + +async function buildThen(result) { + buildResult = result; + analyzeMetafile(result.metafile).then(msg => + console.log(msg+servLog) + ); + toClients(result.outputFiles[0].text) +} + +function toClients(data) { + get(address, () => { + canvasBundle = data; + }).end(); + + clients.forEach(res => res.end("data: reload\n\n")); + clients.length = 0; +} + +async function setListen(tryPort) { + const tryServer = createServer().listen(tryPort, () => + tryServer.close().on('close', () => server.listen(tryPort))) + .on('error', err => { + if (err.code === 'EADDRINUSE') { + tryServer.close().on('close', () => setListen(tryPort+1)); + return; + } else throw err; + }) +}; + +const server = createServer((req, res) => { + req.on('error', err => { + if (err.code != 'ECONNRESET') { + console.error(err); + res.statusCode = 400; + res.end('400: Bad Request'); + return; + } + }); + + res.on('error', err => console.error(err)); + + switch (req.url) { + case '/': + res.writeHead(200, { + 'Content-Type': 'text/html; charset=utf-8' + }); + res.end(` + + + + + + mtw-boilerplate-decks + + + +
+ +
+ + + + + `) + break; + + case '/canvas.bundle.js': + res.writeHead(200, { + 'Content-Type': 'text/javascript; charset=utf-8', + }); + res.end(canvasBundle); + break; + + case '/events': + clients.push( + res.writeHead(200, { + 'Content-Type': 'text/event-stream', + 'Cache-Control': 'no-cache', + 'Connection': 'keep-alive' + }) + ); + break; + + default: + res.statusCode = 404; + res.end('404: Resource Not Found'); + }; +}); + +setListen(8080); + +var buildResult = buildCmd(); + +server.on('listening', () => { + address ='http://localhost:'+server.address().port+'/'; + servLog = "\n server: \x1b[1;36m"+address+"\x1b[0m\n exit: \x1b[35mctrl-c\x1b[0m\n"; + buildResult.then(result => buildThen(result)); +}); + +build({ + entryPoints: ['./canvas.config.js'], + write: false, + watch: { + onRebuild() { + buildResult.stop(); + delete require.cache[require.resolve('./canvas.config.js')]; + + try { + canvas = require('./canvas.config.js'); + } catch (err) { + toClients(addErrDiv); + throw err; + } + + console.log('[watch] build started (change: "canvas.config.js")'); + buildCmd().then(result => buildThen(result)); + }, + }, +}); diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..43d2fe9 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,2388 @@ +{ + "name": "mtw-boilerplate-decks", + "version": "0.0.1", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "mtw-boilerplate-decks", + "version": "0.0.1", + "license": "MIT", + "dependencies": { + "@deck.gl/core": "8.7.11", + "@deck.gl/geo-layers": "8.7.11", + "@deck.gl/layers": "8.7.11", + "@deck.gl/mesh-layers": "8.7.11", + "@loaders.gl/csv": "3.2.4", + "esbuild": "0.14.47", + "terser": "5.14.1" + } + }, + "node_modules/@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "dependencies": { + "regenerator-runtime": "^0.13.4" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@deck.gl/core": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.7.11.tgz", + "integrity": "sha512-zTAjbU2lJ5/LjxLLIA6vFquIqd16uY/Xe2Y3J84YmCxOeFWx7khX8n9s42bfi2mXK+ygx8sqRfhHjReFArg3bA==", + "dependencies": { + "@loaders.gl/core": "^3.1.5", + "@loaders.gl/images": "^3.1.5", + "@luma.gl/constants": "^8.5.10", + "@luma.gl/core": "^8.5.10", + "@math.gl/core": "^3.5.7", + "@math.gl/web-mercator": "^3.5.7", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "gl-matrix": "^3.0.0", + "math.gl": "^3.5.7", + "mjolnir.js": "^2.5.0" + } + }, + "node_modules/@deck.gl/extensions": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.7.11.tgz", + "integrity": "sha512-/kW3D/PuynJUB9YS7So+iia+3YjYm5ziWf/yCwSbLu/cfflJ5Y29qlBcznkjJGriFPkHB7y0ZJiYMItG6DTjrw==", + "peer": true, + "dependencies": { + "@luma.gl/shadertools": "^8.5.10" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "gl-matrix": "^3.0.0" + } + }, + "node_modules/@deck.gl/geo-layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.7.11.tgz", + "integrity": "sha512-mCcP/CeXC9aavMHwecwKde2PlMoOu6IsOmYUuGtcQlN+xhZ5gQ460KrBpmjCLQv/W503DrjuHOqffgeNYIRkog==", + "dependencies": { + "@loaders.gl/3d-tiles": "^3.1.5", + "@loaders.gl/gis": "^3.1.5", + "@loaders.gl/loader-utils": "^3.1.5", + "@loaders.gl/mvt": "^3.1.5", + "@loaders.gl/terrain": "^3.1.5", + "@loaders.gl/tiles": "^3.1.5", + "@luma.gl/experimental": "^8.5.10", + "@math.gl/core": "^3.5.7", + "@math.gl/culling": "^3.5.7", + "@math.gl/web-mercator": "^3.5.7", + "h3-js": "^3.6.0", + "long": "^3.2.0" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@deck.gl/extensions": "^8.0.0", + "@deck.gl/layers": "^8.0.0", + "@deck.gl/mesh-layers": "^8.0.0", + "@loaders.gl/core": "^3.0.0" + } + }, + "node_modules/@deck.gl/layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.7.11.tgz", + "integrity": "sha512-uO4Y+7D8iobcpVaFJkH8NxtdHw393U5qItN466iCUQKziFqCNRxokkchQmenrUrY4hn+jb5CMFh/otehPV1Grg==", + "dependencies": { + "@loaders.gl/images": "^3.1.5", + "@mapbox/tiny-sdf": "^1.1.0", + "@math.gl/polygon": "^3.5.7", + "earcut": "^2.0.6" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0", + "@loaders.gl/core": "^3.1.5" + } + }, + "node_modules/@deck.gl/mesh-layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.7.11.tgz", + "integrity": "sha512-JaM6ACcx+ljE/gRnYePwhhoX+0ETCcjJGBDEw4qbDfVnaO2cUoMYo1hi8UhQD0gX9n05Jkmj+Ubnua0cCpJ3Ig==", + "dependencies": { + "@loaders.gl/gltf": "^3.1.5", + "@luma.gl/constants": "^8.5.10", + "@luma.gl/core": "^8.5.10", + "@luma.gl/experimental": "^8.5.10", + "@luma.gl/shadertools": "^8.5.10" + }, + "peerDependencies": { + "@deck.gl/core": "^8.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "dependencies": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "node_modules/@loaders.gl/3d-tiles": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.2.4.tgz", + "integrity": "sha512-qEY1QgBIiRHZYBYWbSGHcSuyKLXbHDS08IYgNkKmGdrdX+rgt73ucgQpIyhjQCA7lxJUF5xewYXEYljvPRVOdw==", + "dependencies": { + "@loaders.gl/draco": "3.2.4", + "@loaders.gl/gltf": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/math": "3.2.4", + "@loaders.gl/tiles": "3.2.4", + "@math.gl/core": "^3.5.1", + "@math.gl/geospatial": "^3.5.1" + }, + "peerDependencies": { + "@loaders.gl/core": "^3.2.0" + } + }, + "node_modules/@loaders.gl/core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.2.4.tgz", + "integrity": "sha512-SFBw6p8WXUGn8fgpMaGVqTq2nabu5ILJKzr0Q0muN8ESnOpzsdRzI6aXw8Ip8YCerqjklXnuB0Lqeu34odalNw==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "@probe.gl/log": "^3.5.0", + "probe.gl": "^3.4.0" + } + }, + "node_modules/@loaders.gl/csv": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/csv/-/csv-3.2.4.tgz", + "integrity": "sha512-aaT886ttZv9HWM0D4s5bHaxoqU94bdgN22qHxuUaWRwxgG7JpVtZweDHzUJ1HjxZsFqfCIHhoxDyPCUkk9jJHg==", + "dependencies": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4" + } + }, + "node_modules/@loaders.gl/draco": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.2.4.tgz", + "integrity": "sha512-cagaHY5I1TSBPOUyQS0ZWgLtMqd+Dnx9wUzduAxLXEVBNHIS2kuG/FXJa/vZFHI79++ZG48BnbmDo05ZVUd4GA==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "draco3d": "1.4.1" + } + }, + "node_modules/@loaders.gl/gis": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.2.4.tgz", + "integrity": "sha512-8QV/Hcgrurp6BYrXqsAJJzqScpdkCk0B5iq3k7fsleUzeTZvnYNpO2fu745CZ/l6mD/YhKnFj9R4ZX7DojmJwA==", + "dependencies": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^3.5.1", + "pbf": "^3.2.1" + } + }, + "node_modules/@loaders.gl/gltf": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.2.4.tgz", + "integrity": "sha512-rMSYzdvFiSpM+bG0R5C5uQN0MjR9Tf72laH6N+C5sj9QpZ/vqJfo+7Lmbz/QcR/oFgglTf5h/IkNHSFqIW8mkA==", + "dependencies": { + "@loaders.gl/draco": "3.2.4", + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/textures": "3.2.4" + } + }, + "node_modules/@loaders.gl/images": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.2.4.tgz", + "integrity": "sha512-/uG1SLRvr93pZSY39xrwe3fIESMIF5ahLDcPRHXjA+BoQ+KvHAsiZV+6sb+HAMWTThntLfRND6nBan+gofjKQA==", + "dependencies": { + "@loaders.gl/loader-utils": "3.2.4" + } + }, + "node_modules/@loaders.gl/loader-utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.2.4.tgz", + "integrity": "sha512-FwWgQztK5l0Gn7UaIq1LzSKo4751XY1SlQGxibczxRbkwfpbgyCn9yAyJy59HxcqZboYzXi+mrVr7yxLTYAIQg==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/worker-utils": "3.2.4", + "@probe.gl/stats": "^3.5.0" + } + }, + "node_modules/@loaders.gl/math": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.2.4.tgz", + "integrity": "sha512-E0JW4wii2aV6a6tUfpBHFOksZfFgOWWIaGA2TGYaDVV/3D4VK3tJmzfCs9C/OapXivUQbTC4Ktc2Btwj3clKuA==", + "dependencies": { + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@math.gl/core": "^3.5.1" + } + }, + "node_modules/@loaders.gl/mvt": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.2.4.tgz", + "integrity": "sha512-G9oS/E/9Ft/EJVKq3cMRI1VGCi1e90zz8cRT5jIPtMQyuT+++DKNGOTYiLXNSuT+l7BLWs13W6tNreJOgIxQlQ==", + "dependencies": { + "@loaders.gl/gis": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@math.gl/polygon": "^3.5.1", + "pbf": "^3.2.1" + } + }, + "node_modules/@loaders.gl/schema": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.2.4.tgz", + "integrity": "sha512-zw1tv6BGI7zLk6LSm6DssEx3VP4nKXzp6JzMPdPVwkSQKaWfkhK+7Syuz9kSCzUWJrhq3H5QslMobV8phlQl+Q==", + "dependencies": { + "@types/geojson": "^7946.0.7", + "apache-arrow": "^4.0.0" + } + }, + "node_modules/@loaders.gl/terrain": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.2.4.tgz", + "integrity": "sha512-+41KWTn/wm62U+7Nx73tHn1PU8XHUIFK700Diq+VJaien+lbdhIRcqwgQV4NXRjxI/7p1yKn9+YNMGtN08diyA==", + "dependencies": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@mapbox/martini": "^0.2.0" + } + }, + "node_modules/@loaders.gl/textures": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.2.4.tgz", + "integrity": "sha512-O0/Ogem6WlGsNNeVrcvTjNu6bAK7h5ItFkUdsshJa8mhEI0k7ruML0VLh1MIretMpln6BHHYv1Rh5FGvZ74L9Q==", + "dependencies": { + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "ktx-parse": "^0.0.4", + "texture-compressor": "^1.0.2" + } + }, + "node_modules/@loaders.gl/tiles": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.2.4.tgz", + "integrity": "sha512-BHMIAdwvHEDKe3DZmKbtZzXuqIDjAj/XwXuMnH1tlHqScNVOXDaqFGYJ7X9mzSMZ91hEpKh1f7LMllfLekd3Ng==", + "dependencies": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/math": "3.2.4", + "@math.gl/core": "^3.5.1", + "@math.gl/culling": "^3.5.1", + "@math.gl/geospatial": "^3.5.1", + "@math.gl/web-mercator": "^3.5.1", + "@probe.gl/stats": "^3.5.0" + }, + "peerDependencies": { + "@loaders.gl/core": "^3.2.0" + } + }, + "node_modules/@loaders.gl/worker-utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.2.4.tgz", + "integrity": "sha512-gGy8+LiyoxfahCgldYDCgXAUXsC3eBkVGqLrqU759+1y/sw3S+vJzZ2Vwpt8lB7+0LEaJ7gLNnGD+x2LekvO+A==", + "dependencies": { + "@babel/runtime": "^7.3.1" + } + }, + "node_modules/@luma.gl/constants": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.14.tgz", + "integrity": "sha512-GPZlnOpXLnW4fkER/sOSlXEZl+uwovvMlSPpEdofIHdNxG4oOdZlDuLc5K+NAJ9Fm+3AbDfCOihcA6WOsVuT5Q==" + }, + "node_modules/@luma.gl/core": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.14.tgz", + "integrity": "sha512-YgXxWzBNnoIuo6BTsJdK9tfFBWSzmhqeCGsbGMOVimSRXNMDBXATDL5c/J8pkVSbphjhk5aSOmhUC7C5WzKKYQ==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/engine": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@luma.gl/shadertools": "8.5.14", + "@luma.gl/webgl": "8.5.14" + } + }, + "node_modules/@luma.gl/engine": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.14.tgz", + "integrity": "sha512-Dr05gfmHo2Zla0bejxaw+Zhjo1OwzGuUwwzXg/M4TE5U8YyC+mUMtIKcFILfMMEZxhZuWPU6jTDhvfHTIp+3xA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@luma.gl/shadertools": "8.5.14", + "@luma.gl/webgl": "8.5.14", + "@math.gl/core": "^3.5.0", + "@probe.gl/env": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0", + "probe.gl": "^3.4.0" + } + }, + "node_modules/@luma.gl/experimental": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.14.tgz", + "integrity": "sha512-OEng25f6VZh1q4L+F8W+DjhxzTCOZG5sDaFN4bZiAIA/MPdxzO6+nveCOetuQtaR/RpkslBF22eXp4OccR/qaA==", + "dependencies": { + "@luma.gl/constants": "8.5.14", + "@math.gl/core": "^3.5.0", + "earcut": "^2.0.6" + }, + "peerDependencies": { + "@loaders.gl/gltf": "^3.0.0", + "@loaders.gl/images": "^3.0.0", + "@luma.gl/engine": "^8.4.0", + "@luma.gl/gltools": "^8.4.0", + "@luma.gl/shadertools": "^8.4.0", + "@luma.gl/webgl": "^8.4.0" + } + }, + "node_modules/@luma.gl/gltools": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.14.tgz", + "integrity": "sha512-ra8fSpkvIdaaBpD/zNryVYgYDRGNhStACIavM5wB5Gp3KVBbvUZWRl8a8YxRnv6MLWvBoEXnX7Dl7NmfWp6FPA==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@probe.gl/env": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0", + "probe.gl": "^3.4.0" + } + }, + "node_modules/@luma.gl/shadertools": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.14.tgz", + "integrity": "sha512-vq0XzMYzGM/A/usNvCzfWJw+ycN2vzqN4AtgrejrOrYu+6yP8LmfRp/iAxjhFkukCPgs03tUFYSlkY7I6HIVtw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@math.gl/core": "^3.5.0" + } + }, + "node_modules/@luma.gl/webgl": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.14.tgz", + "integrity": "sha512-8FT9bm6k6XktETcL80AxmLGm27xWbQJYWjsHYjB4cP+PdePNnNQXNYrDN0WX7jKLECSgWIcaQ38O7itD9jACCw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@probe.gl/env": "^3.5.0", + "probe.gl": "^3.4.0" + } + }, + "node_modules/@mapbox/martini": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/martini/-/martini-0.2.0.tgz", + "integrity": "sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==" + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "node_modules/@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==" + }, + "node_modules/@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==", + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@math.gl/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.0.tgz", + "integrity": "sha512-ZDgNC8iuP2qnG84kjiNKszugKvNHdp5iiiTQUwRPNxOY3qQ7Tw0WfoppCdUfrUdGaa7HEOXbnbJoy9Qnf/M1uQ==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "node_modules/@math.gl/culling": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.6.0.tgz", + "integrity": "sha512-IBDQV3k0D54q3vHdAyJkdiTsZJIaWiPczHF1hfykeM5Lj3jtPmpyyhZMsea8yQeeJeacZ7//ZuMMUeqrEuhdxA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/core": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "node_modules/@math.gl/geospatial": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/geospatial/-/geospatial-3.6.0.tgz", + "integrity": "sha512-YSTBOuRksW9lO0BrfFbdfwBbu5SXalfTVni28LLIYsD3u+DYhYnQ/27PYpyfsyTJ364un4zmCo6DLCyjFUpOzA==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "@math.gl/core": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "node_modules/@math.gl/polygon": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.0.tgz", + "integrity": "sha512-YCuz+oBQ94Bwccma15GKLY3j05pt4GPIYayA4taPmqxyGzM/C6TRDB9vUo2paqYyXjpIGzIEfoxh8HC7k5Drtg==", + "dependencies": { + "@math.gl/core": "3.6.0" + } + }, + "node_modules/@math.gl/types": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.0.tgz", + "integrity": "sha512-+rwOg8XFs9UNfVCoHw9S8cooJ3f4eWmSffR2yeAcLHwS24dcC1N1fgEUaigR5U21wG5EtSfECMr3lOzP4nfBeA==" + }, + "node_modules/@math.gl/web-mercator": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.0.tgz", + "integrity": "sha512-C9X1NUd6pA3G2g8CFDhi2a1UzsjFNljHl6a1cZ0qQkGMCpjRctHYpjQA1fJ/A+r7vgAxXvMf3EcY5odDOHeS6A==", + "dependencies": { + "@babel/runtime": "^7.12.0", + "gl-matrix": "^3.4.0" + } + }, + "node_modules/@probe.gl/env": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.5.0.tgz", + "integrity": "sha512-YdlpZZshhyYxvWDBmZ5RIW2pTR14Pw4p9czMlt/v7F6HbFzWfAdmH7q6xVwFRYxUpQLwhWensWyv4aFysiWl4g==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@probe.gl/log": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.5.0.tgz", + "integrity": "sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0" + } + }, + "node_modules/@probe.gl/stats": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.5.0.tgz", + "integrity": "sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==", + "dependencies": { + "@babel/runtime": "^7.0.0" + } + }, + "node_modules/@types/flatbuffers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", + "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" + }, + "node_modules/@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, + "node_modules/@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "node_modules/@types/node": { + "version": "14.18.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + }, + "node_modules/@types/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" + }, + "node_modules/acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/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==", + "dependencies": { + "color-convert": "^1.9.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/apache-arrow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", + "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", + "dependencies": { + "@types/flatbuffers": "^1.10.0", + "@types/node": "^14.14.37", + "@types/text-encoding-utf-8": "^1.0.1", + "command-line-args": "5.1.1", + "command-line-usage": "6.1.1", + "flatbuffers": "1.12.0", + "json-bignum": "^0.0.3", + "pad-left": "^2.1.0", + "text-encoding-utf-8": "^1.0.2", + "tslib": "^2.2.0" + }, + "bin": { + "arrow2csv": "bin/arrow2csv.js" + } + }, + "node_modules/argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dependencies": { + "sprintf-js": "~1.0.2" + } + }, + "node_modules/array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==", + "engines": { + "node": ">=6" + } + }, + "node_modules/buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "node_modules/chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "dependencies": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/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==", + "dependencies": { + "color-name": "1.1.3" + } + }, + "node_modules/color-name": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", + "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "node_modules/command-line-args": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", + "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "dependencies": { + "array-back": "^3.0.1", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "dependencies": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/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==" + }, + "node_modules/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==", + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/draco3d": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.4.1.tgz", + "integrity": "sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==" + }, + "node_modules/earcut": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", + "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==" + }, + "node_modules/esbuild": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", + "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "esbuild-android-64": "0.14.47", + "esbuild-android-arm64": "0.14.47", + "esbuild-darwin-64": "0.14.47", + "esbuild-darwin-arm64": "0.14.47", + "esbuild-freebsd-64": "0.14.47", + "esbuild-freebsd-arm64": "0.14.47", + "esbuild-linux-32": "0.14.47", + "esbuild-linux-64": "0.14.47", + "esbuild-linux-arm": "0.14.47", + "esbuild-linux-arm64": "0.14.47", + "esbuild-linux-mips64le": "0.14.47", + "esbuild-linux-ppc64le": "0.14.47", + "esbuild-linux-riscv64": "0.14.47", + "esbuild-linux-s390x": "0.14.47", + "esbuild-netbsd-64": "0.14.47", + "esbuild-openbsd-64": "0.14.47", + "esbuild-sunos-64": "0.14.47", + "esbuild-windows-32": "0.14.47", + "esbuild-windows-64": "0.14.47", + "esbuild-windows-arm64": "0.14.47" + } + }, + "node_modules/esbuild-android-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", + "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-android-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", + "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", + "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-darwin-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", + "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", + "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-freebsd-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", + "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", + "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", + "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", + "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", + "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-mips64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", + "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-ppc64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", + "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-riscv64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", + "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-linux-s390x": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", + "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-netbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", + "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-openbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", + "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-sunos-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", + "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", + "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", + "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/esbuild-windows-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", + "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "dependencies": { + "array-back": "^3.0.1" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/flatbuffers": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", + "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "node_modules/h3-js": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/h3-js/-/h3-js-3.7.2.tgz", + "integrity": "sha512-LPjlHSwB9zQZrMqKloCZmmmt3yZzIK7nqPcXqwU93zT3TtYG6jP4tZBzAPouxut7lLjdFbMQ75wRBiKfpsnY7w==", + "engines": { + "node": ">=4", + "npm": ">=3", + "yarn": ">=1.3.0" + } + }, + "node_modules/hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==", + "engines": { + "node": ">=0.8.0" + } + }, + "node_modules/has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", + "engines": { + "node": ">=4" + } + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==", + "bin": { + "image-size": "bin/image-size.js" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/json-bignum": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", + "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", + "engines": { + "node": ">=0.8" + } + }, + "node_modules/ktx-parse": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", + "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "node_modules/long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/math.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.0.tgz", + "integrity": "sha512-iQMoZlCf2IGtOCTBMr/XFBJY3TT7X25hXs5NtNdG1w3//GK0OxPHioaVHAprEAny/pkPtoSfjEQZRp6tLRIqEg==", + "dependencies": { + "@math.gl/core": "3.6.0" + } + }, + "node_modules/mjolnir.js": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.0.tgz", + "integrity": "sha512-XlK5OZ7d09eAIdYr+5VKOArYtkWB/f306s34yVij4pBk5wnaKxSrD7fVfP8/BL27nKVylNweqP1pxqh8h+hWKw==", + "dependencies": { + "@types/hammerjs": "^2.0.41", + "hammerjs": "^2.0.8" + }, + "engines": { + "node": ">= 4", + "npm": ">= 3" + } + }, + "node_modules/pad-left": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", + "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", + "dependencies": { + "repeat-string": "^1.5.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/probe.gl": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.5.0.tgz", + "integrity": "sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==", + "dependencies": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0", + "@probe.gl/log": "3.5.0", + "@probe.gl/stats": "3.5.0" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "node_modules/reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==", + "engines": { + "node": ">=6" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "node_modules/repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/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==", + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "node_modules/sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "node_modules/supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "dependencies": { + "has-flag": "^3.0.0" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "dependencies": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "dependencies": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "node_modules/texture-compressor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", + "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "dependencies": { + "argparse": "^1.0.10", + "image-size": "^0.7.4" + }, + "bin": { + "texture-compressor": "bin/texture-compressor.js" + } + }, + "node_modules/tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "node_modules/typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "dependencies": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==", + "engines": { + "node": ">=8" + } + } + }, + "dependencies": { + "@babel/runtime": { + "version": "7.18.3", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.18.3.tgz", + "integrity": "sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug==", + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@deck.gl/core": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/core/-/core-8.7.11.tgz", + "integrity": "sha512-zTAjbU2lJ5/LjxLLIA6vFquIqd16uY/Xe2Y3J84YmCxOeFWx7khX8n9s42bfi2mXK+ygx8sqRfhHjReFArg3bA==", + "requires": { + "@loaders.gl/core": "^3.1.5", + "@loaders.gl/images": "^3.1.5", + "@luma.gl/constants": "^8.5.10", + "@luma.gl/core": "^8.5.10", + "@math.gl/core": "^3.5.7", + "@math.gl/web-mercator": "^3.5.7", + "@probe.gl/env": "^3.5.0", + "@probe.gl/log": "^3.5.0", + "@probe.gl/stats": "^3.5.0", + "gl-matrix": "^3.0.0", + "math.gl": "^3.5.7", + "mjolnir.js": "^2.5.0" + } + }, + "@deck.gl/extensions": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/extensions/-/extensions-8.7.11.tgz", + "integrity": "sha512-/kW3D/PuynJUB9YS7So+iia+3YjYm5ziWf/yCwSbLu/cfflJ5Y29qlBcznkjJGriFPkHB7y0ZJiYMItG6DTjrw==", + "peer": true, + "requires": { + "@luma.gl/shadertools": "^8.5.10" + } + }, + "@deck.gl/geo-layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/geo-layers/-/geo-layers-8.7.11.tgz", + "integrity": "sha512-mCcP/CeXC9aavMHwecwKde2PlMoOu6IsOmYUuGtcQlN+xhZ5gQ460KrBpmjCLQv/W503DrjuHOqffgeNYIRkog==", + "requires": { + "@loaders.gl/3d-tiles": "^3.1.5", + "@loaders.gl/gis": "^3.1.5", + "@loaders.gl/loader-utils": "^3.1.5", + "@loaders.gl/mvt": "^3.1.5", + "@loaders.gl/terrain": "^3.1.5", + "@loaders.gl/tiles": "^3.1.5", + "@luma.gl/experimental": "^8.5.10", + "@math.gl/core": "^3.5.7", + "@math.gl/culling": "^3.5.7", + "@math.gl/web-mercator": "^3.5.7", + "h3-js": "^3.6.0", + "long": "^3.2.0" + } + }, + "@deck.gl/layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/layers/-/layers-8.7.11.tgz", + "integrity": "sha512-uO4Y+7D8iobcpVaFJkH8NxtdHw393U5qItN466iCUQKziFqCNRxokkchQmenrUrY4hn+jb5CMFh/otehPV1Grg==", + "requires": { + "@loaders.gl/images": "^3.1.5", + "@mapbox/tiny-sdf": "^1.1.0", + "@math.gl/polygon": "^3.5.7", + "earcut": "^2.0.6" + } + }, + "@deck.gl/mesh-layers": { + "version": "8.7.11", + "resolved": "https://registry.npmjs.org/@deck.gl/mesh-layers/-/mesh-layers-8.7.11.tgz", + "integrity": "sha512-JaM6ACcx+ljE/gRnYePwhhoX+0ETCcjJGBDEw4qbDfVnaO2cUoMYo1hi8UhQD0gX9n05Jkmj+Ubnua0cCpJ3Ig==", + "requires": { + "@loaders.gl/gltf": "^3.1.5", + "@luma.gl/constants": "^8.5.10", + "@luma.gl/core": "^8.5.10", + "@luma.gl/experimental": "^8.5.10", + "@luma.gl/shadertools": "^8.5.10" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.1.tgz", + "integrity": "sha512-GcHwniMlA2z+WFPWuY8lp3fsza0I8xPFMWL5+n8LYyP6PSvPrXf4+n8stDHZY2DM0zy9sVkRDy1jDI4XGzYVqg==", + "requires": { + "@jridgewell/set-array": "^1.0.0", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.0.7.tgz", + "integrity": "sha512-8cXDaBBHOr2pQ7j77Y6Vp5VDT2sIqWyWQ56TjEq4ih/a4iST3dItRe8Q9fp0rrIl9DoKhWQtUQz/YpOxLkXbNA==" + }, + "@jridgewell/set-array": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.1.tgz", + "integrity": "sha512-Ct5MqZkLGEXTVmQYbGtx9SVqD2fqwvdubdps5D3djjAkgkKwT918VNOz65pEHFaYTeWcukmJmH5SwsA9Tn2ObQ==" + }, + "@jridgewell/source-map": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/@jridgewell/source-map/-/source-map-0.3.2.tgz", + "integrity": "sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==", + "requires": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + } + }, + "@jridgewell/sourcemap-codec": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.13.tgz", + "integrity": "sha512-GryiOJmNcWbovBxTfZSF71V/mXbgcV3MewDe3kIMCLyIh5e7SKAeUZs+rMnJ8jkMolZ/4/VsdBmMrw3l+VdZ3w==" + }, + "@jridgewell/trace-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.13.tgz", + "integrity": "sha512-o1xbKhp9qnIAoHJSWd6KlCZfqslL4valSF81H8ImioOAxluWYWOpWkpyktY2vnt4tbrX9XYaxovq6cgowaJp2w==", + "requires": { + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" + } + }, + "@loaders.gl/3d-tiles": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/3d-tiles/-/3d-tiles-3.2.4.tgz", + "integrity": "sha512-qEY1QgBIiRHZYBYWbSGHcSuyKLXbHDS08IYgNkKmGdrdX+rgt73ucgQpIyhjQCA7lxJUF5xewYXEYljvPRVOdw==", + "requires": { + "@loaders.gl/draco": "3.2.4", + "@loaders.gl/gltf": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/math": "3.2.4", + "@loaders.gl/tiles": "3.2.4", + "@math.gl/core": "^3.5.1", + "@math.gl/geospatial": "^3.5.1" + } + }, + "@loaders.gl/core": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/core/-/core-3.2.4.tgz", + "integrity": "sha512-SFBw6p8WXUGn8fgpMaGVqTq2nabu5ILJKzr0Q0muN8ESnOpzsdRzI6aXw8Ip8YCerqjklXnuB0Lqeu34odalNw==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "@probe.gl/log": "^3.5.0", + "probe.gl": "^3.4.0" + } + }, + "@loaders.gl/csv": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/csv/-/csv-3.2.4.tgz", + "integrity": "sha512-aaT886ttZv9HWM0D4s5bHaxoqU94bdgN22qHxuUaWRwxgG7JpVtZweDHzUJ1HjxZsFqfCIHhoxDyPCUkk9jJHg==", + "requires": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4" + } + }, + "@loaders.gl/draco": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/draco/-/draco-3.2.4.tgz", + "integrity": "sha512-cagaHY5I1TSBPOUyQS0ZWgLtMqd+Dnx9wUzduAxLXEVBNHIS2kuG/FXJa/vZFHI79++ZG48BnbmDo05ZVUd4GA==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "draco3d": "1.4.1" + } + }, + "@loaders.gl/gis": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gis/-/gis-3.2.4.tgz", + "integrity": "sha512-8QV/Hcgrurp6BYrXqsAJJzqScpdkCk0B5iq3k7fsleUzeTZvnYNpO2fu745CZ/l6mD/YhKnFj9R4ZX7DojmJwA==", + "requires": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@mapbox/vector-tile": "^1.3.1", + "@math.gl/polygon": "^3.5.1", + "pbf": "^3.2.1" + } + }, + "@loaders.gl/gltf": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/gltf/-/gltf-3.2.4.tgz", + "integrity": "sha512-rMSYzdvFiSpM+bG0R5C5uQN0MjR9Tf72laH6N+C5sj9QpZ/vqJfo+7Lmbz/QcR/oFgglTf5h/IkNHSFqIW8mkA==", + "requires": { + "@loaders.gl/draco": "3.2.4", + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/textures": "3.2.4" + } + }, + "@loaders.gl/images": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/images/-/images-3.2.4.tgz", + "integrity": "sha512-/uG1SLRvr93pZSY39xrwe3fIESMIF5ahLDcPRHXjA+BoQ+KvHAsiZV+6sb+HAMWTThntLfRND6nBan+gofjKQA==", + "requires": { + "@loaders.gl/loader-utils": "3.2.4" + } + }, + "@loaders.gl/loader-utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/loader-utils/-/loader-utils-3.2.4.tgz", + "integrity": "sha512-FwWgQztK5l0Gn7UaIq1LzSKo4751XY1SlQGxibczxRbkwfpbgyCn9yAyJy59HxcqZboYzXi+mrVr7yxLTYAIQg==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/worker-utils": "3.2.4", + "@probe.gl/stats": "^3.5.0" + } + }, + "@loaders.gl/math": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/math/-/math-3.2.4.tgz", + "integrity": "sha512-E0JW4wii2aV6a6tUfpBHFOksZfFgOWWIaGA2TGYaDVV/3D4VK3tJmzfCs9C/OapXivUQbTC4Ktc2Btwj3clKuA==", + "requires": { + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@math.gl/core": "^3.5.1" + } + }, + "@loaders.gl/mvt": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/mvt/-/mvt-3.2.4.tgz", + "integrity": "sha512-G9oS/E/9Ft/EJVKq3cMRI1VGCi1e90zz8cRT5jIPtMQyuT+++DKNGOTYiLXNSuT+l7BLWs13W6tNreJOgIxQlQ==", + "requires": { + "@loaders.gl/gis": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@math.gl/polygon": "^3.5.1", + "pbf": "^3.2.1" + } + }, + "@loaders.gl/schema": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/schema/-/schema-3.2.4.tgz", + "integrity": "sha512-zw1tv6BGI7zLk6LSm6DssEx3VP4nKXzp6JzMPdPVwkSQKaWfkhK+7Syuz9kSCzUWJrhq3H5QslMobV8phlQl+Q==", + "requires": { + "@types/geojson": "^7946.0.7", + "apache-arrow": "^4.0.0" + } + }, + "@loaders.gl/terrain": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/terrain/-/terrain-3.2.4.tgz", + "integrity": "sha512-+41KWTn/wm62U+7Nx73tHn1PU8XHUIFK700Diq+VJaien+lbdhIRcqwgQV4NXRjxI/7p1yKn9+YNMGtN08diyA==", + "requires": { + "@babel/runtime": "^7.3.1", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@mapbox/martini": "^0.2.0" + } + }, + "@loaders.gl/textures": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/textures/-/textures-3.2.4.tgz", + "integrity": "sha512-O0/Ogem6WlGsNNeVrcvTjNu6bAK7h5ItFkUdsshJa8mhEI0k7ruML0VLh1MIretMpln6BHHYv1Rh5FGvZ74L9Q==", + "requires": { + "@loaders.gl/images": "3.2.4", + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/schema": "3.2.4", + "@loaders.gl/worker-utils": "3.2.4", + "ktx-parse": "^0.0.4", + "texture-compressor": "^1.0.2" + } + }, + "@loaders.gl/tiles": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/tiles/-/tiles-3.2.4.tgz", + "integrity": "sha512-BHMIAdwvHEDKe3DZmKbtZzXuqIDjAj/XwXuMnH1tlHqScNVOXDaqFGYJ7X9mzSMZ91hEpKh1f7LMllfLekd3Ng==", + "requires": { + "@loaders.gl/loader-utils": "3.2.4", + "@loaders.gl/math": "3.2.4", + "@math.gl/core": "^3.5.1", + "@math.gl/culling": "^3.5.1", + "@math.gl/geospatial": "^3.5.1", + "@math.gl/web-mercator": "^3.5.1", + "@probe.gl/stats": "^3.5.0" + } + }, + "@loaders.gl/worker-utils": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/@loaders.gl/worker-utils/-/worker-utils-3.2.4.tgz", + "integrity": "sha512-gGy8+LiyoxfahCgldYDCgXAUXsC3eBkVGqLrqU759+1y/sw3S+vJzZ2Vwpt8lB7+0LEaJ7gLNnGD+x2LekvO+A==", + "requires": { + "@babel/runtime": "^7.3.1" + } + }, + "@luma.gl/constants": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/constants/-/constants-8.5.14.tgz", + "integrity": "sha512-GPZlnOpXLnW4fkER/sOSlXEZl+uwovvMlSPpEdofIHdNxG4oOdZlDuLc5K+NAJ9Fm+3AbDfCOihcA6WOsVuT5Q==" + }, + "@luma.gl/core": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/core/-/core-8.5.14.tgz", + "integrity": "sha512-YgXxWzBNnoIuo6BTsJdK9tfFBWSzmhqeCGsbGMOVimSRXNMDBXATDL5c/J8pkVSbphjhk5aSOmhUC7C5WzKKYQ==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/engine": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@luma.gl/shadertools": "8.5.14", + "@luma.gl/webgl": "8.5.14" + } + }, + "@luma.gl/engine": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/engine/-/engine-8.5.14.tgz", + "integrity": "sha512-Dr05gfmHo2Zla0bejxaw+Zhjo1OwzGuUwwzXg/M4TE5U8YyC+mUMtIKcFILfMMEZxhZuWPU6jTDhvfHTIp+3xA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@luma.gl/shadertools": "8.5.14", + "@luma.gl/webgl": "8.5.14", + "@math.gl/core": "^3.5.0", + "@probe.gl/env": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0", + "probe.gl": "^3.4.0" + } + }, + "@luma.gl/experimental": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/experimental/-/experimental-8.5.14.tgz", + "integrity": "sha512-OEng25f6VZh1q4L+F8W+DjhxzTCOZG5sDaFN4bZiAIA/MPdxzO6+nveCOetuQtaR/RpkslBF22eXp4OccR/qaA==", + "requires": { + "@luma.gl/constants": "8.5.14", + "@math.gl/core": "^3.5.0", + "earcut": "^2.0.6" + } + }, + "@luma.gl/gltools": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/gltools/-/gltools-8.5.14.tgz", + "integrity": "sha512-ra8fSpkvIdaaBpD/zNryVYgYDRGNhStACIavM5wB5Gp3KVBbvUZWRl8a8YxRnv6MLWvBoEXnX7Dl7NmfWp6FPA==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@probe.gl/env": "^3.5.0", + "@types/offscreencanvas": "^2019.7.0", + "probe.gl": "^3.4.0" + } + }, + "@luma.gl/shadertools": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/shadertools/-/shadertools-8.5.14.tgz", + "integrity": "sha512-vq0XzMYzGM/A/usNvCzfWJw+ycN2vzqN4AtgrejrOrYu+6yP8LmfRp/iAxjhFkukCPgs03tUFYSlkY7I6HIVtw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@math.gl/core": "^3.5.0" + } + }, + "@luma.gl/webgl": { + "version": "8.5.14", + "resolved": "https://registry.npmjs.org/@luma.gl/webgl/-/webgl-8.5.14.tgz", + "integrity": "sha512-8FT9bm6k6XktETcL80AxmLGm27xWbQJYWjsHYjB4cP+PdePNnNQXNYrDN0WX7jKLECSgWIcaQ38O7itD9jACCw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@luma.gl/constants": "8.5.14", + "@luma.gl/gltools": "8.5.14", + "@probe.gl/env": "^3.5.0", + "probe.gl": "^3.4.0" + } + }, + "@mapbox/martini": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@mapbox/martini/-/martini-0.2.0.tgz", + "integrity": "sha512-7hFhtkb0KTLEls+TRw/rWayq5EeHtTaErgm/NskVoXmtgAQu/9D299aeyj6mzAR/6XUnYRp2lU+4IcrYRFjVsQ==" + }, + "@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==" + }, + "@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/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" + } + }, + "@math.gl/core": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/core/-/core-3.6.0.tgz", + "integrity": "sha512-ZDgNC8iuP2qnG84kjiNKszugKvNHdp5iiiTQUwRPNxOY3qQ7Tw0WfoppCdUfrUdGaa7HEOXbnbJoy9Qnf/M1uQ==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/types": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "@math.gl/culling": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/culling/-/culling-3.6.0.tgz", + "integrity": "sha512-IBDQV3k0D54q3vHdAyJkdiTsZJIaWiPczHF1hfykeM5Lj3jtPmpyyhZMsea8yQeeJeacZ7//ZuMMUeqrEuhdxA==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/core": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "@math.gl/geospatial": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/geospatial/-/geospatial-3.6.0.tgz", + "integrity": "sha512-YSTBOuRksW9lO0BrfFbdfwBbu5SXalfTVni28LLIYsD3u+DYhYnQ/27PYpyfsyTJ364un4zmCo6DLCyjFUpOzA==", + "requires": { + "@babel/runtime": "^7.12.0", + "@math.gl/core": "3.6.0", + "gl-matrix": "^3.4.0" + } + }, + "@math.gl/polygon": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/polygon/-/polygon-3.6.0.tgz", + "integrity": "sha512-YCuz+oBQ94Bwccma15GKLY3j05pt4GPIYayA4taPmqxyGzM/C6TRDB9vUo2paqYyXjpIGzIEfoxh8HC7k5Drtg==", + "requires": { + "@math.gl/core": "3.6.0" + } + }, + "@math.gl/types": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/types/-/types-3.6.0.tgz", + "integrity": "sha512-+rwOg8XFs9UNfVCoHw9S8cooJ3f4eWmSffR2yeAcLHwS24dcC1N1fgEUaigR5U21wG5EtSfECMr3lOzP4nfBeA==" + }, + "@math.gl/web-mercator": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/@math.gl/web-mercator/-/web-mercator-3.6.0.tgz", + "integrity": "sha512-C9X1NUd6pA3G2g8CFDhi2a1UzsjFNljHl6a1cZ0qQkGMCpjRctHYpjQA1fJ/A+r7vgAxXvMf3EcY5odDOHeS6A==", + "requires": { + "@babel/runtime": "^7.12.0", + "gl-matrix": "^3.4.0" + } + }, + "@probe.gl/env": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/env/-/env-3.5.0.tgz", + "integrity": "sha512-YdlpZZshhyYxvWDBmZ5RIW2pTR14Pw4p9czMlt/v7F6HbFzWfAdmH7q6xVwFRYxUpQLwhWensWyv4aFysiWl4g==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@probe.gl/log": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/log/-/log-3.5.0.tgz", + "integrity": "sha512-nW/qz2X1xY08WU/TsmJP6/6IPNcaY5fS/vLjpC4ahJuE2Mezga4hGM/R2X5JWE/nkPc+BsC5GnAnD13rwAxS7g==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0" + } + }, + "@probe.gl/stats": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/@probe.gl/stats/-/stats-3.5.0.tgz", + "integrity": "sha512-IH2M+F3c8HR1DTroBARePUFG7wIewumtKA0UFqx51Z7S4hKrD60wFbpMmg0AcF4FvHAXMBoC+kYi1UKW9XbAOw==", + "requires": { + "@babel/runtime": "^7.0.0" + } + }, + "@types/flatbuffers": { + "version": "1.10.0", + "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", + "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" + }, + "@types/geojson": { + "version": "7946.0.8", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.8.tgz", + "integrity": "sha512-1rkryxURpr6aWP7R786/UQOkJ3PcpQiWkAXBmdWc7ryFWqN6a4xfK7BtjXvFBKO9LjQ+MWQSWxYeZX1OApnArA==" + }, + "@types/hammerjs": { + "version": "2.0.41", + "resolved": "https://registry.npmjs.org/@types/hammerjs/-/hammerjs-2.0.41.tgz", + "integrity": "sha512-ewXv/ceBaJprikMcxCmWU1FKyMAQ2X7a9Gtmzw8fcg2kIePI1crERDM818W+XYrxqdBBOdlf2rm137bU+BltCA==" + }, + "@types/node": { + "version": "14.18.21", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.18.21.tgz", + "integrity": "sha512-x5W9s+8P4XteaxT/jKF0PSb7XEvo5VmqEWgsMlyeY4ZlLK8I6aH6g5TPPyDlLAep+GYf4kefb7HFyc7PAO3m+Q==" + }, + "@types/offscreencanvas": { + "version": "2019.7.0", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.0.tgz", + "integrity": "sha512-PGcyveRIpL1XIqK8eBsmRBt76eFgtzuPiSTyKHZxnGemp2yzGzWpjYKAfK3wIMiU7eH+851yEpiuP8JZerTmWg==" + }, + "@types/text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" + }, + "acorn": { + "version": "8.7.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.7.1.tgz", + "integrity": "sha512-Xx54uLJQZ19lKygFXOWsscKUbsBZW0CPykPhVQdhIeIwrbPmJzqeASDInc8nKBnp/JT6igTs82qPXz069H8I/A==" + }, + "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==", + "requires": { + "color-convert": "^1.9.0" + } + }, + "apache-arrow": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-4.0.1.tgz", + "integrity": "sha512-DyF7GXCbSjsw4P5C8b+qW7OnJKa6w9mJI0mhV0+EfZbVZCmhfiF6ffqcnrI/kzBrRqn9hH/Ft9n5+m4DTbBJpg==", + "requires": { + "@types/flatbuffers": "^1.10.0", + "@types/node": "^14.14.37", + "@types/text-encoding-utf-8": "^1.0.1", + "command-line-args": "5.1.1", + "command-line-usage": "6.1.1", + "flatbuffers": "1.12.0", + "json-bignum": "^0.0.3", + "pad-left": "^2.1.0", + "text-encoding-utf-8": "^1.0.2", + "tslib": "^2.2.0" + } + }, + "argparse": { + "version": "1.0.10", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", + "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "requires": { + "sprintf-js": "~1.0.2" + } + }, + "array-back": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-3.1.0.tgz", + "integrity": "sha512-TkuxA4UCOvxuDK6NZYXCalszEzj+TLszyASooky+i742l9TqsOdYCMJJupxRic61hwquNtppB3hgcuq9SVSH1Q==" + }, + "buffer-from": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", + "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==" + }, + "chalk": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", + "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", + "requires": { + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" + } + }, + "color-convert": { + "version": "1.9.3", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", + "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", + "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": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" + }, + "command-line-args": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.1.1.tgz", + "integrity": "sha512-hL/eG8lrll1Qy1ezvkant+trihbGnaKaeEjj6Scyr3DN+RC7iQ5Rz84IeLERfAWDGo0HBSNAakczwgCilDXnWg==", + "requires": { + "array-back": "^3.0.1", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" + } + }, + "command-line-usage": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-6.1.1.tgz", + "integrity": "sha512-F59pEuAR9o1SF/bD0dQBDluhpT4jJQNWUHEuVBqpDmCUo6gPjCi+m9fCWnWZVR/oG6cMTUms4h+3NPl74wGXvA==", + "requires": { + "array-back": "^4.0.1", + "chalk": "^2.4.2", + "table-layout": "^1.0.1", + "typical": "^5.2.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + }, + "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==" + }, + "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==" + }, + "draco3d": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/draco3d/-/draco3d-1.4.1.tgz", + "integrity": "sha512-9Rxonc70xiovBC+Bq1h57SNZIHzWTibU1VfIGp5z3Xx8dPtv4yT5uGhiH7P5uvJRR2jkrvHafRxR7bTANkvfpg==" + }, + "earcut": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.3.tgz", + "integrity": "sha512-iRDI1QeCQIhMCZk48DRDMVgQSSBDmbzzNhnxIo+pwx3swkfjMh6vh0nWLq1NdvGHLKH6wIrAM3vQWeTj6qeoug==" + }, + "esbuild": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.14.47.tgz", + "integrity": "sha512-wI4ZiIfFxpkuxB8ju4MHrGwGLyp1+awEHAHVpx6w7a+1pmYIq8T9FGEVVwFo0iFierDoMj++Xq69GXWYn2EiwA==", + "requires": { + "esbuild-android-64": "0.14.47", + "esbuild-android-arm64": "0.14.47", + "esbuild-darwin-64": "0.14.47", + "esbuild-darwin-arm64": "0.14.47", + "esbuild-freebsd-64": "0.14.47", + "esbuild-freebsd-arm64": "0.14.47", + "esbuild-linux-32": "0.14.47", + "esbuild-linux-64": "0.14.47", + "esbuild-linux-arm": "0.14.47", + "esbuild-linux-arm64": "0.14.47", + "esbuild-linux-mips64le": "0.14.47", + "esbuild-linux-ppc64le": "0.14.47", + "esbuild-linux-riscv64": "0.14.47", + "esbuild-linux-s390x": "0.14.47", + "esbuild-netbsd-64": "0.14.47", + "esbuild-openbsd-64": "0.14.47", + "esbuild-sunos-64": "0.14.47", + "esbuild-windows-32": "0.14.47", + "esbuild-windows-64": "0.14.47", + "esbuild-windows-arm64": "0.14.47" + } + }, + "esbuild-android-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.14.47.tgz", + "integrity": "sha512-R13Bd9+tqLVFndncMHssZrPWe6/0Kpv2/dt4aA69soX4PRxlzsVpCvoJeFE8sOEoeVEiBkI0myjlkDodXlHa0g==", + "optional": true + }, + "esbuild-android-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.14.47.tgz", + "integrity": "sha512-OkwOjj7ts4lBp/TL6hdd8HftIzOy/pdtbrNA4+0oVWgGG64HrdVzAF5gxtJufAPOsEjkyh1oIYvKAUinKKQRSQ==", + "optional": true + }, + "esbuild-darwin-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.14.47.tgz", + "integrity": "sha512-R6oaW0y5/u6Eccti/TS6c/2c1xYTb1izwK3gajJwi4vIfNs1s8B1dQzI1UiC9T61YovOQVuePDcfqHLT3mUZJA==", + "optional": true + }, + "esbuild-darwin-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.14.47.tgz", + "integrity": "sha512-seCmearlQyvdvM/noz1L9+qblC5vcBrhUaOoLEDDoLInF/VQ9IkobGiLlyTPYP5dW1YD4LXhtBgOyevoIHGGnw==", + "optional": true + }, + "esbuild-freebsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.14.47.tgz", + "integrity": "sha512-ZH8K2Q8/Ux5kXXvQMDsJcxvkIwut69KVrYQhza/ptkW50DC089bCVrJZZ3sKzIoOx+YPTrmsZvqeZERjyYrlvQ==", + "optional": true + }, + "esbuild-freebsd-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.14.47.tgz", + "integrity": "sha512-ZJMQAJQsIOhn3XTm7MPQfCzEu5b9STNC+s90zMWe2afy9EwnHV7Ov7ohEMv2lyWlc2pjqLW8QJnz2r0KZmeAEQ==", + "optional": true + }, + "esbuild-linux-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.14.47.tgz", + "integrity": "sha512-FxZOCKoEDPRYvq300lsWCTv1kcHgiiZfNrPtEhFAiqD7QZaXrad8LxyJ8fXGcWzIFzRiYZVtB3ttvITBvAFhKw==", + "optional": true + }, + "esbuild-linux-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.14.47.tgz", + "integrity": "sha512-nFNOk9vWVfvWYF9YNYksZptgQAdstnDCMtR6m42l5Wfugbzu11VpMCY9XrD4yFxvPo9zmzcoUL/88y0lfJZJJw==", + "optional": true + }, + "esbuild-linux-arm": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.14.47.tgz", + "integrity": "sha512-ZGE1Bqg/gPRXrBpgpvH81tQHpiaGxa8c9Rx/XOylkIl2ypLuOcawXEAo8ls+5DFCcRGt/o3sV+PzpAFZobOsmA==", + "optional": true + }, + "esbuild-linux-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.14.47.tgz", + "integrity": "sha512-ywfme6HVrhWcevzmsufjd4iT3PxTfCX9HOdxA7Hd+/ZM23Y9nXeb+vG6AyA6jgq/JovkcqRHcL9XwRNpWG6XRw==", + "optional": true + }, + "esbuild-linux-mips64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.14.47.tgz", + "integrity": "sha512-mg3D8YndZ1LvUiEdDYR3OsmeyAew4MA/dvaEJxvyygahWmpv1SlEEnhEZlhPokjsUMfRagzsEF/d/2XF+kTQGg==", + "optional": true + }, + "esbuild-linux-ppc64le": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.14.47.tgz", + "integrity": "sha512-WER+f3+szmnZiWoK6AsrTKGoJoErG2LlauSmk73LEZFQ/iWC+KhhDsOkn1xBUpzXWsxN9THmQFltLoaFEH8F8w==", + "optional": true + }, + "esbuild-linux-riscv64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.14.47.tgz", + "integrity": "sha512-1fI6bP3A3rvI9BsaaXbMoaOjLE3lVkJtLxsgLHqlBhLlBVY7UqffWBvkrX/9zfPhhVMd9ZRFiaqXnB1T7BsL2g==", + "optional": true + }, + "esbuild-linux-s390x": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.14.47.tgz", + "integrity": "sha512-eZrWzy0xFAhki1CWRGnhsHVz7IlSKX6yT2tj2Eg8lhAwlRE5E96Hsb0M1mPSE1dHGpt1QVwwVivXIAacF/G6mw==", + "optional": true + }, + "esbuild-netbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.14.47.tgz", + "integrity": "sha512-Qjdjr+KQQVH5Q2Q1r6HBYswFTToPpss3gqCiSw2Fpq/ua8+eXSQyAMG+UvULPqXceOwpnPo4smyZyHdlkcPppQ==", + "optional": true + }, + "esbuild-openbsd-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.14.47.tgz", + "integrity": "sha512-QpgN8ofL7B9z8g5zZqJE+eFvD1LehRlxr25PBkjyyasakm4599iroUpaj96rdqRlO2ShuyqwJdr+oNqWwTUmQw==", + "optional": true + }, + "esbuild-sunos-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.14.47.tgz", + "integrity": "sha512-uOeSgLUwukLioAJOiGYm3kNl+1wJjgJA8R671GYgcPgCx7QR73zfvYqXFFcIO93/nBdIbt5hd8RItqbbf3HtAQ==", + "optional": true + }, + "esbuild-windows-32": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.14.47.tgz", + "integrity": "sha512-H0fWsLTp2WBfKLBgwYT4OTfFly4Im/8B5f3ojDv1Kx//kiubVY0IQunP2Koc/fr/0wI7hj3IiBDbSrmKlrNgLQ==", + "optional": true + }, + "esbuild-windows-64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.14.47.tgz", + "integrity": "sha512-/Pk5jIEH34T68r8PweKRi77W49KwanZ8X6lr3vDAtOlH5EumPE4pBHqkCUdELanvsT14yMXLQ/C/8XPi1pAtkQ==", + "optional": true + }, + "esbuild-windows-arm64": { + "version": "0.14.47", + "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.14.47.tgz", + "integrity": "sha512-HFSW2lnp62fl86/qPQlqw6asIwCnEsEoNIL1h2uVMgakddf+vUuMcCbtUY1i8sst7KkgHrVKCJQB33YhhOweCQ==", + "optional": true + }, + "escape-string-regexp": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", + "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" + }, + "find-replace": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-3.0.0.tgz", + "integrity": "sha512-6Tb2myMioCAgv5kfvP5/PkZZ/ntTpVK39fHY7WkWBgvbeE+VHd/tZuZ4mrC+bxh4cfOZeYKVPaJIZtZXV7GNCQ==", + "requires": { + "array-back": "^3.0.1" + } + }, + "flatbuffers": { + "version": "1.12.0", + "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.12.0.tgz", + "integrity": "sha512-c7CZADjRcl6j0PlvFy0ZqXQ67qSEZfrVPynmnL+2zPc+NtMvrF8Y0QceMo7QqnSPc7+uWjUIAbvCQ5WIKlMVdQ==" + }, + "gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==" + }, + "h3-js": { + "version": "3.7.2", + "resolved": "https://registry.npmjs.org/h3-js/-/h3-js-3.7.2.tgz", + "integrity": "sha512-LPjlHSwB9zQZrMqKloCZmmmt3yZzIK7nqPcXqwU93zT3TtYG6jP4tZBzAPouxut7lLjdFbMQ75wRBiKfpsnY7w==" + }, + "hammerjs": { + "version": "2.0.8", + "resolved": "https://registry.npmjs.org/hammerjs/-/hammerjs-2.0.8.tgz", + "integrity": "sha512-tSQXBXS/MWQOn/RKckawJ61vvsDpCom87JgxiYdGwHdOa0ht0vzUWDlfioofFCRU0L+6NGDt6XzbgoJvZkMeRQ==" + }, + "has-flag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", + "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" + }, + "ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==" + }, + "image-size": { + "version": "0.7.5", + "resolved": "https://registry.npmjs.org/image-size/-/image-size-0.7.5.tgz", + "integrity": "sha512-Hiyv+mXHfFEP7LzUL/llg9RwFxxY+o9N3JVLIeG5E7iFIFAalxvRU9UZthBdYDEVnzHMgjnKJPPpay5BWf1g9g==" + }, + "json-bignum": { + "version": "0.0.3", + "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", + "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==" + }, + "ktx-parse": { + "version": "0.0.4", + "resolved": "https://registry.npmjs.org/ktx-parse/-/ktx-parse-0.0.4.tgz", + "integrity": "sha512-LY3nrmfXl+wZZdPxgJ3ZmLvG+wkOZZP3/dr4RbQj1Pk3Qwz44esOOSFFVQJcNWpXAtiNIC66WgXufX/SYgYz6A==" + }, + "lodash.camelcase": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", + "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" + }, + "long": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/long/-/long-3.2.0.tgz", + "integrity": "sha512-ZYvPPOMqUwPoDsbJaR10iQJYnMuZhRTvHYl62ErLIEX7RgFlziSBUUvrt3OVfc47QlHHpzPZYP17g3Fv7oeJkg==" + }, + "math.gl": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/math.gl/-/math.gl-3.6.0.tgz", + "integrity": "sha512-iQMoZlCf2IGtOCTBMr/XFBJY3TT7X25hXs5NtNdG1w3//GK0OxPHioaVHAprEAny/pkPtoSfjEQZRp6tLRIqEg==", + "requires": { + "@math.gl/core": "3.6.0" + } + }, + "mjolnir.js": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mjolnir.js/-/mjolnir.js-2.7.0.tgz", + "integrity": "sha512-XlK5OZ7d09eAIdYr+5VKOArYtkWB/f306s34yVij4pBk5wnaKxSrD7fVfP8/BL27nKVylNweqP1pxqh8h+hWKw==", + "requires": { + "@types/hammerjs": "^2.0.41", + "hammerjs": "^2.0.8" + } + }, + "pad-left": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", + "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", + "requires": { + "repeat-string": "^1.5.4" + } + }, + "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" + } + }, + "probe.gl": { + "version": "3.5.0", + "resolved": "https://registry.npmjs.org/probe.gl/-/probe.gl-3.5.0.tgz", + "integrity": "sha512-KWj8u0PNytr/rVwcQFcN7O8SK7n/ITOsUZ91l4fSX95oHhKvVCI7eadrzFUzFRlXkFfBWpMWZXFHITsHHHUctw==", + "requires": { + "@babel/runtime": "^7.0.0", + "@probe.gl/env": "3.5.0", + "@probe.gl/log": "3.5.0", + "@probe.gl/stats": "3.5.0" + } + }, + "protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==" + }, + "reduce-flatten": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-2.0.0.tgz", + "integrity": "sha512-EJ4UNY/U1t2P/2k6oqotuX2Cc3T6nxJwsM0N0asT7dhrtH1ltUxDn4NalSYmPE2rCkVpcf/X6R0wDwcFpzhd4w==" + }, + "regenerator-runtime": { + "version": "0.13.9", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", + "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==" + }, + "repeat-string": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", + "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" + }, + "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" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==" + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, + "sprintf-js": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", + "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==" + }, + "supports-color": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", + "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", + "requires": { + "has-flag": "^3.0.0" + } + }, + "table-layout": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-1.0.2.tgz", + "integrity": "sha512-qd/R7n5rQTRFi+Zf2sk5XVVd9UQl6ZkduPFC3S7WEGJAmetDTjY3qPN50eSKzwuzEyQKy5TN2TiZdkIjos2L6A==", + "requires": { + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" + }, + "dependencies": { + "array-back": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/array-back/-/array-back-4.0.2.tgz", + "integrity": "sha512-NbdMezxqf94cnNfWLL7V/im0Ub+Anbb0IoZhvzie8+4HJ4nMQuzHuy49FkGYCJK2yAloZ3meiB6AVMClbrI1vg==" + }, + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + }, + "terser": { + "version": "5.14.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.14.1.tgz", + "integrity": "sha512-+ahUAE+iheqBTDxXhTisdA8hgvbEG1hHOQ9xmNjeUJSoi6DU/gMrKNcfZjHkyY6Alnuyc+ikYJaxxfHkT3+WuQ==", + "requires": { + "@jridgewell/source-map": "^0.3.2", + "acorn": "^8.5.0", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + } + }, + "text-encoding-utf-8": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", + "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" + }, + "texture-compressor": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/texture-compressor/-/texture-compressor-1.0.2.tgz", + "integrity": "sha512-dStVgoaQ11mA5htJ+RzZ51ZxIZqNOgWKAIvtjLrW1AliQQLCmrDqNzQZ8Jh91YealQ95DXt4MEduLzJmbs6lig==", + "requires": { + "argparse": "^1.0.10", + "image-size": "^0.7.4" + } + }, + "tslib": { + "version": "2.4.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.0.tgz", + "integrity": "sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==" + }, + "typical": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-4.0.0.tgz", + "integrity": "sha512-VAH4IvQ7BDFYglMd7BPRDfLgxZZX4O4TFcRDA6EN5X7erNJJq+McIEp8np9aVtxrCJ6qx4GTYVfOWNjcqwZgRw==" + }, + "wordwrapjs": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-4.0.1.tgz", + "integrity": "sha512-kKlNACbvHrkpIw6oPeYDSmdCTu2hdMHoyXLTcUKala++lx5Y+wjJ/e474Jqv5abnVmwxw08DiTuHmw69lJGksA==", + "requires": { + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" + }, + "dependencies": { + "typical": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/typical/-/typical-5.2.0.tgz", + "integrity": "sha512-dvdQgNDNJo+8B2uBQoqdb11eUCE1JQXhvjC/CZtgvZseVd5TYMXnq0+vuUemXbd/Se29cTaUuPX3YIc2xgbvIg==" + } + } + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..b4a5e2c --- /dev/null +++ b/package.json @@ -0,0 +1,25 @@ +{ + "name": "mtw-boilerplate-decks", + "author": "Sitdisch", + "version": "0.0.1", + "description": "Combo of esbuild, deck.gl... to develop/build quickly and easily WebGL-based large-scale data visualizations in canvas bundles. Minified bundles can be easily embedded on a website.", + "repository": { + "type": "git", + "url": "https://github.com/mythemeway/mtw-boilerplate-decks" + }, + "license": "MIT", + "scripts": { + "start": "node dev.config.js", + "build": "node pro.config.js", + "terser": "node pro.config.js 1" + }, + "dependencies": { + "@deck.gl/core": "8.7.11", + "@deck.gl/layers": "8.7.11", + "@deck.gl/mesh-layers": "8.7.11", + "@deck.gl/geo-layers": "8.7.11", + "@loaders.gl/csv": "3.2.4", + "esbuild": "0.14.47", + "terser": "5.14.1" + } +} diff --git a/pro.config.js b/pro.config.js new file mode 100644 index 0000000..5aa9cea --- /dev/null +++ b/pro.config.js @@ -0,0 +1,67 @@ +/*! MTW-BOILERPLATE-DECKS: PRO.CONFIG.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright © 2022 sitdisch + */ + +const { argv } = require('process'); +const { build, analyzeMetafile } = require('esbuild'); +const canvas = require('./canvas.config.js'); +const { spawnSync } = require('child_process'); +const { mkdir, stat } = require('fs'); +const { basename } = require('path'); + +console.log("[\x1b[90mesbuild\x1b[0m]: starting `\x1b[36mproduction-mode\x1b[0m`...") + +build({ + entryPoints: [`${canvas.path}`], + outfile: './dist/canvas.bundle.min.js', + logLevel: 'info', + bundle: true, + write: ((!(argv[2])) ? true : false), + minify: true, + metafile: true, + define: { MTW_CANVAS_ID: `'${canvas.id}'` }, + +}).then(result => { + analyzeMetafile(result.metafile).then(msg => + console.log(msg+"\n[\x1b[90mesbuild\x1b[0m]: `\x1b[36mproduction-mode\x1b[0m` \x1b[1;32m[finished]\x1b[0m\n") + ); + + if (argv[2]) { + const outputPath = Object.keys(result.metafile.outputs)[0]; + + mkdir('./dist', { recursive: true }, err => { + if (err) throw err; + + console.log("[\x1b[90mterser\x1b[0m]: Starting further `\x1b[36mminification-process\x1b[0m`...\n") + + const cp = spawnSync('npx', ['terser', '-m', '-c', '-o', outputPath], { + input: result.outputFiles[0].text + }); + + if (!(cp.status)) + stat(outputPath, (err, outputStats) => { + if (err) throw err; + + const percent = Math.round((outputStats.size/result.metafile['outputs'][outputPath].bytes-1)*100); + var logTxt = ''; + + if (percent < 0) { + logTxt = '\x1b[1;32m'+percent+'%\x1b[0m)\x1b[1;33m [minimized]'; + } else if (percent === 0) { + logTxt = '\x1b[1;90m'+percent+'%\x1b[0m)\x1b[1;90m [unchanged]'; + } else { + logTxt = '\x1b[1;31m+'+percent+'%\x1b[0m)\x1b[1;31m [ENLARGED]'; + }; + + console.log(' '+basename(outputPath)+' \x1b[36m'+Math.round(outputStats.size/100)/10+'kb\x1b[0m (size: '+logTxt+' \x1b[0m\n\n[\x1b[90mterser\x1b[0m]: `\x1b[36mminification-process\x1b[0m` \x1b[1;32m[finished]\x1b[0m\n'); + + }) + else + console.log("\x1b[1;31m[ERROR]\x1b[0m => \x1b[0m[\x1b[90mterser\x1b[0m]: `\x1b[36mminification-process\x1b[0m` \x1b[1;31m[failed]\x1b[0m", Error(cp.stderr)); + }); + }; +}); diff --git a/src/mtw-deck-flights.js b/src/mtw-deck-flights.js new file mode 100644 index 0000000..9fc13fc --- /dev/null +++ b/src/mtw-deck-flights.js @@ -0,0 +1,255 @@ +/*! MTW-BOILERPLATE-DECKS: MTW-DECK-FLIGHTS.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright: © 2022 sitdisch + * + * DECK IS BASED ON: + * + * globe + * + * Original Authors: deck.gl Contributors + * Sources: + * https://github.com/visgl/deck.gl/tree/8.7-release/examples/website/globe + * https://github.com/visgl/deck.gl/tree/master/examples/get-started/pure-js/globe + * License: MIT + * Copyright: © 2020 Urban Computing Foundation + * Changes: made + * + * AIR TRAFFIC DATA SOURCE: + * + * Crowdsourced air traffic data from The OpenSky Network 2020 [CC-BY] (v20.12) + * + * Credits: + * Matthias Schäfer, Martin Strohmeier, Vincent Lenders, Ivan Martinovic and Matthias Wilhelm. "Bringing Up OpenSky: A Large-scale ADS-B Sensor Network for Research". In Proceedings of the 13th IEEE/ACM International Symposium on Information Processing in Sensor Networks (IPSN), pages 83-94, April 2014. + * Xavier Olive. "traffic, a toolbox for processing and analysing air traffic data." Journal of Open Source Software 4(39), July 2019. + * Original Source: https://zenodo.org/record/4419082 + * Used Source: https://github.com/visgl/deck.gl-data/tree/master/examples/globe + * License: CC BY 4.0 + * + * LAND & AIRPORT DATA SOURCE: + * + * admin 0 scale rank & airports (v3.3.0) + * + * Credits: + * Natural Earth http://www.naturalearthdata.com/ + * geojson-xyz https://github.com/geojson-xyz + * Original Source: https://www.naturalearthdata.com/downloads/ + * Used Source: http://geojson.xyz/ + * License: Public Domain + */ + +"use strict"; + +import { Deck, COORDINATE_SYSTEM, _GlobeView as GlobeView } from '@deck.gl/core'; +import { GeoJsonLayer } from '@deck.gl/layers'; +import { SimpleMeshLayer } from '@deck.gl/mesh-layers'; +import { SphereGeometry } from '@luma.gl/core'; +import { load } from '@loaders.gl/core'; +import { CSVLoader } from '@loaders.gl/csv'; +import { + AnimatedArcLayer, + sliceData, + getDate, + initSourceTxt, + initInfoTxt, + spinner +} from './utils.js'; + +(() => { + // + // SECTION: LOADING AIR TRAFFIC DATA + // + + // choose dates + const dates = [ + // '2020-01-14', + // '2020-02-11', + // '2020-03-10', + '2020-04-14', + // '2020-05-12', + // '2020-06-09', + // '2020-07-14', + '2020-08-11', + // '2020-09-08', + // '2020-10-13', + // '2020-11-10', + '2020-12-08' + ]; + + var groups = []; + const data = []; + const DATA_URL = { + TRAFFIC: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/globe', + LAND: 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_50m_admin_0_scale_rank.geojson', + AIRPORTS: 'https://d2ad6b4ur7yvpq.cloudfront.net/naturalearth-3.3.0/ne_10m_airports.geojson' + } + + for (const date of dates) { loadData(date); } + + async function loadData(date) { + const url = `${DATA_URL.TRAFFIC}/${date}.csv`; + const flights = await load(url, CSVLoader, {csv: {skipEmptyLines: true}}); + data.push({flights, date}); + groups = sliceData(data); + } + + // + // SECTION: SPECIFICATION OF DOCUMENT ELEMENTS + // + + const canvas = document.getElementById(MTW_CANVAS_ID); + canvas.style.backgroundColor ='#111'; + + canvas.before(initSourceTxt( + "Source: mtw-boilerplate-decks
Data: Crowdsourced air traffic data from The OpenSky Network 2020 [CC-BY]; Natural Earth;
Moving, zooming & rotating is possible; Airports are clickable;" + )); + + const infoTxt = initInfoTxt('Loading


'); + canvas.before(infoTxt); + + // + // SECTION: LAYER SETTING + // + + var layersLoaded = 0; + + const backgroundLayers = [ + new SimpleMeshLayer({ + id: 'earth-sphere', + data: [0], + mesh: new SphereGeometry({radius: 6.3e6, nlat: 18, nlong: 36}), + coordinateSystem: COORDINATE_SYSTEM.CARTESIAN, + getPosition: [0, 0, 0], + getColor: [5, 40, 53] + }), + + new GeoJsonLayer({ + id: 'earth-land', + data: DATA_URL.LAND, + // Styles + stroked: true, + filled: true, + lineWidthMinPixels: 2, + getLineColor: [135, 123, 64], + getFillColor: [135, 123, 64, 200], + onDataLoad: () => {layersLoaded += 1;}, + }), + + new GeoJsonLayer({ + id: 'airports', + data: DATA_URL.AIRPORTS, + // Styles + filled: true, + pointRadiusMinPixels: 2, + pointRadiusScale: 2000, + getPointRadius: f => 11 - f.properties.scalerank, + lineWidthMinPixels: .5, + getLineColor: [15, 15, 15], + getFillColor: [135, 123, 64], + // Interactive props + pickable: true, + autoHighlight: true, + onDataLoad: () => {layersLoaded += 1;}, + + onClick: info => + info.object && alert(`${info.object.properties.name} (${info.object.properties.abbrev})`) + }), + ]; + + function setDataLayers(timeRange) { + const dataLayers = groups.map((group, index) => + new AnimatedArcLayer({ + id: `flights-${index}`, + data: group.flights, + visible: group.startTime < timeRange[1] && group.endTime > timeRange[0], + getSourcePosition: d => [d.lon1, d.lat1, d.alt1], + getTargetPosition: d => [d.lon2, d.lat2, d.alt2], + getSourceTimestamp: d => d.time1, + getTargetTimestamp: d => d.time2, + getHeight: 0.5, + getWidth: 1, + timeRange, + getSourceColor: [255, 0, 128], + getTargetColor: [0, 128, 255] + }) + ); + + return dataLayers; + }; + + // + // SECTION: DECK LAUNCHING & RENDERING + // + + var currentTime = 0; + var endTime = null; + const TIME_WINDOW = 900; // 15 minutes + const animationSpeed = TIME_WINDOW * 0.2; + + const viewState = { + latitude: 20, + longitude: 30, + zoom: 0, + minZoom: 0, + }; + + const deckgl = new Deck({ + canvas: MTW_CANVAS_ID, + views: new GlobeView(), + controller: true, + layers: backgroundLayers, + + onWebGLInitialized: () => { + if ((canvas.clientHeight < 600) || (canvas.clientWidth < 600)) { + viewState.zoom = -.8; + viewState.minZoom = -.8; + + } else if ((canvas.clientHeight > 1300) && (canvas.clientWidth > 1100)) { + viewState.zoom = 1; + viewState.minZoom = 1; + } + + deckgl.setProps({initialViewState: viewState}); + }, + + onLoad: () => launch() + }); + + function launch() { + if ((groups.length != 0) && (layersLoaded === 2)) + requestAnimationFrame(render) + + else { + infoTxt.innerHTML = 'Loading
'+spinner()+'


'; + setTimeout(() => launch(), 100); + } + } + + function render() { + const [timestamp, endDate, flightNum] = getDate(data, currentTime); + if (endDate) { + if (!(endTime)) { + endTime = timestamp; + + } else if (endTime === timestamp) { + currentTime = 0; + endTime = null; + }; + }; + + infoTxt.innerHTML = 'Air Traffic During the Global Pandemic
'+new Date(timestamp).toUTCString()+"
Flights: "+flightNum+"K"; + + deckgl.setProps({ + layers: [ + backgroundLayers, + setDataLayers([currentTime, currentTime + TIME_WINDOW]) + ] + }); + + currentTime += animationSpeed; + + setTimeout(() => requestAnimationFrame(render), 100); + } +})(); diff --git a/src/mtw-deck-trips.js b/src/mtw-deck-trips.js new file mode 100644 index 0000000..a69ea52 --- /dev/null +++ b/src/mtw-deck-trips.js @@ -0,0 +1,281 @@ +/*! MTW-BOILERPLATE-DECKS: MTW-DECK-TRIPS.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright: © 2022 sitdisch + * + * DECK IS BASED ON: + * + * trips + * + * Original Authors: deck.gl Contributors + * Source: https://github.com/visgl/deck.gl/tree/8.7-release/examples/website/trips + * License: MIT + * Copyright: © 2020 Urban Computing Foundation + * Changes: made + * + * BOUNDARIES & ROADS DATA SOURCE: + * + * Original Sources: + * Borough Boundaries [ https://data.cityofnewyork.us/City-Government/Borough-Boundaries/tqmj-j8zm ] + * NYC Street Centerline [ https://data.cityofnewyork.us/City-Government/NYC-Street-Centerline-CSCL-for-PlowNYC-Winter-2016/uxpt-rzip ] + * via NYC OpenData [ https://opendata.cityofnewyork.us/ ] + * Credits: + * Department of City Planning (DCP) [ https://www1.nyc.gov/site/planning/index.page ] + * Department of Information Technology & Telecommunications (DoITT) [ https://www1.nyc.gov/site/doitt/index.page ] + * License: Public Domain / OpenData [ https://opendata.cityofnewyork.us/overview/ ] + * Changes: data modified, minified & converted via mapshaper [ https://github.com/mbloch/mapshaper ] to use only area of interest data + * + * TRIPS DATA SOURCE: + * + * Original Source: + * Source: NYC Taxi & Limousine Commission Trip Record Data [ https://www1.nyc.gov/site/tlc/about/raw-data.page ] + * Credits: + * Taxi and Limousine Commission (TLC) [ https://www1.nyc.gov/site/tlc/index.page "Check it out" ] + * Technology System Providers (TSP) [ https://www1.nyc.gov/site/tlc/businesses/technology-system-provider-tsp.page ] + * Department of Information Technology & Telecommunications (DoITT) [ https://www1.nyc.gov/site/doitt/index.page ] + * License: Public Domain / OpenData [ https://opendata.cityofnewyork.us/overview/ ] + * Used Source: + * Source: deck.gl TripsLayer Example | trips.json [ https://github.com/visgl/deck.gl-data/blob/master/examples/trips/trips.json ] via deck.gl-data [ https://github.com/visgl/deck.gl-data ] + * Credit: deck.gl-data contributors [ https://github.com/visgl/deck.gl-data/graphs/contributors ] + * License: MIT [ https://github.com/visgl/deck.gl-data/blob/master/LICENSE ] + * Copyright: © 2017 Uber Technologies, Inc. + * Changes: data modified and minified to use only area of interest data + * + * BUILDINGS DATA SOURCE: + * + * Original Source: + * Source: OpenStreetMap [ https://www.openstreetmap.org/#map=15/40.7067/-74.0106&layers=Y ] via Mapzen Vector Tiles API [ https://www.mapzen.com/projects/vector-tiles/ ] + * Credits: + * OpenStreetMap contributors [ https://wiki.openstreetmap.org/wiki/Contributors ] + * Mapzen [ https://www.mapzen.com/ ] + * License: ODbL [ https://www.openstreetmap.org/copyright ] + * Copyright: © OpenStreetMap contributors + * Used Source: + * Source: deck.gl TripsLayer Example | buildings.json [ https://github.com/visgl/deck.gl-data/blob/master/examples/trips/buildings.json ] via deck.gl-data [ https://github.com/visgl/deck.gl-data ] + * Credit: deck.gl-data contributors [ https://github.com/visgl/deck.gl-data/graphs/contributors ] + * License: MIT [ https://github.com/visgl/deck.gl-data/blob/master/LICENSE ] + * Copyright: © 2017 Uber Technologies, Inc. + */ + +"use strict"; + +import { Deck, AmbientLight, PointLight, LightingEffect } from '@deck.gl/core'; +import { GeoJsonLayer, PolygonLayer } from '@deck.gl/layers'; +import { TripsLayer } from '@deck.gl/geo-layers'; +import { + getDate, + initSourceTxt, + initInfoTxt, + spinner +} from './utils.js'; + +(() => { + // + // SECTION: SPECIFICATION OF DOCUMENT ELEMENTS + // + + const canvas = document.getElementById(MTW_CANVAS_ID); + canvas.style.backgroundColor ='#111'; + + canvas.before(initSourceTxt( + "Source: mtw-boilerplate-decks
Data: NYC Taxi & Limousine Commission Trip Records; NYC OpenData; deck.gl-data; Mapzen; © OpenStreetMap contributors;
Moving, zooming & rotating is possible (e. g. hold down shift)" + )); + + const infoTxt = initInfoTxt('Loading


'); + canvas.before(infoTxt); + + // + // SECTION: LAYER SETTING + // + + const DATA_URL = { + BOUNDARIES: 'https://raw.githubusercontent.com/sitdisch/cloud/master/data/mtw-boilerplate-decks/mtw-deck-trips/boundaries.geojson', + BUILDINGS: 'https://raw.githubusercontent.com/visgl/deck.gl-data/master/examples/trips/buildings.json', + ROADS: 'https://raw.githubusercontent.com/sitdisch/cloud/master/data/mtw-boilerplate-decks/mtw-deck-trips/roads.geojson', + TRIPS: 'https://raw.githubusercontent.com/sitdisch/cloud/master/data/mtw-boilerplate-decks/mtw-deck-trips/trips.json', + }; + + const ambientLight = new AmbientLight({ + color: [255, 255, 255], + intensity: 1.0 + }); + + const pointLight = new PointLight({ + color: [255, 255, 255], + intensity: 2.0, + position: [-74.05, 40.7, 8000] + }); + + const DEFAULT_THEME = { + buildingColor: [74, 80, 87, 200], + trailColor0: [253, 128, 93], + trailColor1: [23, 184, 190], + + material: { + ambient: 0.1, + diffuse: 0.6, + shininess: 32, + specularColor: [60, 64, 70] + }, + + effects: [ + new LightingEffect({ + ambientLight, + pointLight + }) + ] + }; + + var layersLoaded = 0; + var tripsNum = 0; + + const backgroundLayers = [ + new GeoJsonLayer({ + id: 'boundaries', + data: DATA_URL.BOUNDARIES, + // Styles + stroked: true, + filled: true, + lineWidthMinPixels: 2, + getLineColor: [41, 57, 57, 100], + getFillColor: [18, 36, 36, 200], + onDataLoad: () => {layersLoaded += 1;}, + }), + + new GeoJsonLayer({ + id: 'roads', + data: DATA_URL.ROADS, + stroked: true, + lineWidthMinPixels: 1.5, + getLineColor: [5, 40, 53, 200], + onDataLoad: () => {layersLoaded += 1;} + }), + + new PolygonLayer({ + id: 'buildings', + data: DATA_URL.BUILDINGS, + extruded: true, + wireframe: false, + opacity: 0.5, + getPolygon: f => f.polygon, + getElevation: f => f.height, + getFillColor: DEFAULT_THEME.buildingColor, + material: DEFAULT_THEME.material, + onDataLoad: () => {layersLoaded += 1;} + }) + ]; + + function setTripsLayer() { + return new TripsLayer({ + id: 'trips', + data: DATA_URL.TRIPS, + getPath: d => d.path, + getTimestamps: d => d.timestamps, + opacity: 0.3, + widthMinPixels: 2, + capRounded: true, + trailLength: 25, + currentTime, + + getColor: d => ( + d.vendor === 0 ? DEFAULT_THEME.trailColor0 : DEFAULT_THEME.trailColor1 + ), + + onDataLoad: (d) => { + layersLoaded += 1; + tripsNum = d.length; + } + }); + }; + + // + // SECTION: DECK LAUNCHING & RENDERING + // + + const date = 'June 16, 2016 21:00:00'; + const startTime = 450; + const endTime = 1850; + var currentTime = 1200; + const TIME_WINDOW = 10; + const animationSpeed = TIME_WINDOW * 0.2; + + const viewState = { + longitude: -74.005, + latitude: 40.701, + zoom: 12.7, + minZoom: 11, + pitch: 45, + bearing: 0 + }; + + const deckgl = new Deck({ + canvas: MTW_CANVAS_ID, + effects: DEFAULT_THEME.effects, + controller: {touchRotate: true}, + + layers: [ + backgroundLayers, + setTripsLayer() + ], + + onWebGLInitialized: () => { + if (canvas.clientWidth >= 1400) { + viewState.longitude = -74; + viewState.zoom = 14.1; + + if (canvas.clientHeight > 1000) { + viewState.latitude = 40.715; + + } else if ((canvas.clientHeight <= 1000) && (canvas.clientHeight > 700)) { + viewState.latitude = 40.710; + } + + } else if (canvas.clientHeight >= 1000) { + viewState.longitude = -74.009; + viewState.latitude = 40.718; + viewState.zoom = 13.5; + + } else if ((canvas.clientHeight > 700) && (canvas.clientHeight < 1000)) { + viewState.latitude = 40.72; + + } else if ((canvas.clientHeight <= 700) && (canvas.clientHeight > 440)) { + viewState.latitude = 40.710; + } + + deckgl.setProps({initialViewState: viewState}); + }, + + onLoad: () => launch() + }); + + function launch() { + if (layersLoaded === 4) + requestAnimationFrame(render) + + else { + infoTxt.innerHTML = 'Loading
'+spinner()+'


'; + setTimeout(() => launch(), 100); + } + } + + function render() { + if (endTime === currentTime) { + currentTime = startTime; + }; + + infoTxt.innerHTML = 'Yellow & Green Cab Trips in NYC
'+new Date(getDate(date, currentTime)).toLocaleString('en-US')+"
Trips: "+tripsNum; + + deckgl.setProps({ + layers: [ + backgroundLayers, + setTripsLayer() + ] + }); + + currentTime += animationSpeed; + + setTimeout(() => requestAnimationFrame(render), 100); + } +})(); diff --git a/src/utils.js b/src/utils.js new file mode 100644 index 0000000..7d57a64 --- /dev/null +++ b/src/utils.js @@ -0,0 +1,195 @@ +/*! MTW-BOILERPLATE-DECKS: UTILS.JS + * + * Author: sitdisch + * Source: https://github.com/mythemeway + * License: MIT + * Copyright: © 2022 sitdisch + * + * UTILITIES ARE BASED ON: + * + * slice-data.js, animated-arc-layer.js + * + * Original Authors: deck.gl Contributors + * Sources: + * https://github.com/visgl/deck.gl/blob/8.7-release/examples/website/globe/animated-arc-layer.js + * https://github.com/visgl/deck.gl/blob/8.7-release/examples/website/globe/slice-data.js + * License: MIT + * Copyright: © 2020 Urban Computing Foundation + * Changes: made + */ + +"use strict"; + +const spinnerSign = ['◜', '◠', '◝', '◞', '◡', '◟']; +var spinnerIdx = -1; + +export function spinner() { + if (spinnerIdx === 5) {spinnerIdx = -1} + spinnerIdx += 1; + return spinnerSign[spinnerIdx]; +} + +const shadow = "0.05em 0 black, 0 0.05em black, -0.05em 0 black, 0 -0.05em black, -0.05em -0.05em black, -0.05em 0.05em black, 0.05em -0.05em black, 0.05em 0.05em black, 0 0 1em black"; + +export function initSourceTxt(content){ + const sourceTxt = document.createElement('div'); + sourceTxt.style.position = 'absolute'; + sourceTxt.style.zIndex = 1; + sourceTxt.style.top = '1%'; + sourceTxt.style.maxWidth = '215px'; + sourceTxt.style.right = '1%'; + sourceTxt.style.color = '#eeeeee'; + sourceTxt.style.padding = '5px'; + sourceTxt.style.backgroundColor ='rgba(255, 255, 255, .4)'; + sourceTxt.style.fontFamily = 'sans-serif'; + sourceTxt.style.fontSize = '12px'; + sourceTxt.style.border = '2px solid #eeeeee'; + sourceTxt.style.borderRadius = '6px'; + sourceTxt.style.boxShadow = shadow; + sourceTxt.innerHTML = content; + return sourceTxt; +}; + +export function initInfoTxt(content){ + const infoTxt = document.createElement('div'); + infoTxt.style.position = 'absolute'; + infoTxt.style.zIndex = 1; + infoTxt.style.bottom = '8%'; + infoTxt.style.color = '#eeeeee'; + infoTxt.style.width = '100%' + infoTxt.style.justifyContent = 'center'; + infoTxt.style.fontFamily = 'sans-serif'; + infoTxt.style.fontSize = '23px'; + infoTxt.style.textAlign ="center"; + infoTxt.style.textShadow = shadow; + infoTxt.innerHTML = content; + return infoTxt; +}; + +// +// SOURCE OF THE FOLLOWING: https://github.com/visgl/deck.gl/blob/8.7-release/examples/website/globe/slice-data.js +// + +const GROUP_SIZE = 2500; +const SEC_PER_DAY = 60 * 60 * 24; + +// Divide data into smaller groups, and render one layer for each group. +// This allows us to cheaply cull invisible flights by turning layers off and on. +export function sliceData(data) { + if (!data) { return []; } + + return data.flatMap((day, i) => { + if (day.groups) return day.groups; + + // Join multiple days together into a continuous animation + day.groups = []; + const offset = SEC_PER_DAY * i; + let group = null; + + for (const row of day.flights) { + row.time1 += offset; + row.time2 += offset; + + if (!group || group.flights.length >= GROUP_SIZE) { + group = { + date: day.date, + startTime: row.time1, + endTime: row.time2, + flights: [] + }; + + day.groups.push(group); + } + + group.flights.push(row); + group.startTime = Math.min(group.startTime, row.time1); + group.endTime = Math.max(group.endTime, row.time2); + } + + return day.groups; + }); +} + +// Look up the real date time from our artifical timestamp +export function getDate(data, t) { + if (typeof data === 'string') { + const timestamp = new Date(`${data}`).getTime() + (t % SEC_PER_DAY) * 1000; + return timestamp; + + } else { + const index = Math.min(data.length - 1, Math.floor(t / SEC_PER_DAY)); + const date = data[index].date; + const timestamp = new Date(`${date}T00:00:00Z`).getTime() + (t % SEC_PER_DAY) * 1000; + const endDate = (index === (data.length - 1)) ? true : false; + const flightNum = Math.round(data[index].flights.length / 100) / 10; + return [timestamp, endDate, flightNum]; + } +} + +// +// SOURCE OF THE FOLLOWING: https://github.com/visgl/deck.gl/blob/8.7-release/examples/website/globe/animated-arc-layer.js +// + +import {ArcLayer} from '@deck.gl/layers'; + +export class AnimatedArcLayer extends ArcLayer { + getShaders() { + const shaders = super.getShaders(); + + shaders.inject = { + 'vs:#decl': `\ +uniform vec2 timeRange; +attribute float instanceSourceTimestamp; +attribute float instanceTargetTimestamp; +varying float vTimestamp; +`, + 'vs:#main-end': `\ +vTimestamp = mix(instanceSourceTimestamp, instanceTargetTimestamp, segmentRatio); +`, + 'fs:#decl': `\ +uniform vec2 timeRange; +varying float vTimestamp; +`, + 'fs:#main-start': `\ +if (vTimestamp < timeRange.x || vTimestamp > timeRange.y) { + discard; +} +`, + 'fs:DECKGL_FILTER_COLOR': `\ +color.a *= (vTimestamp - timeRange.x) / (timeRange.y - timeRange.x); +` + }; + + return shaders; + } + + initializeState() { + super.initializeState(); + this.getAttributeManager().addInstanced({ + instanceSourceTimestamp: { + size: 1, + accessor: 'getSourceTimestamp' + }, + + instanceTargetTimestamp: { + size: 1, + accessor: 'getTargetTimestamp' + } + }); + } + + draw(params) { + params.uniforms = Object.assign({}, params.uniforms, { + timeRange: this.props.timeRange + }); + + super.draw(params); + } +} + +AnimatedArcLayer.layerName = 'AnimatedArcLayer'; +AnimatedArcLayer.defaultProps = { + getSourceTimestamp: {type: 'accessor', value: 0}, + getTargetTimestamp: {type: 'accessor', value: 1}, + timeRange: {type: 'array', compare: true, value: [0, 1]} +};