diff --git a/.env.template b/.env.template index 6fba0dd78..36c2357d5 100644 --- a/.env.template +++ b/.env.template @@ -41,10 +41,17 @@ SHOPPING_MIN_AUTOSYNC_INTERVAL=5 # Default for user setting sticky navbar # STICKY_NAV_PREF_DEFAULT=1 -# If staticfiles are stored at a different location uncomment and change accordingly +# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) +# SCRIPT_NAME=/recipes + +# If staticfiles are stored at a different location uncomment and change accordingly, MUST END IN / +# this is not required if you are just using a subfolder +# This can either be a relative path from the applications base path or the url of an external host # STATIC_URL=/static/ -# If mediafiles are stored at a different location uncomment and change accordingly +# If mediafiles are stored at a different location uncomment and change accordingly, MUST END IN / +# this is not required if you are just using a subfolder +# This can either be a relative path from the applications base path or the url of an external host # MEDIA_URL=/media/ # Serve mediafiles directly using gunicorn. Basically everyone recommends not doing this. Please use any of the examples @@ -79,8 +86,6 @@ GUNICORN_MEDIA=0 # when unset: 0 (false) REVERSE_PROXY_AUTH=0 -# If base URL is something other than just / (you are serving a subfolder in your proxy for instance http://recipe_app/recipes/) -# SCRIPT_NAME=/recipes # Default settings for spaces, apply per space and can be changed in the admin view # SPACE_DEFAULT_MAX_RECIPES=0 # 0=unlimited recipes # SPACE_DEFAULT_MAX_USERS=0 # 0=unlimited users per space diff --git a/.github/workflows/docker-publish-release.yml b/.github/workflows/docker-publish-release.yml index 0d0b60b1b..0f52da91d 100644 --- a/.github/workflows/docker-publish-release.yml +++ b/.github/workflows/docker-publish-release.yml @@ -50,4 +50,4 @@ jobs: DISCORD_WEBHOOK: ${{ secrets.DISCORD_RELEASE_WEBHOOK }} uses: Ilshidur/action-discord@0.3.2 with: - args: '🚀 A new Version of tandoor has been released 🥳 \n https://github.com/vabene1111/recipes/releases/tag/{{ steps.get_version.outputs.VERSION }}' \ No newline at end of file + args: '🚀 A new Version of tandoor has been released 🥳 \n https://github.com/vabene1111/recipes/releases/tag/{{GITHUB_REF/refs\/tags\//}}' \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index f060aa76e..b69c037ac 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,7 +1,7 @@ FROM python:3.9-alpine3.12 #Install all dependencies. -RUN apk add --no-cache postgresql-libs gettext zlib libjpeg libxml2-dev libxslt-dev py-cryptography +RUN apk add --no-cache postgresql-libs gettext zlib libjpeg libwebp libxml2-dev libxslt-dev py-cryptography #Print all logs without buffering it. ENV PYTHONUNBUFFERED 1 @@ -15,7 +15,7 @@ WORKDIR /opt/recipes COPY requirements.txt ./ -RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev && \ +RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-dev jpeg-dev libwebp-dev libressl-dev libffi-dev cargo openssl-dev openldap-dev && \ python -m venv venv && \ /opt/recipes/venv/bin/python -m pip install --upgrade pip && \ venv/bin/pip install wheel==0.36.2 && \ @@ -25,4 +25,4 @@ RUN apk add --no-cache --virtual .build-deps gcc musl-dev postgresql-dev zlib-de #Copy project and execute it. COPY . ./ RUN chmod +x boot.sh -ENTRYPOINT ["/opt/recipes/boot.sh"] \ No newline at end of file +ENTRYPOINT ["/opt/recipes/boot.sh"] diff --git a/README.md b/README.md index c7d2dfab8..cd6442de9 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,6 @@


- +
Tandoor Recipes
@@ -15,49 +15,77 @@ +

+WebsiteInstallation • -Documentation • +DocsDemo • -Discord server +Discord

