├── MANIFEST.in ├── example.gif ├── keycloak.png ├── streamlit_keycloak ├── frontend │ ├── src │ │ ├── events.d.ts │ │ ├── streamlit │ │ │ ├── index.ts │ │ │ ├── setStreamlitLifecycle.ts │ │ │ ├── WithStreamlitConnection.svelte │ │ │ ├── streamlit.ts │ │ │ └── ArrowTable.ts │ │ ├── localization.ts │ │ ├── main.ts │ │ ├── LoginDialog.svelte │ │ └── Keycloak.svelte │ ├── .prettierrc │ ├── public │ │ ├── check-sso.html │ │ ├── login.html │ │ └── index.html │ ├── tsconfig.json │ ├── package.json │ ├── rollup.config.js │ ├── README.md │ └── package-lock.json └── __init__.py ├── example.py ├── setup.py ├── LICENSE ├── .gitignore ├── .github └── workflows │ └── python-publish.yml └── README.md /MANIFEST.in: -------------------------------------------------------------------------------- 1 | recursive-include streamlit_keycloak/frontend/public * 2 | -------------------------------------------------------------------------------- /example.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bleumink/streamlit-keycloak/HEAD/example.gif -------------------------------------------------------------------------------- /keycloak.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/bleumink/streamlit-keycloak/HEAD/keycloak.png -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/events.d.ts: -------------------------------------------------------------------------------- 1 | declare namespace svelte.JSX { 2 | interface HTMLProps { 3 | onloggedin?: (event: CustomEvent) => void 4 | } 5 | } 6 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "trailingComma": "es5", 3 | "tabWidth": 4, 4 | "semi": false, 5 | "singleQuote": true, 6 | "plugins": [ 7 | "prettier-plugin-svelte" 8 | ] 9 | } -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/public/check-sso.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 10 | 11 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/streamlit/index.ts: -------------------------------------------------------------------------------- 1 | import type { RenderData as RenderData_ } from './streamlit' 2 | import WithStreamlitConnection from './WithStreamlitConnection.svelte' 3 | 4 | export { ArrowTable } from './ArrowTable' 5 | export { Streamlit } from './streamlit' 6 | 7 | export { setStreamlitLifecycle } from './setStreamlitLifecycle' 8 | export { WithStreamlitConnection } 9 | 10 | export type RenderData = RenderData_ 11 | -------------------------------------------------------------------------------- /example.py: -------------------------------------------------------------------------------- 1 | from streamlit_keycloak import login 2 | import streamlit as st 3 | 4 | st.title("Keycloak example") 5 | keycloak = login( 6 | url="http://localhost:8080", 7 | realm="myrealm", 8 | client_id="myclient", 9 | auto_refresh=True, 10 | init_options={"checkLoginIframe": False}, 11 | custom_labels={"errorPopupClosed": "You closed the popup!"} 12 | ) 13 | 14 | if keycloak.authenticated: 15 | st.write(keycloak) 16 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/public/login.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 11 | 12 | You have successfully logged in. 13 | If you were redirected here, feel free to close this window and refresh the page to continue. 14 | 15 | 16 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/localization.ts: -------------------------------------------------------------------------------- 1 | export interface LabelMap { 2 | labelButton?: string 3 | labelLogin?: string 4 | errorNoPopup?: string 5 | errorPopupClosed?: string 6 | errorFatal?: string 7 | } 8 | 9 | export const defaultLabels: LabelMap = { 10 | labelButton: 'Sign in', 11 | labelLogin: 'Please sign in to your account.', 12 | errorNoPopup: 13 | 'Unable to open the authentication popup. Allow popups and refresh the page to proceed.', 14 | errorPopupClosed: 'Authentication popup was closed manually.', 15 | errorFatal: 16 | 'Unable to connect to Keycloak using the current configuration.', 17 | } 18 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "@tsconfig/svelte/tsconfig.json", 3 | "compilerOptions": { 4 | "target": "esnext", 5 | "lib": ["dom", "dom.iterable", "esnext"], 6 | "allowJs": true, 7 | "skipLibCheck": true, 8 | "esModuleInterop": true, 9 | "allowSyntheticDefaultImports": true, 10 | "strict": true, 11 | "forceConsistentCasingInFileNames": true, 12 | "module": "esnext", 13 | "moduleResolution": "node", 14 | "resolveJsonModule": true, 15 | "isolatedModules": true, 16 | "noEmit": true 17 | }, 18 | "include": ["src/**/*"], 19 | "exclude": ["node_modules/*", "__sapper__/*", "public/*"] 20 | } 21 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Streamlit Component 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /setup.py: -------------------------------------------------------------------------------- 1 | from pathlib import Path 2 | import setuptools 3 | 4 | setuptools.setup( 5 | name="streamlit-keycloak", 6 | version="1.1.1", 7 | author="Gideon Bleumink", 8 | author_email="", 9 | description="Keycloak authentication for Streamlit", 10 | long_description=(Path(__file__).parent / "README.md").read_text(), 11 | long_description_content_type="text/markdown", 12 | url="https://github.com/bleumink/streamlit-keycloak", 13 | packages=setuptools.find_packages(), 14 | include_package_data=True, 15 | classifiers=[], 16 | python_requires=">=3.7", 17 | install_requires=[ 18 | # By definition, a Custom Component depends on Streamlit. 19 | # If your component has other Python dependencies, list 20 | # them here. 21 | "streamlit >= 0.63", 22 | ], 23 | ) 24 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "streamlit-keycloak", 3 | "version": "1.0.1", 4 | "scripts": { 5 | "build": "rollup -c", 6 | "dev": "rollup -c -w", 7 | "start": "sirv public", 8 | "validate": "svelte-check" 9 | }, 10 | "devDependencies": { 11 | "@rollup/plugin-commonjs": "^12.0.0", 12 | "@rollup/plugin-node-resolve": "^8.0.0", 13 | "@rollup/plugin-typescript": "^4.0.0", 14 | "@tsconfig/svelte": "^1.0.0", 15 | "rollup": "^2.3.4", 16 | "rollup-plugin-livereload": "^1.0.0", 17 | "rollup-plugin-svelte": "^6.1.1", 18 | "rollup-plugin-terser": "^5.1.2", 19 | "svelte": "^3.0.0", 20 | "svelte-check": "^1.0.0", 21 | "svelte-preprocess": "^4.0.0", 22 | "tslib": "^2.0.0", 23 | "typescript": "^3.9.3" 24 | }, 25 | "dependencies": { 26 | "apache-arrow": "^0.17.0", 27 | "event-target-shim": "^5.0.1", 28 | "keycloak-js": "^20.0.1", 29 | "sirv-cli": "^1.0.0" 30 | } 31 | } -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/main.ts: -------------------------------------------------------------------------------- 1 | import { WithStreamlitConnection } from './streamlit' 2 | import Keycloak from './Keycloak.svelte' 3 | 4 | // "WithStreamlitConnection" is a wrapper component. It bootstraps the 5 | // connection between your component and the Streamlit app, and handles 6 | // passing arguments from Python -> Component. 7 | // 8 | // You don't need to edit withStreamlitConnection (but you're welcome to!). 9 | const keycloakComponent = new WithStreamlitConnection({ 10 | target: document.body, 11 | props: { 12 | /** 13 | * Custom Streamlit component 14 | */ 15 | component: Keycloak, 16 | 17 | /** 18 | * Set to false if you want `args` (the named dictionary of arguments passed 19 | * from Python) to be passed as a dictionary to your component. 20 | * 21 | * Default is `true`. 22 | */ 23 | spreadArgs: true, 24 | }, 25 | }) 26 | 27 | export default keycloakComponent 28 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2018-2021 Streamlit Inc. 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy 4 | of this software and associated documentation files (the "Software"), to deal 5 | in the Software without restriction, including without limitation the rights 6 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 7 | copies of the Software, and to permit persons to whom the Software is 8 | furnished to do so, subject to the following conditions: 9 | 10 | The above copyright notice and this permission notice shall be included in all 11 | copies or substantial portions of the Software. 12 | 13 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 14 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 15 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 16 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 17 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 18 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 19 | SOFTWARE. 20 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/streamlit/setStreamlitLifecycle.ts: -------------------------------------------------------------------------------- 1 | import { onMount, afterUpdate } from 'svelte' 2 | import { Streamlit } from './streamlit' 3 | 4 | /** 5 | * [Optional] Set Streamlit Svelte Lifecycle functions 6 | * 7 | * You are not required call this function on your Streamlit 8 | * component. If you decide not to call it, you should implement the 9 | * `onMount` and `afterUpdate` functions in your own component, 10 | * so that your plugin properly resizes. 11 | */ 12 | export const setStreamlitLifecycle = (): void => { 13 | onMount((): void => { 14 | // Finally, tell Streamlit to update our initial height. We omit the 15 | // `height` parameter here to have it default to our scrollHeight. 16 | Streamlit.setFrameHeight() 17 | }) 18 | 19 | afterUpdate((): void => { 20 | // We tell Streamlit to update our frameHeight after each update, in 21 | // case it has changed. (This isn't strictly necessary for the example 22 | // because our height stays fixed, but this is a low-cost function, so 23 | // there's no harm in doing it redundantly.) 24 | Streamlit.setFrameHeight() 25 | }) 26 | } 27 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ######################################################################## 2 | # Python - https://github.com/github/gitignore/blob/master/Python.gitignore 3 | ######################################################################## 4 | # Byte-compiled / optimized / DLL files 5 | __pycache__/ 6 | *.py[cod] 7 | *$py.class 8 | 9 | # Distribution / packaging 10 | build/ 11 | dist/ 12 | eggs/ 13 | .eggs/ 14 | *.egg-info/ 15 | *.egg 16 | 17 | # Unit test / coverage reports 18 | .coverage 19 | .coverage\.* 20 | .pytest_cache/ 21 | .mypy_cache/ 22 | test-reports 23 | 24 | # Test fixtures 25 | cffi_bin 26 | 27 | # Pyenv Stuff 28 | .python-version 29 | 30 | ######################################################################## 31 | # OSX - https://github.com/github/gitignore/blob/master/Global/macOS.gitignore 32 | ######################################################################## 33 | .DS_Store 34 | .DocumentRevisions-V100 35 | .fseventsd 36 | .Spotlight-V100 37 | .TemporaryItems 38 | .Trashes 39 | .VolumeIcon.icns 40 | .com.apple.timemachine.donotpresent 41 | 42 | ######################################################################## 43 | # node - https://github.com/github/gitignore/blob/master/Node.gitignore 44 | ######################################################################## 45 | # Logs 46 | npm-debug.log* 47 | yarn-debug.log* 48 | yarn-error.log* 49 | 50 | # Dependency directories 51 | node_modules/ 52 | 53 | # Coverage directory used by tools like istanbul 54 | coverage/ 55 | 56 | # Lockfiles 57 | yarn.lock 58 | package-lock.json 59 | 60 | ######################################################################## 61 | # JetBrains 62 | ######################################################################## 63 | .idea 64 | 65 | ######################################################################## 66 | # VSCode 67 | ######################################################################## 68 | .vscode/ 69 | -------------------------------------------------------------------------------- /.github/workflows/python-publish.yml: -------------------------------------------------------------------------------- 1 | # This workflow will upload a Python Package using Twine when a release is created 2 | # For more information see: https://docs.github.com/en/actions/automating-builds-and-tests/building-and-testing-python#publishing-to-package-registries 3 | 4 | # This workflow uses actions that are not certified by GitHub. 5 | # They are provided by a third-party and are governed by 6 | # separate terms of service, privacy policy, and support 7 | # documentation. 8 | 9 | name: Upload Python Package 10 | 11 | on: 12 | release: 13 | types: [published] 14 | 15 | permissions: 16 | contents: read 17 | 18 | jobs: 19 | build: 20 | runs-on: ubuntu-latest 21 | 22 | steps: 23 | - uses: actions/checkout@v3 24 | 25 | - name: Use Node.js 16.x 26 | uses: actions/setup-node@v3 27 | with: 28 | node-version: 16.x 29 | 30 | - name: Build 31 | run: | 32 | npm ci --prefix streamlit_keycloak/frontend 33 | npm run build --prefix streamlit_keycloak/frontend 34 | 35 | - name: Upload a Build Artifact 36 | uses: actions/upload-artifact@v3.1.1 37 | with: 38 | name: frontend_build 39 | path: streamlit_keycloak/frontend/public/build 40 | if-no-files-found: error 41 | 42 | deploy: 43 | needs: build 44 | runs-on: ubuntu-latest 45 | 46 | steps: 47 | - uses: actions/checkout@v3 48 | 49 | - name: Download a Build Artifact 50 | uses: actions/download-artifact@v3.0.1 51 | with: 52 | name: frontend_build 53 | path: streamlit_keycloak/frontend/public/build 54 | 55 | - name: Set up Python 56 | uses: actions/setup-python@v3 57 | with: 58 | python-version: '3.x' 59 | 60 | - name: Install dependencies 61 | run: | 62 | python -m pip install --upgrade pip 63 | pip install setuptools wheel 64 | 65 | - name: Build package 66 | run: python setup.py sdist bdist_wheel 67 | 68 | - name: Publish package 69 | uses: pypa/gh-action-pypi-publish@27b31702a0e7fc50959f5ad993c78deac1bdfc29 70 | with: 71 | user: __token__ 72 | password: ${{ secrets.PYPI_API_TOKEN }} 73 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import resolve from '@rollup/plugin-node-resolve'; 3 | import commonjs from '@rollup/plugin-commonjs'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import sveltePreprocess from 'svelte-preprocess'; 7 | import typescript from '@rollup/plugin-typescript'; 8 | 9 | const production = !process.env.ROLLUP_WATCH; 10 | 11 | function serve() { 12 | let server; 13 | 14 | function toExit() { 15 | if (server) server.kill(0); 16 | } 17 | 18 | return { 19 | writeBundle() { 20 | if (server) return; 21 | server = require('child_process').spawn('npm', ['run', 'start', '--', '--dev'], { 22 | stdio: ['ignore', 'inherit', 'inherit'], 23 | shell: true 24 | }); 25 | 26 | process.on('SIGTERM', toExit); 27 | process.on('exit', toExit); 28 | } 29 | }; 30 | } 31 | 32 | export default { 33 | input: 'src/main.ts', 34 | output: { 35 | sourcemap: true, 36 | format: 'iife', 37 | name: 'app', 38 | file: 'public/build/bundle.js' 39 | }, 40 | plugins: [ 41 | svelte({ 42 | // enable run-time checks when not in production 43 | dev: !production, 44 | // we'll extract any component CSS out into 45 | // a separate file - better for performance 46 | css: css => { 47 | css.write('bundle.css'); 48 | }, 49 | preprocess: sveltePreprocess(), 50 | }), 51 | 52 | // If you have external dependencies installed from 53 | // npm, you'll most likely need these plugins. In 54 | // some cases you'll need additional configuration - 55 | // consult the documentation for details: 56 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 57 | resolve({ 58 | browser: true, 59 | dedupe: ['svelte'] 60 | }), 61 | commonjs(), 62 | typescript({ sourceMap: !production }), 63 | 64 | // In dev mode, call `npm run start` once 65 | // the bundle has been generated 66 | !production && serve(), 67 | 68 | // Watch the `public` directory and refresh the 69 | // browser on changes when not in production 70 | !production && livereload('public'), 71 | 72 | // If we're building for production (npm run build 73 | // instead of npm run dev), minify 74 | production && terser() 75 | ], 76 | watch: { 77 | clearScreen: false 78 | } 79 | }; 80 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/streamlit/WithStreamlitConnection.svelte: -------------------------------------------------------------------------------- 1 | 65 | 66 | 67 | 68 | {#if renderData} 69 | {#if spreadArgs} 70 | 71 | {:else} 72 | 73 | {/if} 74 | {/if} 75 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/README.md: -------------------------------------------------------------------------------- 1 | *Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)* 2 | 3 | --- 4 | 5 | # svelte app 6 | 7 | This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template. 8 | 9 | To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit): 10 | 11 | ```bash 12 | npx degit sveltejs/template svelte-app 13 | cd svelte-app 14 | ``` 15 | 16 | *Note that you will need to have [Node.js](https://nodejs.org) installed.* 17 | 18 | 19 | ## Get started 20 | 21 | Install the dependencies... 22 | 23 | ```bash 24 | cd svelte-app 25 | npm install 26 | ``` 27 | 28 | ...then start [Rollup](https://rollupjs.org): 29 | 30 | ```bash 31 | npm run dev 32 | ``` 33 | 34 | Navigate to [localhost:5000](http://localhost:5000). You should see your app running. Edit a component file in `src`, save it, and reload the page to see your changes. 35 | 36 | By default, the server will only respond to requests from localhost. To allow connections from other computers, edit the `sirv` commands in package.json to include the option `--host 0.0.0.0`. 37 | 38 | 39 | ## Building and running in production mode 40 | 41 | To create an optimised version of the app: 42 | 43 | ```bash 44 | npm run build 45 | ``` 46 | 47 | You can run the newly built app with `npm run start`. This uses [sirv](https://github.com/lukeed/sirv), which is included in your package.json's `dependencies` so that the app will work when you deploy to platforms like [Heroku](https://heroku.com). 48 | 49 | 50 | ## Single-page app mode 51 | 52 | By default, sirv will only respond to requests that match files in `public`. This is to maximise compatibility with static fileservers, allowing you to deploy your app anywhere. 53 | 54 | If you're building a single-page app (SPA) with multiple routes, sirv needs to be able to respond to requests for *any* path. You can make it so by editing the `"start"` command in package.json: 55 | 56 | ```js 57 | "start": "sirv public --single" 58 | ``` 59 | 60 | ## Using TypeScript 61 | 62 | This template comes with a script to set up a TypeScript development environment, you can run it immediately after cloning the template with: 63 | 64 | ```bash 65 | node scripts/setupTypeScript.js 66 | ``` 67 | 68 | Or remove the script via: 69 | 70 | ```bash 71 | rm scripts/setupTypeScript.js 72 | ``` 73 | 74 | ## Deploying to the web 75 | 76 | ### With [Vercel](https://vercel.com) 77 | 78 | Install `vercel` if you haven't already: 79 | 80 | ```bash 81 | npm install -g vercel 82 | ``` 83 | 84 | Then, from within your project folder: 85 | 86 | ```bash 87 | cd public 88 | vercel deploy --name my-project 89 | ``` 90 | 91 | ### With [surge](https://surge.sh/) 92 | 93 | Install `surge` if you haven't already: 94 | 95 | ```bash 96 | npm install -g surge 97 | ``` 98 | 99 | Then, from within your project folder: 100 | 101 | ```bash 102 | npm run build 103 | surge public my-project.surge.sh 104 | ``` 105 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/LoginDialog.svelte: -------------------------------------------------------------------------------- 1 | 79 | 80 |
81 | 84 | {labels.labelLogin} 85 | {#if showPopup} 86 | {#await authenticateWithPopup(currentPopup) catch error} 87 |
{error.message}
88 | {/await} 89 | {/if} 90 |
91 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/Keycloak.svelte: -------------------------------------------------------------------------------- 1 | 102 | 103 |
104 | {#await authenticate() then authenticated} 105 | {#if !authenticated} 106 | { 109 | keycloak.login(loginOptions) 110 | }} 111 | /> 112 | {/if} 113 | {:catch exception} 114 |
115 | {labels.errorFatal} 116 |
117 | {exception.error} 118 |
119 | {/await} 120 |
121 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Streamlit Keycloak 2 | **Keycloak user authentication and single sign-on inside your Streamlit app** 3 | 4 | ## Installation 5 | `pip install streamlit-keycloak` 6 | 7 | ## Usage 8 | Provide the URL to your Keycloak server, the realm and client and the component will perform the authentication when the app is rendered. First it will attempt to silently authenticate using single sign-on. If this fails, a dialog will appear from which you can open a popup to the Keycloak login page. 9 | 10 | When authentication is successful, the component returns a dataclass containing the authentication state, an access token, which can be used to access other restricted resources, a refresh token and a user info object, containing e.g. the username and group memberships. If your configuration provides refresh tokens, the access token can be automatically refreshed when it expires. 11 | 12 | So far the component has not been tested in a wide variety of environments. So if you’re also using Keycloak and would benefit from less logging in and easy access to tokens, give this a go and share your experience. Feedback is always welcome. 13 | 14 | Frontend authentication like this can only be done with clients that have their access type set to ‘public’ as their is no way to securely provide the client secret from the browser. 15 | 16 | ## Examples 17 | ```python 18 | from dataclasses import asdict 19 | from streamlit_keycloak import login 20 | import streamlit as st 21 | 22 | 23 | def main(): 24 | st.subheader(f"Welcome {keycloak.user_info['preferred_username']}!") 25 | st.write(f"Here is your user information:") 26 | st.write(asdict(keycloak)) 27 | 28 | 29 | st.title("Streamlit Keycloak example") 30 | keycloak = login( 31 | url="http://localhost:8080", 32 | realm="myrealm", 33 | client_id="myclient", 34 | ) 35 | 36 | if keycloak.authenticated: 37 | main() 38 | ``` 39 | ![streamlit-keycloak showcase|639x663](https://github.com/bleumink/streamlit-keycloak/blob/master/example.gif?raw=true) 40 | 41 | By default your access tokens will be refreshed when they expire. Refreshing the tokens will cause your app to be rerendered. If this is not desired, this behaviour can be disabled using the ```auto_refresh``` parameter. 42 | 43 | ```python 44 | keycloak = login( 45 | url="http://localhost:8080", 46 | realm="myrealm", 47 | client_id="myclient", 48 | auto_refresh=False 49 | ) 50 | ``` 51 | 52 | Depending on your Keycloak configuration, you might want to specify additional parameters to the Keycloak. These can be provided using the ```init_options``` parameter and will be passed to the init function in the frontend. See the [keycloak-js documentation](https://www.keycloak.org/docs/latest/securing_apps/index.html#_javascript_adapter) for details. 53 | 54 | ```python 55 | keycloak = login( 56 | url="http://localhost:8080", 57 | realm="myrealm", 58 | client_id="myclient", 59 | init_options={ 60 | "checkLoginIframe": False 61 | } 62 | ) 63 | ``` 64 | 65 | All text in the login dialog can be customized using the ```custom_labels``` parameter, by providing a dictionary with specific keys set. 66 | 67 | ```python 68 | keycloak = login( 69 | url="http://localhost:8080", 70 | realm="myrealm", 71 | client_id="myclient", 72 | custom_labels={ 73 | "labelButton": "Sign in", 74 | "labelLogin": "Please sign in to your account.", 75 | "errorNoPopup": "Unable to open the authentication popup. Allow popups and refresh the page to proceed.", 76 | "errorPopupClosed": "Authentication popup was closed manually.", 77 | "errorFatal": "Unable to connect to Keycloak using the current configuration." 78 | } 79 | ) 80 | ``` 81 | 82 | ## Getting started with Keycloak 83 | Setting up your own Keycloak instance can be tricky. [This guide should get you started.](https://www.keycloak.org/getting-started/getting-started-docker) 84 | 85 | ### TLDR 86 | - Create your Keycloak instance 87 | - Create a realm 88 | - Create a client 89 | - Keep client authentication disabled 90 | - Set a valid redirect uri, e.g. https://hostname:port/* 91 | - Set valid web origins, e.g. https://hostname 92 | - Create a user 93 | - Set a password for it 94 | 95 | A minimum configuration should look something like this: 96 | ![keycloak configuration](https://github.com/bleumink/streamlit-keycloak/blob/master/keycloak.png?raw=true) 97 | 98 | ## Credits 99 | Many thanks to the authors of the [streamlit-auth0](https://github.com/conradbez/streamlit-auth0) and [auth0-spa-js](https://github.com/auth0/auth0-spa-js) packages for inspiring a large part of the approach. 100 | 101 | And thanks to 93degree for the [Svelte component template](https://github.com/93degree/streamlit-component-svelte-template), which is awesome. 102 | -------------------------------------------------------------------------------- /streamlit_keycloak/__init__.py: -------------------------------------------------------------------------------- 1 | import os 2 | import streamlit.components.v1 as components 3 | from dataclasses import dataclass 4 | from typing import Optional 5 | 6 | 7 | @dataclass 8 | class Keycloak: 9 | authenticated: bool 10 | access_token: Optional[str] = None 11 | refresh_token: Optional[str] = None 12 | user_info: Optional[dict] = None 13 | id_token: Optional[str] = None 14 | 15 | 16 | # Create a _RELEASE constant. We'll set this to False while we're developing 17 | # the component, and True when we're ready to package and distribute it. 18 | # (This is, of course, optional - there are innumerable ways to manage your 19 | # release process.) 20 | _RELEASE = True 21 | 22 | # Declare a Streamlit component. `declare_component` returns a function 23 | # that is used to create instances of the component. We're naming this 24 | # function "_component_func", with an underscore prefix, because we don't want 25 | # to expose it directly to users. Instead, we will create a custom wrapper 26 | # function, below, that will serve as our component's public API. 27 | 28 | # It's worth noting that this call to `declare_component` is the 29 | # *only thing* you need to do to create the binding between Streamlit and 30 | # your component frontend. Everything else we do in this file is simply a 31 | # best practice. 32 | 33 | if not _RELEASE: 34 | _keycloak_component = components.declare_component( 35 | # We give the component a simple, descriptive name ("my_component" 36 | # does not fit this bill, so please choose something better for your 37 | # own component :) 38 | "keycloak", 39 | # Pass `url` here to tell Streamlit that the component will be served 40 | # by the local dev server that you run via `npm run start`. 41 | # (This is useful while your component is in development.) 42 | url="http://localhost:5000", 43 | ) 44 | else: 45 | # When we're distributing a production version of the component, we'll 46 | # replace the `url` param with `path`, and point it to to the component's 47 | # build directory: 48 | parent_dir = os.path.dirname(os.path.abspath(__file__)) 49 | build_dir = os.path.join(parent_dir, "frontend/public") 50 | _keycloak_component = components.declare_component("keycloak", path=build_dir) 51 | 52 | 53 | # Create a wrapper function for the component. This is an optional 54 | # best practice - we could simply expose the component function returned by 55 | # `declare_component` and call it done. The wrapper allows us to customize 56 | # our component's API: we can pre-process its input args, post-process its 57 | # output value, and add a docstring for users. 58 | def login( 59 | url: str, 60 | realm: str, 61 | client_id: str, 62 | auto_refresh: bool = True, 63 | init_options: Optional[dict] = None, 64 | custom_labels: Optional[dict] = None, 65 | key: Optional[str] = None, 66 | login_options: Optional[dict] = None, 67 | ) -> Keycloak: 68 | """Creates a new Keycloak component and authenticates. 69 | 70 | Parameters 71 | ---------- 72 | url: str 73 | URL of the Keycloak server. 74 | realm: str 75 | Realm to authenticate with. 76 | client_id: str 77 | Client ID to authenticate with. 78 | auto_refresh: bool 79 | Automatically refresh the access token when it expires. 80 | This rerenders the app. Defaults to true. 81 | init_options: dict or None 82 | Optionally set initialization options for Keycloak. These are passed on to 83 | the init function in the frontend. See keycloak-js documentation for details. 84 | custom_labels: dict or None 85 | Optionally provide a dictionary containing alternative text to display 86 | in the login dialog. The following keys should be set: 87 | "labelButton", "labelLogin", "errorNoPopup", "errorPopupClosed" and "errorFatal" 88 | key: str or None 89 | An optional key that uniquely identifies this component. If this is 90 | None, and the component's arguments are changed, the component will 91 | be re-mounted in the Streamlit frontend and lose its current state. 92 | login_options: dict or None 93 | Optionally set login options for Keycloak. These are passed on to 94 | the login function in the frontend. See keycloak-js documentation for details. 95 | 96 | Returns 97 | ------- 98 | Keycloak 99 | A dataclass containing authentication state, access token, refresh token and user information. 100 | 101 | """ 102 | # Call through to our private component function. Arguments we pass here 103 | # will be sent to the frontend, where they'll be available in an "args" 104 | # dictionary. 105 | # 106 | # "default" is a special argument that specifies the initial return 107 | # value of the component before the user has interacted with it. 108 | 109 | default = {"authenticated": False} 110 | keycloak = _keycloak_component( 111 | url=url, 112 | realm=realm, 113 | clientId=client_id, 114 | autoRefresh=auto_refresh, 115 | initOptions=init_options, 116 | customLabels=custom_labels, 117 | key=key, 118 | default=default, 119 | loginOptions=login_options, 120 | ) 121 | 122 | return Keycloak(**keycloak) 123 | 124 | 125 | # Add some test code to play with the component while it's in development. 126 | # During development, we can run this just as we would any other Streamlit 127 | # app: `$ streamlit run keycloak/__init__.py` 128 | if not _RELEASE: 129 | import streamlit as st 130 | 131 | st.subheader("Authenticate with Keycloak") 132 | 133 | keycloak = login( 134 | "http://localhost:8080", 135 | "myrealm", 136 | "myclient", 137 | init_options={"checkLoginIframe": False}, 138 | ) 139 | 140 | st.write(keycloak) 141 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/streamlit/streamlit.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2018-2020 Streamlit Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | // Safari doesn't support the EventTarget class, so we use a shim. 19 | import { EventTarget } from 'event-target-shim' 20 | import { ArrowDataframeProto, ArrowTable } from './ArrowTable' 21 | 22 | /** Data sent in the custom Streamlit render event. */ 23 | export interface RenderData { 24 | args: any 25 | disabled: boolean 26 | } 27 | 28 | /** Messages from Component -> Streamlit */ 29 | enum ComponentMessageType { 30 | // A component sends this message when it's ready to receive messages 31 | // from Streamlit. Streamlit won't send any messages until it gets this. 32 | // Data: { apiVersion: number } 33 | COMPONENT_READY = 'streamlit:componentReady', 34 | 35 | // The component has a new widget value. Send it back to Streamlit, which 36 | // will then re-run the app. 37 | // Data: { value: any } 38 | SET_COMPONENT_VALUE = 'streamlit:setComponentValue', 39 | 40 | // The component has a new height for its iframe. 41 | // Data: { height: number } 42 | SET_FRAME_HEIGHT = 'streamlit:setFrameHeight', 43 | } 44 | 45 | /** 46 | * Streamlit communication API. 47 | * 48 | * Components can send data to Streamlit via the functions defined here, 49 | * and receive data from Streamlit via the `events` property. 50 | */ 51 | export class Streamlit { 52 | /** 53 | * The Streamlit component API version we're targetting. 54 | * There's currently only 1! 55 | */ 56 | public static readonly API_VERSION = 1 57 | 58 | public static readonly RENDER_EVENT = 'streamlit:render' 59 | 60 | /** Dispatches events received from Streamlit. */ 61 | public static readonly events = new EventTarget() 62 | 63 | private static registeredMessageListener = false 64 | private static lastFrameHeight?: number 65 | 66 | /** 67 | * Tell Streamlit that the component is ready to start receiving data. 68 | * Streamlit will defer emitting RENDER events until it receives the 69 | * COMPONENT_READY message. 70 | */ 71 | public static setComponentReady = (): void => { 72 | if (!Streamlit.registeredMessageListener) { 73 | // Register for message events if we haven't already 74 | window.addEventListener('message', Streamlit.onMessageEvent) 75 | Streamlit.registeredMessageListener = true 76 | } 77 | 78 | Streamlit.sendBackMsg(ComponentMessageType.COMPONENT_READY, { 79 | apiVersion: Streamlit.API_VERSION, 80 | }) 81 | } 82 | 83 | /** 84 | * Report the component's height to Streamlit. 85 | * This should be called every time the component changes its DOM - that is, 86 | * when it's first loaded, and any time it updates. 87 | */ 88 | public static setFrameHeight = (height?: number): void => { 89 | if (height === undefined) { 90 | // `height` is optional. If undefined, it defaults to scrollHeight, 91 | // which is the entire height of the element minus its border, 92 | // scrollbar, and margin. 93 | height = document.body.scrollHeight 94 | } 95 | 96 | if (height === Streamlit.lastFrameHeight) { 97 | // Don't bother updating if our height hasn't changed. 98 | return 99 | } 100 | 101 | Streamlit.lastFrameHeight = height 102 | Streamlit.sendBackMsg(ComponentMessageType.SET_FRAME_HEIGHT, { height }) 103 | } 104 | 105 | /** 106 | * Set the component's value. This value will be returned to the Python 107 | * script, and the script will be re-run. 108 | * 109 | * For example: 110 | * 111 | * JavaScript: 112 | * Streamlit.setComponentValue("ahoy!") 113 | * 114 | * Python: 115 | * value = st.my_component(...) 116 | * st.write(value) # -> "ahoy!" 117 | * 118 | * The value must be serializable into JSON. 119 | */ 120 | public static setComponentValue = (value: any): void => { 121 | Streamlit.sendBackMsg(ComponentMessageType.SET_COMPONENT_VALUE, { 122 | value, 123 | }) 124 | } 125 | 126 | /** Receive a ForwardMsg from the Streamlit app */ 127 | private static onMessageEvent = (event: MessageEvent): void => { 128 | const type = event.data['type'] 129 | switch (type) { 130 | case Streamlit.RENDER_EVENT: 131 | Streamlit.onRenderMessage(event.data) 132 | break 133 | } 134 | } 135 | 136 | /** 137 | * Handle an untyped Streamlit render event and redispatch it as a 138 | * StreamlitRenderEvent. 139 | */ 140 | private static onRenderMessage = (data: any): void => { 141 | let args = data['args'] 142 | if (args == null) { 143 | console.error( 144 | `Got null args in onRenderMessage. This should never happen` 145 | ) 146 | args = {} 147 | } 148 | 149 | // Parse our dataframe arguments with arrow, and merge them into our args dict 150 | const dataframeArgs = 151 | data['dfs'] && data['dfs'].length > 0 152 | ? Streamlit.argsDataframeToObject(data['dfs']) 153 | : {} 154 | 155 | args = { 156 | ...args, 157 | ...dataframeArgs, 158 | } 159 | 160 | const disabled = Boolean(data['disabled']) 161 | 162 | // Dispatch a render event! 163 | const eventData = { disabled, args } 164 | const event = new CustomEvent(Streamlit.RENDER_EVENT, { 165 | detail: eventData, 166 | }) 167 | Streamlit.events.dispatchEvent(event) 168 | } 169 | 170 | private static argsDataframeToObject = ( 171 | argsDataframe: ArgsDataframe[] 172 | ): object => { 173 | const argsDataframeArrow = argsDataframe.map( 174 | ({ key, value }: ArgsDataframe) => [ 175 | key, 176 | Streamlit.toArrowTable(value), 177 | ] 178 | ) 179 | return Object.fromEntries(argsDataframeArrow) 180 | } 181 | 182 | private static toArrowTable = (df: ArrowDataframeProto): ArrowTable => { 183 | const { data, index, columns } = df.data 184 | return new ArrowTable(data, index, columns) 185 | } 186 | 187 | /** Post a message to the Streamlit app. */ 188 | private static sendBackMsg = (type: string, data?: any): void => { 189 | window.parent.postMessage( 190 | { 191 | isStreamlitMessage: true, 192 | type: type, 193 | ...data, 194 | }, 195 | '*' 196 | ) 197 | } 198 | } 199 | 200 | interface ArgsDataframe { 201 | key: string 202 | value: ArrowDataframeProto 203 | } 204 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/src/streamlit/ArrowTable.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @license 3 | * Copyright 2018-2019 Streamlit Inc. 4 | * 5 | * Licensed under the Apache License, Version 2.0 (the "License"); 6 | * you may not use this file except in compliance with the License. 7 | * You may obtain a copy of the License at 8 | * 9 | * http://www.apache.org/licenses/LICENSE-2.0 10 | * 11 | * Unless required by applicable law or agreed to in writing, software 12 | * distributed under the License is distributed on an "AS IS" BASIS, 13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 14 | * See the License for the specific language governing permissions and 15 | * limitations under the License. 16 | */ 17 | 18 | import { Table, Type } from 'apache-arrow' 19 | 20 | type CellType = 'blank' | 'index' | 'columns' | 'data' 21 | 22 | export interface ArrowDataframeProto { 23 | data: ArrowTableProto 24 | height: string 25 | width: string 26 | } 27 | 28 | export interface ArrowTableProto { 29 | data: Uint8Array 30 | index: Uint8Array 31 | columns: Uint8Array 32 | styler: Styler 33 | } 34 | 35 | interface Cell { 36 | classNames: string 37 | content: string 38 | id?: string 39 | type: CellType 40 | } 41 | 42 | interface Styler { 43 | caption?: string 44 | displayValuesTable: Table 45 | styles?: string 46 | uuid: string 47 | } 48 | 49 | export class ArrowTable { 50 | private readonly dataTable: Table 51 | private readonly indexTable: Table 52 | private readonly columnsTable: Table 53 | private readonly styler?: Styler 54 | 55 | constructor( 56 | dataBuffer: Uint8Array, 57 | indexBuffer: Uint8Array, 58 | columnsBuffer: Uint8Array, 59 | styler?: any 60 | ) { 61 | this.dataTable = Table.from(dataBuffer) 62 | this.indexTable = Table.from(indexBuffer) 63 | this.columnsTable = Table.from(columnsBuffer) 64 | this.styler = styler 65 | ? { 66 | caption: styler.get('caption'), 67 | displayValuesTable: Table.from(styler.get('displayValues')), 68 | styles: styler.get('styles'), 69 | uuid: styler.get('uuid'), 70 | } 71 | : undefined 72 | } 73 | 74 | get rows(): number { 75 | return this.indexTable.length + this.columnsTable.numCols 76 | } 77 | 78 | get columns(): number { 79 | return this.indexTable.numCols + this.columnsTable.length 80 | } 81 | 82 | get headerRows(): number { 83 | return this.rows - this.dataRows 84 | } 85 | 86 | get headerColumns(): number { 87 | return this.columns - this.dataColumns 88 | } 89 | 90 | get dataRows(): number { 91 | return this.dataTable.length 92 | } 93 | 94 | get dataColumns(): number { 95 | return this.dataTable.numCols 96 | } 97 | 98 | get uuid(): string | undefined { 99 | return this.styler && this.styler.uuid 100 | } 101 | 102 | get caption(): string | undefined { 103 | return this.styler && this.styler.caption 104 | } 105 | 106 | get styles(): string | undefined { 107 | return this.styler && this.styler.styles 108 | } 109 | 110 | get table(): Table { 111 | return this.dataTable 112 | } 113 | 114 | get index(): Table { 115 | return this.indexTable 116 | } 117 | 118 | get columnTable(): Table { 119 | return this.columnsTable 120 | } 121 | 122 | public getCell = (rowIndex: number, columnIndex: number): Cell => { 123 | const isBlankCell = 124 | rowIndex < this.headerRows && columnIndex < this.headerColumns 125 | const isIndexCell = 126 | rowIndex >= this.headerRows && columnIndex < this.headerColumns 127 | const isColumnsCell = 128 | rowIndex < this.headerRows && columnIndex >= this.headerColumns 129 | 130 | if (isBlankCell) { 131 | const classNames = ['blank'] 132 | if (columnIndex > 0) { 133 | classNames.push('level' + rowIndex) 134 | } 135 | 136 | return { 137 | type: 'blank', 138 | classNames: classNames.join(' '), 139 | content: '', 140 | } 141 | } else if (isColumnsCell) { 142 | const dataColumnIndex = columnIndex - this.headerColumns 143 | const classNames = [ 144 | 'col_heading', 145 | 'level' + rowIndex, 146 | 'col' + dataColumnIndex, 147 | ] 148 | 149 | return { 150 | type: 'columns', 151 | classNames: classNames.join(' '), 152 | content: this.getContent( 153 | this.columnsTable, 154 | dataColumnIndex, 155 | rowIndex 156 | ), 157 | } 158 | } else if (isIndexCell) { 159 | const dataRowIndex = rowIndex - this.headerRows 160 | const classNames = [ 161 | 'row_heading', 162 | 'level' + columnIndex, 163 | 'row' + dataRowIndex, 164 | ] 165 | 166 | return { 167 | type: 'index', 168 | id: `T_${this.uuid}level${columnIndex}_row${dataRowIndex}`, 169 | classNames: classNames.join(' '), 170 | content: this.getContent( 171 | this.indexTable, 172 | dataRowIndex, 173 | columnIndex 174 | ), 175 | } 176 | } else { 177 | const dataRowIndex = rowIndex - this.headerRows 178 | const dataColumnIndex = columnIndex - this.headerColumns 179 | const classNames = [ 180 | 'data', 181 | 'row' + dataRowIndex, 182 | 'col' + dataColumnIndex, 183 | ] 184 | const content = this.styler 185 | ? this.getContent( 186 | this.styler.displayValuesTable, 187 | dataRowIndex, 188 | dataColumnIndex 189 | ) 190 | : this.getContent(this.dataTable, dataRowIndex, dataColumnIndex) 191 | 192 | return { 193 | type: 'data', 194 | id: `T_${this.uuid}row${dataRowIndex}_col${dataColumnIndex}`, 195 | classNames: classNames.join(' '), 196 | content, 197 | } 198 | } 199 | } 200 | 201 | public getContent = ( 202 | table: Table, 203 | rowIndex: number, 204 | columnIndex: number 205 | ): any => { 206 | const column = table.getColumnAt(columnIndex) 207 | if (column === null) { 208 | return '' 209 | } 210 | 211 | const columnTypeId = this.getColumnTypeId(table, columnIndex) 212 | switch (columnTypeId) { 213 | case Type.Timestamp: { 214 | return this.nanosToDate(column.get(rowIndex)) 215 | } 216 | default: { 217 | return column.get(rowIndex) 218 | } 219 | } 220 | } 221 | 222 | /** 223 | * Returns apache-arrow specific typeId of column. 224 | */ 225 | private getColumnTypeId(table: Table, columnIndex: number): Type { 226 | return table.schema.fields[columnIndex].type.typeId 227 | } 228 | 229 | private nanosToDate(nanos: number): Date { 230 | return new Date(nanos / 1e6) 231 | } 232 | } 233 | -------------------------------------------------------------------------------- /streamlit_keycloak/frontend/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "streamlit-keycloak", 3 | "version": "1.0.1", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "streamlit-keycloak", 9 | "version": "1.0.1", 10 | "dependencies": { 11 | "apache-arrow": "^0.17.0", 12 | "event-target-shim": "^5.0.1", 13 | "keycloak-js": "^20.0.1", 14 | "sirv-cli": "^1.0.0" 15 | }, 16 | "devDependencies": { 17 | "@rollup/plugin-commonjs": "^12.0.0", 18 | "@rollup/plugin-node-resolve": "^8.0.0", 19 | "@rollup/plugin-typescript": "^4.0.0", 20 | "@tsconfig/svelte": "^1.0.0", 21 | "rollup": "^2.3.4", 22 | "rollup-plugin-livereload": "^1.0.0", 23 | "rollup-plugin-svelte": "^6.1.1", 24 | "rollup-plugin-terser": "^5.1.2", 25 | "svelte": "^3.0.0", 26 | "svelte-check": "^1.0.0", 27 | "svelte-preprocess": "^4.0.0", 28 | "tslib": "^2.0.0", 29 | "typescript": "^3.9.3" 30 | } 31 | }, 32 | "node_modules/@babel/code-frame": { 33 | "version": "7.18.6", 34 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 35 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 36 | "dev": true, 37 | "dependencies": { 38 | "@babel/highlight": "^7.18.6" 39 | }, 40 | "engines": { 41 | "node": ">=6.9.0" 42 | } 43 | }, 44 | "node_modules/@babel/helper-validator-identifier": { 45 | "version": "7.19.1", 46 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 47 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 48 | "dev": true, 49 | "engines": { 50 | "node": ">=6.9.0" 51 | } 52 | }, 53 | "node_modules/@babel/highlight": { 54 | "version": "7.18.6", 55 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 56 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 57 | "dev": true, 58 | "dependencies": { 59 | "@babel/helper-validator-identifier": "^7.18.6", 60 | "chalk": "^2.0.0", 61 | "js-tokens": "^4.0.0" 62 | }, 63 | "engines": { 64 | "node": ">=6.9.0" 65 | } 66 | }, 67 | "node_modules/@polka/url": { 68 | "version": "1.0.0-next.21", 69 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", 70 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" 71 | }, 72 | "node_modules/@rollup/plugin-commonjs": { 73 | "version": "12.0.0", 74 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz", 75 | "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==", 76 | "dev": true, 77 | "dependencies": { 78 | "@rollup/pluginutils": "^3.0.8", 79 | "commondir": "^1.0.1", 80 | "estree-walker": "^1.0.1", 81 | "glob": "^7.1.2", 82 | "is-reference": "^1.1.2", 83 | "magic-string": "^0.25.2", 84 | "resolve": "^1.11.0" 85 | }, 86 | "engines": { 87 | "node": ">= 8.0.0" 88 | }, 89 | "peerDependencies": { 90 | "rollup": "^2.3.4" 91 | } 92 | }, 93 | "node_modules/@rollup/plugin-node-resolve": { 94 | "version": "8.4.0", 95 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz", 96 | "integrity": "sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==", 97 | "dev": true, 98 | "dependencies": { 99 | "@rollup/pluginutils": "^3.1.0", 100 | "@types/resolve": "1.17.1", 101 | "builtin-modules": "^3.1.0", 102 | "deep-freeze": "^0.0.1", 103 | "deepmerge": "^4.2.2", 104 | "is-module": "^1.0.0", 105 | "resolve": "^1.17.0" 106 | }, 107 | "engines": { 108 | "node": ">= 8.0.0" 109 | }, 110 | "peerDependencies": { 111 | "rollup": "^1.20.0||^2.0.0" 112 | } 113 | }, 114 | "node_modules/@rollup/plugin-typescript": { 115 | "version": "4.1.2", 116 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-4.1.2.tgz", 117 | "integrity": "sha512-+7UlGat/99e2JbmGNnIauxwEhYLwrL7adO/tSJxUN57xrrS3Ps+ZzYpLCDGPZJ57j+ZJTZLLN89KXW9JMEB+jg==", 118 | "dev": true, 119 | "dependencies": { 120 | "@rollup/pluginutils": "^3.0.1", 121 | "resolve": "^1.14.1" 122 | }, 123 | "engines": { 124 | "node": ">=8.0.0" 125 | }, 126 | "peerDependencies": { 127 | "rollup": "^1.20.0||^2.0.0", 128 | "tslib": "*", 129 | "typescript": ">=2.1.0" 130 | } 131 | }, 132 | "node_modules/@rollup/pluginutils": { 133 | "version": "3.1.0", 134 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 135 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 136 | "dev": true, 137 | "dependencies": { 138 | "@types/estree": "0.0.39", 139 | "estree-walker": "^1.0.1", 140 | "picomatch": "^2.2.2" 141 | }, 142 | "engines": { 143 | "node": ">= 8.0.0" 144 | }, 145 | "peerDependencies": { 146 | "rollup": "^1.20.0||^2.0.0" 147 | } 148 | }, 149 | "node_modules/@tsconfig/svelte": { 150 | "version": "1.0.13", 151 | "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-1.0.13.tgz", 152 | "integrity": "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==", 153 | "dev": true 154 | }, 155 | "node_modules/@types/estree": { 156 | "version": "0.0.39", 157 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 158 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 159 | "dev": true 160 | }, 161 | "node_modules/@types/flatbuffers": { 162 | "version": "1.10.0", 163 | "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", 164 | "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" 165 | }, 166 | "node_modules/@types/node": { 167 | "version": "18.11.9", 168 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", 169 | "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", 170 | "dev": true 171 | }, 172 | "node_modules/@types/pug": { 173 | "version": "2.0.6", 174 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", 175 | "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", 176 | "dev": true 177 | }, 178 | "node_modules/@types/resolve": { 179 | "version": "1.17.1", 180 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 181 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 182 | "dev": true, 183 | "dependencies": { 184 | "@types/node": "*" 185 | } 186 | }, 187 | "node_modules/@types/sass": { 188 | "version": "1.43.1", 189 | "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", 190 | "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", 191 | "dev": true, 192 | "dependencies": { 193 | "@types/node": "*" 194 | } 195 | }, 196 | "node_modules/@types/text-encoding-utf-8": { 197 | "version": "1.0.2", 198 | "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 199 | "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" 200 | }, 201 | "node_modules/ansi-styles": { 202 | "version": "3.2.1", 203 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 204 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 205 | "dependencies": { 206 | "color-convert": "^1.9.0" 207 | }, 208 | "engines": { 209 | "node": ">=4" 210 | } 211 | }, 212 | "node_modules/anymatch": { 213 | "version": "3.1.2", 214 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 215 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 216 | "dev": true, 217 | "dependencies": { 218 | "normalize-path": "^3.0.0", 219 | "picomatch": "^2.0.4" 220 | }, 221 | "engines": { 222 | "node": ">= 8" 223 | } 224 | }, 225 | "node_modules/apache-arrow": { 226 | "version": "0.17.0", 227 | "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-0.17.0.tgz", 228 | "integrity": "sha512-cbgSx/tzGgnC1qeUySXnAsSsoxhDykNINqr1D3U5pRwf0/Q0ztVccV3/VRW6gUR+lcOFawk6FtyYwmU+KjglbQ==", 229 | "dependencies": { 230 | "@types/flatbuffers": "^1.9.1", 231 | "@types/node": "^12.0.4", 232 | "@types/text-encoding-utf-8": "^1.0.1", 233 | "command-line-args": "5.0.2", 234 | "command-line-usage": "5.0.5", 235 | "flatbuffers": "1.11.0", 236 | "json-bignum": "^0.0.3", 237 | "pad-left": "^2.1.0", 238 | "text-encoding-utf-8": "^1.0.2", 239 | "tslib": "^1.9.3" 240 | }, 241 | "bin": { 242 | "arrow2csv": "bin/arrow2csv.js" 243 | } 244 | }, 245 | "node_modules/apache-arrow/node_modules/@types/node": { 246 | "version": "12.20.55", 247 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", 248 | "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 249 | }, 250 | "node_modules/apache-arrow/node_modules/tslib": { 251 | "version": "1.14.1", 252 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 253 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 254 | }, 255 | "node_modules/argv-tools": { 256 | "version": "0.1.2", 257 | "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.2.tgz", 258 | "integrity": "sha512-wxqoymY0BEu9NblZVQiOTOAiJUjPhaa/kbNMjC2h6bnrmUSgnxKgWJo3lzXvi3bHJRwXyqK/dHzMlZVRT89Cxg==", 259 | "dependencies": { 260 | "array-back": "^2.0.0", 261 | "find-replace": "^2.0.1" 262 | }, 263 | "engines": { 264 | "node": ">=4.0.0" 265 | } 266 | }, 267 | "node_modules/array-back": { 268 | "version": "2.0.0", 269 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", 270 | "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", 271 | "dependencies": { 272 | "typical": "^2.6.1" 273 | }, 274 | "engines": { 275 | "node": ">=4" 276 | } 277 | }, 278 | "node_modules/balanced-match": { 279 | "version": "1.0.2", 280 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 281 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 282 | "dev": true 283 | }, 284 | "node_modules/base64-js": { 285 | "version": "1.5.1", 286 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 287 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", 288 | "funding": [ 289 | { 290 | "type": "github", 291 | "url": "https://github.com/sponsors/feross" 292 | }, 293 | { 294 | "type": "patreon", 295 | "url": "https://www.patreon.com/feross" 296 | }, 297 | { 298 | "type": "consulting", 299 | "url": "https://feross.org/support" 300 | } 301 | ] 302 | }, 303 | "node_modules/binary-extensions": { 304 | "version": "2.2.0", 305 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 306 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 307 | "dev": true, 308 | "engines": { 309 | "node": ">=8" 310 | } 311 | }, 312 | "node_modules/brace-expansion": { 313 | "version": "1.1.11", 314 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 315 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 316 | "dev": true, 317 | "dependencies": { 318 | "balanced-match": "^1.0.0", 319 | "concat-map": "0.0.1" 320 | } 321 | }, 322 | "node_modules/braces": { 323 | "version": "3.0.2", 324 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 325 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 326 | "dev": true, 327 | "dependencies": { 328 | "fill-range": "^7.0.1" 329 | }, 330 | "engines": { 331 | "node": ">=8" 332 | } 333 | }, 334 | "node_modules/buffer-crc32": { 335 | "version": "0.2.13", 336 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 337 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 338 | "dev": true, 339 | "engines": { 340 | "node": "*" 341 | } 342 | }, 343 | "node_modules/buffer-from": { 344 | "version": "1.1.2", 345 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 346 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 347 | "dev": true 348 | }, 349 | "node_modules/builtin-modules": { 350 | "version": "3.3.0", 351 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 352 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 353 | "dev": true, 354 | "engines": { 355 | "node": ">=6" 356 | }, 357 | "funding": { 358 | "url": "https://github.com/sponsors/sindresorhus" 359 | } 360 | }, 361 | "node_modules/callsites": { 362 | "version": "3.1.0", 363 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 364 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 365 | "dev": true, 366 | "engines": { 367 | "node": ">=6" 368 | } 369 | }, 370 | "node_modules/chalk": { 371 | "version": "2.4.2", 372 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 373 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 374 | "dependencies": { 375 | "ansi-styles": "^3.2.1", 376 | "escape-string-regexp": "^1.0.5", 377 | "supports-color": "^5.3.0" 378 | }, 379 | "engines": { 380 | "node": ">=4" 381 | } 382 | }, 383 | "node_modules/chokidar": { 384 | "version": "3.5.3", 385 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 386 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 387 | "dev": true, 388 | "funding": [ 389 | { 390 | "type": "individual", 391 | "url": "https://paulmillr.com/funding/" 392 | } 393 | ], 394 | "dependencies": { 395 | "anymatch": "~3.1.2", 396 | "braces": "~3.0.2", 397 | "glob-parent": "~5.1.2", 398 | "is-binary-path": "~2.1.0", 399 | "is-glob": "~4.0.1", 400 | "normalize-path": "~3.0.0", 401 | "readdirp": "~3.6.0" 402 | }, 403 | "engines": { 404 | "node": ">= 8.10.0" 405 | }, 406 | "optionalDependencies": { 407 | "fsevents": "~2.3.2" 408 | } 409 | }, 410 | "node_modules/color-convert": { 411 | "version": "1.9.3", 412 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 413 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 414 | "dependencies": { 415 | "color-name": "1.1.3" 416 | } 417 | }, 418 | "node_modules/color-name": { 419 | "version": "1.1.3", 420 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 421 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 422 | }, 423 | "node_modules/command-line-args": { 424 | "version": "5.0.2", 425 | "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", 426 | "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", 427 | "dependencies": { 428 | "argv-tools": "^0.1.1", 429 | "array-back": "^2.0.0", 430 | "find-replace": "^2.0.1", 431 | "lodash.camelcase": "^4.3.0", 432 | "typical": "^2.6.1" 433 | }, 434 | "engines": { 435 | "node": ">=4.0.0" 436 | } 437 | }, 438 | "node_modules/command-line-usage": { 439 | "version": "5.0.5", 440 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", 441 | "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", 442 | "dependencies": { 443 | "array-back": "^2.0.0", 444 | "chalk": "^2.4.1", 445 | "table-layout": "^0.4.3", 446 | "typical": "^2.6.1" 447 | }, 448 | "engines": { 449 | "node": ">=4.0.0" 450 | } 451 | }, 452 | "node_modules/commander": { 453 | "version": "2.20.3", 454 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 455 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 456 | "dev": true 457 | }, 458 | "node_modules/commondir": { 459 | "version": "1.0.1", 460 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 461 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 462 | "dev": true 463 | }, 464 | "node_modules/concat-map": { 465 | "version": "0.0.1", 466 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 467 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 468 | "dev": true 469 | }, 470 | "node_modules/console-clear": { 471 | "version": "1.1.1", 472 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 473 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", 474 | "engines": { 475 | "node": ">=4" 476 | } 477 | }, 478 | "node_modules/deep-extend": { 479 | "version": "0.6.0", 480 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 481 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", 482 | "engines": { 483 | "node": ">=4.0.0" 484 | } 485 | }, 486 | "node_modules/deep-freeze": { 487 | "version": "0.0.1", 488 | "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", 489 | "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", 490 | "dev": true 491 | }, 492 | "node_modules/deepmerge": { 493 | "version": "4.2.2", 494 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 495 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 496 | "dev": true, 497 | "engines": { 498 | "node": ">=0.10.0" 499 | } 500 | }, 501 | "node_modules/detect-indent": { 502 | "version": "6.1.0", 503 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 504 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 505 | "dev": true, 506 | "engines": { 507 | "node": ">=8" 508 | } 509 | }, 510 | "node_modules/es6-promise": { 511 | "version": "3.3.1", 512 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 513 | "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", 514 | "dev": true 515 | }, 516 | "node_modules/escape-string-regexp": { 517 | "version": "1.0.5", 518 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 519 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", 520 | "engines": { 521 | "node": ">=0.8.0" 522 | } 523 | }, 524 | "node_modules/estree-walker": { 525 | "version": "1.0.1", 526 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 527 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 528 | "dev": true 529 | }, 530 | "node_modules/event-target-shim": { 531 | "version": "5.0.1", 532 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 533 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==", 534 | "engines": { 535 | "node": ">=6" 536 | } 537 | }, 538 | "node_modules/fill-range": { 539 | "version": "7.0.1", 540 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 541 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 542 | "dev": true, 543 | "dependencies": { 544 | "to-regex-range": "^5.0.1" 545 | }, 546 | "engines": { 547 | "node": ">=8" 548 | } 549 | }, 550 | "node_modules/find-replace": { 551 | "version": "2.0.1", 552 | "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", 553 | "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", 554 | "dependencies": { 555 | "array-back": "^2.0.0", 556 | "test-value": "^3.0.0" 557 | }, 558 | "engines": { 559 | "node": ">=4.0.0" 560 | } 561 | }, 562 | "node_modules/flatbuffers": { 563 | "version": "1.11.0", 564 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.11.0.tgz", 565 | "integrity": "sha512-0PqFKtXI4MjxomI7jO4g5XfLPm/15g2R+5WGCHBGYGh0ihQiypnHlJ6bMmkkrAe0GzZ4d7PDAfCONKIPUxNF+A==" 566 | }, 567 | "node_modules/fs.realpath": { 568 | "version": "1.0.0", 569 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 570 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 571 | "dev": true 572 | }, 573 | "node_modules/fsevents": { 574 | "version": "2.3.2", 575 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 576 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 577 | "dev": true, 578 | "hasInstallScript": true, 579 | "optional": true, 580 | "os": [ 581 | "darwin" 582 | ], 583 | "engines": { 584 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 585 | } 586 | }, 587 | "node_modules/function-bind": { 588 | "version": "1.1.1", 589 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 590 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 591 | "dev": true 592 | }, 593 | "node_modules/get-port": { 594 | "version": "3.2.0", 595 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 596 | "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==", 597 | "engines": { 598 | "node": ">=4" 599 | } 600 | }, 601 | "node_modules/glob": { 602 | "version": "7.2.3", 603 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 604 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 605 | "dev": true, 606 | "dependencies": { 607 | "fs.realpath": "^1.0.0", 608 | "inflight": "^1.0.4", 609 | "inherits": "2", 610 | "minimatch": "^3.1.1", 611 | "once": "^1.3.0", 612 | "path-is-absolute": "^1.0.0" 613 | }, 614 | "engines": { 615 | "node": "*" 616 | }, 617 | "funding": { 618 | "url": "https://github.com/sponsors/isaacs" 619 | } 620 | }, 621 | "node_modules/glob-parent": { 622 | "version": "5.1.2", 623 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 624 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 625 | "dev": true, 626 | "dependencies": { 627 | "is-glob": "^4.0.1" 628 | }, 629 | "engines": { 630 | "node": ">= 6" 631 | } 632 | }, 633 | "node_modules/graceful-fs": { 634 | "version": "4.2.10", 635 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 636 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 637 | "dev": true 638 | }, 639 | "node_modules/has": { 640 | "version": "1.0.3", 641 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 642 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 643 | "dev": true, 644 | "dependencies": { 645 | "function-bind": "^1.1.1" 646 | }, 647 | "engines": { 648 | "node": ">= 0.4.0" 649 | } 650 | }, 651 | "node_modules/has-flag": { 652 | "version": "3.0.0", 653 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 654 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", 655 | "engines": { 656 | "node": ">=4" 657 | } 658 | }, 659 | "node_modules/import-fresh": { 660 | "version": "3.3.0", 661 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 662 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 663 | "dev": true, 664 | "dependencies": { 665 | "parent-module": "^1.0.0", 666 | "resolve-from": "^4.0.0" 667 | }, 668 | "engines": { 669 | "node": ">=6" 670 | }, 671 | "funding": { 672 | "url": "https://github.com/sponsors/sindresorhus" 673 | } 674 | }, 675 | "node_modules/inflight": { 676 | "version": "1.0.6", 677 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 678 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 679 | "dev": true, 680 | "dependencies": { 681 | "once": "^1.3.0", 682 | "wrappy": "1" 683 | } 684 | }, 685 | "node_modules/inherits": { 686 | "version": "2.0.4", 687 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 688 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 689 | "dev": true 690 | }, 691 | "node_modules/is-binary-path": { 692 | "version": "2.1.0", 693 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 694 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 695 | "dev": true, 696 | "dependencies": { 697 | "binary-extensions": "^2.0.0" 698 | }, 699 | "engines": { 700 | "node": ">=8" 701 | } 702 | }, 703 | "node_modules/is-core-module": { 704 | "version": "2.11.0", 705 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 706 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 707 | "dev": true, 708 | "dependencies": { 709 | "has": "^1.0.3" 710 | }, 711 | "funding": { 712 | "url": "https://github.com/sponsors/ljharb" 713 | } 714 | }, 715 | "node_modules/is-extglob": { 716 | "version": "2.1.1", 717 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 718 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 719 | "dev": true, 720 | "engines": { 721 | "node": ">=0.10.0" 722 | } 723 | }, 724 | "node_modules/is-glob": { 725 | "version": "4.0.3", 726 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 727 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 728 | "dev": true, 729 | "dependencies": { 730 | "is-extglob": "^2.1.1" 731 | }, 732 | "engines": { 733 | "node": ">=0.10.0" 734 | } 735 | }, 736 | "node_modules/is-module": { 737 | "version": "1.0.0", 738 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 739 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 740 | "dev": true 741 | }, 742 | "node_modules/is-number": { 743 | "version": "7.0.0", 744 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 745 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 746 | "dev": true, 747 | "engines": { 748 | "node": ">=0.12.0" 749 | } 750 | }, 751 | "node_modules/is-reference": { 752 | "version": "1.2.1", 753 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 754 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 755 | "dev": true, 756 | "dependencies": { 757 | "@types/estree": "*" 758 | } 759 | }, 760 | "node_modules/jest-worker": { 761 | "version": "24.9.0", 762 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", 763 | "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", 764 | "dev": true, 765 | "dependencies": { 766 | "merge-stream": "^2.0.0", 767 | "supports-color": "^6.1.0" 768 | }, 769 | "engines": { 770 | "node": ">= 6" 771 | } 772 | }, 773 | "node_modules/jest-worker/node_modules/supports-color": { 774 | "version": "6.1.0", 775 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 776 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 777 | "dev": true, 778 | "dependencies": { 779 | "has-flag": "^3.0.0" 780 | }, 781 | "engines": { 782 | "node": ">=6" 783 | } 784 | }, 785 | "node_modules/js-sha256": { 786 | "version": "0.9.0", 787 | "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", 788 | "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 789 | }, 790 | "node_modules/js-tokens": { 791 | "version": "4.0.0", 792 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 793 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 794 | "dev": true 795 | }, 796 | "node_modules/json-bignum": { 797 | "version": "0.0.3", 798 | "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", 799 | "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==", 800 | "engines": { 801 | "node": ">=0.8" 802 | } 803 | }, 804 | "node_modules/keycloak-js": { 805 | "version": "20.0.1", 806 | "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-20.0.1.tgz", 807 | "integrity": "sha512-YNj0X0mmdLpqjB9W5DTAVDI14CzZs7RFn9T/t/g8Uq80OjaW2zZUis/g73aWwz04S3B6U6Vrg8h1wAMGbx2NQQ==", 808 | "dependencies": { 809 | "base64-js": "^1.5.1", 810 | "js-sha256": "^0.9.0" 811 | } 812 | }, 813 | "node_modules/kleur": { 814 | "version": "3.0.3", 815 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 816 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", 817 | "engines": { 818 | "node": ">=6" 819 | } 820 | }, 821 | "node_modules/livereload": { 822 | "version": "0.9.3", 823 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", 824 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", 825 | "dev": true, 826 | "dependencies": { 827 | "chokidar": "^3.5.0", 828 | "livereload-js": "^3.3.1", 829 | "opts": ">= 1.2.0", 830 | "ws": "^7.4.3" 831 | }, 832 | "bin": { 833 | "livereload": "bin/livereload.js" 834 | }, 835 | "engines": { 836 | "node": ">=8.0.0" 837 | } 838 | }, 839 | "node_modules/livereload-js": { 840 | "version": "3.4.1", 841 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", 842 | "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", 843 | "dev": true 844 | }, 845 | "node_modules/local-access": { 846 | "version": "1.1.0", 847 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 848 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==", 849 | "engines": { 850 | "node": ">=6" 851 | } 852 | }, 853 | "node_modules/lodash.camelcase": { 854 | "version": "4.3.0", 855 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 856 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" 857 | }, 858 | "node_modules/lodash.padend": { 859 | "version": "4.6.1", 860 | "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", 861 | "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==" 862 | }, 863 | "node_modules/magic-string": { 864 | "version": "0.25.9", 865 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 866 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 867 | "dev": true, 868 | "dependencies": { 869 | "sourcemap-codec": "^1.4.8" 870 | } 871 | }, 872 | "node_modules/merge-stream": { 873 | "version": "2.0.0", 874 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 875 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 876 | "dev": true 877 | }, 878 | "node_modules/min-indent": { 879 | "version": "1.0.1", 880 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 881 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 882 | "dev": true, 883 | "engines": { 884 | "node": ">=4" 885 | } 886 | }, 887 | "node_modules/minimatch": { 888 | "version": "3.1.2", 889 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 890 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 891 | "dev": true, 892 | "dependencies": { 893 | "brace-expansion": "^1.1.7" 894 | }, 895 | "engines": { 896 | "node": "*" 897 | } 898 | }, 899 | "node_modules/minimist": { 900 | "version": "1.2.7", 901 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 902 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 903 | "dev": true, 904 | "funding": { 905 | "url": "https://github.com/sponsors/ljharb" 906 | } 907 | }, 908 | "node_modules/mkdirp": { 909 | "version": "0.5.6", 910 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 911 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 912 | "dev": true, 913 | "dependencies": { 914 | "minimist": "^1.2.6" 915 | }, 916 | "bin": { 917 | "mkdirp": "bin/cmd.js" 918 | } 919 | }, 920 | "node_modules/mri": { 921 | "version": "1.2.0", 922 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 923 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", 924 | "engines": { 925 | "node": ">=4" 926 | } 927 | }, 928 | "node_modules/mrmime": { 929 | "version": "1.0.1", 930 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 931 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==", 932 | "engines": { 933 | "node": ">=10" 934 | } 935 | }, 936 | "node_modules/normalize-path": { 937 | "version": "3.0.0", 938 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 939 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 940 | "dev": true, 941 | "engines": { 942 | "node": ">=0.10.0" 943 | } 944 | }, 945 | "node_modules/once": { 946 | "version": "1.4.0", 947 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 948 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 949 | "dev": true, 950 | "dependencies": { 951 | "wrappy": "1" 952 | } 953 | }, 954 | "node_modules/opts": { 955 | "version": "2.0.2", 956 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 957 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 958 | "dev": true 959 | }, 960 | "node_modules/pad-left": { 961 | "version": "2.1.0", 962 | "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", 963 | "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", 964 | "dependencies": { 965 | "repeat-string": "^1.5.4" 966 | }, 967 | "engines": { 968 | "node": ">=0.10.0" 969 | } 970 | }, 971 | "node_modules/parent-module": { 972 | "version": "1.0.1", 973 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 974 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 975 | "dev": true, 976 | "dependencies": { 977 | "callsites": "^3.0.0" 978 | }, 979 | "engines": { 980 | "node": ">=6" 981 | } 982 | }, 983 | "node_modules/path-is-absolute": { 984 | "version": "1.0.1", 985 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 986 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 987 | "dev": true, 988 | "engines": { 989 | "node": ">=0.10.0" 990 | } 991 | }, 992 | "node_modules/path-parse": { 993 | "version": "1.0.7", 994 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 995 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 996 | "dev": true 997 | }, 998 | "node_modules/picomatch": { 999 | "version": "2.3.1", 1000 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 1001 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 1002 | "dev": true, 1003 | "engines": { 1004 | "node": ">=8.6" 1005 | }, 1006 | "funding": { 1007 | "url": "https://github.com/sponsors/jonschlinkert" 1008 | } 1009 | }, 1010 | "node_modules/randombytes": { 1011 | "version": "2.1.0", 1012 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1013 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1014 | "dev": true, 1015 | "dependencies": { 1016 | "safe-buffer": "^5.1.0" 1017 | } 1018 | }, 1019 | "node_modules/readdirp": { 1020 | "version": "3.6.0", 1021 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 1022 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 1023 | "dev": true, 1024 | "dependencies": { 1025 | "picomatch": "^2.2.1" 1026 | }, 1027 | "engines": { 1028 | "node": ">=8.10.0" 1029 | } 1030 | }, 1031 | "node_modules/reduce-flatten": { 1032 | "version": "1.0.1", 1033 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", 1034 | "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==", 1035 | "engines": { 1036 | "node": ">=0.10.0" 1037 | } 1038 | }, 1039 | "node_modules/repeat-string": { 1040 | "version": "1.6.1", 1041 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 1042 | "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==", 1043 | "engines": { 1044 | "node": ">=0.10" 1045 | } 1046 | }, 1047 | "node_modules/require-relative": { 1048 | "version": "0.8.7", 1049 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1050 | "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", 1051 | "dev": true 1052 | }, 1053 | "node_modules/resolve": { 1054 | "version": "1.22.1", 1055 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 1056 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 1057 | "dev": true, 1058 | "dependencies": { 1059 | "is-core-module": "^2.9.0", 1060 | "path-parse": "^1.0.7", 1061 | "supports-preserve-symlinks-flag": "^1.0.0" 1062 | }, 1063 | "bin": { 1064 | "resolve": "bin/resolve" 1065 | }, 1066 | "funding": { 1067 | "url": "https://github.com/sponsors/ljharb" 1068 | } 1069 | }, 1070 | "node_modules/resolve-from": { 1071 | "version": "4.0.0", 1072 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1073 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1074 | "dev": true, 1075 | "engines": { 1076 | "node": ">=4" 1077 | } 1078 | }, 1079 | "node_modules/rimraf": { 1080 | "version": "2.7.1", 1081 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 1082 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 1083 | "dev": true, 1084 | "dependencies": { 1085 | "glob": "^7.1.3" 1086 | }, 1087 | "bin": { 1088 | "rimraf": "bin.js" 1089 | } 1090 | }, 1091 | "node_modules/rollup": { 1092 | "version": "2.79.1", 1093 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 1094 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 1095 | "dev": true, 1096 | "bin": { 1097 | "rollup": "dist/bin/rollup" 1098 | }, 1099 | "engines": { 1100 | "node": ">=10.0.0" 1101 | }, 1102 | "optionalDependencies": { 1103 | "fsevents": "~2.3.2" 1104 | } 1105 | }, 1106 | "node_modules/rollup-plugin-livereload": { 1107 | "version": "1.3.0", 1108 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.3.0.tgz", 1109 | "integrity": "sha512-abyqXaB21+nFHo+vJULBqfzNx6zXABC19UyvqgDfdoxR/8pFAd041GO+GIUe8ZYC2DbuMUmioh1Lvbk14YLZgw==", 1110 | "dev": true, 1111 | "dependencies": { 1112 | "livereload": "^0.9.1" 1113 | } 1114 | }, 1115 | "node_modules/rollup-plugin-svelte": { 1116 | "version": "6.1.1", 1117 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz", 1118 | "integrity": "sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow==", 1119 | "dev": true, 1120 | "dependencies": { 1121 | "require-relative": "^0.8.7", 1122 | "rollup-pluginutils": "^2.8.2", 1123 | "sourcemap-codec": "^1.4.8" 1124 | }, 1125 | "peerDependencies": { 1126 | "rollup": ">=1.19.2", 1127 | "svelte": "*" 1128 | } 1129 | }, 1130 | "node_modules/rollup-plugin-terser": { 1131 | "version": "5.3.1", 1132 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", 1133 | "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", 1134 | "dev": true, 1135 | "dependencies": { 1136 | "@babel/code-frame": "^7.5.5", 1137 | "jest-worker": "^24.9.0", 1138 | "rollup-pluginutils": "^2.8.2", 1139 | "serialize-javascript": "^4.0.0", 1140 | "terser": "^4.6.2" 1141 | }, 1142 | "peerDependencies": { 1143 | "rollup": ">=0.66.0 <3" 1144 | } 1145 | }, 1146 | "node_modules/rollup-pluginutils": { 1147 | "version": "2.8.2", 1148 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1149 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1150 | "dev": true, 1151 | "dependencies": { 1152 | "estree-walker": "^0.6.1" 1153 | } 1154 | }, 1155 | "node_modules/rollup-pluginutils/node_modules/estree-walker": { 1156 | "version": "0.6.1", 1157 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1158 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1159 | "dev": true 1160 | }, 1161 | "node_modules/sade": { 1162 | "version": "1.8.1", 1163 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 1164 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 1165 | "dependencies": { 1166 | "mri": "^1.1.0" 1167 | }, 1168 | "engines": { 1169 | "node": ">=6" 1170 | } 1171 | }, 1172 | "node_modules/safe-buffer": { 1173 | "version": "5.2.1", 1174 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1175 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1176 | "dev": true, 1177 | "funding": [ 1178 | { 1179 | "type": "github", 1180 | "url": "https://github.com/sponsors/feross" 1181 | }, 1182 | { 1183 | "type": "patreon", 1184 | "url": "https://www.patreon.com/feross" 1185 | }, 1186 | { 1187 | "type": "consulting", 1188 | "url": "https://feross.org/support" 1189 | } 1190 | ] 1191 | }, 1192 | "node_modules/sander": { 1193 | "version": "0.5.1", 1194 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", 1195 | "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", 1196 | "dev": true, 1197 | "dependencies": { 1198 | "es6-promise": "^3.1.2", 1199 | "graceful-fs": "^4.1.3", 1200 | "mkdirp": "^0.5.1", 1201 | "rimraf": "^2.5.2" 1202 | } 1203 | }, 1204 | "node_modules/semiver": { 1205 | "version": "1.1.0", 1206 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 1207 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", 1208 | "engines": { 1209 | "node": ">=6" 1210 | } 1211 | }, 1212 | "node_modules/serialize-javascript": { 1213 | "version": "4.0.0", 1214 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1215 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1216 | "dev": true, 1217 | "dependencies": { 1218 | "randombytes": "^2.1.0" 1219 | } 1220 | }, 1221 | "node_modules/sirv": { 1222 | "version": "1.0.19", 1223 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", 1224 | "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", 1225 | "dependencies": { 1226 | "@polka/url": "^1.0.0-next.20", 1227 | "mrmime": "^1.0.0", 1228 | "totalist": "^1.0.0" 1229 | }, 1230 | "engines": { 1231 | "node": ">= 10" 1232 | } 1233 | }, 1234 | "node_modules/sirv-cli": { 1235 | "version": "1.0.14", 1236 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz", 1237 | "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==", 1238 | "dependencies": { 1239 | "console-clear": "^1.1.0", 1240 | "get-port": "^3.2.0", 1241 | "kleur": "^3.0.0", 1242 | "local-access": "^1.0.1", 1243 | "sade": "^1.6.0", 1244 | "semiver": "^1.0.0", 1245 | "sirv": "^1.0.13", 1246 | "tinydate": "^1.0.0" 1247 | }, 1248 | "bin": { 1249 | "sirv": "bin.js" 1250 | }, 1251 | "engines": { 1252 | "node": ">= 10" 1253 | } 1254 | }, 1255 | "node_modules/sorcery": { 1256 | "version": "0.10.0", 1257 | "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", 1258 | "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", 1259 | "dev": true, 1260 | "dependencies": { 1261 | "buffer-crc32": "^0.2.5", 1262 | "minimist": "^1.2.0", 1263 | "sander": "^0.5.0", 1264 | "sourcemap-codec": "^1.3.0" 1265 | }, 1266 | "bin": { 1267 | "sorcery": "bin/index.js" 1268 | } 1269 | }, 1270 | "node_modules/source-map": { 1271 | "version": "0.7.4", 1272 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 1273 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 1274 | "dev": true, 1275 | "engines": { 1276 | "node": ">= 8" 1277 | } 1278 | }, 1279 | "node_modules/source-map-support": { 1280 | "version": "0.5.21", 1281 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 1282 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 1283 | "dev": true, 1284 | "dependencies": { 1285 | "buffer-from": "^1.0.0", 1286 | "source-map": "^0.6.0" 1287 | } 1288 | }, 1289 | "node_modules/source-map-support/node_modules/source-map": { 1290 | "version": "0.6.1", 1291 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1292 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1293 | "dev": true, 1294 | "engines": { 1295 | "node": ">=0.10.0" 1296 | } 1297 | }, 1298 | "node_modules/sourcemap-codec": { 1299 | "version": "1.4.8", 1300 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1301 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1302 | "dev": true 1303 | }, 1304 | "node_modules/strip-indent": { 1305 | "version": "3.0.0", 1306 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 1307 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 1308 | "dev": true, 1309 | "dependencies": { 1310 | "min-indent": "^1.0.0" 1311 | }, 1312 | "engines": { 1313 | "node": ">=8" 1314 | } 1315 | }, 1316 | "node_modules/supports-color": { 1317 | "version": "5.5.0", 1318 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1319 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1320 | "dependencies": { 1321 | "has-flag": "^3.0.0" 1322 | }, 1323 | "engines": { 1324 | "node": ">=4" 1325 | } 1326 | }, 1327 | "node_modules/supports-preserve-symlinks-flag": { 1328 | "version": "1.0.0", 1329 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 1330 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 1331 | "dev": true, 1332 | "engines": { 1333 | "node": ">= 0.4" 1334 | }, 1335 | "funding": { 1336 | "url": "https://github.com/sponsors/ljharb" 1337 | } 1338 | }, 1339 | "node_modules/svelte": { 1340 | "version": "3.52.0", 1341 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.52.0.tgz", 1342 | "integrity": "sha512-FxcnEUOAVfr10vDU5dVgJN19IvqeHQCS1zfe8vayTfis9A2t5Fhx+JDe5uv/C3j//bB1umpLJ6quhgs9xyUbCQ==", 1343 | "dev": true, 1344 | "engines": { 1345 | "node": ">= 8" 1346 | } 1347 | }, 1348 | "node_modules/svelte-check": { 1349 | "version": "1.6.0", 1350 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-1.6.0.tgz", 1351 | "integrity": "sha512-nQTlbFJWhwoeLY5rkhgbjzGQSwk5F1pRdEXait0EFaQSrE/iJF+PIjrQlk0BjL/ogk9HaR9ZI0DQSYrl7jl3IQ==", 1352 | "dev": true, 1353 | "dependencies": { 1354 | "chalk": "^4.0.0", 1355 | "chokidar": "^3.4.1", 1356 | "glob": "^7.1.6", 1357 | "import-fresh": "^3.2.1", 1358 | "minimist": "^1.2.5", 1359 | "sade": "^1.7.4", 1360 | "source-map": "^0.7.3", 1361 | "svelte-preprocess": "^4.0.0", 1362 | "typescript": "*" 1363 | }, 1364 | "bin": { 1365 | "svelte-check": "bin/svelte-check" 1366 | }, 1367 | "peerDependencies": { 1368 | "svelte": "^3.24.0" 1369 | } 1370 | }, 1371 | "node_modules/svelte-check/node_modules/ansi-styles": { 1372 | "version": "4.3.0", 1373 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1374 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1375 | "dev": true, 1376 | "dependencies": { 1377 | "color-convert": "^2.0.1" 1378 | }, 1379 | "engines": { 1380 | "node": ">=8" 1381 | }, 1382 | "funding": { 1383 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1384 | } 1385 | }, 1386 | "node_modules/svelte-check/node_modules/chalk": { 1387 | "version": "4.1.2", 1388 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1389 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1390 | "dev": true, 1391 | "dependencies": { 1392 | "ansi-styles": "^4.1.0", 1393 | "supports-color": "^7.1.0" 1394 | }, 1395 | "engines": { 1396 | "node": ">=10" 1397 | }, 1398 | "funding": { 1399 | "url": "https://github.com/chalk/chalk?sponsor=1" 1400 | } 1401 | }, 1402 | "node_modules/svelte-check/node_modules/color-convert": { 1403 | "version": "2.0.1", 1404 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1405 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1406 | "dev": true, 1407 | "dependencies": { 1408 | "color-name": "~1.1.4" 1409 | }, 1410 | "engines": { 1411 | "node": ">=7.0.0" 1412 | } 1413 | }, 1414 | "node_modules/svelte-check/node_modules/color-name": { 1415 | "version": "1.1.4", 1416 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1417 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1418 | "dev": true 1419 | }, 1420 | "node_modules/svelte-check/node_modules/has-flag": { 1421 | "version": "4.0.0", 1422 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1423 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1424 | "dev": true, 1425 | "engines": { 1426 | "node": ">=8" 1427 | } 1428 | }, 1429 | "node_modules/svelte-check/node_modules/supports-color": { 1430 | "version": "7.2.0", 1431 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1432 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1433 | "dev": true, 1434 | "dependencies": { 1435 | "has-flag": "^4.0.0" 1436 | }, 1437 | "engines": { 1438 | "node": ">=8" 1439 | } 1440 | }, 1441 | "node_modules/svelte-preprocess": { 1442 | "version": "4.10.7", 1443 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", 1444 | "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", 1445 | "dev": true, 1446 | "hasInstallScript": true, 1447 | "dependencies": { 1448 | "@types/pug": "^2.0.4", 1449 | "@types/sass": "^1.16.0", 1450 | "detect-indent": "^6.0.0", 1451 | "magic-string": "^0.25.7", 1452 | "sorcery": "^0.10.0", 1453 | "strip-indent": "^3.0.0" 1454 | }, 1455 | "engines": { 1456 | "node": ">= 9.11.2" 1457 | }, 1458 | "peerDependencies": { 1459 | "@babel/core": "^7.10.2", 1460 | "coffeescript": "^2.5.1", 1461 | "less": "^3.11.3 || ^4.0.0", 1462 | "postcss": "^7 || ^8", 1463 | "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", 1464 | "pug": "^3.0.0", 1465 | "sass": "^1.26.8", 1466 | "stylus": "^0.55.0", 1467 | "sugarss": "^2.0.0", 1468 | "svelte": "^3.23.0", 1469 | "typescript": "^3.9.5 || ^4.0.0" 1470 | }, 1471 | "peerDependenciesMeta": { 1472 | "@babel/core": { 1473 | "optional": true 1474 | }, 1475 | "coffeescript": { 1476 | "optional": true 1477 | }, 1478 | "less": { 1479 | "optional": true 1480 | }, 1481 | "node-sass": { 1482 | "optional": true 1483 | }, 1484 | "postcss": { 1485 | "optional": true 1486 | }, 1487 | "postcss-load-config": { 1488 | "optional": true 1489 | }, 1490 | "pug": { 1491 | "optional": true 1492 | }, 1493 | "sass": { 1494 | "optional": true 1495 | }, 1496 | "stylus": { 1497 | "optional": true 1498 | }, 1499 | "sugarss": { 1500 | "optional": true 1501 | }, 1502 | "typescript": { 1503 | "optional": true 1504 | } 1505 | } 1506 | }, 1507 | "node_modules/table-layout": { 1508 | "version": "0.4.5", 1509 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", 1510 | "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", 1511 | "dependencies": { 1512 | "array-back": "^2.0.0", 1513 | "deep-extend": "~0.6.0", 1514 | "lodash.padend": "^4.6.1", 1515 | "typical": "^2.6.1", 1516 | "wordwrapjs": "^3.0.0" 1517 | }, 1518 | "engines": { 1519 | "node": ">=4.0.0" 1520 | } 1521 | }, 1522 | "node_modules/terser": { 1523 | "version": "4.8.1", 1524 | "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", 1525 | "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", 1526 | "dev": true, 1527 | "dependencies": { 1528 | "commander": "^2.20.0", 1529 | "source-map": "~0.6.1", 1530 | "source-map-support": "~0.5.12" 1531 | }, 1532 | "bin": { 1533 | "terser": "bin/terser" 1534 | }, 1535 | "engines": { 1536 | "node": ">=6.0.0" 1537 | } 1538 | }, 1539 | "node_modules/terser/node_modules/source-map": { 1540 | "version": "0.6.1", 1541 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1542 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1543 | "dev": true, 1544 | "engines": { 1545 | "node": ">=0.10.0" 1546 | } 1547 | }, 1548 | "node_modules/test-value": { 1549 | "version": "3.0.0", 1550 | "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", 1551 | "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", 1552 | "dependencies": { 1553 | "array-back": "^2.0.0", 1554 | "typical": "^2.6.1" 1555 | }, 1556 | "engines": { 1557 | "node": ">=4.0.0" 1558 | } 1559 | }, 1560 | "node_modules/text-encoding-utf-8": { 1561 | "version": "1.0.2", 1562 | "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 1563 | "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 1564 | }, 1565 | "node_modules/tinydate": { 1566 | "version": "1.3.0", 1567 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 1568 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", 1569 | "engines": { 1570 | "node": ">=4" 1571 | } 1572 | }, 1573 | "node_modules/to-regex-range": { 1574 | "version": "5.0.1", 1575 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1576 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1577 | "dev": true, 1578 | "dependencies": { 1579 | "is-number": "^7.0.0" 1580 | }, 1581 | "engines": { 1582 | "node": ">=8.0" 1583 | } 1584 | }, 1585 | "node_modules/totalist": { 1586 | "version": "1.1.0", 1587 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", 1588 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", 1589 | "engines": { 1590 | "node": ">=6" 1591 | } 1592 | }, 1593 | "node_modules/tslib": { 1594 | "version": "2.4.1", 1595 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 1596 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 1597 | "dev": true 1598 | }, 1599 | "node_modules/typescript": { 1600 | "version": "3.9.10", 1601 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", 1602 | "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", 1603 | "dev": true, 1604 | "bin": { 1605 | "tsc": "bin/tsc", 1606 | "tsserver": "bin/tsserver" 1607 | }, 1608 | "engines": { 1609 | "node": ">=4.2.0" 1610 | } 1611 | }, 1612 | "node_modules/typical": { 1613 | "version": "2.6.1", 1614 | "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", 1615 | "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" 1616 | }, 1617 | "node_modules/wordwrapjs": { 1618 | "version": "3.0.0", 1619 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", 1620 | "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", 1621 | "dependencies": { 1622 | "reduce-flatten": "^1.0.1", 1623 | "typical": "^2.6.1" 1624 | }, 1625 | "engines": { 1626 | "node": ">=4.0.0" 1627 | } 1628 | }, 1629 | "node_modules/wrappy": { 1630 | "version": "1.0.2", 1631 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1632 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 1633 | "dev": true 1634 | }, 1635 | "node_modules/ws": { 1636 | "version": "7.5.9", 1637 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 1638 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 1639 | "dev": true, 1640 | "engines": { 1641 | "node": ">=8.3.0" 1642 | }, 1643 | "peerDependencies": { 1644 | "bufferutil": "^4.0.1", 1645 | "utf-8-validate": "^5.0.2" 1646 | }, 1647 | "peerDependenciesMeta": { 1648 | "bufferutil": { 1649 | "optional": true 1650 | }, 1651 | "utf-8-validate": { 1652 | "optional": true 1653 | } 1654 | } 1655 | } 1656 | }, 1657 | "dependencies": { 1658 | "@babel/code-frame": { 1659 | "version": "7.18.6", 1660 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", 1661 | "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", 1662 | "dev": true, 1663 | "requires": { 1664 | "@babel/highlight": "^7.18.6" 1665 | } 1666 | }, 1667 | "@babel/helper-validator-identifier": { 1668 | "version": "7.19.1", 1669 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", 1670 | "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", 1671 | "dev": true 1672 | }, 1673 | "@babel/highlight": { 1674 | "version": "7.18.6", 1675 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", 1676 | "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", 1677 | "dev": true, 1678 | "requires": { 1679 | "@babel/helper-validator-identifier": "^7.18.6", 1680 | "chalk": "^2.0.0", 1681 | "js-tokens": "^4.0.0" 1682 | } 1683 | }, 1684 | "@polka/url": { 1685 | "version": "1.0.0-next.21", 1686 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.21.tgz", 1687 | "integrity": "sha512-a5Sab1C4/icpTZVzZc5Ghpz88yQtGOyNqYXcZgOssB2uuAr+wF/MvN6bgtW32q7HHrvBki+BsZ0OuNv6EV3K9g==" 1688 | }, 1689 | "@rollup/plugin-commonjs": { 1690 | "version": "12.0.0", 1691 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-12.0.0.tgz", 1692 | "integrity": "sha512-8+mDQt1QUmN+4Y9D3yCG8AJNewuTSLYPJVzKKUZ+lGeQrI+bV12Tc5HCyt2WdlnG6ihIL/DPbKRJlB40DX40mw==", 1693 | "dev": true, 1694 | "requires": { 1695 | "@rollup/pluginutils": "^3.0.8", 1696 | "commondir": "^1.0.1", 1697 | "estree-walker": "^1.0.1", 1698 | "glob": "^7.1.2", 1699 | "is-reference": "^1.1.2", 1700 | "magic-string": "^0.25.2", 1701 | "resolve": "^1.11.0" 1702 | } 1703 | }, 1704 | "@rollup/plugin-node-resolve": { 1705 | "version": "8.4.0", 1706 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-8.4.0.tgz", 1707 | "integrity": "sha512-LFqKdRLn0ShtQyf6SBYO69bGE1upV6wUhBX0vFOUnLAyzx5cwp8svA0eHUnu8+YU57XOkrMtfG63QOpQx25pHQ==", 1708 | "dev": true, 1709 | "requires": { 1710 | "@rollup/pluginutils": "^3.1.0", 1711 | "@types/resolve": "1.17.1", 1712 | "builtin-modules": "^3.1.0", 1713 | "deep-freeze": "^0.0.1", 1714 | "deepmerge": "^4.2.2", 1715 | "is-module": "^1.0.0", 1716 | "resolve": "^1.17.0" 1717 | } 1718 | }, 1719 | "@rollup/plugin-typescript": { 1720 | "version": "4.1.2", 1721 | "resolved": "https://registry.npmjs.org/@rollup/plugin-typescript/-/plugin-typescript-4.1.2.tgz", 1722 | "integrity": "sha512-+7UlGat/99e2JbmGNnIauxwEhYLwrL7adO/tSJxUN57xrrS3Ps+ZzYpLCDGPZJ57j+ZJTZLLN89KXW9JMEB+jg==", 1723 | "dev": true, 1724 | "requires": { 1725 | "@rollup/pluginutils": "^3.0.1", 1726 | "resolve": "^1.14.1" 1727 | } 1728 | }, 1729 | "@rollup/pluginutils": { 1730 | "version": "3.1.0", 1731 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 1732 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 1733 | "dev": true, 1734 | "requires": { 1735 | "@types/estree": "0.0.39", 1736 | "estree-walker": "^1.0.1", 1737 | "picomatch": "^2.2.2" 1738 | } 1739 | }, 1740 | "@tsconfig/svelte": { 1741 | "version": "1.0.13", 1742 | "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-1.0.13.tgz", 1743 | "integrity": "sha512-5lYJP45Xllo4yE/RUBccBT32eBlRDbqN8r1/MIvQbKxW3aFqaYPCNgm8D5V20X4ShHcwvYWNlKg3liDh1MlBoA==", 1744 | "dev": true 1745 | }, 1746 | "@types/estree": { 1747 | "version": "0.0.39", 1748 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1749 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1750 | "dev": true 1751 | }, 1752 | "@types/flatbuffers": { 1753 | "version": "1.10.0", 1754 | "resolved": "https://registry.npmjs.org/@types/flatbuffers/-/flatbuffers-1.10.0.tgz", 1755 | "integrity": "sha512-7btbphLrKvo5yl/5CC2OCxUSMx1wV1wvGT1qDXkSt7yi00/YW7E8k6qzXqJHsp+WU0eoG7r6MTQQXI9lIvd0qA==" 1756 | }, 1757 | "@types/node": { 1758 | "version": "18.11.9", 1759 | "resolved": "https://registry.npmjs.org/@types/node/-/node-18.11.9.tgz", 1760 | "integrity": "sha512-CRpX21/kGdzjOpFsZSkcrXMGIBWMGNIHXXBVFSH+ggkftxg+XYP20TESbh+zFvFj3EQOl5byk0HTRn1IL6hbqg==", 1761 | "dev": true 1762 | }, 1763 | "@types/pug": { 1764 | "version": "2.0.6", 1765 | "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", 1766 | "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", 1767 | "dev": true 1768 | }, 1769 | "@types/resolve": { 1770 | "version": "1.17.1", 1771 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 1772 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 1773 | "dev": true, 1774 | "requires": { 1775 | "@types/node": "*" 1776 | } 1777 | }, 1778 | "@types/sass": { 1779 | "version": "1.43.1", 1780 | "resolved": "https://registry.npmjs.org/@types/sass/-/sass-1.43.1.tgz", 1781 | "integrity": "sha512-BPdoIt1lfJ6B7rw35ncdwBZrAssjcwzI5LByIrYs+tpXlj/CAkuVdRsgZDdP4lq5EjyWzwxZCqAoFyHKFwp32g==", 1782 | "dev": true, 1783 | "requires": { 1784 | "@types/node": "*" 1785 | } 1786 | }, 1787 | "@types/text-encoding-utf-8": { 1788 | "version": "1.0.2", 1789 | "resolved": "https://registry.npmjs.org/@types/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 1790 | "integrity": "sha512-AQ6zewa0ucLJvtUi5HsErbOFKAcQfRLt9zFLlUOvcXBy2G36a+ZDpCHSGdzJVUD8aNURtIjh9aSjCStNMRCcRQ==" 1791 | }, 1792 | "ansi-styles": { 1793 | "version": "3.2.1", 1794 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1795 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1796 | "requires": { 1797 | "color-convert": "^1.9.0" 1798 | } 1799 | }, 1800 | "anymatch": { 1801 | "version": "3.1.2", 1802 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", 1803 | "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", 1804 | "dev": true, 1805 | "requires": { 1806 | "normalize-path": "^3.0.0", 1807 | "picomatch": "^2.0.4" 1808 | } 1809 | }, 1810 | "apache-arrow": { 1811 | "version": "0.17.0", 1812 | "resolved": "https://registry.npmjs.org/apache-arrow/-/apache-arrow-0.17.0.tgz", 1813 | "integrity": "sha512-cbgSx/tzGgnC1qeUySXnAsSsoxhDykNINqr1D3U5pRwf0/Q0ztVccV3/VRW6gUR+lcOFawk6FtyYwmU+KjglbQ==", 1814 | "requires": { 1815 | "@types/flatbuffers": "^1.9.1", 1816 | "@types/node": "^12.0.4", 1817 | "@types/text-encoding-utf-8": "^1.0.1", 1818 | "command-line-args": "5.0.2", 1819 | "command-line-usage": "5.0.5", 1820 | "flatbuffers": "1.11.0", 1821 | "json-bignum": "^0.0.3", 1822 | "pad-left": "^2.1.0", 1823 | "text-encoding-utf-8": "^1.0.2", 1824 | "tslib": "^1.9.3" 1825 | }, 1826 | "dependencies": { 1827 | "@types/node": { 1828 | "version": "12.20.55", 1829 | "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.55.tgz", 1830 | "integrity": "sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==" 1831 | }, 1832 | "tslib": { 1833 | "version": "1.14.1", 1834 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", 1835 | "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==" 1836 | } 1837 | } 1838 | }, 1839 | "argv-tools": { 1840 | "version": "0.1.2", 1841 | "resolved": "https://registry.npmjs.org/argv-tools/-/argv-tools-0.1.2.tgz", 1842 | "integrity": "sha512-wxqoymY0BEu9NblZVQiOTOAiJUjPhaa/kbNMjC2h6bnrmUSgnxKgWJo3lzXvi3bHJRwXyqK/dHzMlZVRT89Cxg==", 1843 | "requires": { 1844 | "array-back": "^2.0.0", 1845 | "find-replace": "^2.0.1" 1846 | } 1847 | }, 1848 | "array-back": { 1849 | "version": "2.0.0", 1850 | "resolved": "https://registry.npmjs.org/array-back/-/array-back-2.0.0.tgz", 1851 | "integrity": "sha512-eJv4pLLufP3g5kcZry0j6WXpIbzYw9GUB4mVJZno9wfwiBxbizTnHCw3VJb07cBihbFX48Y7oSrW9y+gt4glyw==", 1852 | "requires": { 1853 | "typical": "^2.6.1" 1854 | } 1855 | }, 1856 | "balanced-match": { 1857 | "version": "1.0.2", 1858 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1859 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1860 | "dev": true 1861 | }, 1862 | "base64-js": { 1863 | "version": "1.5.1", 1864 | "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", 1865 | "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==" 1866 | }, 1867 | "binary-extensions": { 1868 | "version": "2.2.0", 1869 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1870 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1871 | "dev": true 1872 | }, 1873 | "brace-expansion": { 1874 | "version": "1.1.11", 1875 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1876 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1877 | "dev": true, 1878 | "requires": { 1879 | "balanced-match": "^1.0.0", 1880 | "concat-map": "0.0.1" 1881 | } 1882 | }, 1883 | "braces": { 1884 | "version": "3.0.2", 1885 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1886 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1887 | "dev": true, 1888 | "requires": { 1889 | "fill-range": "^7.0.1" 1890 | } 1891 | }, 1892 | "buffer-crc32": { 1893 | "version": "0.2.13", 1894 | "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", 1895 | "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", 1896 | "dev": true 1897 | }, 1898 | "buffer-from": { 1899 | "version": "1.1.2", 1900 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.2.tgz", 1901 | "integrity": "sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==", 1902 | "dev": true 1903 | }, 1904 | "builtin-modules": { 1905 | "version": "3.3.0", 1906 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", 1907 | "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", 1908 | "dev": true 1909 | }, 1910 | "callsites": { 1911 | "version": "3.1.0", 1912 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1913 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1914 | "dev": true 1915 | }, 1916 | "chalk": { 1917 | "version": "2.4.2", 1918 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1919 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1920 | "requires": { 1921 | "ansi-styles": "^3.2.1", 1922 | "escape-string-regexp": "^1.0.5", 1923 | "supports-color": "^5.3.0" 1924 | } 1925 | }, 1926 | "chokidar": { 1927 | "version": "3.5.3", 1928 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", 1929 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", 1930 | "dev": true, 1931 | "requires": { 1932 | "anymatch": "~3.1.2", 1933 | "braces": "~3.0.2", 1934 | "fsevents": "~2.3.2", 1935 | "glob-parent": "~5.1.2", 1936 | "is-binary-path": "~2.1.0", 1937 | "is-glob": "~4.0.1", 1938 | "normalize-path": "~3.0.0", 1939 | "readdirp": "~3.6.0" 1940 | } 1941 | }, 1942 | "color-convert": { 1943 | "version": "1.9.3", 1944 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1945 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1946 | "requires": { 1947 | "color-name": "1.1.3" 1948 | } 1949 | }, 1950 | "color-name": { 1951 | "version": "1.1.3", 1952 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1953 | "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==" 1954 | }, 1955 | "command-line-args": { 1956 | "version": "5.0.2", 1957 | "resolved": "https://registry.npmjs.org/command-line-args/-/command-line-args-5.0.2.tgz", 1958 | "integrity": "sha512-/qPcbL8zpqg53x4rAaqMFlRV4opN3pbla7I7k9x8kyOBMQoGT6WltjN6sXZuxOXw6DgdK7Ad+ijYS5gjcr7vlA==", 1959 | "requires": { 1960 | "argv-tools": "^0.1.1", 1961 | "array-back": "^2.0.0", 1962 | "find-replace": "^2.0.1", 1963 | "lodash.camelcase": "^4.3.0", 1964 | "typical": "^2.6.1" 1965 | } 1966 | }, 1967 | "command-line-usage": { 1968 | "version": "5.0.5", 1969 | "resolved": "https://registry.npmjs.org/command-line-usage/-/command-line-usage-5.0.5.tgz", 1970 | "integrity": "sha512-d8NrGylA5oCXSbGoKz05FkehDAzSmIm4K03S5VDh4d5lZAtTWfc3D1RuETtuQCn8129nYfJfDdF7P/lwcz1BlA==", 1971 | "requires": { 1972 | "array-back": "^2.0.0", 1973 | "chalk": "^2.4.1", 1974 | "table-layout": "^0.4.3", 1975 | "typical": "^2.6.1" 1976 | } 1977 | }, 1978 | "commander": { 1979 | "version": "2.20.3", 1980 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1981 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1982 | "dev": true 1983 | }, 1984 | "commondir": { 1985 | "version": "1.0.1", 1986 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1987 | "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", 1988 | "dev": true 1989 | }, 1990 | "concat-map": { 1991 | "version": "0.0.1", 1992 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1993 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1994 | "dev": true 1995 | }, 1996 | "console-clear": { 1997 | "version": "1.1.1", 1998 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 1999 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" 2000 | }, 2001 | "deep-extend": { 2002 | "version": "0.6.0", 2003 | "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", 2004 | "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==" 2005 | }, 2006 | "deep-freeze": { 2007 | "version": "0.0.1", 2008 | "resolved": "https://registry.npmjs.org/deep-freeze/-/deep-freeze-0.0.1.tgz", 2009 | "integrity": "sha512-Z+z8HiAvsGwmjqlphnHW5oz6yWlOwu6EQfFTjmeTWlDeda3FS2yv3jhq35TX/ewmsnqB+RX2IdsIOyjJCQN5tg==", 2010 | "dev": true 2011 | }, 2012 | "deepmerge": { 2013 | "version": "4.2.2", 2014 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 2015 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 2016 | "dev": true 2017 | }, 2018 | "detect-indent": { 2019 | "version": "6.1.0", 2020 | "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", 2021 | "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", 2022 | "dev": true 2023 | }, 2024 | "es6-promise": { 2025 | "version": "3.3.1", 2026 | "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", 2027 | "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", 2028 | "dev": true 2029 | }, 2030 | "escape-string-regexp": { 2031 | "version": "1.0.5", 2032 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 2033 | "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==" 2034 | }, 2035 | "estree-walker": { 2036 | "version": "1.0.1", 2037 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 2038 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 2039 | "dev": true 2040 | }, 2041 | "event-target-shim": { 2042 | "version": "5.0.1", 2043 | "resolved": "https://registry.npmjs.org/event-target-shim/-/event-target-shim-5.0.1.tgz", 2044 | "integrity": "sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==" 2045 | }, 2046 | "fill-range": { 2047 | "version": "7.0.1", 2048 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 2049 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 2050 | "dev": true, 2051 | "requires": { 2052 | "to-regex-range": "^5.0.1" 2053 | } 2054 | }, 2055 | "find-replace": { 2056 | "version": "2.0.1", 2057 | "resolved": "https://registry.npmjs.org/find-replace/-/find-replace-2.0.1.tgz", 2058 | "integrity": "sha512-LzDo3Fpa30FLIBsh6DCDnMN1KW2g4QKkqKmejlImgWY67dDFPX/x9Kh/op/GK522DchQXEvDi/wD48HKW49XOQ==", 2059 | "requires": { 2060 | "array-back": "^2.0.0", 2061 | "test-value": "^3.0.0" 2062 | } 2063 | }, 2064 | "flatbuffers": { 2065 | "version": "1.11.0", 2066 | "resolved": "https://registry.npmjs.org/flatbuffers/-/flatbuffers-1.11.0.tgz", 2067 | "integrity": "sha512-0PqFKtXI4MjxomI7jO4g5XfLPm/15g2R+5WGCHBGYGh0ihQiypnHlJ6bMmkkrAe0GzZ4d7PDAfCONKIPUxNF+A==" 2068 | }, 2069 | "fs.realpath": { 2070 | "version": "1.0.0", 2071 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2072 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2073 | "dev": true 2074 | }, 2075 | "fsevents": { 2076 | "version": "2.3.2", 2077 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", 2078 | "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", 2079 | "dev": true, 2080 | "optional": true 2081 | }, 2082 | "function-bind": { 2083 | "version": "1.1.1", 2084 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2085 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2086 | "dev": true 2087 | }, 2088 | "get-port": { 2089 | "version": "3.2.0", 2090 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 2091 | "integrity": "sha512-x5UJKlgeUiNT8nyo/AcnwLnZuZNcSjSw0kogRB+Whd1fjjFq4B1hySFxSFWWSn4mIBzg3sRNUDFYc4g5gjPoLg==" 2092 | }, 2093 | "glob": { 2094 | "version": "7.2.3", 2095 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2096 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2097 | "dev": true, 2098 | "requires": { 2099 | "fs.realpath": "^1.0.0", 2100 | "inflight": "^1.0.4", 2101 | "inherits": "2", 2102 | "minimatch": "^3.1.1", 2103 | "once": "^1.3.0", 2104 | "path-is-absolute": "^1.0.0" 2105 | } 2106 | }, 2107 | "glob-parent": { 2108 | "version": "5.1.2", 2109 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 2110 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 2111 | "dev": true, 2112 | "requires": { 2113 | "is-glob": "^4.0.1" 2114 | } 2115 | }, 2116 | "graceful-fs": { 2117 | "version": "4.2.10", 2118 | "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.10.tgz", 2119 | "integrity": "sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==", 2120 | "dev": true 2121 | }, 2122 | "has": { 2123 | "version": "1.0.3", 2124 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2125 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2126 | "dev": true, 2127 | "requires": { 2128 | "function-bind": "^1.1.1" 2129 | } 2130 | }, 2131 | "has-flag": { 2132 | "version": "3.0.0", 2133 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 2134 | "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==" 2135 | }, 2136 | "import-fresh": { 2137 | "version": "3.3.0", 2138 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2139 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2140 | "dev": true, 2141 | "requires": { 2142 | "parent-module": "^1.0.0", 2143 | "resolve-from": "^4.0.0" 2144 | } 2145 | }, 2146 | "inflight": { 2147 | "version": "1.0.6", 2148 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2149 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2150 | "dev": true, 2151 | "requires": { 2152 | "once": "^1.3.0", 2153 | "wrappy": "1" 2154 | } 2155 | }, 2156 | "inherits": { 2157 | "version": "2.0.4", 2158 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2159 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2160 | "dev": true 2161 | }, 2162 | "is-binary-path": { 2163 | "version": "2.1.0", 2164 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 2165 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 2166 | "dev": true, 2167 | "requires": { 2168 | "binary-extensions": "^2.0.0" 2169 | } 2170 | }, 2171 | "is-core-module": { 2172 | "version": "2.11.0", 2173 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", 2174 | "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", 2175 | "dev": true, 2176 | "requires": { 2177 | "has": "^1.0.3" 2178 | } 2179 | }, 2180 | "is-extglob": { 2181 | "version": "2.1.1", 2182 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2183 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2184 | "dev": true 2185 | }, 2186 | "is-glob": { 2187 | "version": "4.0.3", 2188 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2189 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2190 | "dev": true, 2191 | "requires": { 2192 | "is-extglob": "^2.1.1" 2193 | } 2194 | }, 2195 | "is-module": { 2196 | "version": "1.0.0", 2197 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 2198 | "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", 2199 | "dev": true 2200 | }, 2201 | "is-number": { 2202 | "version": "7.0.0", 2203 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2204 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2205 | "dev": true 2206 | }, 2207 | "is-reference": { 2208 | "version": "1.2.1", 2209 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 2210 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 2211 | "dev": true, 2212 | "requires": { 2213 | "@types/estree": "*" 2214 | } 2215 | }, 2216 | "jest-worker": { 2217 | "version": "24.9.0", 2218 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-24.9.0.tgz", 2219 | "integrity": "sha512-51PE4haMSXcHohnSMdM42anbvZANYTqMrr52tVKPqqsPJMzoP6FYYDVqahX/HrAoKEKz3uUPzSvKs9A3qR4iVw==", 2220 | "dev": true, 2221 | "requires": { 2222 | "merge-stream": "^2.0.0", 2223 | "supports-color": "^6.1.0" 2224 | }, 2225 | "dependencies": { 2226 | "supports-color": { 2227 | "version": "6.1.0", 2228 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-6.1.0.tgz", 2229 | "integrity": "sha512-qe1jfm1Mg7Nq/NSh6XE24gPXROEVsWHxC1LIx//XNlD9iw7YZQGjZNjYN7xGaEG6iKdA8EtNFW6R0gjnVXp+wQ==", 2230 | "dev": true, 2231 | "requires": { 2232 | "has-flag": "^3.0.0" 2233 | } 2234 | } 2235 | } 2236 | }, 2237 | "js-sha256": { 2238 | "version": "0.9.0", 2239 | "resolved": "https://registry.npmjs.org/js-sha256/-/js-sha256-0.9.0.tgz", 2240 | "integrity": "sha512-sga3MHh9sgQN2+pJ9VYZ+1LPwXOxuBJBA5nrR5/ofPfuiJBE2hnjsaN8se8JznOmGLN2p49Pe5U/ttafcs/apA==" 2241 | }, 2242 | "js-tokens": { 2243 | "version": "4.0.0", 2244 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 2245 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 2246 | "dev": true 2247 | }, 2248 | "json-bignum": { 2249 | "version": "0.0.3", 2250 | "resolved": "https://registry.npmjs.org/json-bignum/-/json-bignum-0.0.3.tgz", 2251 | "integrity": "sha512-2WHyXj3OfHSgNyuzDbSxI1w2jgw5gkWSWhS7Qg4bWXx1nLk3jnbwfUeS0PSba3IzpTUWdHxBieELUzXRjQB2zg==" 2252 | }, 2253 | "keycloak-js": { 2254 | "version": "20.0.1", 2255 | "resolved": "https://registry.npmjs.org/keycloak-js/-/keycloak-js-20.0.1.tgz", 2256 | "integrity": "sha512-YNj0X0mmdLpqjB9W5DTAVDI14CzZs7RFn9T/t/g8Uq80OjaW2zZUis/g73aWwz04S3B6U6Vrg8h1wAMGbx2NQQ==", 2257 | "requires": { 2258 | "base64-js": "^1.5.1", 2259 | "js-sha256": "^0.9.0" 2260 | } 2261 | }, 2262 | "kleur": { 2263 | "version": "3.0.3", 2264 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 2265 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" 2266 | }, 2267 | "livereload": { 2268 | "version": "0.9.3", 2269 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.3.tgz", 2270 | "integrity": "sha512-q7Z71n3i4X0R9xthAryBdNGVGAO2R5X+/xXpmKeuPMrteg+W2U8VusTKV3YiJbXZwKsOlFlHe+go6uSNjfxrZw==", 2271 | "dev": true, 2272 | "requires": { 2273 | "chokidar": "^3.5.0", 2274 | "livereload-js": "^3.3.1", 2275 | "opts": ">= 1.2.0", 2276 | "ws": "^7.4.3" 2277 | } 2278 | }, 2279 | "livereload-js": { 2280 | "version": "3.4.1", 2281 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.4.1.tgz", 2282 | "integrity": "sha512-5MP0uUeVCec89ZbNOT/i97Mc+q3SxXmiUGhRFOTmhrGPn//uWVQdCvcLJDy64MSBR5MidFdOR7B9viumoavy6g==", 2283 | "dev": true 2284 | }, 2285 | "local-access": { 2286 | "version": "1.1.0", 2287 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 2288 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==" 2289 | }, 2290 | "lodash.camelcase": { 2291 | "version": "4.3.0", 2292 | "resolved": "https://registry.npmjs.org/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz", 2293 | "integrity": "sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==" 2294 | }, 2295 | "lodash.padend": { 2296 | "version": "4.6.1", 2297 | "resolved": "https://registry.npmjs.org/lodash.padend/-/lodash.padend-4.6.1.tgz", 2298 | "integrity": "sha512-sOQs2aqGpbl27tmCS1QNZA09Uqp01ZzWfDUoD+xzTii0E7dSQfRKcRetFwa+uXaxaqL+TKm7CgD2JdKP7aZBSw==" 2299 | }, 2300 | "magic-string": { 2301 | "version": "0.25.9", 2302 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.9.tgz", 2303 | "integrity": "sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==", 2304 | "dev": true, 2305 | "requires": { 2306 | "sourcemap-codec": "^1.4.8" 2307 | } 2308 | }, 2309 | "merge-stream": { 2310 | "version": "2.0.0", 2311 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2312 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2313 | "dev": true 2314 | }, 2315 | "min-indent": { 2316 | "version": "1.0.1", 2317 | "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", 2318 | "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", 2319 | "dev": true 2320 | }, 2321 | "minimatch": { 2322 | "version": "3.1.2", 2323 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2324 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2325 | "dev": true, 2326 | "requires": { 2327 | "brace-expansion": "^1.1.7" 2328 | } 2329 | }, 2330 | "minimist": { 2331 | "version": "1.2.7", 2332 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.7.tgz", 2333 | "integrity": "sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==", 2334 | "dev": true 2335 | }, 2336 | "mkdirp": { 2337 | "version": "0.5.6", 2338 | "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", 2339 | "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", 2340 | "dev": true, 2341 | "requires": { 2342 | "minimist": "^1.2.6" 2343 | } 2344 | }, 2345 | "mri": { 2346 | "version": "1.2.0", 2347 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", 2348 | "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==" 2349 | }, 2350 | "mrmime": { 2351 | "version": "1.0.1", 2352 | "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-1.0.1.tgz", 2353 | "integrity": "sha512-hzzEagAgDyoU1Q6yg5uI+AorQgdvMCur3FcKf7NhMKWsaYg+RnbTyHRa/9IlLF9rf455MOCtcqqrQQ83pPP7Uw==" 2354 | }, 2355 | "normalize-path": { 2356 | "version": "3.0.0", 2357 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2358 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2359 | "dev": true 2360 | }, 2361 | "once": { 2362 | "version": "1.4.0", 2363 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2364 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2365 | "dev": true, 2366 | "requires": { 2367 | "wrappy": "1" 2368 | } 2369 | }, 2370 | "opts": { 2371 | "version": "2.0.2", 2372 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 2373 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 2374 | "dev": true 2375 | }, 2376 | "pad-left": { 2377 | "version": "2.1.0", 2378 | "resolved": "https://registry.npmjs.org/pad-left/-/pad-left-2.1.0.tgz", 2379 | "integrity": "sha512-HJxs9K9AztdIQIAIa/OIazRAUW/L6B9hbQDxO4X07roW3eo9XqZc2ur9bn1StH9CnbbI9EgvejHQX7CBpCF1QA==", 2380 | "requires": { 2381 | "repeat-string": "^1.5.4" 2382 | } 2383 | }, 2384 | "parent-module": { 2385 | "version": "1.0.1", 2386 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 2387 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 2388 | "dev": true, 2389 | "requires": { 2390 | "callsites": "^3.0.0" 2391 | } 2392 | }, 2393 | "path-is-absolute": { 2394 | "version": "1.0.1", 2395 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 2396 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 2397 | "dev": true 2398 | }, 2399 | "path-parse": { 2400 | "version": "1.0.7", 2401 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 2402 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 2403 | "dev": true 2404 | }, 2405 | "picomatch": { 2406 | "version": "2.3.1", 2407 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2408 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2409 | "dev": true 2410 | }, 2411 | "randombytes": { 2412 | "version": "2.1.0", 2413 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 2414 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 2415 | "dev": true, 2416 | "requires": { 2417 | "safe-buffer": "^5.1.0" 2418 | } 2419 | }, 2420 | "readdirp": { 2421 | "version": "3.6.0", 2422 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2423 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2424 | "dev": true, 2425 | "requires": { 2426 | "picomatch": "^2.2.1" 2427 | } 2428 | }, 2429 | "reduce-flatten": { 2430 | "version": "1.0.1", 2431 | "resolved": "https://registry.npmjs.org/reduce-flatten/-/reduce-flatten-1.0.1.tgz", 2432 | "integrity": "sha512-j5WfFJfc9CoXv/WbwVLHq74i/hdTUpy+iNC534LxczMRP67vJeK3V9JOdnL0N1cIRbn9mYhE2yVjvvKXDxvNXQ==" 2433 | }, 2434 | "repeat-string": { 2435 | "version": "1.6.1", 2436 | "resolved": "https://registry.npmjs.org/repeat-string/-/repeat-string-1.6.1.tgz", 2437 | "integrity": "sha512-PV0dzCYDNfRi1jCDbJzpW7jNNDRuCOG/jI5ctQcGKt/clZD+YcPS3yIlWuTJMmESC8aevCFmWJy5wjAFgNqN6w==" 2438 | }, 2439 | "require-relative": { 2440 | "version": "0.8.7", 2441 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 2442 | "integrity": "sha512-AKGr4qvHiryxRb19m3PsLRGuKVAbJLUD7E6eOaHkfKhwc+vSgVOCY5xNvm9EkolBKTOf0GrQAZKLimOCz81Khg==", 2443 | "dev": true 2444 | }, 2445 | "resolve": { 2446 | "version": "1.22.1", 2447 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", 2448 | "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", 2449 | "dev": true, 2450 | "requires": { 2451 | "is-core-module": "^2.9.0", 2452 | "path-parse": "^1.0.7", 2453 | "supports-preserve-symlinks-flag": "^1.0.0" 2454 | } 2455 | }, 2456 | "resolve-from": { 2457 | "version": "4.0.0", 2458 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 2459 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 2460 | "dev": true 2461 | }, 2462 | "rimraf": { 2463 | "version": "2.7.1", 2464 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", 2465 | "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", 2466 | "dev": true, 2467 | "requires": { 2468 | "glob": "^7.1.3" 2469 | } 2470 | }, 2471 | "rollup": { 2472 | "version": "2.79.1", 2473 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", 2474 | "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", 2475 | "dev": true, 2476 | "requires": { 2477 | "fsevents": "~2.3.2" 2478 | } 2479 | }, 2480 | "rollup-plugin-livereload": { 2481 | "version": "1.3.0", 2482 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-1.3.0.tgz", 2483 | "integrity": "sha512-abyqXaB21+nFHo+vJULBqfzNx6zXABC19UyvqgDfdoxR/8pFAd041GO+GIUe8ZYC2DbuMUmioh1Lvbk14YLZgw==", 2484 | "dev": true, 2485 | "requires": { 2486 | "livereload": "^0.9.1" 2487 | } 2488 | }, 2489 | "rollup-plugin-svelte": { 2490 | "version": "6.1.1", 2491 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-6.1.1.tgz", 2492 | "integrity": "sha512-ijnm0pH1ScrY4uxwaNXBpNVejVzpL2769hIEbAlnqNUWZrffLspu5/k9/l/Wsj3NrEHLQ6wCKGagVJonyfN7ow==", 2493 | "dev": true, 2494 | "requires": { 2495 | "require-relative": "^0.8.7", 2496 | "rollup-pluginutils": "^2.8.2", 2497 | "sourcemap-codec": "^1.4.8" 2498 | } 2499 | }, 2500 | "rollup-plugin-terser": { 2501 | "version": "5.3.1", 2502 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-5.3.1.tgz", 2503 | "integrity": "sha512-1pkwkervMJQGFYvM9nscrUoncPwiKR/K+bHdjv6PFgRo3cgPHoRT83y2Aa3GvINj4539S15t/tpFPb775TDs6w==", 2504 | "dev": true, 2505 | "requires": { 2506 | "@babel/code-frame": "^7.5.5", 2507 | "jest-worker": "^24.9.0", 2508 | "rollup-pluginutils": "^2.8.2", 2509 | "serialize-javascript": "^4.0.0", 2510 | "terser": "^4.6.2" 2511 | } 2512 | }, 2513 | "rollup-pluginutils": { 2514 | "version": "2.8.2", 2515 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 2516 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 2517 | "dev": true, 2518 | "requires": { 2519 | "estree-walker": "^0.6.1" 2520 | }, 2521 | "dependencies": { 2522 | "estree-walker": { 2523 | "version": "0.6.1", 2524 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 2525 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 2526 | "dev": true 2527 | } 2528 | } 2529 | }, 2530 | "sade": { 2531 | "version": "1.8.1", 2532 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", 2533 | "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", 2534 | "requires": { 2535 | "mri": "^1.1.0" 2536 | } 2537 | }, 2538 | "safe-buffer": { 2539 | "version": "5.2.1", 2540 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 2541 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 2542 | "dev": true 2543 | }, 2544 | "sander": { 2545 | "version": "0.5.1", 2546 | "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", 2547 | "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", 2548 | "dev": true, 2549 | "requires": { 2550 | "es6-promise": "^3.1.2", 2551 | "graceful-fs": "^4.1.3", 2552 | "mkdirp": "^0.5.1", 2553 | "rimraf": "^2.5.2" 2554 | } 2555 | }, 2556 | "semiver": { 2557 | "version": "1.1.0", 2558 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 2559 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==" 2560 | }, 2561 | "serialize-javascript": { 2562 | "version": "4.0.0", 2563 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 2564 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 2565 | "dev": true, 2566 | "requires": { 2567 | "randombytes": "^2.1.0" 2568 | } 2569 | }, 2570 | "sirv": { 2571 | "version": "1.0.19", 2572 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.19.tgz", 2573 | "integrity": "sha512-JuLThK3TnZG1TAKDwNIqNq6QA2afLOCcm+iE8D1Kj3GA40pSPsxQjjJl0J8X3tsR7T+CP1GavpzLwYkgVLWrZQ==", 2574 | "requires": { 2575 | "@polka/url": "^1.0.0-next.20", 2576 | "mrmime": "^1.0.0", 2577 | "totalist": "^1.0.0" 2578 | } 2579 | }, 2580 | "sirv-cli": { 2581 | "version": "1.0.14", 2582 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.14.tgz", 2583 | "integrity": "sha512-yyUTNr984ANKDloqepkYbBSqvx3buwYg2sQKPWjSU+IBia5loaoka2If8N9CMwt8AfP179cdEl7kYJ//iWJHjQ==", 2584 | "requires": { 2585 | "console-clear": "^1.1.0", 2586 | "get-port": "^3.2.0", 2587 | "kleur": "^3.0.0", 2588 | "local-access": "^1.0.1", 2589 | "sade": "^1.6.0", 2590 | "semiver": "^1.0.0", 2591 | "sirv": "^1.0.13", 2592 | "tinydate": "^1.0.0" 2593 | } 2594 | }, 2595 | "sorcery": { 2596 | "version": "0.10.0", 2597 | "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.10.0.tgz", 2598 | "integrity": "sha512-R5ocFmKZQFfSTstfOtHjJuAwbpGyf9qjQa1egyhvXSbM7emjrtLXtGdZsDJDABC85YBfVvrOiGWKSYXPKdvP1g==", 2599 | "dev": true, 2600 | "requires": { 2601 | "buffer-crc32": "^0.2.5", 2602 | "minimist": "^1.2.0", 2603 | "sander": "^0.5.0", 2604 | "sourcemap-codec": "^1.3.0" 2605 | } 2606 | }, 2607 | "source-map": { 2608 | "version": "0.7.4", 2609 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", 2610 | "integrity": "sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA==", 2611 | "dev": true 2612 | }, 2613 | "source-map-support": { 2614 | "version": "0.5.21", 2615 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", 2616 | "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", 2617 | "dev": true, 2618 | "requires": { 2619 | "buffer-from": "^1.0.0", 2620 | "source-map": "^0.6.0" 2621 | }, 2622 | "dependencies": { 2623 | "source-map": { 2624 | "version": "0.6.1", 2625 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2626 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2627 | "dev": true 2628 | } 2629 | } 2630 | }, 2631 | "sourcemap-codec": { 2632 | "version": "1.4.8", 2633 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 2634 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 2635 | "dev": true 2636 | }, 2637 | "strip-indent": { 2638 | "version": "3.0.0", 2639 | "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", 2640 | "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", 2641 | "dev": true, 2642 | "requires": { 2643 | "min-indent": "^1.0.0" 2644 | } 2645 | }, 2646 | "supports-color": { 2647 | "version": "5.5.0", 2648 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 2649 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 2650 | "requires": { 2651 | "has-flag": "^3.0.0" 2652 | } 2653 | }, 2654 | "supports-preserve-symlinks-flag": { 2655 | "version": "1.0.0", 2656 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 2657 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 2658 | "dev": true 2659 | }, 2660 | "svelte": { 2661 | "version": "3.52.0", 2662 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.52.0.tgz", 2663 | "integrity": "sha512-FxcnEUOAVfr10vDU5dVgJN19IvqeHQCS1zfe8vayTfis9A2t5Fhx+JDe5uv/C3j//bB1umpLJ6quhgs9xyUbCQ==", 2664 | "dev": true 2665 | }, 2666 | "svelte-check": { 2667 | "version": "1.6.0", 2668 | "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-1.6.0.tgz", 2669 | "integrity": "sha512-nQTlbFJWhwoeLY5rkhgbjzGQSwk5F1pRdEXait0EFaQSrE/iJF+PIjrQlk0BjL/ogk9HaR9ZI0DQSYrl7jl3IQ==", 2670 | "dev": true, 2671 | "requires": { 2672 | "chalk": "^4.0.0", 2673 | "chokidar": "^3.4.1", 2674 | "glob": "^7.1.6", 2675 | "import-fresh": "^3.2.1", 2676 | "minimist": "^1.2.5", 2677 | "sade": "^1.7.4", 2678 | "source-map": "^0.7.3", 2679 | "svelte-preprocess": "^4.0.0", 2680 | "typescript": "*" 2681 | }, 2682 | "dependencies": { 2683 | "ansi-styles": { 2684 | "version": "4.3.0", 2685 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2686 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2687 | "dev": true, 2688 | "requires": { 2689 | "color-convert": "^2.0.1" 2690 | } 2691 | }, 2692 | "chalk": { 2693 | "version": "4.1.2", 2694 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 2695 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 2696 | "dev": true, 2697 | "requires": { 2698 | "ansi-styles": "^4.1.0", 2699 | "supports-color": "^7.1.0" 2700 | } 2701 | }, 2702 | "color-convert": { 2703 | "version": "2.0.1", 2704 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2705 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2706 | "dev": true, 2707 | "requires": { 2708 | "color-name": "~1.1.4" 2709 | } 2710 | }, 2711 | "color-name": { 2712 | "version": "1.1.4", 2713 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2714 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 2715 | "dev": true 2716 | }, 2717 | "has-flag": { 2718 | "version": "4.0.0", 2719 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2720 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2721 | "dev": true 2722 | }, 2723 | "supports-color": { 2724 | "version": "7.2.0", 2725 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2726 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2727 | "dev": true, 2728 | "requires": { 2729 | "has-flag": "^4.0.0" 2730 | } 2731 | } 2732 | } 2733 | }, 2734 | "svelte-preprocess": { 2735 | "version": "4.10.7", 2736 | "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-4.10.7.tgz", 2737 | "integrity": "sha512-sNPBnqYD6FnmdBrUmBCaqS00RyCsCpj2BG58A1JBswNF7b0OKviwxqVrOL/CKyJrLSClrSeqQv5BXNg2RUbPOw==", 2738 | "dev": true, 2739 | "requires": { 2740 | "@types/pug": "^2.0.4", 2741 | "@types/sass": "^1.16.0", 2742 | "detect-indent": "^6.0.0", 2743 | "magic-string": "^0.25.7", 2744 | "sorcery": "^0.10.0", 2745 | "strip-indent": "^3.0.0" 2746 | } 2747 | }, 2748 | "table-layout": { 2749 | "version": "0.4.5", 2750 | "resolved": "https://registry.npmjs.org/table-layout/-/table-layout-0.4.5.tgz", 2751 | "integrity": "sha512-zTvf0mcggrGeTe/2jJ6ECkJHAQPIYEwDoqsiqBjI24mvRmQbInK5jq33fyypaCBxX08hMkfmdOqj6haT33EqWw==", 2752 | "requires": { 2753 | "array-back": "^2.0.0", 2754 | "deep-extend": "~0.6.0", 2755 | "lodash.padend": "^4.6.1", 2756 | "typical": "^2.6.1", 2757 | "wordwrapjs": "^3.0.0" 2758 | } 2759 | }, 2760 | "terser": { 2761 | "version": "4.8.1", 2762 | "resolved": "https://registry.npmjs.org/terser/-/terser-4.8.1.tgz", 2763 | "integrity": "sha512-4GnLC0x667eJG0ewJTa6z/yXrbLGv80D9Ru6HIpCQmO+Q4PfEtBFi0ObSckqwL6VyQv/7ENJieXHo2ANmdQwgw==", 2764 | "dev": true, 2765 | "requires": { 2766 | "commander": "^2.20.0", 2767 | "source-map": "~0.6.1", 2768 | "source-map-support": "~0.5.12" 2769 | }, 2770 | "dependencies": { 2771 | "source-map": { 2772 | "version": "0.6.1", 2773 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 2774 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 2775 | "dev": true 2776 | } 2777 | } 2778 | }, 2779 | "test-value": { 2780 | "version": "3.0.0", 2781 | "resolved": "https://registry.npmjs.org/test-value/-/test-value-3.0.0.tgz", 2782 | "integrity": "sha512-sVACdAWcZkSU9x7AOmJo5TqE+GyNJknHaHsMrR6ZnhjVlVN9Yx6FjHrsKZ3BjIpPCT68zYesPWkakrNupwfOTQ==", 2783 | "requires": { 2784 | "array-back": "^2.0.0", 2785 | "typical": "^2.6.1" 2786 | } 2787 | }, 2788 | "text-encoding-utf-8": { 2789 | "version": "1.0.2", 2790 | "resolved": "https://registry.npmjs.org/text-encoding-utf-8/-/text-encoding-utf-8-1.0.2.tgz", 2791 | "integrity": "sha512-8bw4MY9WjdsD2aMtO0OzOCY3pXGYNx2d2FfHRVUKkiCPDWjKuOlhLVASS+pD7VkLTVjW268LYJHwsnPFlBpbAg==" 2792 | }, 2793 | "tinydate": { 2794 | "version": "1.3.0", 2795 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 2796 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==" 2797 | }, 2798 | "to-regex-range": { 2799 | "version": "5.0.1", 2800 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 2801 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 2802 | "dev": true, 2803 | "requires": { 2804 | "is-number": "^7.0.0" 2805 | } 2806 | }, 2807 | "totalist": { 2808 | "version": "1.1.0", 2809 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", 2810 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" 2811 | }, 2812 | "tslib": { 2813 | "version": "2.4.1", 2814 | "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.4.1.tgz", 2815 | "integrity": "sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==", 2816 | "dev": true 2817 | }, 2818 | "typescript": { 2819 | "version": "3.9.10", 2820 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-3.9.10.tgz", 2821 | "integrity": "sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q==", 2822 | "dev": true 2823 | }, 2824 | "typical": { 2825 | "version": "2.6.1", 2826 | "resolved": "https://registry.npmjs.org/typical/-/typical-2.6.1.tgz", 2827 | "integrity": "sha512-ofhi8kjIje6npGozTip9Fr8iecmYfEbS06i0JnIg+rh51KakryWF4+jX8lLKZVhy6N+ID45WYSFCxPOdTWCzNg==" 2828 | }, 2829 | "wordwrapjs": { 2830 | "version": "3.0.0", 2831 | "resolved": "https://registry.npmjs.org/wordwrapjs/-/wordwrapjs-3.0.0.tgz", 2832 | "integrity": "sha512-mO8XtqyPvykVCsrwj5MlOVWvSnCdT+C+QVbm6blradR7JExAhbkZ7hZ9A+9NUtwzSqrlUo9a67ws0EiILrvRpw==", 2833 | "requires": { 2834 | "reduce-flatten": "^1.0.1", 2835 | "typical": "^2.6.1" 2836 | } 2837 | }, 2838 | "wrappy": { 2839 | "version": "1.0.2", 2840 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2841 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 2842 | "dev": true 2843 | }, 2844 | "ws": { 2845 | "version": "7.5.9", 2846 | "resolved": "https://registry.npmjs.org/ws/-/ws-7.5.9.tgz", 2847 | "integrity": "sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q==", 2848 | "dev": true, 2849 | "requires": {} 2850 | } 2851 | } 2852 | } 2853 | --------------------------------------------------------------------------------