├── .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;
--------------------------------------------------------------------------------