├── .gitignore ├── .gitlab-ci.yml ├── Dockerfile ├── README.md ├── django_svelte_demo ├── django_svelte_demo │ ├── __init__.py │ ├── api │ │ ├── urls.py │ │ └── views.py │ ├── asgi.py │ ├── settings.py │ ├── templates │ │ └── home.html │ ├── urls.py │ └── wsgi.py └── manage.py ├── docker-compose.yml ├── entrypoint.sh ├── makefile ├── requirements.txt └── svelte ├── .gitignore ├── README.md ├── package-lock.json ├── package.json ├── public ├── favicon.png ├── global.css └── index.html ├── rollup.config.js ├── scripts └── setupTypeScript.js └── src ├── App.svelte ├── AuthComponent.svelte ├── PostComponent.svelte ├── api.js ├── main-app.js ├── main-authcomponent.js └── main-postcomponent.js /.gitignore: -------------------------------------------------------------------------------- 1 | **/__pycache__/* 2 | **/node_modules/* 3 | *.pyc 4 | *.sqlite3 5 | *.log 6 | *.final 7 | 8 | -------------------------------------------------------------------------------- /.gitlab-ci.yml: -------------------------------------------------------------------------------- 1 | stages: 2 | - pre-build 3 | - build 4 | 5 | build-svelte: 6 | stage: pre-build 7 | image: node:current-alpine 8 | script: 9 | - cd svelte 10 | - npm install 11 | - npm run build 12 | artifacts: 13 | paths: 14 | - svelte/public/build/ 15 | 16 | build-app: 17 | stage: build 18 | image: 19 | name: gcr.io/kaniko-project/executor:debug 20 | entrypoint: [""] 21 | script: 22 | - echo "{\"auths\":{\"$CI_REGISTRY\":{\"username\":\"$CI_REGISTRY_USER\",\"password\":\"$CI_REGISTRY_PASSWORD\"}}}" > /kaniko/.docker/config.json 23 | - /kaniko/executor --context $CI_PROJECT_DIR --dockerfile Dockerfile --destination $CI_REGISTRY_IMAGE:latest 24 | dependencies: 25 | - build-svelte 26 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM python:3.8-alpine as builder 2 | # RUN adduser -D worker -u 1000 3 | 4 | RUN apk add --no-cache git build-base 5 | 6 | # Get the python dependencies 7 | COPY requirements.txt /app/ 8 | RUN python -m pip install -r /app/requirements.txt 9 | 10 | # Copy the app itself 11 | COPY django_svelte_demo /app/src 12 | WORKDIR /app/src 13 | 14 | # Get the frontend component staticfiles 15 | COPY svelte/public/build /app/svelte/public/build 16 | 17 | # Catalog the staticfiles. This is needed in production, but in the dev 18 | # environment the svelte staticfiles will be drawn from 19 | # the svelte/public/build directory 20 | RUN python manage.py collectstatic --noinput 21 | 22 | # Delete the original staticfiles 23 | RUN rm -rf /app/svelte 24 | 25 | # get the runtime instructions 26 | COPY entrypoint.sh /app 27 | RUN chmod +x /app/entrypoint.sh 28 | 29 | # set the runtime user 30 | # USER worker 31 | EXPOSE 8000 32 | ENTRYPOINT ["sh", "/app/entrypoint.sh"] 33 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # This demonstration of a Svelte 3 (+Rollup) deployment for django-svelte is no longer current! Please see the Svelte 4 (+Vite) [demo project built in to the django-svelte package](https://github.com/thismatters/django-svelte/tree/main/demo_project). 2 | 3 | 4 | --- 5 | 6 | # django-svelte-demo 7 | 8 | This demo accompanies [django-svelte](https://github.com/thismatters/django-svelte) to illustrate its usage. It is intended to illustrate how Node.js can fit into the development and build environments so that it doesn't have to be used in a production environment. 9 | 10 | Pay special attention to the `Dockerfile`, `docker-compose.yml`, and `gitlab-ci.yml` (I'm using Gitlab CI here because it is really great and it is what I use for all my professional projects; if there is enough interest I'll try to replicate the functionality in Github CI). 11 | 12 | ## Prereqs 13 | 14 | You'll need `docker`, `docker-compose`, and `make` for this to work. 15 | 16 | ## Usage 17 | 18 | If you've downloaded this and want to run it you should be able to do 19 | 20 | ``` 21 | cd svelte 22 | npm install 23 | cd .. 24 | make build 25 | make run 26 | ``` 27 | 28 | And see your svelte components within a django template at [localhost:8000/](http://localhost:8000). 29 | 30 | And if you've created a superuser with: 31 | 32 | ``` 33 | python django_svelte_demo/manage.py createsuperuser 34 | ``` 35 | 36 | You can then use the admin interface at [localhost:8000/admin](http://localhost:8000/admin) to connect that app to your data. 37 | 38 | And when you're done you can run `make stop`. 39 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thismatters/django-svelte-demo/f97e2504b3ed27500bb0d314826604eda7cd9f9e/django_svelte_demo/django_svelte_demo/__init__.py -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/api/urls.py: -------------------------------------------------------------------------------- 1 | from django.urls import path, include 2 | from drf_yasg import openapi 3 | from drf_yasg.views import get_schema_view 4 | from rest_framework import permissions 5 | 6 | from django_svelte_demo.api import views 7 | 8 | 9 | schema_view = get_schema_view( 10 | openapi.Info( 11 | title="svelted API", 12 | default_version="v1", 13 | description="Some test endpoints to verify that auth works right", 14 | ), 15 | public=True, 16 | permission_classes=(permissions.AllowAny,), 17 | ) 18 | 19 | urlpatterns = [ 20 | path("api-auth/", include("rest_framework.urls", namespace="rest_framework")), 21 | path( 22 | "docs/", 23 | schema_view.with_ui("swagger", cache_timeout=0), 24 | name="schema-swagger-ui", 25 | ), 26 | path("requires-auth/", views.RequiresAuthAPIView.as_view(), name="requires-auth"), 27 | path("public/", views.PublicAPIView.as_view(), name="requires-auth"), 28 | ] 29 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/api/views.py: -------------------------------------------------------------------------------- 1 | from rest_framework.views import APIView 2 | from rest_framework.permissions import IsAuthenticated 3 | from rest_framework.response import Response 4 | 5 | 6 | class SgoodMixin: 7 | def get(self, request, *args, **kwargs): 8 | return Response({"sgood": True}) 9 | 10 | def post(self, request, *args, **kwargs): 11 | print(request.data) 12 | print("yes") 13 | print(request.user) 14 | return Response({"sgood": True, "did_post": True}) 15 | 16 | 17 | class RequiresAuthAPIView(APIView, SgoodMixin): 18 | permission_classes = (IsAuthenticated,) 19 | 20 | 21 | class PublicAPIView(APIView, SgoodMixin): 22 | pass 23 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/asgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | ASGI config for django_svelte_demo project. 3 | 4 | It exposes the ASGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/asgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.asgi import get_asgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_svelte_demo.settings') 15 | 16 | application = get_asgi_application() 17 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for django_svelte_demo project. 3 | 4 | Generated by 'django-admin startproject' using Django 3.1.2. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/topics/settings/ 8 | 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/3.1/ref/settings/ 11 | """ 12 | 13 | from pathlib import Path 14 | 15 | # Build paths inside the project like this: BASE_DIR / 'subdir'. 16 | BASE_DIR = Path(__file__).resolve().parent.parent 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/3.1/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = '^*8@r7lwme4sm9**rxd5g6+q4fbkalgi#1au9o%cow)otux$ok' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = [ 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 41 | 'django_svelte', 42 | 'rest_framework', 43 | 'drf_yasg', 44 | 45 | 'django_svelte_demo', 46 | ] 47 | 48 | MIDDLEWARE = [ 49 | 'django.middleware.security.SecurityMiddleware', 50 | 'django.contrib.sessions.middleware.SessionMiddleware', 51 | 'django.middleware.common.CommonMiddleware', 52 | 'django.middleware.csrf.CsrfViewMiddleware', 53 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 54 | 'django.contrib.messages.middleware.MessageMiddleware', 55 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 56 | ] 57 | 58 | ROOT_URLCONF = 'django_svelte_demo.urls' 59 | 60 | TEMPLATES = [ 61 | { 62 | 'BACKEND': 'django.template.backends.django.DjangoTemplates', 63 | 'DIRS': [], 64 | 'APP_DIRS': True, 65 | 'OPTIONS': { 66 | 'context_processors': [ 67 | 'django.template.context_processors.debug', 68 | 'django.template.context_processors.request', 69 | 'django.contrib.auth.context_processors.auth', 70 | 'django.contrib.messages.context_processors.messages', 71 | ], 72 | }, 73 | }, 74 | ] 75 | 76 | WSGI_APPLICATION = 'django_svelte_demo.wsgi.application' 77 | 78 | 79 | # Database 80 | # https://docs.djangoproject.com/en/3.1/ref/settings/#databases 81 | 82 | DATABASES = { 83 | 'default': { 84 | 'ENGINE': 'django.db.backends.sqlite3', 85 | 'NAME': BASE_DIR / 'db.sqlite3', 86 | } 87 | } 88 | 89 | 90 | # Password validation 91 | # https://docs.djangoproject.com/en/3.1/ref/settings/#auth-password-validators 92 | 93 | AUTH_PASSWORD_VALIDATORS = [ 94 | { 95 | 'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator', 96 | }, 97 | { 98 | 'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator', 99 | }, 100 | { 101 | 'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator', 102 | }, 103 | { 104 | 'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator', 105 | }, 106 | ] 107 | 108 | 109 | # Internationalization 110 | # https://docs.djangoproject.com/en/3.1/topics/i18n/ 111 | 112 | LANGUAGE_CODE = 'en-us' 113 | 114 | TIME_ZONE = 'UTC' 115 | 116 | USE_I18N = True 117 | 118 | USE_L10N = True 119 | 120 | USE_TZ = True 121 | 122 | 123 | # Static files (CSS, JavaScript, Images) 124 | # https://docs.djangoproject.com/en/3.1/howto/static-files/ 125 | 126 | STATIC_URL = '/static/' 127 | 128 | STATIC_ROOT = BASE_DIR / 'site_media' / 'static' 129 | 130 | STATICFILES_DIRS = [ 131 | BASE_DIR.parent / "svelte" / "public" / "build", 132 | ] 133 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/templates/home.html: -------------------------------------------------------------------------------- 1 | {% load django_svelte %} 2 | 3 | 4 | 5 | django-svelting 6 | 7 | 8 | This text is in the django template. Below is the vanilla svelte app with some basic props passed in from the context. 9 | {% display_svelte "App.svelte" component_props %} 10 | 11 | And we can have multiple different components (yes they ought to be different): 12 | {% display_svelte "AuthComponent.svelte" %} 13 | 14 | And we should be able to POST data as well! 15 | {% display_svelte "PostComponent.svelte" %} 16 | 17 | 18 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/urls.py: -------------------------------------------------------------------------------- 1 | """django_svelte_demo URL Configuration 2 | 3 | The `urlpatterns` list routes URLs to views. For more information please see: 4 | https://docs.djangoproject.com/en/3.1/topics/http/urls/ 5 | Examples: 6 | Function views 7 | 1. Add an import: from my_app import views 8 | 2. Add a URL to urlpatterns: path('', views.home, name='home') 9 | Class-based views 10 | 1. Add an import: from other_app.views import Home 11 | 2. Add a URL to urlpatterns: path('', Home.as_view(), name='home') 12 | Including another URLconf 13 | 1. Import the include() function: from django.urls import include, path 14 | 2. Add a URL to urlpatterns: path('blog/', include('blog.urls')) 15 | """ 16 | from django.contrib import admin 17 | from django.urls import path, include 18 | 19 | from django.views.generic import TemplateView 20 | 21 | 22 | urlpatterns = [ 23 | path( 24 | '', 25 | TemplateView.as_view( 26 | template_name="home.html", 27 | extra_context={"component_props": {"name": "django-svelte"}}, 28 | ), 29 | name="home", 30 | ), 31 | path('admin/', admin.site.urls), 32 | path('api/v1/', include('django_svelte_demo.api.urls')), 33 | ] 34 | -------------------------------------------------------------------------------- /django_svelte_demo/django_svelte_demo/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for django_svelte_demo project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/3.1/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_svelte_demo.settings') 15 | 16 | application = get_wsgi_application() 17 | -------------------------------------------------------------------------------- /django_svelte_demo/manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | """Django's command-line utility for administrative tasks.""" 3 | import os 4 | import sys 5 | 6 | 7 | def main(): 8 | """Run administrative tasks.""" 9 | os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'django_svelte_demo.settings') 10 | try: 11 | from django.core.management import execute_from_command_line 12 | except ImportError as exc: 13 | raise ImportError( 14 | "Couldn't import Django. Are you sure it's installed and " 15 | "available on your PYTHONPATH environment variable? Did you " 16 | "forget to activate a virtual environment?" 17 | ) from exc 18 | execute_from_command_line(sys.argv) 19 | 20 | 21 | if __name__ == '__main__': 22 | main() 23 | -------------------------------------------------------------------------------- /docker-compose.yml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | app: 5 | build: . 6 | environment: 7 | - APP_ENV=dev 8 | ports: 9 | - "8000:8000" 10 | volumes: 11 | - ./django_svelte_demo:/app/src 12 | - ./svelte/public/build/:/app/svelte/public/build/ 13 | depends_on: 14 | - node 15 | networks: 16 | - dev-net 17 | node: 18 | image: node:current-alpine 19 | user: "node" 20 | working_dir: /home/node/app 21 | environment: 22 | - NODE_ENV=development 23 | - API_BASE_URL=localhost:8000 24 | volumes: 25 | - ./svelte:/home/node/app 26 | command: "npm run dev" 27 | 28 | networks: 29 | dev-net: -------------------------------------------------------------------------------- /entrypoint.sh: -------------------------------------------------------------------------------- 1 | if [[ $APP_ENV == "dev" ]]; then 2 | python manage.py runserver 0.0.0.0:8000 3 | else 4 | # do something more production-y 5 | echo "try gunicorn!" 6 | fi -------------------------------------------------------------------------------- /makefile: -------------------------------------------------------------------------------- 1 | build: 2 | @mkdir -p svelte/public/build/ 3 | @docker-compose -p django-svelte-demo build 4 | init: 5 | @docker-compose -p django-svelte-demo run app ./manage.py migrate 6 | @docker-compose -p django-svelte-demo run node npm install 7 | run: 8 | @docker-compose -p django-svelte-demo up -d 9 | stop: 10 | @docker-compose -p django-svelte-demo down 11 | applogs: 12 | @docker-compose -p django-svelte-demo logs -f app 13 | nodelogs: 14 | @docker-compose -p django-svelte-demo logs -f node 15 | shell: 16 | @docker-compose -p django-svelte-demo exec app sh 17 | django-shell: 18 | @docker-compose -p django-svelte-demo exec app ./manage.py shell 19 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==3.1.5 2 | django-svelte==0.1.6 3 | djangorestframework==3.12.2 4 | drf-yasg==1.20.0 5 | -------------------------------------------------------------------------------- /svelte/.gitignore: -------------------------------------------------------------------------------- 1 | /node_modules/ 2 | /public/build/ 3 | 4 | .DS_Store 5 | -------------------------------------------------------------------------------- /svelte/README.md: -------------------------------------------------------------------------------- 1 | *Looking for a shareable component template? Go here --> [sveltejs/component-template](https://github.com/sveltejs/component-template)* 2 | 3 | --- 4 | 5 | # django-svelte-template 6 | 7 | This template has a few modifications applied to the vanilla Svelte template: 8 | * Rollup configured to export multiple app bundles, 9 | * Default export is still based upon `App.svelte`, but `main.js` has been renamed `main-App.js` and has been modified to target an element created in the html template by django-svelte (e.g. `app-target` and `app-props`; the name `app` is keying off of the component name: `App.js`) 10 | * To export additional component js/css bundles add the name of the component (e.g. "MyComponent") to the Array at the bottom of `rollup.config.js`, create the component with that name ("MyComponent.svelte"), create a `main-MyComponent.js` by copying `main-App.js` and replace all instances of "app" with "mycomponent" (observing appropriate casing "App" -> "MyComponent"). You may need to restart the Node.js instance for your changes to take effect. See [django-svelte-demo](https://github.com/thismatters/django-svelte-demo) for an example of this in action. 11 | * Rollup configured to replace environment variable `API_BASE_URL` into svelte code (using [@rollup/plugin-replace](https://www.npmjs.com/package/@rollup/plugin-replace)), 12 | 13 | --- 14 | 15 | 16 | # svelte app 17 | 18 | This is a project template for [Svelte](https://svelte.dev) apps. It lives at https://github.com/sveltejs/template. 19 | 20 | To create a new project based on this template using [degit](https://github.com/Rich-Harris/degit): 21 | 22 | ```bash 23 | npx degit sveltejs/template svelte-app 24 | cd svelte-app 25 | ``` 26 | 27 | *Note that you will need to have [Node.js](https://nodejs.org) installed.* 28 | 29 | 30 | ## Get started 31 | 32 | Install the dependencies... 33 | 34 | ```bash 35 | cd svelte-app 36 | npm install 37 | ``` 38 | 39 | ...then start [Rollup](https://rollupjs.org): 40 | 41 | ```bash 42 | npm run dev 43 | ``` 44 | 45 | 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. 46 | 47 | 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`. 48 | 49 | If you're using [Visual Studio Code](https://code.visualstudio.com/) we recommend installing the official extension [Svelte for VS Code](https://marketplace.visualstudio.com/items?itemName=svelte.svelte-vscode). If you are using other editors you may need to install a plugin in order to get syntax highlighting and intellisense. 50 | 51 | ## Building and running in production mode 52 | 53 | To create an optimised version of the app: 54 | 55 | ```bash 56 | npm run build 57 | ``` 58 | 59 | 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). 60 | 61 | 62 | ## Single-page app mode 63 | 64 | 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. 65 | 66 | 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: 67 | 68 | ```js 69 | "start": "sirv public --single" 70 | ``` 71 | 72 | ## Using TypeScript 73 | 74 | This template comes with a script to set up a TypeScript development environment, you can run it immediately after cloning the template with: 75 | 76 | ```bash 77 | node scripts/setupTypeScript.js 78 | ``` 79 | 80 | Or remove the script via: 81 | 82 | ```bash 83 | rm scripts/setupTypeScript.js 84 | ``` 85 | 86 | ## Deploying to the web 87 | 88 | ### With [Vercel](https://vercel.com) 89 | 90 | Install `vercel` if you haven't already: 91 | 92 | ```bash 93 | npm install -g vercel 94 | ``` 95 | 96 | Then, from within your project folder: 97 | 98 | ```bash 99 | cd public 100 | vercel deploy --name my-project 101 | ``` 102 | 103 | ### With [surge](https://surge.sh/) 104 | 105 | Install `surge` if you haven't already: 106 | 107 | ```bash 108 | npm install -g surge 109 | ``` 110 | 111 | Then, from within your project folder: 112 | 113 | ```bash 114 | npm run build 115 | surge public my-project.surge.sh 116 | ``` 117 | -------------------------------------------------------------------------------- /svelte/package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "svelte-app", 9 | "version": "1.0.0", 10 | "dependencies": { 11 | "sirv-cli": "^1.0.0" 12 | }, 13 | "devDependencies": { 14 | "@rollup/plugin-commonjs": "^16.0.0", 15 | "@rollup/plugin-node-resolve": "^10.0.0", 16 | "@rollup/plugin-replace": "^2.3.4", 17 | "rollup": "^2.3.4", 18 | "rollup-plugin-css-only": "^3.1.0", 19 | "rollup-plugin-livereload": "^2.0.0", 20 | "rollup-plugin-svelte": "^7.0.0", 21 | "rollup-plugin-terser": "^7.0.0", 22 | "svelte": "^3.0.0" 23 | } 24 | }, 25 | "node_modules/@babel/code-frame": { 26 | "version": "7.12.11", 27 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 28 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 29 | "dev": true, 30 | "dependencies": { 31 | "@babel/highlight": "^7.10.4" 32 | } 33 | }, 34 | "node_modules/@babel/helper-validator-identifier": { 35 | "version": "7.12.11", 36 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 37 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 38 | "dev": true 39 | }, 40 | "node_modules/@babel/highlight": { 41 | "version": "7.10.4", 42 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 43 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 44 | "dev": true, 45 | "dependencies": { 46 | "@babel/helper-validator-identifier": "^7.10.4", 47 | "chalk": "^2.0.0", 48 | "js-tokens": "^4.0.0" 49 | } 50 | }, 51 | "node_modules/@polka/url": { 52 | "version": "1.0.0-next.11", 53 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", 54 | "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==" 55 | }, 56 | "node_modules/@rollup/plugin-commonjs": { 57 | "version": "16.0.0", 58 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", 59 | "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", 60 | "dev": true, 61 | "dependencies": { 62 | "@rollup/pluginutils": "^3.1.0", 63 | "commondir": "^1.0.1", 64 | "estree-walker": "^2.0.1", 65 | "glob": "^7.1.6", 66 | "is-reference": "^1.2.1", 67 | "magic-string": "^0.25.7", 68 | "resolve": "^1.17.0" 69 | }, 70 | "engines": { 71 | "node": ">= 8.0.0" 72 | }, 73 | "peerDependencies": { 74 | "rollup": "^2.30.0" 75 | } 76 | }, 77 | "node_modules/@rollup/plugin-node-resolve": { 78 | "version": "10.0.0", 79 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", 80 | "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", 81 | "dev": true, 82 | "dependencies": { 83 | "@rollup/pluginutils": "^3.1.0", 84 | "@types/resolve": "1.17.1", 85 | "builtin-modules": "^3.1.0", 86 | "deepmerge": "^4.2.2", 87 | "is-module": "^1.0.0", 88 | "resolve": "^1.17.0" 89 | }, 90 | "engines": { 91 | "node": ">= 10.0.0" 92 | }, 93 | "peerDependencies": { 94 | "rollup": "^1.20.0||^2.0.0" 95 | } 96 | }, 97 | "node_modules/@rollup/plugin-replace": { 98 | "version": "2.3.4", 99 | "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", 100 | "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", 101 | "dev": true, 102 | "dependencies": { 103 | "@rollup/pluginutils": "^3.1.0", 104 | "magic-string": "^0.25.7" 105 | }, 106 | "peerDependencies": { 107 | "rollup": "^1.20.0 || ^2.0.0" 108 | } 109 | }, 110 | "node_modules/@rollup/pluginutils": { 111 | "version": "3.1.0", 112 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 113 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 114 | "dev": true, 115 | "dependencies": { 116 | "@types/estree": "0.0.39", 117 | "estree-walker": "^1.0.1", 118 | "picomatch": "^2.2.2" 119 | }, 120 | "engines": { 121 | "node": ">= 8.0.0" 122 | }, 123 | "peerDependencies": { 124 | "rollup": "^1.20.0||^2.0.0" 125 | } 126 | }, 127 | "node_modules/@rollup/pluginutils/node_modules/estree-walker": { 128 | "version": "1.0.1", 129 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 130 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 131 | "dev": true 132 | }, 133 | "node_modules/@types/estree": { 134 | "version": "0.0.39", 135 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 136 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 137 | "dev": true 138 | }, 139 | "node_modules/@types/node": { 140 | "version": "14.14.20", 141 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", 142 | "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", 143 | "dev": true 144 | }, 145 | "node_modules/@types/resolve": { 146 | "version": "1.17.1", 147 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 148 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 149 | "dev": true, 150 | "dependencies": { 151 | "@types/node": "*" 152 | } 153 | }, 154 | "node_modules/ansi-styles": { 155 | "version": "3.2.1", 156 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 157 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 158 | "dev": true, 159 | "dependencies": { 160 | "color-convert": "^1.9.0" 161 | }, 162 | "engines": { 163 | "node": ">=4" 164 | } 165 | }, 166 | "node_modules/anymatch": { 167 | "version": "3.1.1", 168 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 169 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 170 | "dev": true, 171 | "dependencies": { 172 | "normalize-path": "^3.0.0", 173 | "picomatch": "^2.0.4" 174 | }, 175 | "engines": { 176 | "node": ">= 8" 177 | } 178 | }, 179 | "node_modules/async-limiter": { 180 | "version": "1.0.1", 181 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 182 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", 183 | "dev": true 184 | }, 185 | "node_modules/balanced-match": { 186 | "version": "1.0.0", 187 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 188 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 189 | "dev": true 190 | }, 191 | "node_modules/binary-extensions": { 192 | "version": "2.2.0", 193 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 194 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 195 | "dev": true, 196 | "engines": { 197 | "node": ">=8" 198 | } 199 | }, 200 | "node_modules/brace-expansion": { 201 | "version": "1.1.11", 202 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 203 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 204 | "dev": true, 205 | "dependencies": { 206 | "balanced-match": "^1.0.0", 207 | "concat-map": "0.0.1" 208 | } 209 | }, 210 | "node_modules/braces": { 211 | "version": "3.0.2", 212 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 213 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 214 | "dev": true, 215 | "dependencies": { 216 | "fill-range": "^7.0.1" 217 | }, 218 | "engines": { 219 | "node": ">=8" 220 | } 221 | }, 222 | "node_modules/buffer-from": { 223 | "version": "1.1.1", 224 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 225 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 226 | "dev": true 227 | }, 228 | "node_modules/builtin-modules": { 229 | "version": "3.2.0", 230 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 231 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 232 | "dev": true, 233 | "engines": { 234 | "node": ">=6" 235 | }, 236 | "funding": { 237 | "url": "https://github.com/sponsors/sindresorhus" 238 | } 239 | }, 240 | "node_modules/chalk": { 241 | "version": "2.4.2", 242 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 243 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 244 | "dev": true, 245 | "dependencies": { 246 | "ansi-styles": "^3.2.1", 247 | "escape-string-regexp": "^1.0.5", 248 | "supports-color": "^5.3.0" 249 | }, 250 | "engines": { 251 | "node": ">=4" 252 | } 253 | }, 254 | "node_modules/chokidar": { 255 | "version": "3.5.0", 256 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz", 257 | "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==", 258 | "dev": true, 259 | "dependencies": { 260 | "anymatch": "~3.1.1", 261 | "braces": "~3.0.2", 262 | "fsevents": "~2.3.1", 263 | "glob-parent": "~5.1.0", 264 | "is-binary-path": "~2.1.0", 265 | "is-glob": "~4.0.1", 266 | "normalize-path": "~3.0.0", 267 | "readdirp": "~3.5.0" 268 | }, 269 | "engines": { 270 | "node": ">= 8.10.0" 271 | }, 272 | "optionalDependencies": { 273 | "fsevents": "~2.3.1" 274 | } 275 | }, 276 | "node_modules/chokidar/node_modules/fsevents": { 277 | "version": "2.3.1", 278 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", 279 | "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", 280 | "dev": true, 281 | "hasInstallScript": true, 282 | "optional": true, 283 | "os": [ 284 | "darwin" 285 | ], 286 | "engines": { 287 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 288 | } 289 | }, 290 | "node_modules/color-convert": { 291 | "version": "1.9.3", 292 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 293 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 294 | "dev": true, 295 | "dependencies": { 296 | "color-name": "1.1.3" 297 | } 298 | }, 299 | "node_modules/color-name": { 300 | "version": "1.1.3", 301 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 302 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 303 | "dev": true 304 | }, 305 | "node_modules/commander": { 306 | "version": "2.20.3", 307 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 308 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 309 | "dev": true 310 | }, 311 | "node_modules/commondir": { 312 | "version": "1.0.1", 313 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 314 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 315 | "dev": true 316 | }, 317 | "node_modules/concat-map": { 318 | "version": "0.0.1", 319 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 320 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 321 | "dev": true 322 | }, 323 | "node_modules/console-clear": { 324 | "version": "1.1.1", 325 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 326 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==", 327 | "engines": { 328 | "node": ">=4" 329 | } 330 | }, 331 | "node_modules/deepmerge": { 332 | "version": "4.2.2", 333 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 334 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 335 | "dev": true, 336 | "engines": { 337 | "node": ">=0.10.0" 338 | } 339 | }, 340 | "node_modules/escape-string-regexp": { 341 | "version": "1.0.5", 342 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 343 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 344 | "dev": true, 345 | "engines": { 346 | "node": ">=0.8.0" 347 | } 348 | }, 349 | "node_modules/estree-walker": { 350 | "version": "2.0.2", 351 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 352 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 353 | "dev": true 354 | }, 355 | "node_modules/fill-range": { 356 | "version": "7.0.1", 357 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 358 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 359 | "dev": true, 360 | "dependencies": { 361 | "to-regex-range": "^5.0.1" 362 | }, 363 | "engines": { 364 | "node": ">=8" 365 | } 366 | }, 367 | "node_modules/fs.realpath": { 368 | "version": "1.0.0", 369 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 370 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 371 | "dev": true 372 | }, 373 | "node_modules/fsevents": { 374 | "version": "2.1.3", 375 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 376 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 377 | "deprecated": "\"Please update to latest v2.3 or v2.2\"", 378 | "dev": true, 379 | "hasInstallScript": true, 380 | "optional": true, 381 | "os": [ 382 | "darwin" 383 | ], 384 | "engines": { 385 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 386 | } 387 | }, 388 | "node_modules/function-bind": { 389 | "version": "1.1.1", 390 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 391 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 392 | "dev": true 393 | }, 394 | "node_modules/get-port": { 395 | "version": "3.2.0", 396 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 397 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=", 398 | "engines": { 399 | "node": ">=4" 400 | } 401 | }, 402 | "node_modules/glob": { 403 | "version": "7.1.6", 404 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 405 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 406 | "dev": true, 407 | "dependencies": { 408 | "fs.realpath": "^1.0.0", 409 | "inflight": "^1.0.4", 410 | "inherits": "2", 411 | "minimatch": "^3.0.4", 412 | "once": "^1.3.0", 413 | "path-is-absolute": "^1.0.0" 414 | }, 415 | "engines": { 416 | "node": "*" 417 | }, 418 | "funding": { 419 | "url": "https://github.com/sponsors/isaacs" 420 | } 421 | }, 422 | "node_modules/glob-parent": { 423 | "version": "5.1.1", 424 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 425 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 426 | "dev": true, 427 | "dependencies": { 428 | "is-glob": "^4.0.1" 429 | }, 430 | "engines": { 431 | "node": ">= 6" 432 | } 433 | }, 434 | "node_modules/has": { 435 | "version": "1.0.3", 436 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 437 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 438 | "dev": true, 439 | "dependencies": { 440 | "function-bind": "^1.1.1" 441 | }, 442 | "engines": { 443 | "node": ">= 0.4.0" 444 | } 445 | }, 446 | "node_modules/has-flag": { 447 | "version": "3.0.0", 448 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 449 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 450 | "dev": true, 451 | "engines": { 452 | "node": ">=4" 453 | } 454 | }, 455 | "node_modules/inflight": { 456 | "version": "1.0.6", 457 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 458 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 459 | "dev": true, 460 | "dependencies": { 461 | "once": "^1.3.0", 462 | "wrappy": "1" 463 | } 464 | }, 465 | "node_modules/inherits": { 466 | "version": "2.0.4", 467 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 468 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 469 | "dev": true 470 | }, 471 | "node_modules/is-binary-path": { 472 | "version": "2.1.0", 473 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 474 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 475 | "dev": true, 476 | "dependencies": { 477 | "binary-extensions": "^2.0.0" 478 | }, 479 | "engines": { 480 | "node": ">=8" 481 | } 482 | }, 483 | "node_modules/is-core-module": { 484 | "version": "2.2.0", 485 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 486 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 487 | "dev": true, 488 | "dependencies": { 489 | "has": "^1.0.3" 490 | }, 491 | "funding": { 492 | "url": "https://github.com/sponsors/ljharb" 493 | } 494 | }, 495 | "node_modules/is-extglob": { 496 | "version": "2.1.1", 497 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 498 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 499 | "dev": true, 500 | "engines": { 501 | "node": ">=0.10.0" 502 | } 503 | }, 504 | "node_modules/is-glob": { 505 | "version": "4.0.1", 506 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 507 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 508 | "dev": true, 509 | "dependencies": { 510 | "is-extglob": "^2.1.1" 511 | }, 512 | "engines": { 513 | "node": ">=0.10.0" 514 | } 515 | }, 516 | "node_modules/is-module": { 517 | "version": "1.0.0", 518 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 519 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 520 | "dev": true 521 | }, 522 | "node_modules/is-number": { 523 | "version": "7.0.0", 524 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 525 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 526 | "dev": true, 527 | "engines": { 528 | "node": ">=0.12.0" 529 | } 530 | }, 531 | "node_modules/is-reference": { 532 | "version": "1.2.1", 533 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 534 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 535 | "dev": true, 536 | "dependencies": { 537 | "@types/estree": "*" 538 | } 539 | }, 540 | "node_modules/jest-worker": { 541 | "version": "26.6.2", 542 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 543 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 544 | "dev": true, 545 | "dependencies": { 546 | "@types/node": "*", 547 | "merge-stream": "^2.0.0", 548 | "supports-color": "^7.0.0" 549 | }, 550 | "engines": { 551 | "node": ">= 10.13.0" 552 | } 553 | }, 554 | "node_modules/jest-worker/node_modules/has-flag": { 555 | "version": "4.0.0", 556 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 557 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 558 | "dev": true, 559 | "engines": { 560 | "node": ">=8" 561 | } 562 | }, 563 | "node_modules/jest-worker/node_modules/supports-color": { 564 | "version": "7.2.0", 565 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 566 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 567 | "dev": true, 568 | "dependencies": { 569 | "has-flag": "^4.0.0" 570 | }, 571 | "engines": { 572 | "node": ">=8" 573 | } 574 | }, 575 | "node_modules/js-tokens": { 576 | "version": "4.0.0", 577 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 578 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 579 | "dev": true 580 | }, 581 | "node_modules/kleur": { 582 | "version": "3.0.3", 583 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 584 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==", 585 | "engines": { 586 | "node": ">=6" 587 | } 588 | }, 589 | "node_modules/livereload": { 590 | "version": "0.9.1", 591 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz", 592 | "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==", 593 | "dev": true, 594 | "dependencies": { 595 | "chokidar": "^3.3.0", 596 | "livereload-js": "^3.1.0", 597 | "opts": ">= 1.2.0", 598 | "ws": "^6.2.1" 599 | }, 600 | "bin": { 601 | "livereload": "bin/livereload.js" 602 | }, 603 | "engines": { 604 | "node": ">=8.0.0" 605 | } 606 | }, 607 | "node_modules/livereload-js": { 608 | "version": "3.3.1", 609 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.1.tgz", 610 | "integrity": "sha512-CBu1gTEfzVhlOK1WASKAAJ9Qx1fHECTq0SUB67sfxwQssopTyvzqTlgl+c0h9pZ6V+Fzd2rc510ppuNusg9teQ==", 611 | "dev": true 612 | }, 613 | "node_modules/local-access": { 614 | "version": "1.1.0", 615 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 616 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==", 617 | "engines": { 618 | "node": ">=6" 619 | } 620 | }, 621 | "node_modules/magic-string": { 622 | "version": "0.25.7", 623 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 624 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 625 | "dev": true, 626 | "dependencies": { 627 | "sourcemap-codec": "^1.4.4" 628 | } 629 | }, 630 | "node_modules/merge-stream": { 631 | "version": "2.0.0", 632 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 633 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 634 | "dev": true 635 | }, 636 | "node_modules/mime": { 637 | "version": "2.4.7", 638 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", 639 | "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==", 640 | "bin": { 641 | "mime": "cli.js" 642 | }, 643 | "engines": { 644 | "node": ">=4.0.0" 645 | } 646 | }, 647 | "node_modules/minimatch": { 648 | "version": "3.0.4", 649 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 650 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 651 | "dev": true, 652 | "dependencies": { 653 | "brace-expansion": "^1.1.7" 654 | }, 655 | "engines": { 656 | "node": "*" 657 | } 658 | }, 659 | "node_modules/mri": { 660 | "version": "1.1.6", 661 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 662 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==", 663 | "engines": { 664 | "node": ">=4" 665 | } 666 | }, 667 | "node_modules/normalize-path": { 668 | "version": "3.0.0", 669 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 670 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 671 | "dev": true, 672 | "engines": { 673 | "node": ">=0.10.0" 674 | } 675 | }, 676 | "node_modules/once": { 677 | "version": "1.4.0", 678 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 679 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 680 | "dev": true, 681 | "dependencies": { 682 | "wrappy": "1" 683 | } 684 | }, 685 | "node_modules/opts": { 686 | "version": "2.0.2", 687 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 688 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 689 | "dev": true 690 | }, 691 | "node_modules/path-is-absolute": { 692 | "version": "1.0.1", 693 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 694 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 695 | "dev": true, 696 | "engines": { 697 | "node": ">=0.10.0" 698 | } 699 | }, 700 | "node_modules/path-parse": { 701 | "version": "1.0.6", 702 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 703 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 704 | "dev": true 705 | }, 706 | "node_modules/picomatch": { 707 | "version": "2.2.2", 708 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 709 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 710 | "dev": true, 711 | "engines": { 712 | "node": ">=8.6" 713 | }, 714 | "funding": { 715 | "url": "https://github.com/sponsors/jonschlinkert" 716 | } 717 | }, 718 | "node_modules/randombytes": { 719 | "version": "2.1.0", 720 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 721 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 722 | "dev": true, 723 | "dependencies": { 724 | "safe-buffer": "^5.1.0" 725 | } 726 | }, 727 | "node_modules/readdirp": { 728 | "version": "3.5.0", 729 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 730 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 731 | "dev": true, 732 | "dependencies": { 733 | "picomatch": "^2.2.1" 734 | }, 735 | "engines": { 736 | "node": ">=8.10.0" 737 | } 738 | }, 739 | "node_modules/require-relative": { 740 | "version": "0.8.7", 741 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 742 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 743 | "dev": true 744 | }, 745 | "node_modules/resolve": { 746 | "version": "1.19.0", 747 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 748 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 749 | "dev": true, 750 | "dependencies": { 751 | "is-core-module": "^2.1.0", 752 | "path-parse": "^1.0.6" 753 | }, 754 | "funding": { 755 | "url": "https://github.com/sponsors/ljharb" 756 | } 757 | }, 758 | "node_modules/rollup": { 759 | "version": "2.36.1", 760 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", 761 | "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", 762 | "dev": true, 763 | "dependencies": { 764 | "fsevents": "~2.1.2" 765 | }, 766 | "bin": { 767 | "rollup": "dist/bin/rollup" 768 | }, 769 | "engines": { 770 | "node": ">=10.0.0" 771 | }, 772 | "optionalDependencies": { 773 | "fsevents": "~2.1.2" 774 | } 775 | }, 776 | "node_modules/rollup-plugin-css-only": { 777 | "version": "3.1.0", 778 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", 779 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", 780 | "dev": true, 781 | "dependencies": { 782 | "@rollup/pluginutils": "4" 783 | }, 784 | "engines": { 785 | "node": ">=10.12.0" 786 | }, 787 | "peerDependencies": { 788 | "rollup": "1 || 2" 789 | } 790 | }, 791 | "node_modules/rollup-plugin-css-only/node_modules/@rollup/pluginutils": { 792 | "version": "4.1.0", 793 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 794 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 795 | "dev": true, 796 | "dependencies": { 797 | "estree-walker": "^2.0.1", 798 | "picomatch": "^2.2.2" 799 | }, 800 | "engines": { 801 | "node": ">= 8.0.0" 802 | }, 803 | "peerDependencies": { 804 | "rollup": "^1.20.0||^2.0.0" 805 | } 806 | }, 807 | "node_modules/rollup-plugin-livereload": { 808 | "version": "2.0.0", 809 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.0.tgz", 810 | "integrity": "sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A==", 811 | "dev": true, 812 | "dependencies": { 813 | "livereload": "^0.9.1" 814 | }, 815 | "engines": { 816 | "node": ">=8.3" 817 | } 818 | }, 819 | "node_modules/rollup-plugin-svelte": { 820 | "version": "7.0.0", 821 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.0.0.tgz", 822 | "integrity": "sha512-cw4yv/5v1NQV3nPbpOJtikgkB+9mfSJaqKUdq7x5fVQJnwLtcdc2JOszBs5pBY+SemTs5pmJbdEMseEavbUtjQ==", 823 | "dev": true, 824 | "dependencies": { 825 | "require-relative": "^0.8.7", 826 | "rollup-pluginutils": "^2.8.2" 827 | }, 828 | "engines": { 829 | "node": ">=10" 830 | }, 831 | "peerDependencies": { 832 | "rollup": ">=2.0.0", 833 | "svelte": ">=3.5.0" 834 | } 835 | }, 836 | "node_modules/rollup-plugin-terser": { 837 | "version": "7.0.2", 838 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 839 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 840 | "dev": true, 841 | "dependencies": { 842 | "@babel/code-frame": "^7.10.4", 843 | "jest-worker": "^26.2.1", 844 | "serialize-javascript": "^4.0.0", 845 | "terser": "^5.0.0" 846 | }, 847 | "peerDependencies": { 848 | "rollup": "^2.0.0" 849 | } 850 | }, 851 | "node_modules/rollup-pluginutils": { 852 | "version": "2.8.2", 853 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 854 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 855 | "dev": true, 856 | "dependencies": { 857 | "estree-walker": "^0.6.1" 858 | } 859 | }, 860 | "node_modules/rollup-pluginutils/node_modules/estree-walker": { 861 | "version": "0.6.1", 862 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 863 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 864 | "dev": true 865 | }, 866 | "node_modules/sade": { 867 | "version": "1.7.4", 868 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 869 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 870 | "dependencies": { 871 | "mri": "^1.1.0" 872 | }, 873 | "engines": { 874 | "node": ">= 6" 875 | } 876 | }, 877 | "node_modules/safe-buffer": { 878 | "version": "5.2.1", 879 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 880 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 881 | "dev": true, 882 | "funding": [ 883 | { 884 | "type": "github", 885 | "url": "https://github.com/sponsors/feross" 886 | }, 887 | { 888 | "type": "patreon", 889 | "url": "https://www.patreon.com/feross" 890 | }, 891 | { 892 | "type": "consulting", 893 | "url": "https://feross.org/support" 894 | } 895 | ] 896 | }, 897 | "node_modules/semiver": { 898 | "version": "1.1.0", 899 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 900 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==", 901 | "engines": { 902 | "node": ">=6" 903 | } 904 | }, 905 | "node_modules/serialize-javascript": { 906 | "version": "4.0.0", 907 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 908 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 909 | "dev": true, 910 | "dependencies": { 911 | "randombytes": "^2.1.0" 912 | } 913 | }, 914 | "node_modules/sirv": { 915 | "version": "1.0.10", 916 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.10.tgz", 917 | "integrity": "sha512-H5EZCoZaggEUQy8ocKsF7WAToGuZhjJlLvM3XOef46CbdIgbNeQ1p32N1PCuCjkVYwrAVOSMacN6CXXgIzuspg==", 918 | "dependencies": { 919 | "@polka/url": "^1.0.0-next.9", 920 | "mime": "^2.3.1", 921 | "totalist": "^1.0.0" 922 | }, 923 | "engines": { 924 | "node": ">= 10" 925 | } 926 | }, 927 | "node_modules/sirv-cli": { 928 | "version": "1.0.10", 929 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.10.tgz", 930 | "integrity": "sha512-8mLTRkvzpZXMyUZJ1whf84YHN/mm2r2+j5sU1ZYr5n2jA8VkFItNPk53oysOo+0QxBVp9aUjggkAsQp1d7L3OQ==", 931 | "dependencies": { 932 | "console-clear": "^1.1.0", 933 | "get-port": "^3.2.0", 934 | "kleur": "^3.0.0", 935 | "local-access": "^1.0.1", 936 | "sade": "^1.6.0", 937 | "semiver": "^1.0.0", 938 | "sirv": "^1.0.10", 939 | "tinydate": "^1.0.0" 940 | }, 941 | "bin": { 942 | "sirv": "bin.js" 943 | }, 944 | "engines": { 945 | "node": ">= 10" 946 | } 947 | }, 948 | "node_modules/source-map": { 949 | "version": "0.7.3", 950 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 951 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 952 | "dev": true, 953 | "engines": { 954 | "node": ">= 8" 955 | } 956 | }, 957 | "node_modules/source-map-support": { 958 | "version": "0.5.19", 959 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 960 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 961 | "dev": true, 962 | "dependencies": { 963 | "buffer-from": "^1.0.0", 964 | "source-map": "^0.6.0" 965 | } 966 | }, 967 | "node_modules/source-map-support/node_modules/source-map": { 968 | "version": "0.6.1", 969 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 970 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 971 | "dev": true, 972 | "engines": { 973 | "node": ">=0.10.0" 974 | } 975 | }, 976 | "node_modules/sourcemap-codec": { 977 | "version": "1.4.8", 978 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 979 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 980 | "dev": true 981 | }, 982 | "node_modules/supports-color": { 983 | "version": "5.5.0", 984 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 985 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 986 | "dev": true, 987 | "dependencies": { 988 | "has-flag": "^3.0.0" 989 | }, 990 | "engines": { 991 | "node": ">=4" 992 | } 993 | }, 994 | "node_modules/svelte": { 995 | "version": "3.31.2", 996 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.31.2.tgz", 997 | "integrity": "sha512-TxZGrXzX2ggFH3BIKY5fmbeMdJuZrMIMDYPMX6R9255bueuYIuVaBQSLUeY2oD7W4IdeqRZiAVGCjDw2POKBRA==", 998 | "dev": true, 999 | "engines": { 1000 | "node": ">= 8" 1001 | } 1002 | }, 1003 | "node_modules/terser": { 1004 | "version": "5.5.1", 1005 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", 1006 | "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", 1007 | "dev": true, 1008 | "dependencies": { 1009 | "commander": "^2.20.0", 1010 | "source-map": "~0.7.2", 1011 | "source-map-support": "~0.5.19" 1012 | }, 1013 | "bin": { 1014 | "terser": "bin/terser" 1015 | }, 1016 | "engines": { 1017 | "node": ">=10" 1018 | } 1019 | }, 1020 | "node_modules/tinydate": { 1021 | "version": "1.3.0", 1022 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 1023 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==", 1024 | "engines": { 1025 | "node": ">=4" 1026 | } 1027 | }, 1028 | "node_modules/to-regex-range": { 1029 | "version": "5.0.1", 1030 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1031 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1032 | "dev": true, 1033 | "dependencies": { 1034 | "is-number": "^7.0.0" 1035 | }, 1036 | "engines": { 1037 | "node": ">=8.0" 1038 | } 1039 | }, 1040 | "node_modules/totalist": { 1041 | "version": "1.1.0", 1042 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", 1043 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==", 1044 | "engines": { 1045 | "node": ">=6" 1046 | } 1047 | }, 1048 | "node_modules/wrappy": { 1049 | "version": "1.0.2", 1050 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1051 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1052 | "dev": true 1053 | }, 1054 | "node_modules/ws": { 1055 | "version": "6.2.1", 1056 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 1057 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 1058 | "dev": true, 1059 | "dependencies": { 1060 | "async-limiter": "~1.0.0" 1061 | } 1062 | } 1063 | }, 1064 | "dependencies": { 1065 | "@babel/code-frame": { 1066 | "version": "7.12.11", 1067 | "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.12.11.tgz", 1068 | "integrity": "sha512-Zt1yodBx1UcyiePMSkWnU4hPqhwq7hGi2nFL1LeA3EUl+q2LQx16MISgJ0+z7dnmgvP9QtIleuETGOiOH1RcIw==", 1069 | "dev": true, 1070 | "requires": { 1071 | "@babel/highlight": "^7.10.4" 1072 | } 1073 | }, 1074 | "@babel/helper-validator-identifier": { 1075 | "version": "7.12.11", 1076 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.12.11.tgz", 1077 | "integrity": "sha512-np/lG3uARFybkoHokJUmf1QfEvRVCPbmQeUQpKow5cQ3xWrV9i3rUHodKDJPQfTVX61qKi+UdYk8kik84n7XOw==", 1078 | "dev": true 1079 | }, 1080 | "@babel/highlight": { 1081 | "version": "7.10.4", 1082 | "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.10.4.tgz", 1083 | "integrity": "sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA==", 1084 | "dev": true, 1085 | "requires": { 1086 | "@babel/helper-validator-identifier": "^7.10.4", 1087 | "chalk": "^2.0.0", 1088 | "js-tokens": "^4.0.0" 1089 | } 1090 | }, 1091 | "@polka/url": { 1092 | "version": "1.0.0-next.11", 1093 | "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.11.tgz", 1094 | "integrity": "sha512-3NsZsJIA/22P3QUyrEDNA2D133H4j224twJrdipXN38dpnIOzAbUDtOwkcJ5pXmn75w7LSQDjA4tO9dm1XlqlA==" 1095 | }, 1096 | "@rollup/plugin-commonjs": { 1097 | "version": "16.0.0", 1098 | "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-16.0.0.tgz", 1099 | "integrity": "sha512-LuNyypCP3msCGVQJ7ki8PqYdpjfEkE/xtFa5DqlF+7IBD0JsfMZ87C58heSwIMint58sAUZbt3ITqOmdQv/dXw==", 1100 | "dev": true, 1101 | "requires": { 1102 | "@rollup/pluginutils": "^3.1.0", 1103 | "commondir": "^1.0.1", 1104 | "estree-walker": "^2.0.1", 1105 | "glob": "^7.1.6", 1106 | "is-reference": "^1.2.1", 1107 | "magic-string": "^0.25.7", 1108 | "resolve": "^1.17.0" 1109 | } 1110 | }, 1111 | "@rollup/plugin-node-resolve": { 1112 | "version": "10.0.0", 1113 | "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-10.0.0.tgz", 1114 | "integrity": "sha512-sNijGta8fqzwA1VwUEtTvWCx2E7qC70NMsDh4ZG13byAXYigBNZMxALhKUSycBks5gupJdq0lFrKumFrRZ8H3A==", 1115 | "dev": true, 1116 | "requires": { 1117 | "@rollup/pluginutils": "^3.1.0", 1118 | "@types/resolve": "1.17.1", 1119 | "builtin-modules": "^3.1.0", 1120 | "deepmerge": "^4.2.2", 1121 | "is-module": "^1.0.0", 1122 | "resolve": "^1.17.0" 1123 | } 1124 | }, 1125 | "@rollup/plugin-replace": { 1126 | "version": "2.3.4", 1127 | "resolved": "https://registry.npmjs.org/@rollup/plugin-replace/-/plugin-replace-2.3.4.tgz", 1128 | "integrity": "sha512-waBhMzyAtjCL1GwZes2jaE9MjuQ/DQF2BatH3fRivUF3z0JBFrU0U6iBNC/4WR+2rLKhaAhPWDNPYp4mI6RqdQ==", 1129 | "dev": true, 1130 | "requires": { 1131 | "@rollup/pluginutils": "^3.1.0", 1132 | "magic-string": "^0.25.7" 1133 | } 1134 | }, 1135 | "@rollup/pluginutils": { 1136 | "version": "3.1.0", 1137 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-3.1.0.tgz", 1138 | "integrity": "sha512-GksZ6pr6TpIjHm8h9lSQ8pi8BE9VeubNT0OMJ3B5uZJ8pz73NPiqOtCog/x2/QzM1ENChPKxMDhiQuRHsqc+lg==", 1139 | "dev": true, 1140 | "requires": { 1141 | "@types/estree": "0.0.39", 1142 | "estree-walker": "^1.0.1", 1143 | "picomatch": "^2.2.2" 1144 | }, 1145 | "dependencies": { 1146 | "estree-walker": { 1147 | "version": "1.0.1", 1148 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-1.0.1.tgz", 1149 | "integrity": "sha512-1fMXF3YP4pZZVozF8j/ZLfvnR8NSIljt56UhbZ5PeeDmmGHpgpdwQt7ITlGvYaQukCvuBRMLEiKiYC+oeIg4cg==", 1150 | "dev": true 1151 | } 1152 | } 1153 | }, 1154 | "@types/estree": { 1155 | "version": "0.0.39", 1156 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-0.0.39.tgz", 1157 | "integrity": "sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==", 1158 | "dev": true 1159 | }, 1160 | "@types/node": { 1161 | "version": "14.14.20", 1162 | "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.20.tgz", 1163 | "integrity": "sha512-Y93R97Ouif9JEOWPIUyU+eyIdyRqQR0I8Ez1dzku4hDx34NWh4HbtIc3WNzwB1Y9ULvNGeu5B8h8bVL5cAk4/A==", 1164 | "dev": true 1165 | }, 1166 | "@types/resolve": { 1167 | "version": "1.17.1", 1168 | "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", 1169 | "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", 1170 | "dev": true, 1171 | "requires": { 1172 | "@types/node": "*" 1173 | } 1174 | }, 1175 | "ansi-styles": { 1176 | "version": "3.2.1", 1177 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", 1178 | "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", 1179 | "dev": true, 1180 | "requires": { 1181 | "color-convert": "^1.9.0" 1182 | } 1183 | }, 1184 | "anymatch": { 1185 | "version": "3.1.1", 1186 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.1.tgz", 1187 | "integrity": "sha512-mM8522psRCqzV+6LhomX5wgp25YVibjh8Wj23I5RPkPppSVSjyKD2A2mBJmWGa+KN7f2D6LNh9jkBCeyLktzjg==", 1188 | "dev": true, 1189 | "requires": { 1190 | "normalize-path": "^3.0.0", 1191 | "picomatch": "^2.0.4" 1192 | } 1193 | }, 1194 | "async-limiter": { 1195 | "version": "1.0.1", 1196 | "resolved": "https://registry.npmjs.org/async-limiter/-/async-limiter-1.0.1.tgz", 1197 | "integrity": "sha512-csOlWGAcRFJaI6m+F2WKdnMKr4HhdhFVBk0H/QbJFMCr+uO2kwohwXQPxw/9OCxp05r5ghVBFSyioixx3gfkNQ==", 1198 | "dev": true 1199 | }, 1200 | "balanced-match": { 1201 | "version": "1.0.0", 1202 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 1203 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=", 1204 | "dev": true 1205 | }, 1206 | "binary-extensions": { 1207 | "version": "2.2.0", 1208 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", 1209 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", 1210 | "dev": true 1211 | }, 1212 | "brace-expansion": { 1213 | "version": "1.1.11", 1214 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1215 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1216 | "dev": true, 1217 | "requires": { 1218 | "balanced-match": "^1.0.0", 1219 | "concat-map": "0.0.1" 1220 | } 1221 | }, 1222 | "braces": { 1223 | "version": "3.0.2", 1224 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1225 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1226 | "dev": true, 1227 | "requires": { 1228 | "fill-range": "^7.0.1" 1229 | } 1230 | }, 1231 | "buffer-from": { 1232 | "version": "1.1.1", 1233 | "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", 1234 | "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", 1235 | "dev": true 1236 | }, 1237 | "builtin-modules": { 1238 | "version": "3.2.0", 1239 | "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.2.0.tgz", 1240 | "integrity": "sha512-lGzLKcioL90C7wMczpkY0n/oART3MbBa8R9OFGE1rJxoVI86u4WAGfEk8Wjv10eKSyTHVGkSo3bvBylCEtk7LA==", 1241 | "dev": true 1242 | }, 1243 | "chalk": { 1244 | "version": "2.4.2", 1245 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", 1246 | "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", 1247 | "dev": true, 1248 | "requires": { 1249 | "ansi-styles": "^3.2.1", 1250 | "escape-string-regexp": "^1.0.5", 1251 | "supports-color": "^5.3.0" 1252 | } 1253 | }, 1254 | "chokidar": { 1255 | "version": "3.5.0", 1256 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.0.tgz", 1257 | "integrity": "sha512-JgQM9JS92ZbFR4P90EvmzNpSGhpPBGBSj10PILeDyYFwp4h2/D9OM03wsJ4zW1fEp4ka2DGrnUeD7FuvQ2aZ2Q==", 1258 | "dev": true, 1259 | "requires": { 1260 | "anymatch": "~3.1.1", 1261 | "braces": "~3.0.2", 1262 | "fsevents": "~2.3.1", 1263 | "glob-parent": "~5.1.0", 1264 | "is-binary-path": "~2.1.0", 1265 | "is-glob": "~4.0.1", 1266 | "normalize-path": "~3.0.0", 1267 | "readdirp": "~3.5.0" 1268 | }, 1269 | "dependencies": { 1270 | "fsevents": { 1271 | "version": "2.3.1", 1272 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.1.tgz", 1273 | "integrity": "sha512-YR47Eg4hChJGAB1O3yEAOkGO+rlzutoICGqGo9EZ4lKWokzZRSyIW1QmTzqjtw8MJdj9srP869CuWw/hyzSiBw==", 1274 | "dev": true, 1275 | "optional": true 1276 | } 1277 | } 1278 | }, 1279 | "color-convert": { 1280 | "version": "1.9.3", 1281 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", 1282 | "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", 1283 | "dev": true, 1284 | "requires": { 1285 | "color-name": "1.1.3" 1286 | } 1287 | }, 1288 | "color-name": { 1289 | "version": "1.1.3", 1290 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", 1291 | "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", 1292 | "dev": true 1293 | }, 1294 | "commander": { 1295 | "version": "2.20.3", 1296 | "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", 1297 | "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", 1298 | "dev": true 1299 | }, 1300 | "commondir": { 1301 | "version": "1.0.1", 1302 | "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", 1303 | "integrity": "sha1-3dgA2gxmEnOTzKWVDqloo6rxJTs=", 1304 | "dev": true 1305 | }, 1306 | "concat-map": { 1307 | "version": "0.0.1", 1308 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1309 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", 1310 | "dev": true 1311 | }, 1312 | "console-clear": { 1313 | "version": "1.1.1", 1314 | "resolved": "https://registry.npmjs.org/console-clear/-/console-clear-1.1.1.tgz", 1315 | "integrity": "sha512-pMD+MVR538ipqkG5JXeOEbKWS5um1H4LUUccUQG68qpeqBYbzYy79Gh55jkd2TtPdRfUaLWdv6LPP//5Zt0aPQ==" 1316 | }, 1317 | "deepmerge": { 1318 | "version": "4.2.2", 1319 | "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.2.2.tgz", 1320 | "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", 1321 | "dev": true 1322 | }, 1323 | "escape-string-regexp": { 1324 | "version": "1.0.5", 1325 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", 1326 | "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", 1327 | "dev": true 1328 | }, 1329 | "estree-walker": { 1330 | "version": "2.0.2", 1331 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 1332 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 1333 | "dev": true 1334 | }, 1335 | "fill-range": { 1336 | "version": "7.0.1", 1337 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1338 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1339 | "dev": true, 1340 | "requires": { 1341 | "to-regex-range": "^5.0.1" 1342 | } 1343 | }, 1344 | "fs.realpath": { 1345 | "version": "1.0.0", 1346 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1347 | "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", 1348 | "dev": true 1349 | }, 1350 | "fsevents": { 1351 | "version": "2.1.3", 1352 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.1.3.tgz", 1353 | "integrity": "sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ==", 1354 | "dev": true, 1355 | "optional": true 1356 | }, 1357 | "function-bind": { 1358 | "version": "1.1.1", 1359 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1360 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1361 | "dev": true 1362 | }, 1363 | "get-port": { 1364 | "version": "3.2.0", 1365 | "resolved": "https://registry.npmjs.org/get-port/-/get-port-3.2.0.tgz", 1366 | "integrity": "sha1-3Xzn3hh8Bsi/NTeWrHHgmfCYDrw=" 1367 | }, 1368 | "glob": { 1369 | "version": "7.1.6", 1370 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz", 1371 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==", 1372 | "dev": true, 1373 | "requires": { 1374 | "fs.realpath": "^1.0.0", 1375 | "inflight": "^1.0.4", 1376 | "inherits": "2", 1377 | "minimatch": "^3.0.4", 1378 | "once": "^1.3.0", 1379 | "path-is-absolute": "^1.0.0" 1380 | } 1381 | }, 1382 | "glob-parent": { 1383 | "version": "5.1.1", 1384 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.1.tgz", 1385 | "integrity": "sha512-FnI+VGOpnlGHWZxthPGR+QhR78fuiK0sNLkHQv+bL9fQi57lNNdquIbna/WrfROrolq8GK5Ek6BiMwqL/voRYQ==", 1386 | "dev": true, 1387 | "requires": { 1388 | "is-glob": "^4.0.1" 1389 | } 1390 | }, 1391 | "has": { 1392 | "version": "1.0.3", 1393 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1394 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1395 | "dev": true, 1396 | "requires": { 1397 | "function-bind": "^1.1.1" 1398 | } 1399 | }, 1400 | "has-flag": { 1401 | "version": "3.0.0", 1402 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", 1403 | "integrity": "sha1-tdRU3CGZriJWmfNGfloH87lVuv0=", 1404 | "dev": true 1405 | }, 1406 | "inflight": { 1407 | "version": "1.0.6", 1408 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1409 | "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", 1410 | "dev": true, 1411 | "requires": { 1412 | "once": "^1.3.0", 1413 | "wrappy": "1" 1414 | } 1415 | }, 1416 | "inherits": { 1417 | "version": "2.0.4", 1418 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1419 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1420 | "dev": true 1421 | }, 1422 | "is-binary-path": { 1423 | "version": "2.1.0", 1424 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1425 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1426 | "dev": true, 1427 | "requires": { 1428 | "binary-extensions": "^2.0.0" 1429 | } 1430 | }, 1431 | "is-core-module": { 1432 | "version": "2.2.0", 1433 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 1434 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 1435 | "dev": true, 1436 | "requires": { 1437 | "has": "^1.0.3" 1438 | } 1439 | }, 1440 | "is-extglob": { 1441 | "version": "2.1.1", 1442 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1443 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1444 | "dev": true 1445 | }, 1446 | "is-glob": { 1447 | "version": "4.0.1", 1448 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.1.tgz", 1449 | "integrity": "sha512-5G0tKtBTFImOqDnLB2hG6Bp2qcKEFduo4tZu9MT/H6NQv/ghhy30o55ufafxJ/LdH79LLs2Kfrn85TLKyA7BUg==", 1450 | "dev": true, 1451 | "requires": { 1452 | "is-extglob": "^2.1.1" 1453 | } 1454 | }, 1455 | "is-module": { 1456 | "version": "1.0.0", 1457 | "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", 1458 | "integrity": "sha1-Mlj7afeMFNW4FdZkM2tM/7ZEFZE=", 1459 | "dev": true 1460 | }, 1461 | "is-number": { 1462 | "version": "7.0.0", 1463 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1464 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1465 | "dev": true 1466 | }, 1467 | "is-reference": { 1468 | "version": "1.2.1", 1469 | "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", 1470 | "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", 1471 | "dev": true, 1472 | "requires": { 1473 | "@types/estree": "*" 1474 | } 1475 | }, 1476 | "jest-worker": { 1477 | "version": "26.6.2", 1478 | "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", 1479 | "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", 1480 | "dev": true, 1481 | "requires": { 1482 | "@types/node": "*", 1483 | "merge-stream": "^2.0.0", 1484 | "supports-color": "^7.0.0" 1485 | }, 1486 | "dependencies": { 1487 | "has-flag": { 1488 | "version": "4.0.0", 1489 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1490 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1491 | "dev": true 1492 | }, 1493 | "supports-color": { 1494 | "version": "7.2.0", 1495 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 1496 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 1497 | "dev": true, 1498 | "requires": { 1499 | "has-flag": "^4.0.0" 1500 | } 1501 | } 1502 | } 1503 | }, 1504 | "js-tokens": { 1505 | "version": "4.0.0", 1506 | "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", 1507 | "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", 1508 | "dev": true 1509 | }, 1510 | "kleur": { 1511 | "version": "3.0.3", 1512 | "resolved": "https://registry.npmjs.org/kleur/-/kleur-3.0.3.tgz", 1513 | "integrity": "sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==" 1514 | }, 1515 | "livereload": { 1516 | "version": "0.9.1", 1517 | "resolved": "https://registry.npmjs.org/livereload/-/livereload-0.9.1.tgz", 1518 | "integrity": "sha512-9g7sua11kkyZNo2hLRCG3LuZZwqexoyEyecSlV8cAsfAVVCZqLzVir6XDqmH0r+Vzgnd5LrdHDMyjtFnJQLAYw==", 1519 | "dev": true, 1520 | "requires": { 1521 | "chokidar": "^3.3.0", 1522 | "livereload-js": "^3.1.0", 1523 | "opts": ">= 1.2.0", 1524 | "ws": "^6.2.1" 1525 | } 1526 | }, 1527 | "livereload-js": { 1528 | "version": "3.3.1", 1529 | "resolved": "https://registry.npmjs.org/livereload-js/-/livereload-js-3.3.1.tgz", 1530 | "integrity": "sha512-CBu1gTEfzVhlOK1WASKAAJ9Qx1fHECTq0SUB67sfxwQssopTyvzqTlgl+c0h9pZ6V+Fzd2rc510ppuNusg9teQ==", 1531 | "dev": true 1532 | }, 1533 | "local-access": { 1534 | "version": "1.1.0", 1535 | "resolved": "https://registry.npmjs.org/local-access/-/local-access-1.1.0.tgz", 1536 | "integrity": "sha512-XfegD5pyTAfb+GY6chk283Ox5z8WexG56OvM06RWLpAc/UHozO8X6xAxEkIitZOtsSMM1Yr3DkHgW5W+onLhCw==" 1537 | }, 1538 | "magic-string": { 1539 | "version": "0.25.7", 1540 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.25.7.tgz", 1541 | "integrity": "sha512-4CrMT5DOHTDk4HYDlzmwu4FVCcIYI8gauveasrdCu2IKIFOJ3f0v/8MDGJCDL9oD2ppz/Av1b0Nj345H9M+XIA==", 1542 | "dev": true, 1543 | "requires": { 1544 | "sourcemap-codec": "^1.4.4" 1545 | } 1546 | }, 1547 | "merge-stream": { 1548 | "version": "2.0.0", 1549 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 1550 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 1551 | "dev": true 1552 | }, 1553 | "mime": { 1554 | "version": "2.4.7", 1555 | "resolved": "https://registry.npmjs.org/mime/-/mime-2.4.7.tgz", 1556 | "integrity": "sha512-dhNd1uA2u397uQk3Nv5LM4lm93WYDUXFn3Fu291FJerns4jyTudqhIWe4W04YLy7Uk1tm1Ore04NpjRvQp/NPA==" 1557 | }, 1558 | "minimatch": { 1559 | "version": "3.0.4", 1560 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", 1561 | "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", 1562 | "dev": true, 1563 | "requires": { 1564 | "brace-expansion": "^1.1.7" 1565 | } 1566 | }, 1567 | "mri": { 1568 | "version": "1.1.6", 1569 | "resolved": "https://registry.npmjs.org/mri/-/mri-1.1.6.tgz", 1570 | "integrity": "sha512-oi1b3MfbyGa7FJMP9GmLTttni5JoICpYBRlq+x5V16fZbLsnL9N3wFqqIm/nIG43FjUFkFh9Epzp/kzUGUnJxQ==" 1571 | }, 1572 | "normalize-path": { 1573 | "version": "3.0.0", 1574 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 1575 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 1576 | "dev": true 1577 | }, 1578 | "once": { 1579 | "version": "1.4.0", 1580 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1581 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1582 | "dev": true, 1583 | "requires": { 1584 | "wrappy": "1" 1585 | } 1586 | }, 1587 | "opts": { 1588 | "version": "2.0.2", 1589 | "resolved": "https://registry.npmjs.org/opts/-/opts-2.0.2.tgz", 1590 | "integrity": "sha512-k41FwbcLnlgnFh69f4qdUfvDQ+5vaSDnVPFI/y5XuhKRq97EnVVneO9F1ESVCdiVu4fCS2L8usX3mU331hB7pg==", 1591 | "dev": true 1592 | }, 1593 | "path-is-absolute": { 1594 | "version": "1.0.1", 1595 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1596 | "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", 1597 | "dev": true 1598 | }, 1599 | "path-parse": { 1600 | "version": "1.0.6", 1601 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.6.tgz", 1602 | "integrity": "sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw==", 1603 | "dev": true 1604 | }, 1605 | "picomatch": { 1606 | "version": "2.2.2", 1607 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.2.2.tgz", 1608 | "integrity": "sha512-q0M/9eZHzmr0AulXyPwNfZjtwZ/RBZlbN3K3CErVrk50T2ASYI7Bye0EvekFY3IP1Nt2DHu0re+V2ZHIpMkuWg==", 1609 | "dev": true 1610 | }, 1611 | "randombytes": { 1612 | "version": "2.1.0", 1613 | "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", 1614 | "integrity": "sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==", 1615 | "dev": true, 1616 | "requires": { 1617 | "safe-buffer": "^5.1.0" 1618 | } 1619 | }, 1620 | "readdirp": { 1621 | "version": "3.5.0", 1622 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.5.0.tgz", 1623 | "integrity": "sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ==", 1624 | "dev": true, 1625 | "requires": { 1626 | "picomatch": "^2.2.1" 1627 | } 1628 | }, 1629 | "require-relative": { 1630 | "version": "0.8.7", 1631 | "resolved": "https://registry.npmjs.org/require-relative/-/require-relative-0.8.7.tgz", 1632 | "integrity": "sha1-eZlTn8ngR6N5KPoZb44VY9q9Nt4=", 1633 | "dev": true 1634 | }, 1635 | "resolve": { 1636 | "version": "1.19.0", 1637 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 1638 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 1639 | "dev": true, 1640 | "requires": { 1641 | "is-core-module": "^2.1.0", 1642 | "path-parse": "^1.0.6" 1643 | } 1644 | }, 1645 | "rollup": { 1646 | "version": "2.36.1", 1647 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.36.1.tgz", 1648 | "integrity": "sha512-eAfqho8dyzuVvrGqpR0ITgEdq0zG2QJeWYh+HeuTbpcaXk8vNFc48B7bJa1xYosTCKx0CuW+447oQOW8HgBIZQ==", 1649 | "dev": true, 1650 | "requires": { 1651 | "fsevents": "~2.1.2" 1652 | } 1653 | }, 1654 | "rollup-plugin-css-only": { 1655 | "version": "3.1.0", 1656 | "resolved": "https://registry.npmjs.org/rollup-plugin-css-only/-/rollup-plugin-css-only-3.1.0.tgz", 1657 | "integrity": "sha512-TYMOE5uoD76vpj+RTkQLzC9cQtbnJNktHPB507FzRWBVaofg7KhIqq1kGbcVOadARSozWF883Ho9KpSPKH8gqA==", 1658 | "dev": true, 1659 | "requires": { 1660 | "@rollup/pluginutils": "4" 1661 | }, 1662 | "dependencies": { 1663 | "@rollup/pluginutils": { 1664 | "version": "4.1.0", 1665 | "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-4.1.0.tgz", 1666 | "integrity": "sha512-TrBhfJkFxA+ER+ew2U2/fHbebhLT/l/2pRk0hfj9KusXUuRXd2v0R58AfaZK9VXDQ4TogOSEmICVrQAA3zFnHQ==", 1667 | "dev": true, 1668 | "requires": { 1669 | "estree-walker": "^2.0.1", 1670 | "picomatch": "^2.2.2" 1671 | } 1672 | } 1673 | } 1674 | }, 1675 | "rollup-plugin-livereload": { 1676 | "version": "2.0.0", 1677 | "resolved": "https://registry.npmjs.org/rollup-plugin-livereload/-/rollup-plugin-livereload-2.0.0.tgz", 1678 | "integrity": "sha512-oC/8NqumGYuphkqrfszOHUUIwzKsaHBICw6QRwT5uD07gvePTS+HW+GFwu6f9K8W02CUuTvtIM9AWJrbj4wE1A==", 1679 | "dev": true, 1680 | "requires": { 1681 | "livereload": "^0.9.1" 1682 | } 1683 | }, 1684 | "rollup-plugin-svelte": { 1685 | "version": "7.0.0", 1686 | "resolved": "https://registry.npmjs.org/rollup-plugin-svelte/-/rollup-plugin-svelte-7.0.0.tgz", 1687 | "integrity": "sha512-cw4yv/5v1NQV3nPbpOJtikgkB+9mfSJaqKUdq7x5fVQJnwLtcdc2JOszBs5pBY+SemTs5pmJbdEMseEavbUtjQ==", 1688 | "dev": true, 1689 | "requires": { 1690 | "require-relative": "^0.8.7", 1691 | "rollup-pluginutils": "^2.8.2" 1692 | } 1693 | }, 1694 | "rollup-plugin-terser": { 1695 | "version": "7.0.2", 1696 | "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", 1697 | "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", 1698 | "dev": true, 1699 | "requires": { 1700 | "@babel/code-frame": "^7.10.4", 1701 | "jest-worker": "^26.2.1", 1702 | "serialize-javascript": "^4.0.0", 1703 | "terser": "^5.0.0" 1704 | } 1705 | }, 1706 | "rollup-pluginutils": { 1707 | "version": "2.8.2", 1708 | "resolved": "https://registry.npmjs.org/rollup-pluginutils/-/rollup-pluginutils-2.8.2.tgz", 1709 | "integrity": "sha512-EEp9NhnUkwY8aif6bxgovPHMoMoNr2FulJziTndpt5H9RdwC47GSGuII9XxpSdzVGM0GWrNPHV6ie1LTNJPaLQ==", 1710 | "dev": true, 1711 | "requires": { 1712 | "estree-walker": "^0.6.1" 1713 | }, 1714 | "dependencies": { 1715 | "estree-walker": { 1716 | "version": "0.6.1", 1717 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-0.6.1.tgz", 1718 | "integrity": "sha512-SqmZANLWS0mnatqbSfRP5g8OXZC12Fgg1IwNtLsyHDzJizORW4khDfjPqJZsemPWBB2uqykUah5YpQ6epsqC/w==", 1719 | "dev": true 1720 | } 1721 | } 1722 | }, 1723 | "sade": { 1724 | "version": "1.7.4", 1725 | "resolved": "https://registry.npmjs.org/sade/-/sade-1.7.4.tgz", 1726 | "integrity": "sha512-y5yauMD93rX840MwUJr7C1ysLFBgMspsdTo4UVrDg3fXDvtwOyIqykhVAAm6fk/3au77773itJStObgK+LKaiA==", 1727 | "requires": { 1728 | "mri": "^1.1.0" 1729 | } 1730 | }, 1731 | "safe-buffer": { 1732 | "version": "5.2.1", 1733 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1734 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1735 | "dev": true 1736 | }, 1737 | "semiver": { 1738 | "version": "1.1.0", 1739 | "resolved": "https://registry.npmjs.org/semiver/-/semiver-1.1.0.tgz", 1740 | "integrity": "sha512-QNI2ChmuioGC1/xjyYwyZYADILWyW6AmS1UH6gDj/SFUUUS4MBAWs/7mxnkRPc/F4iHezDP+O8t0dO8WHiEOdg==" 1741 | }, 1742 | "serialize-javascript": { 1743 | "version": "4.0.0", 1744 | "resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-4.0.0.tgz", 1745 | "integrity": "sha512-GaNA54380uFefWghODBWEGisLZFj00nS5ACs6yHa9nLqlLpVLO8ChDGeKRjZnV4Nh4n0Qi7nhYZD/9fCPzEqkw==", 1746 | "dev": true, 1747 | "requires": { 1748 | "randombytes": "^2.1.0" 1749 | } 1750 | }, 1751 | "sirv": { 1752 | "version": "1.0.10", 1753 | "resolved": "https://registry.npmjs.org/sirv/-/sirv-1.0.10.tgz", 1754 | "integrity": "sha512-H5EZCoZaggEUQy8ocKsF7WAToGuZhjJlLvM3XOef46CbdIgbNeQ1p32N1PCuCjkVYwrAVOSMacN6CXXgIzuspg==", 1755 | "requires": { 1756 | "@polka/url": "^1.0.0-next.9", 1757 | "mime": "^2.3.1", 1758 | "totalist": "^1.0.0" 1759 | } 1760 | }, 1761 | "sirv-cli": { 1762 | "version": "1.0.10", 1763 | "resolved": "https://registry.npmjs.org/sirv-cli/-/sirv-cli-1.0.10.tgz", 1764 | "integrity": "sha512-8mLTRkvzpZXMyUZJ1whf84YHN/mm2r2+j5sU1ZYr5n2jA8VkFItNPk53oysOo+0QxBVp9aUjggkAsQp1d7L3OQ==", 1765 | "requires": { 1766 | "console-clear": "^1.1.0", 1767 | "get-port": "^3.2.0", 1768 | "kleur": "^3.0.0", 1769 | "local-access": "^1.0.1", 1770 | "sade": "^1.6.0", 1771 | "semiver": "^1.0.0", 1772 | "sirv": "^1.0.10", 1773 | "tinydate": "^1.0.0" 1774 | } 1775 | }, 1776 | "source-map": { 1777 | "version": "0.7.3", 1778 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", 1779 | "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", 1780 | "dev": true 1781 | }, 1782 | "source-map-support": { 1783 | "version": "0.5.19", 1784 | "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.19.tgz", 1785 | "integrity": "sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw==", 1786 | "dev": true, 1787 | "requires": { 1788 | "buffer-from": "^1.0.0", 1789 | "source-map": "^0.6.0" 1790 | }, 1791 | "dependencies": { 1792 | "source-map": { 1793 | "version": "0.6.1", 1794 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", 1795 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", 1796 | "dev": true 1797 | } 1798 | } 1799 | }, 1800 | "sourcemap-codec": { 1801 | "version": "1.4.8", 1802 | "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", 1803 | "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", 1804 | "dev": true 1805 | }, 1806 | "supports-color": { 1807 | "version": "5.5.0", 1808 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", 1809 | "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", 1810 | "dev": true, 1811 | "requires": { 1812 | "has-flag": "^3.0.0" 1813 | } 1814 | }, 1815 | "svelte": { 1816 | "version": "3.31.2", 1817 | "resolved": "https://registry.npmjs.org/svelte/-/svelte-3.31.2.tgz", 1818 | "integrity": "sha512-TxZGrXzX2ggFH3BIKY5fmbeMdJuZrMIMDYPMX6R9255bueuYIuVaBQSLUeY2oD7W4IdeqRZiAVGCjDw2POKBRA==", 1819 | "dev": true 1820 | }, 1821 | "terser": { 1822 | "version": "5.5.1", 1823 | "resolved": "https://registry.npmjs.org/terser/-/terser-5.5.1.tgz", 1824 | "integrity": "sha512-6VGWZNVP2KTUcltUQJ25TtNjx/XgdDsBDKGt8nN0MpydU36LmbPPcMBd2kmtZNNGVVDLg44k7GKeHHj+4zPIBQ==", 1825 | "dev": true, 1826 | "requires": { 1827 | "commander": "^2.20.0", 1828 | "source-map": "~0.7.2", 1829 | "source-map-support": "~0.5.19" 1830 | } 1831 | }, 1832 | "tinydate": { 1833 | "version": "1.3.0", 1834 | "resolved": "https://registry.npmjs.org/tinydate/-/tinydate-1.3.0.tgz", 1835 | "integrity": "sha512-7cR8rLy2QhYHpsBDBVYnnWXm8uRTr38RoZakFSW7Bs7PzfMPNZthuMLkwqZv7MTu8lhQ91cOFYS5a7iFj2oR3w==" 1836 | }, 1837 | "to-regex-range": { 1838 | "version": "5.0.1", 1839 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 1840 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 1841 | "dev": true, 1842 | "requires": { 1843 | "is-number": "^7.0.0" 1844 | } 1845 | }, 1846 | "totalist": { 1847 | "version": "1.1.0", 1848 | "resolved": "https://registry.npmjs.org/totalist/-/totalist-1.1.0.tgz", 1849 | "integrity": "sha512-gduQwd1rOdDMGxFG1gEvhV88Oirdo2p+KjoYFU7k2g+i7n6AFFbDQ5kMPUsW0pNbfQsB/cwXvT1i4Bue0s9g5g==" 1850 | }, 1851 | "wrappy": { 1852 | "version": "1.0.2", 1853 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 1854 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", 1855 | "dev": true 1856 | }, 1857 | "ws": { 1858 | "version": "6.2.1", 1859 | "resolved": "https://registry.npmjs.org/ws/-/ws-6.2.1.tgz", 1860 | "integrity": "sha512-GIyAXC2cB7LjvpgMt9EKS2ldqr0MTrORaleiOno6TweZ6r3TKtoFQWay/2PceJ3RuBasOHzXNn5Lrw1X0bEjqA==", 1861 | "dev": true, 1862 | "requires": { 1863 | "async-limiter": "~1.0.0" 1864 | } 1865 | } 1866 | } 1867 | } 1868 | -------------------------------------------------------------------------------- /svelte/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "svelte-app", 3 | "version": "1.0.0", 4 | "scripts": { 5 | "build": "rollup -c", 6 | "dev": "rollup -c -w", 7 | "start": "sirv public" 8 | }, 9 | "devDependencies": { 10 | "@rollup/plugin-commonjs": "^16.0.0", 11 | "@rollup/plugin-node-resolve": "^10.0.0", 12 | "@rollup/plugin-replace": "^2.3.4", 13 | "rollup": "^2.3.4", 14 | "rollup-plugin-css-only": "^3.1.0", 15 | "rollup-plugin-livereload": "^2.0.0", 16 | "rollup-plugin-svelte": "^7.0.0", 17 | "rollup-plugin-terser": "^7.0.0", 18 | "svelte": "^3.0.0" 19 | }, 20 | "dependencies": { 21 | "sirv-cli": "^1.0.0" 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /svelte/public/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thismatters/django-svelte-demo/f97e2504b3ed27500bb0d314826604eda7cd9f9e/svelte/public/favicon.png -------------------------------------------------------------------------------- /svelte/public/global.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | position: relative; 3 | width: 100%; 4 | height: 100%; 5 | } 6 | 7 | body { 8 | color: #333; 9 | margin: 0; 10 | padding: 8px; 11 | box-sizing: border-box; 12 | font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen-Sans, Ubuntu, Cantarell, "Helvetica Neue", sans-serif; 13 | } 14 | 15 | a { 16 | color: rgb(0,100,200); 17 | text-decoration: none; 18 | } 19 | 20 | a:hover { 21 | text-decoration: underline; 22 | } 23 | 24 | a:visited { 25 | color: rgb(0,80,160); 26 | } 27 | 28 | label { 29 | display: block; 30 | } 31 | 32 | input, button, select, textarea { 33 | font-family: inherit; 34 | font-size: inherit; 35 | -webkit-padding: 0.4em 0; 36 | padding: 0.4em; 37 | margin: 0 0 0.5em 0; 38 | box-sizing: border-box; 39 | border: 1px solid #ccc; 40 | border-radius: 2px; 41 | } 42 | 43 | input:disabled { 44 | color: #ccc; 45 | } 46 | 47 | button { 48 | color: #333; 49 | background-color: #f4f4f4; 50 | outline: none; 51 | } 52 | 53 | button:disabled { 54 | color: #999; 55 | } 56 | 57 | button:not(:disabled):active { 58 | background-color: #ddd; 59 | } 60 | 61 | button:focus { 62 | border-color: #666; 63 | } 64 | -------------------------------------------------------------------------------- /svelte/public/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Svelte app 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /svelte/rollup.config.js: -------------------------------------------------------------------------------- 1 | import svelte from 'rollup-plugin-svelte'; 2 | import commonjs from '@rollup/plugin-commonjs'; 3 | import resolve from '@rollup/plugin-node-resolve'; 4 | import livereload from 'rollup-plugin-livereload'; 5 | import { terser } from 'rollup-plugin-terser'; 6 | import css from 'rollup-plugin-css-only'; 7 | import replace from "@rollup/plugin-replace"; 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 | function componentExportDetails(componentName) { 33 | return { 34 | input: `src/main-${componentName.toLowerCase()}.js`, 35 | output: { 36 | sourcemap: true, 37 | format: 'iife', 38 | name: `${componentName.toLowerCase()}`, 39 | file: `public/build/${componentName}.js`, 40 | }, 41 | plugins: [ 42 | replace({ 43 | __API_BASE_URL__: process.env.API_BASE_URL, 44 | }), 45 | svelte({ 46 | compilerOptions: { 47 | // enable run-time checks when not in production 48 | dev: !production 49 | } 50 | }), 51 | // we'll extract any component CSS out into 52 | // a separate file - better for performance 53 | css({ output: `${componentName}.css` }), 54 | 55 | // If you have external dependencies installed from 56 | // npm, you'll most likely need these plugins. In 57 | // some cases you'll need additional configuration - 58 | // consult the documentation for details: 59 | // https://github.com/rollup/plugins/tree/master/packages/commonjs 60 | resolve({ 61 | browser: true, 62 | dedupe: ['svelte'] 63 | }), 64 | commonjs(), 65 | 66 | // In dev mode, call `npm run start` once 67 | // the bundle has been generated 68 | !production && serve(), 69 | 70 | // Watch the `public` directory and refresh the 71 | // browser on changes when not in production 72 | !production && livereload('public'), 73 | 74 | // If we're building for production (npm run build 75 | // instead of npm run dev), minify 76 | production && terser() 77 | ], 78 | watch: { 79 | clearScreen: false 80 | } 81 | }; 82 | } 83 | 84 | let exportable = []; 85 | 86 | // Add your component names here! 87 | [ 88 | "App", 89 | "AuthComponent", 90 | "PostComponent", 91 | ].forEach((d) => exportable.push(componentExportDetails(d))); 92 | 93 | export default exportable; 94 | -------------------------------------------------------------------------------- /svelte/scripts/setupTypeScript.js: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | /** This script modifies the project to support TS code in .svelte files like: 4 | 5 | 8 | 9 | As well as validating the code for CI. 10 | */ 11 | 12 | /** To work on this script: 13 | rm -rf test-template template && git clone sveltejs/template test-template && node scripts/setupTypeScript.js test-template 14 | */ 15 | 16 | const fs = require("fs") 17 | const path = require("path") 18 | const { argv } = require("process") 19 | 20 | const projectRoot = argv[2] || path.join(__dirname, "..") 21 | 22 | // Add deps to pkg.json 23 | const packageJSON = JSON.parse(fs.readFileSync(path.join(projectRoot, "package.json"), "utf8")) 24 | packageJSON.devDependencies = Object.assign(packageJSON.devDependencies, { 25 | "svelte-check": "^1.0.0", 26 | "svelte-preprocess": "^4.0.0", 27 | "@rollup/plugin-typescript": "^6.0.0", 28 | "typescript": "^3.9.3", 29 | "tslib": "^2.0.0", 30 | "@tsconfig/svelte": "^1.0.0" 31 | }) 32 | 33 | // Add script for checking 34 | packageJSON.scripts = Object.assign(packageJSON.scripts, { 35 | "validate": "svelte-check" 36 | }) 37 | 38 | // Write the package JSON 39 | fs.writeFileSync(path.join(projectRoot, "package.json"), JSON.stringify(packageJSON, null, " ")) 40 | 41 | // mv src/main.js to main.ts - note, we need to edit rollup.config.js for this too 42 | const beforeMainJSPath = path.join(projectRoot, "src", "main.js") 43 | const afterMainTSPath = path.join(projectRoot, "src", "main.ts") 44 | fs.renameSync(beforeMainJSPath, afterMainTSPath) 45 | 46 | // Switch the app.svelte file to use TS 47 | const appSveltePath = path.join(projectRoot, "src", "App.svelte") 48 | let appFile = fs.readFileSync(appSveltePath, "utf8") 49 | appFile = appFile.replace(" 4 | 5 |
6 |