![Preview](docs/preview.png) -# Your Feedback +## Core Features +- 🥗 **Manage your recipes** - Manage your ever growing recipe collection +- 📆 **Plan** - multiple meals for each day +- 🛒 **Shopping lists** - via the meal plan or straight from recipes +- 📚 **Cookbooks** - collect recipes into books +- 👪 **Share and collaborate** on recipes with friends and family -Share some information on how you use Tandoor to help me improve the application [Google Survey](https://forms.gle/qNfLK2tWTeWHe9Qd7) +## Made by and for power users -## Features - -- 📦 **Sync** files with Dropbox and Nextcloud (more can easily be added) -- 🔍 Powerful **search** with Djangos [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) +- 🔍 Powerful & customizable **search** with fulltext support and [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) - 🏷️ Create and search for **tags**, assign them in batch to all files matching certain filters -- 📄 **Create recipes** locally within a nice, standardized web interface -- ⬇️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) -- 📱 Optimized for use on **mobile** devices like phones and tablets -- 🛒 Generate **shopping** lists from recipes -- 📆 Create a **Plan** on what to eat when -- 👪 **Share** recipes with friends and comment on them to suggest or remember changes you made -- ➗ automatically convert decimal units to **fractions** for those who like this -- 🐳 Easy setup with **Docker** and included examples for Kubernetes, Unraid and Synology +- ↔️ Quickly merge and rename ingredients, tags and units +- 📥️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) +- ➗ Support for **fractions** or decimals +- 🐳 Easy setup with **Docker** and included examples for **Kubernetes**, **Unraid** and **Synology** - 🎨 Customize your interface with **themes** -- ✉️ Export and import recipes from other users +- 📦 **Sync** files with Dropbox and Nextcloud + +## All the must haves + +- 📱Optimized for use on **mobile** devices - 🌍 localized in many languages thanks to the awesome community -- ➕ Many more like recipe scaling, image compression, cookbooks, printing views, ... +- 📥️ **Import your collection** from many other [recipe managers](https://docs.tandoor.dev/features/import_export/) +- ➕ Many more like recipe scaling, image compression, printing views and supermarkets This application is meant for people with a collection of recipes they want to share with family and friends or simply store them in a nicely organized way. A basic permission system exists but this application is not meant to be run as a public page. + +## Docs + Documentation can be found [here](https://docs.tandoor.dev/). -While this application has been around for a while and is actively used by many (including myself), it is still considered -**beta** software that has a lot of rough edges and unpolished parts. +## Contributing + +You can help out with the ongoing development by looking for potential bugs in our code base, or by contributing new features. We are always welcoming new pull requests containing bug fixes, refactors and new features. We have a list of tasks and bugs on our issue tracker on Github. Please comment on issues if you want to contribute with, to avoid duplicating effort. + +## Your Feedback + +Share some information on how you use Tandoor to help me improve the application [Google Survey](https://forms.gle/qNfLK2tWTeWHe9Qd7) + +## Get in touch + + + + + + + + + + + +
DiscordWe have a public Discord server that anyone can join. This is where all our developers and contributors hang out and where we make announcements
TwitterYou can follow our Twitter account to get updates on new features or releases
+ ## License -Beginning with version 0.10.0 the code in this repository is licensed under the [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.de.html) license with an +Beginning with version 0.10.0 the code in this repository is licensed under the [GNU AGPL v3](https://www.gnu.org/licenses/agpl-3.0.de.html) license with a [common clause](https://commonsclause.com/) selling exception. See [LICENSE.md](https://github.com/vabene1111/recipes/blob/develop/LICENSE.md) for details. > NOTE: There appears to be a whole range of legal issues with licensing anything else then the standard completely open licenses. @@ -68,8 +96,8 @@ Beginning with version 0.10.0 the code in this repository is licensed under the **This software and *all* its features are and will always be free for everyone to use and enjoy.** The reason for the selling exception is that a significant amount of time was spend over multiple years to develop this software. -A payed hosted version which will be identical in features and code base to the software offered in this repository will +A paid hosted version which will be identical in features and code base to the software offered in this repository will likely be released in the future (including all features needed to sell a hosted version as they might also be useful for personal use). -This will not only benefit me personally but also everyone who self-hosts this software as any profits made trough selling the hosted option +This will not only benefit me personally but also everyone who self-hosts this software as any profits made through selling the hosted option allow me to spend more time developing and improving the software for everyone. Selling exceptions are [approved by Richard Stallman](http://www.gnu.org/philosophy/selling-exceptions.en.html) and the common clause license is very permissive (see the [FAQ](https://commonsclause.com/)). diff --git a/cookbook/locale/de/LC_MESSAGES/django.mo b/cookbook/locale/de/LC_MESSAGES/django.mo index e0bb29365..8dee8bac0 100644 Binary files a/cookbook/locale/de/LC_MESSAGES/django.mo and b/cookbook/locale/de/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/fr/LC_MESSAGES/django.mo b/cookbook/locale/fr/LC_MESSAGES/django.mo index 7456bf6c5..963e5c42e 100644 Binary files a/cookbook/locale/fr/LC_MESSAGES/django.mo and b/cookbook/locale/fr/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/fr/LC_MESSAGES/django.po b/cookbook/locale/fr/LC_MESSAGES/django.po index 1d9725850..7493a86e9 100644 --- a/cookbook/locale/fr/LC_MESSAGES/django.po +++ b/cookbook/locale/fr/LC_MESSAGES/django.po @@ -14,10 +14,10 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-13 22:40+0200\n" -"PO-Revision-Date: 2021-09-07 16:06+0000\n" -"Last-Translator: Afaren \n" -"Language-Team: French \n" +"PO-Revision-Date: 2021-10-26 10:06+0000\n" +"Last-Translator: tarek EL SOL \n" +"Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -305,7 +305,7 @@ msgstr "" #: .\cookbook\forms.py:500 msgid "Partial Match" -msgstr "" +msgstr "correspondance partielle" #: .\cookbook\forms.py:501 msgid "Starts Wtih" diff --git a/cookbook/locale/hy/LC_MESSAGES/django.mo b/cookbook/locale/hy/LC_MESSAGES/django.mo index b9b8a32f9..d66c7a0df 100644 Binary files a/cookbook/locale/hy/LC_MESSAGES/django.mo and b/cookbook/locale/hy/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/nl/LC_MESSAGES/django.mo b/cookbook/locale/nl/LC_MESSAGES/django.mo index df897bf55..19ec76218 100644 Binary files a/cookbook/locale/nl/LC_MESSAGES/django.mo and b/cookbook/locale/nl/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/nl/LC_MESSAGES/django.po b/cookbook/locale/nl/LC_MESSAGES/django.po index 984fb994d..81c7e42b0 100644 --- a/cookbook/locale/nl/LC_MESSAGES/django.po +++ b/cookbook/locale/nl/LC_MESSAGES/django.po @@ -13,7 +13,7 @@ msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2021-09-13 22:40+0200\n" -"PO-Revision-Date: 2021-10-02 12:25+0000\n" +"PO-Revision-Date: 2021-10-26 10:06+0000\n" "Last-Translator: Jesse \n" "Language-Team: Dutch \n" @@ -58,7 +58,7 @@ msgid "" "Users with whom newly created meal plan/shopping list entries should be " "shared by default." msgstr "" -"Gebruikers waarmee nieuwe maaltijdplannen/boodschappenlijstjes standaard " +"Gebruikers waarmee een nieuw maaltijdplan/boodschappenlijst standaard " "gedeeld moeten worden." #: .\cookbook\forms.py:59 @@ -71,7 +71,7 @@ msgstr "Aantal decimalen om ingrediënten op af te ronden." #: .\cookbook\forms.py:61 msgid "If you want to be able to create and see comments underneath recipes." -msgstr "Als je opmerkingen bij recepten wil kunnen maken en zien." +msgstr "Als je opmerkingen onder recepten wil kunnen maken en zien." #: .\cookbook\forms.py:63 msgid "" @@ -842,7 +842,7 @@ msgstr "Winkelen" #: .\cookbook\templates\base.html:113 msgid "Keyword" -msgstr "Etiket" +msgstr "Etiketten" #: .\cookbook\templates\base.html:137 #: .\cookbook\templates\forms\ingredients.html:24 @@ -874,7 +874,7 @@ msgstr "Recept importeren" #: .\cookbook\templates\shopping_list.html:188 #: .\cookbook\templates\shopping_list.html:210 msgid "Create" -msgstr "Maak" +msgstr "Nieuw recept" #: .\cookbook\templates\base.html:207 .\cookbook\templates\space.html:7 #: .\cookbook\templates\space.html:19 @@ -1028,11 +1028,11 @@ msgid "" " " msgstr "" "\n" -" Het volgende formulier kan worden gebruikt wanneer per ongeluk twee " -"(of meer) eenheden of ingrediënten zijn gemaakt die eigenlijk hetzelfde " -"zijn.\n" -" Het voegt de twee eenheden of ingrediënten samen en past alle bijbehorende " -"recepten aan.\n" +" Het volgende formulier kan worden gebruikt wanneer per ongeluk twee (" +"of meer) eenheden of ingrediënten zijn gemaakt die eigenlijk\n" +" hetzelfde zijn\n" +" Het voegt de twee eenheden of ingrediënten samen en past alle " +"bijbehorende recepten aan.\n" " " #: .\cookbook\templates\forms\ingredients.html:26 @@ -1068,7 +1068,7 @@ msgstr "Origineel bestand verwijderen" #: .\cookbook\templates\generic\list_template.html:6 #: .\cookbook\templates\generic\list_template.html:21 msgid "List" -msgstr "Lijst" +msgstr " " #: .\cookbook\templates\generic\list_template.html:34 msgid "Filter" @@ -1201,13 +1201,14 @@ msgstr "" "\n" " Markdown is een lichtgewicht opmaak taal die gebruikt kan worden om " "tekst eenvoudig op te maken.\n" -" Deze site gebruikt de Python Markdown bibliotheek\n" -" om je tekst in mooi uitziende HTML om te zetten. De volledige documentatie " -"kan \n" -" hiergevonden worden.\n" -" Onvolledige, maar waarschijnlijk voldoende, informatie staat hieronder.\n" +" Deze site gebruikt de Python Markdown bibliotheek\n" +" om je tekst in mooi uitziende HTML om te zetten. De volledige " +"documentatie kan \n" +" hiergevonden worden.\n" +" Onvolledige, maar waarschijnlijk voldoende, informatie staat " +"hieronder.\n" " " #: .\cookbook\templates\markdown_info.html:25 @@ -1216,7 +1217,7 @@ msgstr "Koppen" #: .\cookbook\templates\markdown_info.html:54 msgid "Formatting" -msgstr "Formattering" +msgstr "Opmaak" #: .\cookbook\templates\markdown_info.html:56 #: .\cookbook\templates\markdown_info.html:72 @@ -1299,7 +1300,7 @@ msgstr "" #: .\cookbook\templates\markdown_info.html:132 #: .\cookbook\templates\markdown_info.html:145 msgid "This will become an image" -msgstr "Dit wordt een plaatje" +msgstr "Dit wordt een afbeelding" #: .\cookbook\templates\markdown_info.html:152 msgid "Tables" @@ -1372,7 +1373,7 @@ msgstr "Maak alleen een notitie" #: .\cookbook\templates\shopping_list.html:29 #: .\cookbook\templates\shopping_list.html:714 msgid "Shopping List" -msgstr "Boodschappenlijstje" +msgstr "Boodschappenlijst" #: .\cookbook\templates\meal_plan.html:172 msgid "Shopping list currently empty" @@ -1380,7 +1381,7 @@ msgstr "Boodschappenlijst is momenteel leeg" #: .\cookbook\templates\meal_plan.html:175 msgid "Open Shopping List" -msgstr "Open boodschappenlijstje" +msgstr "Open boodschappenlijst" #: .\cookbook\templates\meal_plan.html:189 msgid "Plan" @@ -1405,15 +1406,15 @@ msgstr "" #: .\cookbook\templates\meal_plan.html:217 #: .\cookbook\templates\meal_plan.html:294 msgid "Edit plan types" -msgstr "Bewerk plan soorten" +msgstr "Bewerk maaltijdplan types" #: .\cookbook\templates\meal_plan.html:219 msgid "Show help" -msgstr "Toon help" +msgstr "Help" #: .\cookbook\templates\meal_plan.html:220 msgid "Week iCal export" -msgstr "Week iCal export" +msgstr "Exporteer week als iCal" #: .\cookbook\templates\meal_plan.html:256 #: .\cookbook\templates\url_import.html:542 @@ -1433,7 +1434,7 @@ msgstr "Gedeeld met" #: .\cookbook\templates\meal_plan.html:280 msgid "Add to Shopping" -msgstr "Voeg toe aan Boodschappen" +msgstr "Voeg toe aan boodschappenlijst" #: .\cookbook\templates\meal_plan.html:323 msgid "New meal type" @@ -1556,7 +1557,7 @@ msgid "" "Recipes, foods, shopping lists and more are organized in spaces of one or " "more people." msgstr "" -"Recepten, ingrediënten, boodschappenlijstjes en meer zijn georganiseerd in " +"Recepten, ingrediënten, boodschappenlijsten en meer zijn georganiseerd in " "ruimtes van één of meer personen." #: .\cookbook\templates\no_space_info.html:18 @@ -1995,7 +1996,7 @@ msgstr "Maak Superuser acount" #: .\cookbook\templates\shopping_list.html:79 msgid "Shopping Recipes" -msgstr "Boodschappen recepten" +msgstr "Recepten op boodschappenlijst" #: .\cookbook\templates\shopping_list.html:83 msgid "No recipes selected" @@ -2007,7 +2008,7 @@ msgstr "Invoermodus" #: .\cookbook\templates\shopping_list.html:158 msgid "Add Entry" -msgstr "Zet op lijst" +msgstr "Voeg toe aan boodschappenlijst" #: .\cookbook\templates\shopping_list.html:174 msgid "Amount" @@ -2044,7 +2045,7 @@ msgstr "Afgerond" #: .\cookbook\templates\shopping_list.html:296 msgid "You are offline, shopping list might not syncronize." -msgstr "Je bent offline, boodschappenlijst synchroniseert mogelijk niet." +msgstr "Je bent offline, de boodschappenlijst synchroniseert mogelijk niet." #: .\cookbook\templates\shopping_list.html:361 msgid "Copy/Export" @@ -2721,7 +2722,7 @@ msgstr "Supermarkten" #: .\cookbook\views\lists.py:179 msgid "Shopping Categories" -msgstr "Boodschappen categorieën" +msgstr "Boodschappencategorieën" #: .\cookbook\views\new.py:122 msgid "Imported new recipe!" diff --git a/cookbook/locale/pl/LC_MESSAGES/django.mo b/cookbook/locale/pl/LC_MESSAGES/django.mo index e90dadc64..5d8a8c772 100644 Binary files a/cookbook/locale/pl/LC_MESSAGES/django.mo and b/cookbook/locale/pl/LC_MESSAGES/django.mo differ diff --git a/cookbook/locale/ru/LC_MESSAGES/django.mo b/cookbook/locale/ru/LC_MESSAGES/django.mo new file mode 100644 index 000000000..6e90aacaa Binary files /dev/null and b/cookbook/locale/ru/LC_MESSAGES/django.mo differ diff --git a/cookbook/serializer.py b/cookbook/serializer.py index 4ca666d10..451fdb80d 100644 --- a/cookbook/serializer.py +++ b/cookbook/serializer.py @@ -2,22 +2,21 @@ import random from datetime import timedelta from decimal import Decimal from gettext import gettext as _ + from django.contrib.auth.models import User from django.db.models import Avg, QuerySet, Sum from django.urls import reverse from django.utils import timezone -from drf_writable_nested import (UniqueFieldsMixin, - WritableNestedModelSerializer) +from drf_writable_nested import UniqueFieldsMixin, WritableNestedModelSerializer from rest_framework import serializers -from rest_framework.exceptions import ValidationError, NotFound +from rest_framework.exceptions import NotFound, ValidationError -from cookbook.models import (Comment, CookLog, Food, Ingredient, Keyword, - MealPlan, MealType, NutritionInformation, Recipe, - RecipeBook, RecipeBookEntry, RecipeImport, - ShareLink, ShoppingList, ShoppingListEntry, - ShoppingListRecipe, Step, Storage, Sync, SyncLog, - Unit, UserPreference, ViewLog, SupermarketCategory, Supermarket, - SupermarketCategoryRelation, ImportLog, BookmarkletImport, UserFile, Automation) +from cookbook.models import (Automation, BookmarkletImport, Comment, CookLog, Food, ImportLog, + Ingredient, Keyword, MealPlan, MealType, NutritionInformation, Recipe, + RecipeBook, RecipeBookEntry, RecipeImport, ShareLink, ShoppingList, + ShoppingListEntry, ShoppingListRecipe, Step, Storage, Supermarket, + SupermarketCategory, SupermarketCategoryRelation, Sync, SyncLog, Unit, + UserFile, UserPreference, ViewLog) from cookbook.templatetags.custom_tags import markdown @@ -34,12 +33,19 @@ class ExtendedRecipeMixin(serializers.ModelSerializer): except KeyError: api_serializer = None # extended values are computationally expensive and not needed in normal circumstances - if self.context.get('request', False) and bool(int(self.context['request'].query_params.get('extended', False))) and self.__class__ == api_serializer: - return fields - else: + try: + if bool(int(self.context['request'].query_params.get('extended', False))) and self.__class__ == api_serializer: + return fields + except AttributeError: + pass + except KeyError: + pass + try: del fields['image'] del fields['numrecipe'] - return fields + except KeyError: + pass + return fields def get_image(self, obj): # TODO add caching @@ -158,7 +164,7 @@ class UserFileSerializer(serializers.ModelSerializer): current_file_size_mb = 0 if ((validated_data['file'].size / 1000 / 1000 + current_file_size_mb - 5) - > self.context['request'].space.max_file_storage_mb != 0): + > self.context['request'].space.max_file_storage_mb != 0): raise ValidationError(_('You have reached your file upload limit.')) def create(self, validated_data): diff --git a/cookbook/templates/base.html b/cookbook/templates/base.html index 1976ef331..6d7b04132 100644 --- a/cookbook/templates/base.html +++ b/cookbook/templates/base.html @@ -344,6 +344,7 @@ - - - - - - {% endblock %} -{% block content %} -
-
-
-
-
- -
- -
- -
-
-
- -
- -
-
- - - - - - - - - - - - - - -
- [[formatDateDayname(d)]]
[[formatDateDay(d)]]. - -
- [[ meal_plan[t.name].name]] - -
- - - -
-
-
- -
-
- {% trans 'New Entry' %} -
-
-
- -
-
-
-
- -
- -
-
-
-
- -
- - [[element.name]] - - [[element.servings]] -
-
-
-
-
-
-
- - - {% trans 'You can use markdown to format this field. See the docs here' %} -
-
- -
- -
- {% trans 'Create only note' %} -
-
-
- -
-
-
-
- -
-
-
-
-
- {% trans 'Shopping List' %} -
- -
- - -
-
-
-
-
-
- {% trans 'Plan' %} -
- -
-
-
- -
- -
-
-
- -
- -
- - - {% trans 'Edit plan types' %}
- {% trans 'Show help' %}
- {% trans 'Week iCal export' %} -
-
-
-
- -
-
- - - - - - - -
- - +{% block script %} + {% if debug %} + + {% else %} + + {% endif %} + + {% render_bundle 'meal_plan_view' %} {% endblock %} \ No newline at end of file diff --git a/cookbook/templates/settings.html b/cookbook/templates/settings.html index eba8ad14b..1f1e605c6 100644 --- a/cookbook/templates/settings.html +++ b/cookbook/templates/settings.html @@ -178,7 +178,7 @@
-
{% trans 'Percise' %}
+
{% trans 'Precise' %}

{% trans 'Allows fine control over search results but might not return results if too many spelling mistakes are made.' %}

{% trans 'Perfect for large Databases' %}