Hello {name}!

7 |

Visit the Svelte tutorial to learn how to build Svelte apps.

8 |
9 | 10 | -------------------------------------------------------------------------------- /svelte/src/AuthComponent.svelte: -------------------------------------------------------------------------------- 1 | 13 | 14 |

Check your auth status

15 | 16 | {#if isAuth} 17 |

You're Auth!

18 | {/if} 19 | -------------------------------------------------------------------------------- /svelte/src/PostComponent.svelte: -------------------------------------------------------------------------------- 1 | 11 | 12 | 13 | 14 | 15 | {#if res} 16 | {res.sgood ? "Sgood" : "Sbad"} 17 | {res.did_post ? "did post!" : "didn't post :("} 18 | {/if} -------------------------------------------------------------------------------- /svelte/src/api.js: -------------------------------------------------------------------------------- 1 | const base = "localhost:8000"; 2 | const protocol = "http"; 3 | 4 | 5 | function getCookie(name) { 6 | let cookieValue = null; 7 | if (document.cookie && document.cookie !== '') { 8 | const cookies = document.cookie.split(';'); 9 | for (let i = 0; i < cookies.length; i++) { 10 | const cookie = cookies[i].trim(); 11 | // Does this cookie string begin with the name we want? 12 | if (cookie.substring(0, name.length + 1) === (name + '=')) { 13 | cookieValue = decodeURIComponent(cookie.substring(name.length + 1)); 14 | break; 15 | } 16 | } 17 | } 18 | return cookieValue; 19 | } 20 | 21 | async function send({ method, path, data }) { 22 | const fetch = window.fetch; 23 | const opts = { method, headers: {} }; 24 | 25 | if (data) { 26 | opts.headers['Content-Type'] = 'application/json'; 27 | opts.headers['X-CSRFToken'] = getCookie('csrftoken'); 28 | opts.body = JSON.stringify(data); 29 | } 30 | let url = `${protocol}://${base}/${path}`; 31 | console.log(opts, url); 32 | return await fetch(url, opts) 33 | .then(r => r.text()) 34 | .then(json => { 35 | try { 36 | return JSON.parse(json); 37 | } catch (err) { 38 | console.log(json); 39 | return json; 40 | } 41 | }) 42 | .catch(e => console.log(`[${e}]: ${url} with ${JSON.stringify(opts)} failed`)); 43 | } 44 | 45 | export function get(path) { 46 | return send({ method: 'GET', path }); 47 | } 48 | 49 | export function del(path) { 50 | return send({ method: 'DELETE', path }); 51 | } 52 | 53 | export function post(path, data) { 54 | return send({ method: 'POST', path, data }); 55 | } 56 | 57 | export function put(path, data) { 58 | return send({ method: 'PUT', path, data }); 59 | } 60 | 61 | export function patch(path, data) { 62 | return send({ method: 'PATCH', path, data }); 63 | } 64 | -------------------------------------------------------------------------------- /svelte/src/main-app.js: -------------------------------------------------------------------------------- 1 | import App from './App.svelte'; 2 | 3 | const app = new App({ 4 | target: document.getElementById("app-target"), 5 | props: JSON.parse(document.getElementById("app-props").textContent), 6 | }); 7 | 8 | export default app; -------------------------------------------------------------------------------- /svelte/src/main-authcomponent.js: -------------------------------------------------------------------------------- 1 | import AuthComponent from './AuthComponent.svelte'; 2 | 3 | const authcomponent = new AuthComponent({ 4 | target: document.getElementById("authcomponent-target"), 5 | props: JSON.parse(document.getElementById("authcomponent-props").textContent), 6 | }); 7 | 8 | export default authcomponent; -------------------------------------------------------------------------------- /svelte/src/main-postcomponent.js: -------------------------------------------------------------------------------- 1 | import PostComponent from './PostComponent.svelte'; 2 | 3 | const postcomponent = new PostComponent({ 4 | target: document.getElementById("postcomponent-target"), 5 | props: JSON.parse(document.getElementById("postcomponent-props").textContent), 6 | }); 7 | 8 | export default postcomponent; --------------------------------------------------------------------------------