diff --git a/cookbook/templatetags/custom_tags.py b/cookbook/templatetags/custom_tags.py index e22411c6e..76ac08b4f 100644 --- a/cookbook/templatetags/custom_tags.py +++ b/cookbook/templatetags/custom_tags.py @@ -142,7 +142,7 @@ def bookmarklet(request): localStorage.setItem('redirectURL', '" + server + reverse('data_import_url') + "'); \ localStorage.setItem('token', '" + api_token.__str__() + "'); \ document.body.appendChild(document.createElement(\'script\')).src=\'" \ - + server + prefix + static('js/bookmarklet.js') + "? \ + + server + prefix + static('js/bookmarklet.js') + "? \ r=\'+Math.floor(Math.random()*999999999);}})();" return re.sub(r"[\n\t\s]*", "", bookmark) @@ -153,3 +153,5 @@ def base_path(request, path_type): return request._current_scheme_host + request.META.get('HTTP_X_SCRIPT_NAME', '') elif path_type == 'script': return request.META.get('HTTP_X_SCRIPT_NAME', '') + elif path_type == 'static_base': + return static('vue/manifest.json').replace('vue/manifest.json', '') diff --git a/cookbook/urls.py b/cookbook/urls.py index 80537c8d0..5ed5b825e 100644 --- a/cookbook/urls.py +++ b/cookbook/urls.py @@ -58,7 +58,6 @@ urlpatterns = [ path('search/v2/', views.search_v2, name='view_search_v2'), path('books/', views.books, name='view_books'), path('plan/', views.meal_plan, name='view_plan'), - path('plan_new/', views.meal_plan_new, name='view_plan_new'), path('plan/entry/', views.meal_plan_entry, name='view_plan_entry'), path('shopping/', views.shopping_list, name='view_shopping'), path('shopping/', views.shopping_list, name='view_shopping'), diff --git a/cookbook/views/data.py b/cookbook/views/data.py index 4ed41c403..6dd30b411 100644 --- a/cookbook/views/data.py +++ b/cookbook/views/data.py @@ -5,6 +5,7 @@ from io import BytesIO import requests from django.contrib import messages +from django.core.exceptions import ObjectDoesNotExist from django.core.files import File from django.db.transaction import atomic from django.http import HttpResponse, HttpResponseRedirect @@ -150,8 +151,15 @@ def import_url(request): recipe.steps.add(step) for kw in data['keywords']: - k, created = Keyword.objects.get_or_create(name=kw['text'], space=request.space) - recipe.keywords.add(k) + if data['all_keywords']: # do not remove this check :) https://github.com/vabene1111/recipes/issues/645 + k, created = Keyword.objects.get_or_create(name=kw['text'], space=request.space) + recipe.keywords.add(k) + else: + try: + k = Keyword.objects.get(name=kw['text'], space=request.space) + recipe.keywords.add(k) + except ObjectDoesNotExist: + pass ingredient_parser = IngredientParser(request, True) for ing in data['recipeIngredient']: diff --git a/cookbook/views/views.py b/cookbook/views/views.py index 5a94412b9..43e9c89ef 100644 --- a/cookbook/views/views.py +++ b/cookbook/views/views.py @@ -220,11 +220,6 @@ def meal_plan(request): return render(request, 'meal_plan.html', {}) -@group_required('user') -def meal_plan_new(request): - return render(request, 'meal_plan_new.html', {}) - - @group_required('user') def supermarket(request): return render(request, 'supermarket.html', {}) @@ -344,10 +339,13 @@ def user_settings(request): if fields_searched == 0: search_form.add_error(None, _('You must select at least one field to search!')) search_error = True - elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['fulltext']) == 0: - search_form.add_error('search', _('To use this search method you must select at least one full text search field!')) + elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len( + search_form.cleaned_data['fulltext']) == 0: + search_form.add_error('search', + _('To use this search method you must select at least one full text search field!')) search_error = True - elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len(search_form.cleaned_data['trigram']) > 0: + elif search_form.cleaned_data['search'] in ['websearch', 'raw'] and len( + search_form.cleaned_data['trigram']) > 0: search_form.add_error(None, _('Fuzzy search is not compatible with this search method!')) search_error = True else: @@ -386,7 +384,8 @@ def user_settings(request): else: preference_form = UserPreferenceForm() - fields_searched = len(sp.icontains.all()) + len(sp.istartswith.all()) + len(sp.trigram.all()) + len(sp.fulltext.all()) + fields_searched = len(sp.icontains.all()) + len(sp.istartswith.all()) + len(sp.trigram.all()) + len( + sp.fulltext.all()) if sp and not search_error and fields_searched > 0: search_form = SearchPreferenceForm(instance=sp) elif not search_error: @@ -396,7 +395,8 @@ def user_settings(request): api_token = Token.objects.create(user=request.user) # these fields require postgress - just disable them if postgress isn't available - if not settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', 'django.db.backends.postgresql']: + if not settings.DATABASES['default']['ENGINE'] in ['django.db.backends.postgresql_psycopg2', + 'django.db.backends.postgresql']: search_form.fields['search'].disabled = True search_form.fields['lookup'].disabled = True search_form.fields['trigram'].disabled = True diff --git a/docs/features/authentication.md b/docs/features/authentication.md index d4b273fc6..6390e91ef 100644 --- a/docs/features/authentication.md +++ b/docs/features/authentication.md @@ -60,6 +60,25 @@ Use the superuser account to grant permissions to the newly created users. To link an account to an already existing normal user go to the settings page of the user and link it. Here you can also unlink your account if you no longer want to use a social login method. +## LDAP + +LDAP authentication can be enabled in the `.env` file by setting `LDAP_AUTH=1`. +If set, users listed in the LDAP instance will be able to sign in without signing up. +These variables must be set to configure the connection to the LDAP instance: +``` +AUTH_LDAP_SERVER_URI=ldap://ldap.example.org:389 +AUTH_LDAP_BIND_DN=uid=admin,ou=users,dc=example,dc=org +AUTH_LDAP_BIND_PASSWORD=adminpassword +AUTH_LDAP_USER_SEARCH_BASE_DN=ou=users,dc=example,dc=org +``` +Additional optional variables: +``` +AUTH_LDAP_USER_SEARCH_FILTER_STR=(uid=%(user)s) +AUTH_LDAP_USER_ATTR_MAP={'first_name': 'givenName', 'last_name': 'sn', 'email': 'mail'} +AUTH_LDAP_ALWAYS_UPDATE_USER=1 +AUTH_LDAP_CACHE_TIMEOUT=3600 +``` + ## Reverse Proxy Authentication !!! Info "Community Contributed Tutorial" diff --git a/docs/index.md b/docs/index.md index 595a96a2c..e4e1bfb28 100644 --- a/docs/index.md +++ b/docs/index.md @@ -1,72 +1,79 @@


- +
Tandoor Recipes

-

This is my personal beta of vabene's excellent recipe app. It includes many of the new features I've developed and should be considered experimental.

-## Experimental Features -- Manual import recipes from URL & Source (HTML/JSON) -- Bookmarklet to import recipes from any website -- Full Text Search -- Hierarchical Keywords - -## Coming Next -- Heirarchical Ingredients -- Faceted Search -- Search filter by rating -- What Can I Make Now? -- Better ingredient/unit matching on import -- Custom word replacement on import (e.g. 'grams' automatically imported as 'g') -- improved ingredient parser (items in parens moved to notes) -- quick view ingredients -- quick view associated recipe -- favorite recipes -

The recipe manager that allows you to manage your ever growing collection of digital recipes.

- - - - - - + + + + + + +

-Installation • -Documentation • -Demo +Website • +Installation • +Docs • +Demo • +Discord

![Preview](preview.png) -!!! info "WIP" - The documentation is work in progress. New information will be added over time. - Feel free to open pull requests to enhance the documentation. +## Core Features +- 🥗 **Manage your recipes** with a fast and intuitive editor +- 📆 **Plan** multiple meals for each day +- 🛒 **Shopping lists** via the meal plan or straight from recipes +- 📚 **Cookbooks** collect recipes into books +- 👪 **Share and collaborate** on recipes with friends and family -## Features +## Made by and for power users -- 📦 **Sync** files with Dropbox and Nextcloud (more can easily be added) -- 🔍 Powerful **search** with Djangos [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) +- 🔍 Powerful & customizable **search** with fulltext support and [TrigramSimilarity](https://docs.djangoproject.com/en/3.0/ref/contrib/postgres/search/#trigram-similarity) - 🏷️ Create and search for **tags**, assign them in batch to all files matching certain filters -- 📄 **Create recipes** locally within a nice, standardized web interface -- ⬇️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) -- 📱 Optimized for use on **mobile** devices like phones and tablets -- 🛒 Generate **shopping** lists from recipes -- 📆 Create a **Plan** on what to eat when -- 👪 **Share** recipes with friends and comment on them to suggest or remember changes you made -- ➗ automatically convert decimal units to **fractions** for those who like this -- 🐳 Easy setup with **Docker** and included examples for Kubernetes, Unraid and Synology +- ↔️ Quickly merge and rename ingredients, tags and units +- 📥️ **Import recipes** from thousands of websites supporting [ld+json or microdata](https://schema.org/Recipe) +- ➗ Support for **fractions** or decimals +- 🐳 Easy setup with **Docker** and included examples for **Kubernetes**, **Unraid** and **Synology** - 🎨 Customize your interface with **themes** -- ✉️ Export and import recipes from other users +- 📦 **Sync** files with Dropbox and Nextcloud + +## All the must haves + +- 📱Optimized for use on **mobile** devices - 🌍 localized in many languages thanks to the awesome community -- ➕ Many more like recipe scaling, image compression, cookbooks, printing views, ... +- 📥️ **Import your collection** from many other [recipe managers](https://docs.tandoor.dev/features/import_export/) +- ➕ Many more like recipe scaling, image compression, printing views and supermarkets +This application is meant for people with a collection of recipes they want to share with family and friends or simply +store them in a nicely organized way. A basic permission system exists but this application is not meant to be run as +a public page. +## Your Feedback + +Share some information on how you use Tandoor to help me improve the application [Google Survey](https://forms.gle/qNfLK2tWTeWHe9Qd7) + +## Get in touch + + + + + + + + + + + +
DiscordWe have a public Discord server that anyone can join. This is where all our developers and contributors hang out and where we make announcements
TwitterYou can follow our Twitter account to get updates on new features or releases
## Roadmap This application has been under rapid development over the last year. diff --git a/recipes/settings.py b/recipes/settings.py index 5460d4818..73dff9cd7 100644 --- a/recipes/settings.py +++ b/recipes/settings.py @@ -360,6 +360,7 @@ LANGUAGES = [ ('it', _('Italian')), ('lv', _('Latvian')), ('pl', _('Polish')), + ('ru', _('Russian')), ('es', _('Spanish')), ] diff --git a/requirements.txt b/requirements.txt index a1dc5e05f..ff6dd1718 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,11 +1,11 @@ -Django==3.2.7 +Django==3.2.8 cryptography==35.0.0 django-annoying==0.10.6 django-autocomplete-light==3.8.2 django-cleanup==5.2.0 django-crispy-forms==1.13.0 django-filter==21.1 -django-tables2==2.4.0 +django-tables2==2.4.1 djangorestframework==3.12.4 drf-writable-nested==0.6.3 bleach==4.1.0 @@ -13,31 +13,31 @@ bleach-allowlist==1.0.3 gunicorn==20.1.0 lxml==4.6.3 Markdown==3.3.4 -Pillow==8.3.2 +Pillow==8.4.0 psycopg2-binary==2.9.1 -python-dotenv==0.19.0 +python-dotenv==0.19.1 requests==2.26.0 simplejson==3.17.5 six==1.16.0 webdavclient3==3.14.6 whitenoise==5.3.0 -icalendar==4.0.7 -pyyaml==5.4.1 -uritemplate==3.0.1 +icalendar==4.0.9 +pyyaml==6.0 +uritemplate==4.1.1 beautifulsoup4==4.10.0 microdata==0.7.1 -Jinja2==3.0.1 +Jinja2==3.0.2 django-webpack-loader==1.4.1 django-js-reverse==0.9.1 django-allauth==0.45.0 -recipe-scrapers==13.4.0 +recipe-scrapers==13.5.0 django-scopes==1.2.0 pytest==6.2.5 pytest-django==4.4.0 django-treebeard==4.5.1 -django-cors-headers==3.9.0 -django-storages==1.11.1 -boto3==1.18.52 +django-cors-headers==3.10.0 +django-storages==1.12.3 +boto3==1.19.7 django-prometheus==2.1.0 django-hCaptcha==0.1.0 python-ldap==3.3.1 diff --git a/vue/package-lock.json b/vue/package-lock.json index 2530c6f24..05b5f32dd 100644 --- a/vue/package-lock.json +++ b/vue/package-lock.json @@ -23,7 +23,7 @@ "vue-click-outside": "^1.1.0", "vue-clickaway": "^2.2.2", "vue-cookies": "^1.7.4", - "vue-i18n": "^8.24.4", + "vue-i18n": "^8.26.5", "vue-infinite-loading": "^2.4.5", "vue-multiselect": "^2.1.6", "vue-property-decorator": "^9.1.2", @@ -32,7 +32,7 @@ "vue2-touch-events": "^3.2.2", "vuedraggable": "^2.24.3", "vuex": "^3.6.0", - "workbox-webpack-plugin": "^6.1.5" + "workbox-webpack-plugin": "^6.3.0" }, "devDependencies": { "@kazupon/vue-i18n-loader": "^0.5.0", @@ -43,14 +43,14 @@ "@vue/cli-plugin-pwa": "~4.5.13", "@vue/cli-plugin-typescript": "^4.5.13", "@vue/cli-service": "~4.5.13", - "@vue/compiler-sfc": "^3.1.1", + "@vue/compiler-sfc": "^3.2.20", "@vue/eslint-config-typescript": "^7.0.0", "babel-eslint": "^10.1.0", "eslint": "^7.28.0", - "eslint-plugin-vue": "^7.10.0", - "typescript": "~4.4.3", + "eslint-plugin-vue": "^8.0.3", + "typescript": "~4.4.4", "vue-cli-plugin-i18n": "^2.1.1", - "webpack-bundle-tracker": "1.3.0", + "webpack-bundle-tracker": "1.4.0", "workbox-expiration": "^6.3.0", "workbox-navigation-preload": "^6.0.2", "workbox-precaching": "^6.3.0", @@ -361,8 +361,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.14.4", - "license": "MIT", + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1265,6 +1266,7 @@ }, "node_modules/@hapi/address": { "version": "2.1.4", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/bourne": { @@ -1272,12 +1274,9 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/@hapi/formula": { - "version": "1.2.0", - "license": "BSD-3-Clause" - }, "node_modules/@hapi/hoek": { "version": "8.5.1", + "dev": true, "license": "BSD-3-Clause" }, "node_modules/@hapi/joi": { @@ -1291,12 +1290,9 @@ "@hapi/topo": "3.x.x" } }, - "node_modules/@hapi/pinpoint": { - "version": "1.0.2", - "license": "BSD-3-Clause" - }, "node_modules/@hapi/topo": { "version": "3.1.6", + "dev": true, "license": "BSD-3-Clause", "dependencies": { "@hapi/hoek": "^8.3.0" @@ -1481,6 +1477,28 @@ "vue": "^2.2.0" } }, + "node_modules/@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "dependencies": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "@types/babel__core": "^7.1.9", + "rollup": "^1.20.0||^2.0.0" + }, + "peerDependenciesMeta": { + "@types/babel__core": { + "optional": true + } + } + }, "node_modules/@rollup/plugin-node-resolve": { "version": "7.1.3", "dev": true, @@ -1509,7 +1527,6 @@ }, "node_modules/@rollup/plugin-replace": { "version": "2.4.2", - "dev": true, "license": "MIT", "dependencies": { "@rollup/pluginutils": "^3.1.0", @@ -1521,7 +1538,6 @@ }, "node_modules/@rollup/pluginutils": { "version": "3.1.0", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "0.0.39", @@ -1537,12 +1553,10 @@ }, "node_modules/@rollup/pluginutils/node_modules/@types/estree": { "version": "0.0.39", - "dev": true, "license": "MIT" }, "node_modules/@rollup/pluginutils/node_modules/estree-walker": { "version": "1.0.1", - "dev": true, "license": "MIT" }, "node_modules/@soda/friendly-errors-webpack-plugin": { @@ -1743,7 +1757,8 @@ }, "node_modules/@types/resolve": { "version": "1.17.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "dependencies": { "@types/node": "*" } @@ -1767,6 +1782,11 @@ "dev": true, "license": "MIT" }, + "node_modules/@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, "node_modules/@types/uglify-js": { "version": "3.13.0", "dev": true, @@ -3198,75 +3218,53 @@ } }, "node_modules/@vue/compiler-core": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.20.tgz", + "integrity": "sha512-vcEXlKXoPwBXFP5aUTHN9GTZaDfwCofa9Yu9bbW2C5O/QSa9Esdt7OG4+0RRd3EHEMxUvEdj4RZrd/KpQeiJbA==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.12.0", - "@babel/types": "^7.12.0", - "@vue/shared": "3.1.1", - "estree-walker": "^2.0.1", + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "node_modules/@vue/compiler-dom": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.20.tgz", + "integrity": "sha512-QnI77ec/JtV7R0YBbcVayYTDCRcI9OCbxiUQK6izVyqQO0658n0zQuoNwe+bYgtqnvGAIqTR3FShTd5y4oOjdg==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-core": "3.1.1", - "@vue/shared": "3.1.1" + "@vue/compiler-core": "3.2.20", + "@vue/shared": "3.2.20" } }, "node_modules/@vue/compiler-sfc": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.20.tgz", + "integrity": "sha512-03aZo+6tQKiFLfunHKSPZvdK4Jsn/ftRCyaro8AQIWkuxJbvSosbKK6HTTn+D2c3nPScG155akJoxKENw7rftQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/parser": "^7.13.9", - "@babel/types": "^7.13.0", - "@vue/compiler-core": "3.1.1", - "@vue/compiler-dom": "3.1.1", - "@vue/compiler-ssr": "3.1.1", - "@vue/shared": "3.1.1", - "consolidate": "^0.16.0", - "estree-walker": "^2.0.1", - "hash-sum": "^2.0.0", - "lru-cache": "^5.1.1", + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.20", + "@vue/compiler-dom": "3.2.20", + "@vue/compiler-ssr": "3.2.20", + "@vue/ref-transform": "3.2.20", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", "magic-string": "^0.25.7", - "merge-source-map": "^1.1.0", "postcss": "^8.1.10", - "postcss-modules": "^4.0.0", - "postcss-selector-parser": "^6.0.4", "source-map": "^0.6.1" - }, - "peerDependencies": { - "vue": "3.1.1" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/hash-sum": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@vue/compiler-sfc/node_modules/icss-utils": { - "version": "5.1.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" } }, "node_modules/@vue/compiler-sfc/node_modules/postcss": { - "version": "8.3.0", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "dev": true, - "license": "MIT", "dependencies": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", "source-map-js": "^0.6.2" }, "engines": { @@ -3277,91 +3275,14 @@ "url": "https://opencollective.com/postcss/" } }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-modules": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "generic-names": "^2.0.1", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - }, - "peerDependencies": { - "postcss": "^8.0.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-extract-imports": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-local-by-default": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-scope": { - "version": "3.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "postcss-selector-parser": "^6.0.4" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "icss-utils": "^5.0.0" - }, - "engines": { - "node": "^10 || ^12 || >= 14" - }, - "peerDependencies": { - "postcss": "^8.1.0" - } - }, - "node_modules/@vue/compiler-sfc/node_modules/postcss-value-parser": { - "version": "4.1.0", - "dev": true, - "license": "MIT" - }, "node_modules/@vue/compiler-ssr": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.20.tgz", + "integrity": "sha512-rzzVVYivm+EjbfiGQvNeyiYZWzr6Hkej97RZLZvcumacQlnKv9176Xo9rRyeWwFbBlxmtNdrVMslRXtipMXk2w==", "dev": true, - "license": "MIT", "dependencies": { - "@vue/compiler-dom": "3.1.1", - "@vue/shared": "3.1.1" + "@vue/compiler-dom": "3.2.20", + "@vue/shared": "3.2.20" } }, "node_modules/@vue/component-compiler-utils": { @@ -3436,10 +3357,24 @@ "webpack": ">=4.0.0" } }, - "node_modules/@vue/shared": { - "version": "3.1.1", + "node_modules/@vue/ref-transform": { + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.20.tgz", + "integrity": "sha512-Y42d3PGlYZ1lXcF3dbd3+qU/C/a3wYEZ949fyOI5ptzkjDWlkfU6vn74fmOjsLjEcjs10BXK2qO99FqQIK2r1Q==", "dev": true, - "license": "MIT" + "dependencies": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.20", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, + "node_modules/@vue/shared": { + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.20.tgz", + "integrity": "sha512-FbpX+hD5BvXCQerEYO7jtAGHlhAkhTQ4KIV73kmLWNlawWhTiVuQxizgVb0BOkX5oG9cIRZ42EG++d/k/Efp0w==", + "dev": true }, "node_modules/@vue/web-component-wrapper": { "version": "1.3.0", @@ -4426,6 +4361,15 @@ "node": ">=0.10.0" } }, + "node_modules/bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "dependencies": { + "file-uri-to-path": "1.0.0" + } + }, "node_modules/bluebird": { "version": "3.7.2", "license": "MIT" @@ -5031,6 +4975,24 @@ "node": ">=0.10.0" } }, + "node_modules/chokidar/node_modules/fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "deprecated": "fsevents 1 will break on node v14+ and could be using insecure binaries. Upgrade to fsevents 2.", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + }, + "engines": { + "node": ">= 4.0" + } + }, "node_modules/chownr": { "version": "1.1.4", "license": "ISC" @@ -5538,17 +5500,6 @@ "node_modules/console-browserify": { "version": "1.2.0" }, - "node_modules/consolidate": { - "version": "0.16.0", - "dev": true, - "license": "MIT", - "dependencies": { - "bluebird": "^3.7.2" - }, - "engines": { - "node": ">= 0.10.0" - } - }, "node_modules/constants-browserify": { "version": "1.0.0", "license": "MIT" @@ -5867,7 +5818,8 @@ }, "node_modules/crypto-random-string": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "engines": { "node": ">=8" } @@ -6435,8 +6387,9 @@ "license": "MIT" }, "node_modules/debug": { - "version": "4.3.1", - "license": "MIT", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "dependencies": { "ms": "2.1.2" }, @@ -7215,20 +7168,105 @@ } }, "node_modules/eslint-plugin-vue": { - "version": "7.10.0", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.0.3.tgz", + "integrity": "sha512-Rlhhy5ltzde0sRwSkqHuNePTXLMMaJ5+qsQubM4RYloYsQ8cXlnJT5MDaCzSirkGADipOHtmQXIbbPFAzUrADg==", "dev": true, - "license": "MIT", "dependencies": { - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" + "semver": "^7.3.5", + "vue-eslint-parser": "^8.0.1" }, "engines": { - "node": ">=8.10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "dependencies": { + "eslint-visitor-keys": "^2.0.0" + }, + "engines": { + "node": "^10.0.0 || ^12.0.0 || >= 14.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=5" + } + }, + "node_modules/eslint-plugin-vue/node_modules/eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/eslint-plugin-vue/node_modules/espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "dependencies": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, + "engines": { + "node": ">=4.0" } }, "node_modules/eslint-plugin-vue/node_modules/lru-cache": { @@ -7256,6 +7294,39 @@ "node": ">=10" } }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.0.1.tgz", + "integrity": "sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==", + "dev": true, + "dependencies": { + "debug": "^4.3.2", + "eslint-scope": "^6.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/mysticatea" + }, + "peerDependencies": { + "eslint": ">=6.0.0" + } + }, + "node_modules/eslint-plugin-vue/node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + } + }, "node_modules/eslint-scope": { "version": "5.1.1", "license": "BSD-2-Clause", @@ -7462,8 +7533,9 @@ }, "node_modules/estree-walker": { "version": "2.0.2", - "dev": true, - "license": "MIT" + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true }, "node_modules/esutils": { "version": "2.0.3", @@ -7820,6 +7892,12 @@ "url": "https://opencollective.com/webpack" } }, + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, "node_modules/filesize": { "version": "3.6.1", "dev": true, @@ -8354,6 +8432,19 @@ "version": "1.0.0", "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "license": "MIT" @@ -8366,14 +8457,6 @@ "version": "1.0.3", "license": "MIT" }, - "node_modules/generic-names": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "loader-utils": "^1.1.0" - } - }, "node_modules/gensync": { "version": "1.0.0-beta.2", "license": "MIT", @@ -8947,11 +9030,6 @@ "node": ">=0.10.0" } }, - "node_modules/icss-replace-symbols": { - "version": "1.1.0", - "dev": true, - "license": "ISC" - }, "node_modules/icss-utils": { "version": "4.1.1", "dev": true, @@ -9629,7 +9707,8 @@ }, "node_modules/jest-worker": { "version": "26.6.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "dependencies": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -9641,14 +9720,16 @@ }, "node_modules/jest-worker/node_modules/has-flag": { "version": "4.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "engines": { "node": ">=8" } }, "node_modules/jest-worker/node_modules/supports-color": { "version": "7.2.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dependencies": { "has-flag": "^4.0.0" }, @@ -9756,6 +9837,14 @@ "graceful-fs": "^4.1.6" } }, + "node_modules/jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==", + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/jsprim": { "version": "1.4.1", "dev": true, @@ -9826,6 +9915,14 @@ "launch-editor": "^2.2.1" } }, + "node_modules/leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==", + "engines": { + "node": ">=6" + } + }, "node_modules/levn": { "version": "0.4.1", "license": "MIT", @@ -9960,11 +10057,6 @@ "dev": true, "license": "MIT" }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "dev": true, - "license": "MIT" - }, "node_modules/lodash.clonedeep": { "version": "4.5.0", "license": "MIT" @@ -10018,7 +10110,8 @@ }, "node_modules/lodash.sortby": { "version": "4.7.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, "node_modules/lodash.template": { "version": "4.5.0", @@ -10613,10 +10706,17 @@ "thenify-all": "^1.0.0" } }, + "node_modules/nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, "node_modules/nanoid": { - "version": "3.1.23", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true, - "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -11393,6 +11493,12 @@ "dev": true, "license": "MIT" }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "node_modules/picomatch": { "version": "2.3.0", "license": "MIT", @@ -12639,7 +12745,6 @@ }, "node_modules/rollup": { "version": "1.32.1", - "dev": true, "license": "MIT", "dependencies": { "@types/estree": "*", @@ -13232,8 +13337,9 @@ }, "node_modules/source-map-js": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "dev": true, - "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -13250,8 +13356,9 @@ } }, "node_modules/source-map-support": { - "version": "0.5.19", - "license": "MIT", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "dependencies": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -13474,11 +13581,6 @@ "safe-buffer": "~5.2.0" } }, - "node_modules/string-hash": { - "version": "1.1.3", - "dev": true, - "license": "CC0-1.0" - }, "node_modules/string-width": { "version": "4.2.2", "license": "MIT", @@ -13561,7 +13663,8 @@ }, "node_modules/strip-comments": { "version": "2.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==", "engines": { "node": ">=10" } @@ -13792,14 +13895,16 @@ }, "node_modules/temp-dir": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==", "engines": { "node": ">=8" } }, "node_modules/tempy": { "version": "0.6.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "dependencies": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -13814,15 +13919,20 @@ } }, "node_modules/tempy/node_modules/is-stream": { - "version": "2.0.0", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", - "license": "(MIT OR CC0-1.0)", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "engines": { "node": ">=10" }, @@ -14063,7 +14173,8 @@ }, "node_modules/tr46": { "version": "1.0.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "dependencies": { "punycode": "^2.1.0" } @@ -14338,9 +14449,9 @@ "license": "MIT" }, "node_modules/typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -14460,7 +14571,8 @@ }, "node_modules/unique-string": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -14826,8 +14938,9 @@ "license": "MIT" }, "node_modules/vue-i18n": { - "version": "8.24.4", - "license": "MIT" + "version": "8.26.5", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.26.5.tgz", + "integrity": "sha512-qYqfsFd8v2QFSLDAabqXXXpwjGvkuqJtTWqRpZPXpAFO6PArGH4A9vSplnA0HLmnB8km7OB5ZSdP8lkkX0rLew==" }, "node_modules/vue-i18n-extract": { "version": "1.0.2", @@ -15157,7 +15270,8 @@ }, "node_modules/webidl-conversions": { "version": "4.0.2", - "license": "BSD-2-Clause" + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "node_modules/webpack": { "version": "4.46.0", @@ -15233,9 +15347,9 @@ } }, "node_modules/webpack-bundle-tracker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-1.3.0.tgz", - "integrity": "sha512-cs3QMgW5F0mE0e91X/SuEq2MUfu2LqpjFSdfINsOmNt/T4v39EESNhJ+P8d5lmbfFL6Z1z7n6LlpVCERTdDDvQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-1.4.0.tgz", + "integrity": "sha512-5dbAdtS+DbvJfXIXfCytRv5D4I2EWBdBBVOzDMpSa52goTroryWcH4lm3h2qwVqSQEgTTWCkgLGGlZYZmYRM9g==", "dev": true, "dependencies": { "lodash.assign": "^4.2.0", @@ -15428,7 +15542,8 @@ }, "node_modules/whatwg-url": { "version": "7.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "dependencies": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -15487,24 +15602,27 @@ "license": "MIT" }, "node_modules/workbox-broadcast-update": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.3.0.tgz", + "integrity": "sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==", "dependencies": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "node_modules/workbox-build": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.3.0.tgz", + "integrity": "sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==", "dependencies": { + "@apideck/better-ajv-errors": "^0.2.4", "@babel/core": "^7.11.1", "@babel/preset-env": "^7.11.0", "@babel/runtime": "^7.11.2", - "@hapi/joi": "^16.1.8", "@rollup/plugin-babel": "^5.2.0", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-replace": "^2.4.1", "@surma/rollup-plugin-off-main-thread": "^1.4.1", + "ajv": "^8.6.0", "common-tags": "^1.8.0", "fast-json-stable-stringify": "^2.1.0", "fs-extra": "^9.0.1", @@ -15519,93 +15637,46 @@ "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "^6.1.5", - "workbox-broadcast-update": "^6.1.5", - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-google-analytics": "^6.1.5", - "workbox-navigation-preload": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-range-requests": "^6.1.5", - "workbox-recipes": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5", - "workbox-streams": "^6.1.5", - "workbox-sw": "^6.1.5", - "workbox-window": "^6.1.5" + "workbox-background-sync": "6.3.0", + "workbox-broadcast-update": "6.3.0", + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-google-analytics": "6.3.0", + "workbox-navigation-preload": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-range-requests": "6.3.0", + "workbox-recipes": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0", + "workbox-streams": "6.3.0", + "workbox-sw": "6.3.0", + "workbox-window": "6.3.0" }, "engines": { "node": ">=10.0.0" } }, - "node_modules/workbox-build/node_modules/@hapi/joi": { - "version": "16.1.8", - "license": "BSD-3-Clause", + "node_modules/workbox-build/node_modules/@apideck/better-ajv-errors": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.6.tgz", + "integrity": "sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==", "dependencies": { - "@hapi/address": "^2.1.2", - "@hapi/formula": "^1.2.0", - "@hapi/hoek": "^8.2.4", - "@hapi/pinpoint": "^1.0.2", - "@hapi/topo": "^3.1.3" - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-babel": { - "version": "5.3.0", - "license": "MIT", - "dependencies": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" + "json-schema": "^0.3.0", + "jsonpointer": "^4.1.0", + "leven": "^3.1.0" }, "engines": { - "node": ">= 10.0.0" + "node": ">=10" }, "peerDependencies": { - "@babel/core": "^7.0.0", - "@types/babel__core": "^7.1.9", - "rollup": "^1.20.0||^2.0.0" - }, - "peerDependenciesMeta": { - "@types/babel__core": { - "optional": true - } - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-babel/node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "license": "MIT" - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-babel/node_modules/rollup": { - "version": "1.32.1", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" + "ajv": ">=8" } }, "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve": { "version": "11.2.1", - "license": "MIT", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "dependencies": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -15621,88 +15692,25 @@ "rollup": "^1.20.0||^2.0.0" } }, - "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "license": "MIT", + "node_modules/workbox-build/node_modules/ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve/node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "license": "MIT" - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-node-resolve/node_modules/rollup": { - "version": "1.32.1", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-replace": { - "version": "2.4.2", - "license": "MIT", - "dependencies": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "peerDependencies": { - "rollup": "^1.20.0 || ^2.0.0" - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils": { - "version": "3.1.0", - "license": "MIT", - "dependencies": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "engines": { - "node": ">= 8.0.0" - }, - "peerDependencies": { - "rollup": "^1.20.0||^2.0.0" - } - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-replace/node_modules/@rollup/pluginutils/node_modules/@types/estree": { - "version": "0.0.39", - "license": "MIT" - }, - "node_modules/workbox-build/node_modules/@rollup/plugin-replace/node_modules/rollup": { - "version": "1.32.1", - "license": "MIT", - "peer": true, - "dependencies": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - }, - "bin": { - "rollup": "dist/bin/rollup" - } - }, - "node_modules/workbox-build/node_modules/estree-walker": { - "version": "1.0.1", - "license": "MIT" - }, "node_modules/workbox-build/node_modules/fs-extra": { "version": "9.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "dependencies": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -15713,9 +15721,20 @@ "node": ">=10" } }, + "node_modules/workbox-build/node_modules/json-schema": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz", + "integrity": "sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ==" + }, + "node_modules/workbox-build/node_modules/json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "node_modules/workbox-build/node_modules/jsonfile": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dependencies": { "universalify": "^2.0.0" }, @@ -15724,8 +15743,9 @@ } }, "node_modules/workbox-build/node_modules/rollup": { - "version": "2.51.1", - "license": "MIT", + "version": "2.58.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.3.tgz", + "integrity": "sha512-ei27MSw1KhRur4p87Q0/Va2NAYqMXOX++FNEumMBcdreIRLURKy+cE2wcDJKBn0nfmhP2ZGrJkP1XPO+G8FJQw==", "bin": { "rollup": "dist/bin/rollup" }, @@ -15733,12 +15753,13 @@ "node": ">=10.0.0" }, "optionalDependencies": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "node_modules/workbox-build/node_modules/rollup-plugin-terser": { "version": "7.0.2", - "license": "MIT", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "dependencies": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -15751,7 +15772,8 @@ }, "node_modules/workbox-build/node_modules/source-map": { "version": "0.8.0-beta.0", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "dependencies": { "whatwg-url": "^7.0.0" }, @@ -15760,12 +15782,13 @@ } }, "node_modules/workbox-build/node_modules/terser": { - "version": "5.7.0", - "license": "BSD-2-Clause", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "dependencies": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "bin": { "terser": "bin/terser" @@ -15776,30 +15799,35 @@ }, "node_modules/workbox-build/node_modules/terser/node_modules/source-map": { "version": "0.7.3", - "license": "BSD-3-Clause", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==", "engines": { "node": ">= 8" } }, "node_modules/workbox-build/node_modules/universalify": { "version": "2.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "engines": { "node": ">= 10.0.0" } }, "node_modules/workbox-build/node_modules/workbox-background-sync": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", "dependencies": { - "workbox-core": "^6.1.5" + "idb": "^6.0.0", + "workbox-core": "6.3.0" } }, "node_modules/workbox-cacheable-response": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.3.0.tgz", + "integrity": "sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==", "dependencies": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "node_modules/workbox-core": { @@ -15817,27 +15845,31 @@ } }, "node_modules/workbox-google-analytics": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.3.0.tgz", + "integrity": "sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==", "dependencies": { - "workbox-background-sync": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" + "workbox-background-sync": "6.3.0", + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "node_modules/workbox-google-analytics/node_modules/workbox-background-sync": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", "dependencies": { - "workbox-core": "^6.1.5" + "idb": "^6.0.0", + "workbox-core": "6.3.0" } }, "node_modules/workbox-navigation-preload": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.3.0.tgz", + "integrity": "sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==", "dependencies": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "node_modules/workbox-precaching": { @@ -15851,22 +15883,24 @@ } }, "node_modules/workbox-range-requests": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.3.0.tgz", + "integrity": "sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==", "dependencies": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "node_modules/workbox-recipes": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.3.0.tgz", + "integrity": "sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==", "dependencies": { - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "node_modules/workbox-routing": { @@ -15886,27 +15920,30 @@ } }, "node_modules/workbox-streams": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.3.0.tgz", + "integrity": "sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==", "dependencies": { - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5" + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0" } }, "node_modules/workbox-sw": { - "version": "6.1.5", - "license": "MIT" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.3.0.tgz", + "integrity": "sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==" }, "node_modules/workbox-webpack-plugin": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.3.0.tgz", + "integrity": "sha512-3l5H8h7O2eUgTAISQoglDe4VJDDYTZaDnkRY0FY2+eFOXA+fZoWuDSmLiMnA0uYqPC4NWVTZwP549E0dWgiWjw==", "dependencies": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", "source-map-url": "^0.4.0", "upath": "^1.2.0", "webpack-sources": "^1.4.3", - "workbox-build": "^6.1.5" + "workbox-build": "6.3.0" }, "engines": { "node": ">=10.0.0" @@ -15916,10 +15953,12 @@ } }, "node_modules/workbox-window": { - "version": "6.1.5", - "license": "MIT", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.3.0.tgz", + "integrity": "sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==", "dependencies": { - "workbox-core": "^6.1.5" + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.3.0" } }, "node_modules/worker-farm": { @@ -16427,7 +16466,9 @@ } }, "@babel/parser": { - "version": "7.14.4" + "version": "7.16.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.16.0.tgz", + "integrity": "sha512-TEHWXf0xxpi9wKVyBCmRcSSDjbJ/cl6LUdlbYUHEaNQUJGhreJbZrXT6sR4+fZLxVUJqNRB4KyOvjuy/D9009A==" }, "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": { "version": "7.13.12", @@ -17035,17 +17076,16 @@ } }, "@hapi/address": { - "version": "2.1.4" + "version": "2.1.4", + "dev": true }, "@hapi/bourne": { "version": "1.3.2", "dev": true }, - "@hapi/formula": { - "version": "1.2.0" - }, "@hapi/hoek": { - "version": "8.5.1" + "version": "8.5.1", + "dev": true }, "@hapi/joi": { "version": "15.1.1", @@ -17057,11 +17097,9 @@ "@hapi/topo": "3.x.x" } }, - "@hapi/pinpoint": { - "version": "1.0.2" - }, "@hapi/topo": { "version": "3.1.6", + "dev": true, "requires": { "@hapi/hoek": "^8.3.0" } @@ -17184,6 +17222,15 @@ "watch-size": "^2.0.0" } }, + "@rollup/plugin-babel": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-babel/-/plugin-babel-5.3.0.tgz", + "integrity": "sha512-9uIC8HZOnVLrLHxayq/PTzw+uS25E14KPUBh5ktF+18Mjo5yK0ToMMx6epY0uEgkjwJw0aBW4x2horYXh8juWw==", + "requires": { + "@babel/helper-module-imports": "^7.10.4", + "@rollup/pluginutils": "^3.1.0" + } + }, "@rollup/plugin-node-resolve": { "version": "7.1.3", "dev": true, @@ -17206,7 +17253,6 @@ }, "@rollup/plugin-replace": { "version": "2.4.2", - "dev": true, "requires": { "@rollup/pluginutils": "^3.1.0", "magic-string": "^0.25.7" @@ -17214,7 +17260,6 @@ }, "@rollup/pluginutils": { "version": "3.1.0", - "dev": true, "requires": { "@types/estree": "0.0.39", "estree-walker": "^1.0.1", @@ -17222,12 +17267,10 @@ }, "dependencies": { "@types/estree": { - "version": "0.0.39", - "dev": true + "version": "0.0.39" }, "estree-walker": { - "version": "1.0.1", - "dev": true + "version": "1.0.1" } } }, @@ -17386,6 +17429,8 @@ }, "@types/resolve": { "version": "1.17.1", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.17.1.tgz", + "integrity": "sha512-yy7HuzQhj0dhGpD8RLXSZWEkLsV9ibvxvi6EiJ3bkqLAO1RGo0WbkWQiwpRlSFymTJRz0d3k5LM3kkx8ArDbLw==", "requires": { "@types/node": "*" } @@ -17406,6 +17451,11 @@ "version": "1.0.7", "dev": true }, + "@types/trusted-types": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.2.tgz", + "integrity": "sha512-F5DIZ36YVLE+PN+Zwws4kJogq47hNgX3Nx6WyDJ3kcplxyke3XIzB8uK5n/Lpm1HBsbGzd6nmGehL8cPekP+Tg==" + }, "@types/uglify-js": { "version": "3.13.0", "dev": true, @@ -18376,118 +18426,66 @@ } }, "@vue/compiler-core": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.2.20.tgz", + "integrity": "sha512-vcEXlKXoPwBXFP5aUTHN9GTZaDfwCofa9Yu9bbW2C5O/QSa9Esdt7OG4+0RRd3EHEMxUvEdj4RZrd/KpQeiJbA==", "dev": true, "requires": { - "@babel/parser": "^7.12.0", - "@babel/types": "^7.12.0", - "@vue/shared": "3.1.1", - "estree-walker": "^2.0.1", + "@babel/parser": "^7.15.0", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", "source-map": "^0.6.1" } }, "@vue/compiler-dom": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.2.20.tgz", + "integrity": "sha512-QnI77ec/JtV7R0YBbcVayYTDCRcI9OCbxiUQK6izVyqQO0658n0zQuoNwe+bYgtqnvGAIqTR3FShTd5y4oOjdg==", "dev": true, "requires": { - "@vue/compiler-core": "3.1.1", - "@vue/shared": "3.1.1" + "@vue/compiler-core": "3.2.20", + "@vue/shared": "3.2.20" } }, "@vue/compiler-sfc": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.2.20.tgz", + "integrity": "sha512-03aZo+6tQKiFLfunHKSPZvdK4Jsn/ftRCyaro8AQIWkuxJbvSosbKK6HTTn+D2c3nPScG155akJoxKENw7rftQ==", "dev": true, "requires": { - "@babel/parser": "^7.13.9", - "@babel/types": "^7.13.0", - "@vue/compiler-core": "3.1.1", - "@vue/compiler-dom": "3.1.1", - "@vue/compiler-ssr": "3.1.1", - "@vue/shared": "3.1.1", - "consolidate": "^0.16.0", - "estree-walker": "^2.0.1", - "hash-sum": "^2.0.0", - "lru-cache": "^5.1.1", + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.20", + "@vue/compiler-dom": "3.2.20", + "@vue/compiler-ssr": "3.2.20", + "@vue/ref-transform": "3.2.20", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", "magic-string": "^0.25.7", - "merge-source-map": "^1.1.0", "postcss": "^8.1.10", - "postcss-modules": "^4.0.0", - "postcss-selector-parser": "^6.0.4", "source-map": "^0.6.1" }, "dependencies": { - "hash-sum": { - "version": "2.0.0", - "dev": true - }, - "icss-utils": { - "version": "5.1.0", - "dev": true, - "requires": {} - }, "postcss": { - "version": "8.3.0", + "version": "8.3.11", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.3.11.tgz", + "integrity": "sha512-hCmlUAIlUiav8Xdqw3Io4LcpA1DOt7h3LSTAC4G6JGHFFaWzI6qvFt9oilvl8BmkbBRX1IhM90ZAmpk68zccQA==", "dev": true, "requires": { - "colorette": "^1.2.2", - "nanoid": "^3.1.23", + "nanoid": "^3.1.30", + "picocolors": "^1.0.0", "source-map-js": "^0.6.2" } - }, - "postcss-modules": { - "version": "4.1.3", - "dev": true, - "requires": { - "generic-names": "^2.0.1", - "icss-replace-symbols": "^1.1.0", - "lodash.camelcase": "^4.3.0", - "postcss-modules-extract-imports": "^3.0.0", - "postcss-modules-local-by-default": "^4.0.0", - "postcss-modules-scope": "^3.0.0", - "postcss-modules-values": "^4.0.0", - "string-hash": "^1.1.1" - } - }, - "postcss-modules-extract-imports": { - "version": "3.0.0", - "dev": true, - "requires": {} - }, - "postcss-modules-local-by-default": { - "version": "4.0.0", - "dev": true, - "requires": { - "icss-utils": "^5.0.0", - "postcss-selector-parser": "^6.0.2", - "postcss-value-parser": "^4.1.0" - } - }, - "postcss-modules-scope": { - "version": "3.0.0", - "dev": true, - "requires": { - "postcss-selector-parser": "^6.0.4" - } - }, - "postcss-modules-values": { - "version": "4.0.0", - "dev": true, - "requires": { - "icss-utils": "^5.0.0" - } - }, - "postcss-value-parser": { - "version": "4.1.0", - "dev": true } } }, "@vue/compiler-ssr": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.2.20.tgz", + "integrity": "sha512-rzzVVYivm+EjbfiGQvNeyiYZWzr6Hkej97RZLZvcumacQlnKv9176Xo9rRyeWwFbBlxmtNdrVMslRXtipMXk2w==", "dev": true, "requires": { - "@vue/compiler-dom": "3.1.1", - "@vue/shared": "3.1.1" + "@vue/compiler-dom": "3.2.20", + "@vue/shared": "3.2.20" } }, "@vue/component-compiler-utils": { @@ -18538,8 +18536,23 @@ "dev": true, "requires": {} }, + "@vue/ref-transform": { + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/ref-transform/-/ref-transform-3.2.20.tgz", + "integrity": "sha512-Y42d3PGlYZ1lXcF3dbd3+qU/C/a3wYEZ949fyOI5ptzkjDWlkfU6vn74fmOjsLjEcjs10BXK2qO99FqQIK2r1Q==", + "dev": true, + "requires": { + "@babel/parser": "^7.15.0", + "@vue/compiler-core": "3.2.20", + "@vue/shared": "3.2.20", + "estree-walker": "^2.0.2", + "magic-string": "^0.25.7" + } + }, "@vue/shared": { - "version": "3.1.1", + "version": "3.2.20", + "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.2.20.tgz", + "integrity": "sha512-FbpX+hD5BvXCQerEYO7jtAGHlhAkhTQ4KIV73kmLWNlawWhTiVuQxizgVb0BOkX5oG9cIRZ42EG++d/k/Efp0w==", "dev": true }, "@vue/web-component-wrapper": { @@ -19219,6 +19232,15 @@ "version": "1.13.1", "devOptional": true }, + "bindings": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/bindings/-/bindings-1.5.0.tgz", + "integrity": "sha512-p2q/t/mhvuOj/UeLlV6566GD/guowlr0hHxClI0W9m7MWYkL1F0hLo+0Aexs9HSPCtR1SXQ0TD3MMKrXZajbiQ==", + "optional": true, + "requires": { + "file-uri-to-path": "1.0.0" + } + }, "bluebird": { "version": "3.7.2" }, @@ -19667,6 +19689,16 @@ } } } + }, + "fsevents": { + "version": "1.2.13", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-1.2.13.tgz", + "integrity": "sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==", + "optional": true, + "requires": { + "bindings": "^1.5.0", + "nan": "^2.12.1" + } } } }, @@ -20018,13 +20050,6 @@ "console-browserify": { "version": "1.2.0" }, - "consolidate": { - "version": "0.16.0", - "dev": true, - "requires": { - "bluebird": "^3.7.2" - } - }, "constants-browserify": { "version": "1.0.0" }, @@ -20251,7 +20276,9 @@ } }, "crypto-random-string": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", + "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==" }, "css-color-names": { "version": "0.0.4", @@ -20719,7 +20746,9 @@ "version": "1.0.2" }, "debug": { - "version": "4.3.1", + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.2.tgz", + "integrity": "sha512-mOp8wKcvj7XxC78zLgw/ZA+6TSgkoE2C/ienthhRD298T7UNwAg9diBpLRxC0mOezLl4B0xV7M0cCO6P/O0Xhw==", "requires": { "ms": "2.1.2" } @@ -21305,15 +21334,73 @@ } }, "eslint-plugin-vue": { - "version": "7.10.0", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.0.3.tgz", + "integrity": "sha512-Rlhhy5ltzde0sRwSkqHuNePTXLMMaJ5+qsQubM4RYloYsQ8cXlnJT5MDaCzSirkGADipOHtmQXIbbPFAzUrADg==", "dev": true, "requires": { - "eslint-utils": "^2.1.0", + "eslint-utils": "^3.0.0", "natural-compare": "^1.4.0", - "semver": "^7.3.2", - "vue-eslint-parser": "^7.6.0" + "semver": "^7.3.5", + "vue-eslint-parser": "^8.0.1" }, "dependencies": { + "acorn": { + "version": "8.5.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.5.0.tgz", + "integrity": "sha512-yXbYeFy+jUuYd3/CDcg2NkIYE991XYX/bje7LmjJigUciaeO1JR4XxXgCIV1/Zc/dRuFEyw1L0pbA+qynJkW5Q==", + "dev": true + }, + "eslint-scope": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-6.0.0.tgz", + "integrity": "sha512-uRDL9MWmQCkaFus8RF5K9/L/2fn+80yoW3jkD53l4shjCh26fCtvJGasxjUqP5OT87SYTxCVA3BwTUzuELx9kA==", + "dev": true, + "requires": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + } + }, + "eslint-utils": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-3.0.0.tgz", + "integrity": "sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==", + "dev": true, + "requires": { + "eslint-visitor-keys": "^2.0.0" + } + }, + "eslint-visitor-keys": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-2.1.0.tgz", + "integrity": "sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==", + "dev": true + }, + "espree": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.0.0.tgz", + "integrity": "sha512-r5EQJcYZ2oaGbeR0jR0fFVijGOcwai07/690YRXLINuhmVeRY4UKSAsQPe/0BNuDgwP7Ophoc1PRsr2E3tkbdQ==", + "dev": true, + "requires": { + "acorn": "^8.5.0", + "acorn-jsx": "^5.3.1", + "eslint-visitor-keys": "^3.0.0" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true + } + } + }, + "estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true + }, "lru-cache": { "version": "6.0.0", "dev": true, @@ -21327,6 +21414,29 @@ "requires": { "lru-cache": "^6.0.0" } + }, + "vue-eslint-parser": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.0.1.tgz", + "integrity": "sha512-lhWjDXJhe3UZw2uu3ztX51SJAPGPey1Tff2RK3TyZURwbuI4vximQLzz4nQfCv8CZq4xx7uIiogHMMoSJPr33A==", + "dev": true, + "requires": { + "debug": "^4.3.2", + "eslint-scope": "^6.0.0", + "eslint-visitor-keys": "^3.0.0", + "espree": "^9.0.0", + "esquery": "^1.4.0", + "lodash": "^4.17.21", + "semver": "^7.3.5" + }, + "dependencies": { + "eslint-visitor-keys": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.0.0.tgz", + "integrity": "sha512-mJOZa35trBTb3IyRmo8xmKBZlxf+N7OnUl4+ZhJHs/r+0770Wh/LEACE2pqMGMe27G/4y8P2bYGk4J70IC5k1Q==", + "dev": true + } + } } } }, @@ -21388,6 +21498,8 @@ }, "estree-walker": { "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", "dev": true }, "esutils": { @@ -21646,6 +21758,12 @@ } } }, + "file-uri-to-path": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/file-uri-to-path/-/file-uri-to-path-1.0.0.tgz", + "integrity": "sha512-0Zt+s3L7Vf1biwWZ29aARiVYLx7iMGnEUl9x33fbB/j3jR81u/O2LbqK+Bm1CDSNDKVtJ/YjwY7TUd5SkeLQLw==", + "optional": true + }, "filesize": { "version": "3.6.1", "dev": true @@ -21994,6 +22112,12 @@ "fs.realpath": { "version": "1.0.0" }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "optional": true + }, "function-bind": { "version": "1.1.1" }, @@ -22003,13 +22127,6 @@ "fuzzysearch": { "version": "1.0.3" }, - "generic-names": { - "version": "2.0.1", - "dev": true, - "requires": { - "loader-utils": "^1.1.0" - } - }, "gensync": { "version": "1.0.0-beta.2" }, @@ -22401,10 +22518,6 @@ "safer-buffer": ">= 2.1.2 < 3" } }, - "icss-replace-symbols": { - "version": "1.1.0", - "dev": true - }, "icss-utils": { "version": "4.1.1", "dev": true, @@ -22797,6 +22910,8 @@ }, "jest-worker": { "version": "26.6.2", + "resolved": "https://registry.npmjs.org/jest-worker/-/jest-worker-26.6.2.tgz", + "integrity": "sha512-KWYVV1c4i+jbMpaBC+U++4Va0cp8OisU185o73T1vo99hqi7w8tSJfUXYswwqqrjzwxa6KpRK54WhPvwf5w6PQ==", "requires": { "@types/node": "*", "merge-stream": "^2.0.0", @@ -22804,10 +22919,14 @@ }, "dependencies": { "has-flag": { - "version": "4.0.0" + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" }, "supports-color": { "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "requires": { "has-flag": "^4.0.0" } @@ -22879,6 +22998,11 @@ "graceful-fs": "^4.1.6" } }, + "jsonpointer": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/jsonpointer/-/jsonpointer-4.1.0.tgz", + "integrity": "sha512-CXcRvMyTlnR53xMcKnuMzfCA5i/nfblTnnr74CZb6C4vG39eu6w51t7nKmU5MfLfbTgGItliNyjO/ciNPDqClg==" + }, "jsprim": { "version": "1.4.1", "dev": true, @@ -22934,6 +23058,11 @@ "launch-editor": "^2.2.1" } }, + "leven": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", + "integrity": "sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==" + }, "levn": { "version": "0.4.1", "requires": { @@ -23031,10 +23160,6 @@ "version": "4.2.0", "dev": true }, - "lodash.camelcase": { - "version": "4.3.0", - "dev": true - }, "lodash.clonedeep": { "version": "4.5.0" }, @@ -23076,7 +23201,9 @@ "version": "4.4.0" }, "lodash.sortby": { - "version": "4.7.0" + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", + "integrity": "sha1-7dFMgk4sycHgsKG0K7UhBRakJDg=" }, "lodash.template": { "version": "4.5.0", @@ -23502,8 +23629,16 @@ "thenify-all": "^1.0.0" } }, + "nan": { + "version": "2.15.0", + "resolved": "https://registry.npmjs.org/nan/-/nan-2.15.0.tgz", + "integrity": "sha512-8ZtvEnA2c5aYCZYd1cvgdnU6cqwixRoYg70xPLWUws5ORTa/lnw+u4amixRS/Ac5U5mQVgp9pnlSUnbNWFaWZQ==", + "optional": true + }, "nanoid": { - "version": "3.1.23", + "version": "3.1.30", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.1.30.tgz", + "integrity": "sha512-zJpuPDwOv8D2zq2WRoMe1HsfZthVewpel9CAvTfc/2mBD1uUT/agc5f7GHGWXlYkFvi1mVxe4IjvP2HNrop7nQ==", "dev": true }, "nanomatch": { @@ -24010,6 +24145,12 @@ "version": "2.1.0", "dev": true }, + "picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "dev": true + }, "picomatch": { "version": "2.3.0" }, @@ -24852,7 +24993,6 @@ }, "rollup": { "version": "1.32.1", - "dev": true, "requires": { "@types/estree": "*", "@types/node": "*", @@ -25279,6 +25419,8 @@ }, "source-map-js": { "version": "0.6.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-0.6.2.tgz", + "integrity": "sha512-/3GptzWzu0+0MBQFrDKzw/DvvMTUORvgY6k6jd/VS6iCR4RDTKWH6v6WPwQoUO8667uQEf9Oe38DxAYWY5F/Ug==", "dev": true }, "source-map-resolve": { @@ -25292,7 +25434,9 @@ } }, "source-map-support": { - "version": "0.5.19", + "version": "0.5.20", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.20.tgz", + "integrity": "sha512-n1lZZ8Ve4ksRqizaBQgxXDgKwttHDhyfQjA6YZZn8+AroHbsIz+JjwxQDxbp+7y5OYCI8t1Yk7etjD9CRd2hIw==", "requires": { "buffer-from": "^1.0.0", "source-map": "^0.6.0" @@ -25464,10 +25608,6 @@ "safe-buffer": "~5.2.0" } }, - "string-hash": { - "version": "1.1.3", - "dev": true - }, "string-width": { "version": "4.2.2", "requires": { @@ -25522,7 +25662,9 @@ "integrity": "sha1-5SEekiQ2n7uB1jOi8ABE3IztrZI=" }, "strip-comments": { - "version": "2.0.1" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-comments/-/strip-comments-2.0.1.tgz", + "integrity": "sha512-ZprKx+bBLXv067WTCALv8SSz5l2+XhpYCsVtSqlMnkAXMWDq+/ekVbl1ghqP9rUHTzv6sm/DwCOiYutU/yp1fw==" }, "strip-eof": { "version": "1.0.0", @@ -25682,10 +25824,14 @@ "version": "1.1.3" }, "temp-dir": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-2.0.0.tgz", + "integrity": "sha512-aoBAniQmmwtcKp/7BzsH8Cxzv8OL736p7v1ihGb5e9DJ9kTwGWHrQrVB5+lfVDzfGrdRzXch+ig7LHaY1JTOrg==" }, "tempy": { "version": "0.6.0", + "resolved": "https://registry.npmjs.org/tempy/-/tempy-0.6.0.tgz", + "integrity": "sha512-G13vtMYPT/J8A4X2SjdtBTphZlrp1gKv6hZiOjw14RCWg6GbHuQBGtjlx75xLbYV/wEc0D7G5K4rxKP/cXk8Bw==", "requires": { "is-stream": "^2.0.0", "temp-dir": "^2.0.0", @@ -25694,10 +25840,14 @@ }, "dependencies": { "is-stream": { - "version": "2.0.0" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", + "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==" }, "type-fest": { - "version": "0.16.0" + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", + "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==" } } }, @@ -25859,6 +26009,8 @@ }, "tr46": { "version": "1.0.1", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", + "integrity": "sha1-qLE/1r/SSJUZZ0zN5VujaTtwbQk=", "requires": { "punycode": "^2.1.0" } @@ -26040,9 +26192,9 @@ "version": "0.0.6" }, "typescript": { - "version": "4.4.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.3.tgz", - "integrity": "sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==", + "version": "4.4.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.4.4.tgz", + "integrity": "sha512-DqGhF5IKoBl8WNf8C1gu8q0xZSInh9j1kJJMqT3a94w1JzVaBU4EXOSMrz9yDqMT0xt3selp83fuFMQ0uzv6qA==", "dev": true }, "uc.micro": { @@ -26121,6 +26273,8 @@ }, "unique-string": { "version": "2.0.0", + "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", + "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "requires": { "crypto-random-string": "^2.0.0" } @@ -26369,7 +26523,9 @@ "dev": true }, "vue-i18n": { - "version": "8.24.4" + "version": "8.26.5", + "resolved": "https://registry.npmjs.org/vue-i18n/-/vue-i18n-8.26.5.tgz", + "integrity": "sha512-qYqfsFd8v2QFSLDAabqXXXpwjGvkuqJtTWqRpZPXpAFO6PArGH4A9vSplnA0HLmnB8km7OB5ZSdP8lkkX0rLew==" }, "vue-i18n-extract": { "version": "1.0.2", @@ -26600,7 +26756,9 @@ } }, "webidl-conversions": { - "version": "4.0.2" + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", + "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==" }, "webpack": { "version": "4.46.0", @@ -26662,9 +26820,9 @@ } }, "webpack-bundle-tracker": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-1.3.0.tgz", - "integrity": "sha512-cs3QMgW5F0mE0e91X/SuEq2MUfu2LqpjFSdfINsOmNt/T4v39EESNhJ+P8d5lmbfFL6Z1z7n6LlpVCERTdDDvQ==", + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/webpack-bundle-tracker/-/webpack-bundle-tracker-1.4.0.tgz", + "integrity": "sha512-5dbAdtS+DbvJfXIXfCytRv5D4I2EWBdBBVOzDMpSa52goTroryWcH4lm3h2qwVqSQEgTTWCkgLGGlZYZmYRM9g==", "dev": true, "requires": { "lodash.assign": "^4.2.0", @@ -26790,6 +26948,8 @@ }, "whatwg-url": { "version": "7.1.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", + "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", "requires": { "lodash.sortby": "^4.7.0", "tr46": "^1.0.1", @@ -26835,22 +26995,27 @@ } }, "workbox-broadcast-update": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-broadcast-update/-/workbox-broadcast-update-6.3.0.tgz", + "integrity": "sha512-hp7Du6GJzK99wak5cQFhcSBxvcS+2fkFcxiMmz/RsQ5GQNxVcbiovq74w5aNCzuv3muQvICyC1XELZhZ4GYRTQ==", "requires": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "workbox-build": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-build/-/workbox-build-6.3.0.tgz", + "integrity": "sha512-Th93AaC+88ZvJje0acTjCCCvU3tGenxJht5xUALXHW+Mzk3I5SMzTFwKn5F3e1iZ+M7U2jjfpMXe/sJ4UMx46A==", "requires": { + "@apideck/better-ajv-errors": "^0.2.4", "@babel/core": "^7.11.1", "@babel/preset-env": "^7.11.0", "@babel/runtime": "^7.11.2", - "@hapi/joi": "^16.1.8", "@rollup/plugin-babel": "^5.2.0", "@rollup/plugin-node-resolve": "^11.2.1", "@rollup/plugin-replace": "^2.4.1", "@surma/rollup-plugin-off-main-thread": "^1.4.1", + "ajv": "^8.6.0", "common-tags": "^1.8.0", "fast-json-stable-stringify": "^2.1.0", "fs-extra": "^9.0.1", @@ -26865,66 +27030,37 @@ "strip-comments": "^2.0.1", "tempy": "^0.6.0", "upath": "^1.2.0", - "workbox-background-sync": "^6.1.5", - "workbox-broadcast-update": "^6.1.5", - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-google-analytics": "^6.1.5", - "workbox-navigation-preload": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-range-requests": "^6.1.5", - "workbox-recipes": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5", - "workbox-streams": "^6.1.5", - "workbox-sw": "^6.1.5", - "workbox-window": "^6.1.5" + "workbox-background-sync": "6.3.0", + "workbox-broadcast-update": "6.3.0", + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-google-analytics": "6.3.0", + "workbox-navigation-preload": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-range-requests": "6.3.0", + "workbox-recipes": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0", + "workbox-streams": "6.3.0", + "workbox-sw": "6.3.0", + "workbox-window": "6.3.0" }, "dependencies": { - "@hapi/joi": { - "version": "16.1.8", + "@apideck/better-ajv-errors": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.2.6.tgz", + "integrity": "sha512-FvGcbFUdbPLexAhdvihkroCA3LQa7kGMa8Qj9f32BiOcV1Thscg/QCxp/kJibsFrhUrlKOzd07uJFOGTN0/awQ==", "requires": { - "@hapi/address": "^2.1.2", - "@hapi/formula": "^1.2.0", - "@hapi/hoek": "^8.2.4", - "@hapi/pinpoint": "^1.0.2", - "@hapi/topo": "^3.1.3" - } - }, - "@rollup/plugin-babel": { - "version": "5.3.0", - "requires": { - "@babel/helper-module-imports": "^7.10.4", - "@rollup/pluginutils": "^3.1.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39" - } - } - }, - "rollup": { - "version": "1.32.1", - "peer": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - } + "json-schema": "^0.3.0", + "jsonpointer": "^4.1.0", + "leven": "^3.1.0" } }, "@rollup/plugin-node-resolve": { "version": "11.2.1", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-11.2.1.tgz", + "integrity": "sha512-yc2n43jcqVyGE2sqV5/YCmocy9ArjVAP/BeXyTtADTBBX6V0e5UMqwO8CdQ0kzjb6zu5P1qMzsScCMRvE9OlVg==", "requires": { "@rollup/pluginutils": "^3.1.0", "@types/resolve": "1.17.1", @@ -26932,68 +27068,23 @@ "deepmerge": "^4.2.2", "is-module": "^1.0.0", "resolve": "^1.19.0" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39" - } - } - }, - "rollup": { - "version": "1.32.1", - "peer": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - } } }, - "@rollup/plugin-replace": { - "version": "2.4.2", + "ajv": { + "version": "8.6.3", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.6.3.tgz", + "integrity": "sha512-SMJOdDP6LqTkD0Uq8qLi+gMwSt0imXLSV080qFVwJCpH9U6Mb+SUGHAXM0KNbcBPguytWyvFxcHgMLe2D2XSpw==", "requires": { - "@rollup/pluginutils": "^3.1.0", - "magic-string": "^0.25.7" - }, - "dependencies": { - "@rollup/pluginutils": { - "version": "3.1.0", - "requires": { - "@types/estree": "0.0.39", - "estree-walker": "^1.0.1", - "picomatch": "^2.2.2" - }, - "dependencies": { - "@types/estree": { - "version": "0.0.39" - } - } - }, - "rollup": { - "version": "1.32.1", - "peer": true, - "requires": { - "@types/estree": "*", - "@types/node": "*", - "acorn": "^7.1.0" - } - } + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" } }, - "estree-walker": { - "version": "1.0.1" - }, "fs-extra": { "version": "9.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", + "integrity": "sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==", "requires": { "at-least-node": "^1.0.0", "graceful-fs": "^4.2.0", @@ -27001,21 +27092,37 @@ "universalify": "^2.0.0" } }, + "json-schema": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.3.0.tgz", + "integrity": "sha512-TYfxx36xfl52Rf1LU9HyWSLGPdYLL+SQ8/E/0yVyKG8wCCDaSrhPap0vEdlsZWRaS6tnKKLPGiEJGiREVC8kxQ==" + }, + "json-schema-traverse": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", + "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==" + }, "jsonfile": { "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "requires": { "graceful-fs": "^4.1.6", "universalify": "^2.0.0" } }, "rollup": { - "version": "2.51.1", + "version": "2.58.3", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.58.3.tgz", + "integrity": "sha512-ei27MSw1KhRur4p87Q0/Va2NAYqMXOX++FNEumMBcdreIRLURKy+cE2wcDJKBn0nfmhP2ZGrJkP1XPO+G8FJQw==", "requires": { - "fsevents": "~2.3.1" + "fsevents": "~2.3.2" } }, "rollup-plugin-terser": { "version": "7.0.2", + "resolved": "https://registry.npmjs.org/rollup-plugin-terser/-/rollup-plugin-terser-7.0.2.tgz", + "integrity": "sha512-w3iIaU4OxcF52UUXiZNsNeuXIMDvFrr+ZXK6bFZ0Q60qyVfq4uLptoS4bbq3paG3x216eQllFZX7zt6TIImguQ==", "requires": { "@babel/code-frame": "^7.10.4", "jest-worker": "^26.2.1", @@ -27025,38 +27132,51 @@ }, "source-map": { "version": "0.8.0-beta.0", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", + "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", "requires": { "whatwg-url": "^7.0.0" } }, "terser": { - "version": "5.7.0", + "version": "5.9.0", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.9.0.tgz", + "integrity": "sha512-h5hxa23sCdpzcye/7b8YqbE5OwKca/ni0RQz1uRX3tGh8haaGHqcuSqbGRybuAKNdntZ0mDgFNXPJ48xQ2RXKQ==", "requires": { "commander": "^2.20.0", "source-map": "~0.7.2", - "source-map-support": "~0.5.19" + "source-map-support": "~0.5.20" }, "dependencies": { "source-map": { - "version": "0.7.3" + "version": "0.7.3", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz", + "integrity": "sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==" } } }, "universalify": { - "version": "2.0.0" + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", + "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==" }, "workbox-background-sync": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", "requires": { - "workbox-core": "^6.1.5" + "idb": "^6.0.0", + "workbox-core": "6.3.0" } } } }, "workbox-cacheable-response": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-cacheable-response/-/workbox-cacheable-response-6.3.0.tgz", + "integrity": "sha512-oYCRGF6PFEmJJkktdxYw/tcrU8N5u/2ihxVSHd+9sNqjNMDiXLqsewcEG544f1yx7gq5/u6VcvUA5N62KzN1GQ==", "requires": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "workbox-core": { @@ -27074,26 +27194,33 @@ } }, "workbox-google-analytics": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-google-analytics/-/workbox-google-analytics-6.3.0.tgz", + "integrity": "sha512-6u0y21rtimnrCKpvayTkwh9y4Y5Xdn6X87x895WzwcOcWA2j/Nl7nmCpB0wjjhqU9pMj7B2lChqfypP+xUs5IA==", "requires": { - "workbox-background-sync": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" + "workbox-background-sync": "6.3.0", + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" }, "dependencies": { "workbox-background-sync": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-background-sync/-/workbox-background-sync-6.3.0.tgz", + "integrity": "sha512-79Wznt6oO8xMmLiErRS4zENUEldFHj1/5IiuHsY3NgGRN5rJdvGW6hz+RERhWzoB7rd/vXyAQdKYahGdsiYG1A==", "requires": { - "workbox-core": "^6.1.5" + "idb": "^6.0.0", + "workbox-core": "6.3.0" } } } }, "workbox-navigation-preload": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-navigation-preload/-/workbox-navigation-preload-6.3.0.tgz", + "integrity": "sha512-D7bomh9SCn1u6n32FqAWfyHe2dkK6mWbwcTsoeBnFSD0p8Gr9Zq1Mpt/DitEfGIQHck90Zd024xcTFLkjczS/Q==", "requires": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "workbox-precaching": { @@ -27107,20 +27234,24 @@ } }, "workbox-range-requests": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-range-requests/-/workbox-range-requests-6.3.0.tgz", + "integrity": "sha512-AHnGtfSvc/fBt+8NCVT6jVcshv7oFkiuS94YsedQu2sIN1jKHkxLaj7qMBl818FoY6x7r0jw1WLmG/QDmI1/oA==", "requires": { - "workbox-core": "^6.1.5" + "workbox-core": "6.3.0" } }, "workbox-recipes": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-recipes/-/workbox-recipes-6.3.0.tgz", + "integrity": "sha512-f0AZyxd48E4t+PV+ifgIf8WodfJqRj8/E0t+PwppDIdTPyD59cIh0HZBtgPKFdIMVnltodpMz4zioxym1H3GjQ==", "requires": { - "workbox-cacheable-response": "^6.1.5", - "workbox-core": "^6.1.5", - "workbox-expiration": "^6.1.5", - "workbox-precaching": "^6.1.5", - "workbox-routing": "^6.1.5", - "workbox-strategies": "^6.1.5" + "workbox-cacheable-response": "6.3.0", + "workbox-core": "6.3.0", + "workbox-expiration": "6.3.0", + "workbox-precaching": "6.3.0", + "workbox-routing": "6.3.0", + "workbox-strategies": "6.3.0" } }, "workbox-routing": { @@ -27140,30 +27271,39 @@ } }, "workbox-streams": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-streams/-/workbox-streams-6.3.0.tgz", + "integrity": "sha512-CiRsuoXJOytA7IQriRu6kVCa0L4OdNi0DdniiSageu/EZuxTswNXpgVzkGE4IDArU/5jlzgRtwqrqIWCJX+OMA==", "requires": { - "workbox-core": "^6.1.5", - "workbox-routing": "^6.1.5" + "workbox-core": "6.3.0", + "workbox-routing": "6.3.0" } }, "workbox-sw": { - "version": "6.1.5" + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-sw/-/workbox-sw-6.3.0.tgz", + "integrity": "sha512-xwrXRBzw5jwJ7VdAQkTSNTbNZ4S6VhXtbZZ0vY6XKNQARO5nuGphNdif+hJFIejHUgtV6ESpQnixPj5hYB2jKQ==" }, "workbox-webpack-plugin": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-webpack-plugin/-/workbox-webpack-plugin-6.3.0.tgz", + "integrity": "sha512-3l5H8h7O2eUgTAISQoglDe4VJDDYTZaDnkRY0FY2+eFOXA+fZoWuDSmLiMnA0uYqPC4NWVTZwP549E0dWgiWjw==", "requires": { "fast-json-stable-stringify": "^2.1.0", "pretty-bytes": "^5.4.1", "source-map-url": "^0.4.0", "upath": "^1.2.0", "webpack-sources": "^1.4.3", - "workbox-build": "^6.1.5" + "workbox-build": "6.3.0" } }, "workbox-window": { - "version": "6.1.5", + "version": "6.3.0", + "resolved": "https://registry.npmjs.org/workbox-window/-/workbox-window-6.3.0.tgz", + "integrity": "sha512-CFP84assX9srH/TOx4OD8z4EBPO/Cq4WKdV2YLcJIFJmVTS/cB63XKeidKl2KJk8qOOLVIKnaO7BLmb0MxGFtA==", "requires": { - "workbox-core": "^6.1.5" + "@types/trusted-types": "^2.0.2", + "workbox-core": "6.3.0" } }, "worker-farm": { diff --git a/vue/package.json b/vue/package.json index 1441637e9..6014eaa7e 100644 --- a/vue/package.json +++ b/vue/package.json @@ -24,7 +24,7 @@ "vue-click-outside": "^1.1.0", "vue-clickaway": "^2.2.2", "vue-cookies": "^1.7.4", - "vue-i18n": "^8.24.4", + "vue-i18n": "^8.26.5", "vue-infinite-loading": "^2.4.5", "vue-multiselect": "^2.1.6", "vue-property-decorator": "^9.1.2", @@ -33,7 +33,7 @@ "vue2-touch-events": "^3.2.2", "vuedraggable": "^2.24.3", "vuex": "^3.6.0", - "workbox-webpack-plugin": "^6.1.5" + "workbox-webpack-plugin": "^6.3.0" }, "devDependencies": { "@kazupon/vue-i18n-loader": "^0.5.0", @@ -44,12 +44,12 @@ "@vue/cli-plugin-pwa": "~4.5.13", "@vue/cli-plugin-typescript": "^4.5.13", "@vue/cli-service": "~4.5.13", - "@vue/compiler-sfc": "^3.1.1", + "@vue/compiler-sfc": "^3.2.20", "@vue/eslint-config-typescript": "^7.0.0", "babel-eslint": "^10.1.0", "eslint": "^7.28.0", - "eslint-plugin-vue": "^7.10.0", - "typescript": "~4.4.3", + "eslint-plugin-vue": "^8.0.3", + "typescript": "~4.4.4", "vue-cli-plugin-i18n": "^2.1.1", "webpack-bundle-tracker": "1.4.0", "workbox-expiration": "^6.3.0", diff --git a/vue/src/apps/ChecklistView/main.js b/vue/src/apps/ChecklistView/main.js index 318cb9c84..355d8eae5 100644 --- a/vue/src/apps/ChecklistView/main.js +++ b/vue/src/apps/ChecklistView/main.js @@ -4,6 +4,14 @@ import i18n from '@/i18n' Vue.config.productionTip = false +// TODO move this and other default stuff to centralized JS file (verify nothing breaks) +let publicPath = localStorage.STATIC_URL + 'vue/' +if (process.env.NODE_ENV === 'development') { + publicPath = 'http://localhost:8080/' +} +export default __webpack_public_path__ = publicPath // eslint-disable-line + + new Vue({ i18n, render: h => h(App), diff --git a/vue/src/apps/CookbookView/CookbookView.vue b/vue/src/apps/CookbookView/CookbookView.vue index 32284f604..30949d5e7 100644 --- a/vue/src/apps/CookbookView/CookbookView.vue +++ b/vue/src/apps/CookbookView/CookbookView.vue @@ -61,10 +61,10 @@ import Vue from 'vue' import {BootstrapVue} from 'bootstrap-vue' import 'bootstrap-vue/dist/bootstrap-vue.css' -import {ApiApiFactory} from "../../utils/openapi/api"; -import CookbookSlider from "../../components/CookbookSlider"; -import LoadingSpinner from "../../components/LoadingSpinner"; -import {StandardToasts} from "../../utils/utils"; +import {ApiApiFactory} from "@/utils/openapi/api"; +import CookbookSlider from "@/components/CookbookSlider"; +import LoadingSpinner from "@/components/LoadingSpinner"; +import {StandardToasts} from "@/utils/utils"; Vue.use(BootstrapVue) diff --git a/vue/src/apps/CookbookView/main.js b/vue/src/apps/CookbookView/main.js index e0766d6e7..0fbe7b3b6 100644 --- a/vue/src/apps/CookbookView/main.js +++ b/vue/src/apps/CookbookView/main.js @@ -4,6 +4,14 @@ import i18n from '@/i18n' Vue.config.productionTip = false +// TODO move this and other default stuff to centralized JS file (verify nothing breaks) +let publicPath = localStorage.STATIC_URL + 'vue/' +if (process.env.NODE_ENV === 'development') { + publicPath = 'http://localhost:8080/' +} +export default __webpack_public_path__ = publicPath // eslint-disable-line + + new Vue({ i18n, render: h => h(App), diff --git a/vue/src/apps/ImportResponseView/main.js b/vue/src/apps/ImportResponseView/main.js index b23267a3c..7efb6f0d5 100644 --- a/vue/src/apps/ImportResponseView/main.js +++ b/vue/src/apps/ImportResponseView/main.js @@ -4,6 +4,14 @@ import i18n from '@/i18n' Vue.config.productionTip = false +// TODO move this and other default stuff to centralized JS file (verify nothing breaks) +let publicPath = localStorage.STATIC_URL + 'vue/' +if (process.env.NODE_ENV === 'development') { + publicPath = 'http://localhost:8080/' +} +export default __webpack_public_path__ = publicPath // eslint-disable-line + + new Vue({ i18n, render: h => h(App), diff --git a/vue/src/apps/MealPlanView/MealPlanView.vue b/vue/src/apps/MealPlanView/MealPlanView.vue index e11dbb944..d436e3592 100644 --- a/vue/src/apps/MealPlanView/MealPlanView.vue +++ b/vue/src/apps/MealPlanView/MealPlanView.vue @@ -231,22 +231,24 @@